diff options
Diffstat (limited to 'kernel/framework/audio')
-rw-r--r-- | kernel/framework/audio/.config | 1 | ||||
-rw-r--r-- | kernel/framework/audio/audiocnv.inc | 160 | ||||
-rw-r--r-- | kernel/framework/audio/fltdata1_m.inc | 1284 | ||||
-rw-r--r-- | kernel/framework/audio/fltdata2_h.inc | 2503 | ||||
-rw-r--r-- | kernel/framework/audio/fltdata3_l.inc | 689 | ||||
-rw-r--r-- | kernel/framework/audio/fltdata4_p.inc | 4832 | ||||
-rw-r--r-- | kernel/framework/audio/grc3code.inc | 384 | ||||
-rw-r--r-- | kernel/framework/audio/grc3inc.inc | 165 | ||||
-rw-r--r-- | kernel/framework/audio/oss_audio_core.c | 6639 | ||||
-rw-r--r-- | kernel/framework/audio/oss_audiofmt.c | 1278 | ||||
-rw-r--r-- | kernel/framework/audio/oss_grc3.c | 451 | ||||
-rw-r--r-- | kernel/framework/audio/oss_spdif.c | 627 | ||||
-rw-r--r-- | kernel/framework/audio/ulaw.h | 83 |
13 files changed, 19096 insertions, 0 deletions
diff --git a/kernel/framework/audio/.config b/kernel/framework/audio/.config new file mode 100644 index 0000000..e44f78f --- /dev/null +++ b/kernel/framework/audio/.config @@ -0,0 +1 @@ +targetcpu=any diff --git a/kernel/framework/audio/audiocnv.inc b/kernel/framework/audio/audiocnv.inc new file mode 100644 index 0000000..27ac147 --- /dev/null +++ b/kernel/framework/audio/audiocnv.inc @@ -0,0 +1,160 @@ +/* + * Purpose: Helper functions used by audiofmt.c + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +/*ARGSUSED*/ +static int +cnv_F8bits_T16bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, sample_parms * target) +{ + unsigned char *p1 = *srcp; + short *p2 = (short*)*tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 2 / 1); + + l = len / 1; + for (i = 0; i < l; i++) + p2[i] = ((int) p1[i] - 128) << 8; + + *srcl = len * 2 / 1; + *srcp = (unsigned char*)p2; + *tgtp = p1; + + return 0; +} + +/*ARGSUSED*/ +static int +cnv_F8bits_T32bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, sample_parms * target) +{ + unsigned char *p1 = *srcp; + int *p2 = (int *)*tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 4 / 1); + + l = len / 1; + for (i = 0; i < l; i++) + p2[i] = ((int) p1[i] - 128) << 24; + + *srcl = len * 4 / 1; + *srcp = (unsigned char *)p2; + *tgtp = p1; + + return 0; +} + +/*ARGSUSED*/ +static int +cnv_F16bits_T8bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, sample_parms * target) +{ + short *p1 = (short*)*srcp; + unsigned char *p2 = *tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 1 / 2); + + l = len / 2; + for (i = 0; i < l; i++) + p2[i] = (((int) p1[i]) >> 8) + 128; + + *srcl = len * 1 / 2; + *srcp = (unsigned char *)p2; + *tgtp = (unsigned char *)p1; + + return 0; +} + +/*ARGSUSED*/ +static int +cnv_F16bits_T32bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, + sample_parms * target) +{ + short *p1 = (short *)*srcp; + int *p2 = (int *)*tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 4 / 2); + + l = len / 2; + for (i = 0; i < l; i++) + p2[i] = ((int) p1[i]) << 16; + + *srcl = len * 4 / 2; + *srcp = (unsigned char *)p2; + *tgtp = (unsigned char *)p1; + + return 0; +} + +/*ARGSUSED*/ +static int +cnv_F32bits_T8bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, sample_parms * target) +{ + int *p1 = (int*)*srcp; + unsigned char *p2 = *tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 1 / 4); + + l = len / 4; + for (i = 0; i < l; i++) + p2[i] = (((int) p1[i]) >> 24) + 128; + + *srcl = len * 1 / 4; + *srcp = p2; + *tgtp = (unsigned char *)p1; + + return 0; +} + +/*ARGSUSED*/ +static int +cnv_F32bits_T16bits (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, + unsigned char **tgtp, sample_parms * source, + sample_parms * target) +{ + int *p1 = (int *)*srcp; + short *p2 = (short *)*tgtp; + int len = *srcl; + int i, l; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len * 2 / 4); + + l = len / 4; + for (i = 0; i < l; i++) + p2[i] = (((int) p1[i]) >> 16); + + *srcl = len * 2 / 4; + *srcp = (unsigned char *)p2; + *tgtp = (unsigned char *)p1; + + return 0; +} diff --git a/kernel/framework/audio/fltdata1_m.inc b/kernel/framework/audio/fltdata1_m.inc new file mode 100644 index 0000000..580630e --- /dev/null +++ b/kernel/framework/audio/fltdata1_m.inc @@ -0,0 +1,1284 @@ +/* + * Purpose: Filter coefficient tables for GRC3 sample rate converter + */ + +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +static int32_t filter_data[8193] = { + 0, -5008, -10058, -15150, -20285, -25462, -30682, -35945, -41250, + -46598, -51990, -57425, -62903, -68425, -73990, -79599, -85252, -90949, + -96690, -102475, -108304, -114178, -120097, -126060, -132068, -138121, + -144219, -150362, -156550, -162784, -169063, -175387, -181758, -188174, + -194636, -201145, -207699, -214300, -220947, -227641, -234381, -241168, + -248001, -254882, -261810, -268785, -275807, -282876, -289993, -297157, + -304369, -311629, -318937, -326293, -333697, -341149, -348649, -356197, + -363794, -371440, -379134, -386877, -394669, -402510, -410400, -418339, + -426328, -434365, -442452, -450589, -458775, -467011, -475297, -483632, + -492018, -500453, -508939, -517475, -526061, -534698, -543385, -552122, + -560911, -569750, -578639, -587580, -596572, -605615, -614708, -623853, + -633050, -642297, -651597, -660947, -670349, -679803, -689309, -698866, + -708475, -718136, -727849, -737615, -747432, -757301, -767223, -777197, + -787224, -797303, -807434, -817618, -827855, -838144, -848486, -858881, + -869329, -879830, -890384, -900990, -911650, -922363, -933129, -943949, + -954822, -965748, -976727, -987760, -998846, -1009986, -1021179, + -1032426, -1043727, -1055082, -1066490, -1077952, -1089467, -1101037, + -1112660, -1124337, -1136069, -1147854, -1159693, -1171587, -1183534, + -1195535, -1207591, -1219701, -1231865, -1244083, -1256355, -1268682, + -1281063, -1293498, -1305988, -1318532, -1331130, -1343783, -1356490, + -1369251, -1382067, -1394937, -1407862, -1420841, -1433874, -1446962, + -1460105, -1473302, -1486553, -1499859, -1513219, -1526634, -1540103, + -1553627, -1567205, -1580838, -1594525, -1608267, -1622063, -1635913, + -1649818, -1663778, -1677791, -1691859, -1705982, -1720159, -1734390, + -1748676, -1763015, -1777410, -1791858, -1806361, -1820917, -1835528, + -1850194, -1864913, -1879686, -1894514, -1909395, -1924331, -1939320, + -1954364, -1969461, -1984612, -1999817, -2015076, -2030388, -2045755, + -2061174, -2076648, -2092175, -2107755, -2123389, -2139076, -2154817, + -2170611, -2186458, -2202358, -2218312, -2234318, -2250378, -2266490, + -2282656, -2298874, -2315144, -2331468, -2347844, -2364273, -2380754, + -2397287, -2413873, -2430511, -2447201, -2463943, -2480737, -2497583, + -2514481, -2531431, -2548432, -2565485, -2582589, -2599745, -2616951, + -2634210, -2651519, -2668879, -2686290, -2703752, -2721265, -2738828, + -2756441, -2774105, -2791820, -2809584, -2827399, -2845263, -2863178, + -2881142, -2899155, -2917218, -2935331, -2953492, -2971703, -2989963, + -3008272, -3026629, -3045035, -3063490, -3081993, -3100544, -3119143, + -3137790, -3156485, -3175227, -3194017, -3212855, -3231739, -3250671, + -3269650, -3288675, -3307747, -3326866, -3346031, -3365242, -3384499, + -3403802, -3423151, -3442545, -3461985, -3481469, -3500999, -3520574, + -3540193, -3559857, -3579565, -3599318, -3619114, -3638955, -3658838, + -3678766, -3698736, -3718750, -3738807, -3758906, -3779048, -3799232, + -3819458, -3839727, -3860037, -3880388, -3900781, -3921215, -3941690, + -3962206, -3982762, -4003359, -4023995, -4044672, -4065388, -4086144, + -4106939, -4127772, -4148645, -4169557, -4190506, -4211494, -4232520, + -4253583, -4274684, -4295822, -4316997, -4338209, -4359457, -4380741, + -4402062, -4423418, -4444810, -4466237, -4487699, -4509196, -4530728, + -4552293, -4573893, -4595526, -4617193, -4638894, -4660627, -4682393, + -4704191, -4726021, -4747884, -4769778, -4791703, -4813660, -4835647, + -4857665, -4879713, -4901791, -4923898, -4946036, -4968202, -4990397, + -5012620, -5034872, -5057152, -5079459, -5101793, -5124155, -5146544, + -5168958, -5191399, -5213866, -5236358, -5258876, -5281418, -5303985, + -5326576, -5349191, -5371830, -5394492, -5417177, -5439884, -5462614, + -5485366, -5508139, -5530934, -5553750, -5576586, -5599443, -5622320, + -5645216, -5668131, -5691066, -5714019, -5736990, -5759979, -5782986, + -5806010, -5829050, -5852108, -5875181, -5898270, -5921374, -5944493, + -5967627, -5990775, -6013937, -6037113, -6060301, -6083503, -6106717, + -6129942, -6153180, -6176428, -6199688, -6222958, -6246238, -6269528, + -6292827, -6316134, -6339451, -6362775, -6386107, -6409447, -6432793, + -6456146, -6479504, -6502869, -6526239, -6549613, -6572992, -6596375, + -6619762, -6643151, -6666544, -6689938, -6713335, -6736733, -6760132, + -6783532, -6806931, -6830331, -6853730, -6877127, -6900523, -6923917, + -6947309, -6970697, -6994083, -7017464, -7040841, -7064213, -7087580, + -7110942, -7134297, -7157646, -7180988, -7204322, -7227648, -7250966, + -7274275, -7297575, -7320865, -7344144, -7367413, -7390670, -7413916, + -7437149, -7460370, -7483577, -7506771, -7529951, -7553115, -7576265, + -7599399, -7622517, -7645618, -7668702, -7691769, -7714817, -7737847, + -7760857, -7783848, -7806818, -7829768, -7852697, -7875604, -7898488, + -7921350, -7944189, -7967004, -7989794, -8012560, -8035300, -8058014, + -8080702, -8103363, -8125996, -8148602, -8171178, -8193726, -8216244, + -8238732, -8261189, -8283614, -8306008, -8328370, -8350698, -8372993, + -8395254, -8417481, -8439672, -8461827, -8483947, -8506029, -8528074, + -8550081, -8572050, -8593979, -8615869, -8637718, -8659527, -8681294, + -8703020, -8724702, -8746342, -8767938, -8789490, -8810996, -8832458, + -8853873, -8875242, -8896563, -8917837, -8939062, -8960238, -8981365, + -9002441, -9023467, -9044441, -9065363, -9086233, -9107050, -9127812, + -9148520, -9169174, -9189771, -9210312, -9230797, -9251224, -9271593, + -9291903, -9312154, -9332344, -9352475, -9372544, -9392551, -9412496, + -9432378, -9452196, -9471949, -9491638, -9511261, -9530818, -9550308, + -9569730, -9589084, -9608370, -9627586, -9646732, -9665807, -9684811, + -9703743, -9722602, -9741388, -9760100, -9778737, -9797299, -9815785, + -9834195, -9852527, -9870782, -9888957, -9907054, -9925071, -9943007, + -9960862, -9978635, -9996326, -10013933, -10031457, -10048896, + -10066250, -10083518, -10100699, -10117793, -10134799, -10151717, + -10168545, -10185284, -10201931, -10218488, -10234952, -10251324, + -10267603, -10283787, -10299877, -10315871, -10331769, -10347571, + -10363275, -10378880, -10394387, -10409794, -10425102, -10440308, + -10455412, -10470414, -10485313, -10500109, -10514799, -10529385, + -10543865, -10558238, -10572504, -10586662, -10600712, -10614652, + -10628482, -10642201, -10655809, -10669304, -10682687, -10695956, + -10709110, -10722150, -10735074, -10747881, -10760571, -10773143, + -10785597, -10797931, -10810145, -10822238, -10834210, -10846060, + -10857786, -10869389, -10880868, -10892221, -10903449, -10914550, + -10925524, -10936370, -10947087, -10957674, -10968131, -10978458, + -10988653, -10998715, -11008644, -11018440, -11028100, -11037626, + -11047015, -11056268, -11065383, -11074360, -11083198, -11091897, + -11100455, -11108871, -11117146, -11125278, -11133267, -11141112, + -11148811, -11156366, -11163774, -11171034, -11178147, -11185112, + -11191927, -11198592, -11205107, -11211469, -11217680, -11223738, + -11229642, -11235391, -11240985, -11246424, -11251705, -11256830, + -11261796, -11266603, -11271250, -11275738, -11280064, -11284228, + -11288229, -11292067, -11295741, -11299250, -11302594, -11305771, + -11308781, -11311624, -11314298, -11316802, -11319136, -11321300, + -11323292, -11325112, -11326759, -11328232, -11329531, -11330654, + -11331601, -11332372, -11332965, -11333380, -11333616, -11333673, + -11333549, -11333243, -11332756, -11332087, -11331233, -11330196, + -11328974, -11327566, -11325972, -11324191, -11322222, -11320064, + -11317717, -11315181, -11312453, -11309534, -11306422, -11303118, + -11299620, -11295928, -11292040, -11287956, -11283676, -11279199, + -11274523, -11269648, -11264574, -11259300, -11253825, -11248148, + -11242268, -11236185, -11229898, -11223407, -11216710, -11209808, + -11202698, -11195381, -11187855, -11180121, -11172176, -11164022, + -11155656, -11147078, -11138288, -11129284, -11120067, -11110634, + -11100987, -11091123, -11081042, -11070743, -11060227, -11049491, + -11038536, -11027360, -11015963, -11004344, -10992502, -10980438, + -10968149, -10955636, -10942897, -10929933, -10916742, -10903323, + -10889676, -10875800, -10861695, -10847359, -10832793, -10817995, + -10802964, -10787701, -10772204, -10756473, -10740507, -10724305, + -10707866, -10691191, -10674278, -10657126, -10639735, -10622105, + -10604234, -10586122, -10567768, -10549172, -10530332, -10511249, + -10491921, -10472349, -10452530, -10432465, -10412153, -10391593, + -10370785, -10349728, -10328421, -10306864, -10285055, -10262996, + -10240683, -10218118, -10195300, -10172227, -10148899, -10125316, + -10101477, -10077381, -10053027, -10028416, -10003546, -9978417, + -9953028, -9927378, -9901467, -9875295, -9848860, -9822162, -9795201, + -9767976, -9740485, -9712730, -9684708, -9656420, -9627865, -9599042, + -9569950, -9540590, -9510960, -9481060, -9450889, -9420447, -9389733, + -9358746, -9327487, -9295954, -9264146, -9232064, -9199707, -9167074, + -9134164, -9100978, -9067513, -9033771, -8999750, -8965450, -8930870, + -8896009, -8860868, -8825446, -8789741, -8753754, -8717485, -8680931, + -8644094, -8606972, -8569564, -8531872, -8493893, -8455627, -8417075, + -8378234, -8339106, -8299689, -8259982, -8219986, -8179700, -8139123, + -8098255, -8057095, -8015644, -7973899, -7931862, -7889531, -7846906, + -7803987, -7760772, -7717262, -7673457, -7629355, -7584956, -7540260, + -7495266, -7449974, -7404384, -7358495, -7312306, -7265817, -7219028, + -7171938, -7124548, -7076855, -7028861, -6980564, -6931964, -6883062, + -6833855, -6784345, -6734530, -6684410, -6633986, -6583255, -6532219, + -6480876, -6429227, -6377270, -6325007, -6272435, -6219555, -6166367, + -6112869, -6059063, -6004947, -5950521, -5895784, -5840737, -5785380, + -5729711, -5673730, -5617437, -5560832, -5503915, -5446685, -5389142, + -5331285, -5273114, -5214629, -5155830, -5096717, -5037288, -4977544, + -4917485, -4857110, -4796419, -4735412, -4674088, -4612447, -4550490, + -4488215, -4425622, -4362712, -4299484, -4235937, -4172072, -4107888, + -4043386, -3978564, -3913423, -3847962, -3782181, -3716081, -3649660, + -3582919, -3515858, -3448476, -3380773, -3312749, -3244403, -3175736, + -3106748, -3037438, -2967806, -2897852, -2827576, -2756978, -2686057, + -2614814, -2543248, -2471359, -2399147, -2326612, -2253755, -2180573, + -2107069, -2033241, -1959090, -1884615, -1809816, -1734694, -1659247, + -1583477, -1507383, -1430965, -1354223, -1277157, -1199766, -1122052, + -1044013, -965650, -886963, -807951, -728615, -648955, -568970, + -488662, -408029, -327071, -245790, -164184, -82254, 0, 82578, 165480, + 248707, 332258, 416132, 500331, 584853, 669699, 754868, 840362, 926179, + 1012319, 1098782, 1185569, 1272679, 1360112, 1447867, 1535946, 1624347, + 1713070, 1802116, 1891484, 1981174, 2071186, 2161520, 2252175, 2343152, + 2434450, 2526069, 2618009, 2710269, 2802850, 2895751, 2988972, 3082513, + 3176374, 3270554, 3365053, 3459871, 3555008, 3650463, 3746236, 3842327, + 3938736, 4035462, 4132505, 4229866, 4327542, 4425535, 4523844, 4622468, + 4721408, 4820662, 4920232, 5020116, 5120313, 5220825, 5321649, 5422787, + 5524237, 5626000, 5728075, 5830461, 5933158, 6036166, 6139484, 6243112, + 6347050, 6451297, 6555852, 6660716, 6765888, 6871368, 6977154, 7083247, + 7189646, 7296351, 7403360, 7510675, 7618294, 7726217, 7834442, 7942971, + 8051802, 8160935, 8270369, 8380104, 8490139, 8600474, 8711108, 8822040, + 8933271, 9044799, 9156625, 9268746, 9381163, 9493876, 9606883, 9720185, + 9833780, 9947667, 10061847, 10176319, 10291082, 10406135, 10521477, + 10637109, 10753030, 10869238, 10985733, 11102515, 11219583, 11336935, + 11454572, 11572493, 11690697, 11809184, 11927952, 12047000, 12166329, + 12285938, 12405825, 12525990, 12646433, 12767152, 12888146, 13009416, + 13130960, 13252777, 13374866, 13497228, 13619860, 13742763, 13865935, + 13989376, 14113084, 14237059, 14361300, 14485807, 14610577, 14735612, + 14860908, 14986467, 15112286, 15238366, 15364704, 15491301, 15618155, + 15745265, 15872631, 16000251, 16128124, 16256251, 16384629, 16513258, + 16642136, 16771263, 16900639, 17030261, 17160128, 17290241, 17420598, + 17551197, 17682039, 17813121, 17944443, 18076003, 18207802, 18339837, + 18472107, 18604612, 18737351, 18870322, 19003525, 19136957, 19270619, + 19404509, 19538626, 19672969, 19807536, 19942327, 20077340, 20212575, + 20348030, 20483703, 20619595, 20755703, 20892027, 21028565, 21165316, + 21302279, 21439453, 21576836, 21714428, 21852227, 21990231, 22128440, + 22266852, 22405467, 22544282, 22683297, 22822510, 22961920, 23101526, + 23241327, 23381320, 23521506, 23661882, 23802447, 23943200, 24084139, + 24225264, 24366573, 24508064, 24649736, 24791588, 24933619, 25075826, + 25218209, 25360767, 25503497, 25646399, 25789470, 25932711, 26076118, + 26219691, 26363429, 26507329, 26651391, 26795613, 26939993, 27084530, + 27229223, 27374069, 27519068, 27664219, 27809518, 27954966, 28100560, + 28246299, 28392181, 28538206, 28684370, 28830674, 28977114, 29123690, + 29270400, 29417243, 29564216, 29711319, 29858549, 30005906, 30153386, + 30300990, 30448715, 30596559, 30744521, 30892599, 31040792, 31189098, + 31337515, 31486042, 31634676, 31783417, 31932262, 32081209, 32230258, + 32379407, 32528652, 32677994, 32827430, 32976958, 33126577, 33276285, + 33426079, 33575960, 33725923, 33875969, 34026094, 34176298, 34326578, + 34476933, 34627360, 34777858, 34928426, 35079060, 35229760, 35380524, + 35531349, 35682234, 35833177, 35984177, 36135230, 36286336, 36437492, + 36588696, 36739948, 36891244, 37042582, 37193962, 37345380, 37496836, + 37648326, 37799849, 37951404, 38102987, 38254598, 38406234, 38557893, + 38709574, 38861273, 39012990, 39164722, 39316467, 39468223, 39619988, + 39771761, 39923538, 40075319, 40227100, 40378880, 40530657, 40682429, + 40834193, 40985948, 41137691, 41289421, 41441135, 41592831, 41744507, + 41896161, 42047790, 42199394, 42350969, 42502513, 42654024, 42805501, + 42956940, 43108340, 43259699, 43411013, 43562283, 43713504, 43864674, + 44015793, 44166856, 44317863, 44468811, 44619697, 44770520, 44921276, + 45071965, 45222584, 45373130, 45523601, 45673995, 45824309, 45974542, + 46124691, 46274754, 46424728, 46574611, 46724402, 46874096, 47023693, + 47173190, 47322584, 47471874, 47621056, 47770129, 47919090, 48067936, + 48216667, 48365278, 48513768, 48662134, 48810374, 48958486, 49106467, + 49254314, 49402026, 49549600, 49697033, 49844323, 49991468, 50138465, + 50285312, 50432007, 50578546, 50724927, 50871148, 51017207, 51163101, + 51308828, 51454384, 51599768, 51744978, 51890009, 52034861, 52179531, + 52324015, 52468312, 52612419, 52756334, 52900054, 53043576, 53186898, + 53330017, 53472931, 53615638, 53758134, 53900418, 54042486, 54184336, + 54325965, 54467372, 54608552, 54749505, 54890226, 55030714, 55170966, + 55310979, 55450751, 55590279, 55729560, 55868593, 56007373, 56145899, + 56284168, 56422177, 56559924, 56697406, 56834620, 56971564, 57108235, + 57244630, 57380747, 57516584, 57652136, 57787402, 57922379, 58057064, + 58191455, 58325549, 58459343, 58592835, 58726021, 58858900, 58991468, + 59123722, 59255660, 59387280, 59518578, 59649552, 59780199, 59910516, + 60040500, 60170150, 60299461, 60428432, 60557059, 60685340, 60813272, + 60940852, 61068078, 61194946, 61321454, 61447599, 61573379, 61698790, + 61823830, 61948496, 62072785, 62196694, 62320221, 62443363, 62566117, + 62688480, 62810449, 62932022, 63053195, 63173967, 63294333, 63414292, + 63533840, 63652975, 63771693, 63889993, 64007870, 64125323, 64242348, + 64358943, 64475104, 64590829, 64706115, 64820960, 64935359, 65049311, + 65162813, 65275861, 65388453, 65500586, 65612257, 65723464, 65834202, + 65944471, 66054265, 66163584, 66272423, 66380781, 66488653, 66596037, + 66702931, 66809331, 66915235, 67020639, 67125541, 67229938, 67333827, + 67437205, 67540069, 67642416, 67744244, 67845548, 67946328, 68046579, + 68146299, 68245484, 68344132, 68442241, 68539806, 68636826, 68733296, + 68829215, 68924580, 69019387, 69113633, 69207316, 69300433, 69392980, + 69484956, 69576356, 69667179, 69757420, 69847078, 69936149, 70024630, + 70112519, 70199812, 70286506, 70372600, 70458089, 70542971, 70627242, + 70710901, 70793944, 70876367, 70958169, 71039346, 71119895, 71199814, + 71279099, 71357748, 71435757, 71513124, 71589846, 71665919, 71741341, + 71816110, 71890221, 71963672, 72036461, 72108584, 72180038, 72250821, + 72320929, 72390359, 72459110, 72527177, 72594558, 72661250, 72727250, + 72792555, 72857162, 72921068, 72984271, 73046767, 73108554, 73169628, + 73229987, 73289628, 73348548, 73406744, 73464213, 73520952, 73576958, + 73632229, 73686762, 73740553, 73793599, 73845899, 73897448, 73948245, + 73998286, 74047568, 74096088, 74143844, 74190833, 74237052, 74282497, + 74327167, 74371058, 74414167, 74456491, 74498028, 74538775, 74578729, + 74617887, 74656246, 74693804, 74730556, 74766502, 74801637, 74835960, + 74869466, 74902154, 74934020, 74965062, 74995277, 75024662, 75053214, + 75080931, 75107809, 75133846, 75159038, 75183384, 75206881, 75229525, + 75251313, 75272244, 75292314, 75311521, 75329861, 75347332, 75363931, + 75379655, 75394502, 75408469, 75421553, 75433752, 75445062, 75455481, + 75465006, 75473634, 75481363, 75488190, 75494112, 75499127, 75503232, + 75506423, 75508699, 75510057, 75510494, 75510007, 75508593, 75506251, + 75502977, 75498768, 75493622, 75487537, 75480509, 75472536, 75463616, + 75453745, 75442921, 75431142, 75418405, 75404706, 75390045, 75374417, + 75357820, 75340253, 75321711, 75302193, 75281696, 75260217, 75237755, + 75214305, 75189867, 75164436, 75138011, 75110589, 75082168, 75052745, + 75022317, 74990882, 74958438, 74924982, 74890511, 74855023, 74818516, + 74780986, 74742433, 74702852, 74662242, 74620600, 74577924, 74534211, + 74489459, 74443665, 74396828, 74348944, 74300011, 74250027, 74198989, + 74146896, 74093744, 74039531, 73984255, 73927914, 73870505, 73812026, + 73752475, 73691848, 73630145, 73567362, 73503498, 73438549, 73372514, + 73305391, 73237177, 73167870, 73097467, 73025967, 72953367, 72879664, + 72804858, 72728945, 72651923, 72573791, 72494545, 72414184, 72332705, + 72250107, 72166387, 72081544, 71995574, 71908476, 71820247, 71730886, + 71640391, 71548759, 71455988, 71362077, 71267022, 71170823, 71073477, + 70974982, 70875335, 70774536, 70672581, 70569470, 70465199, 70359767, + 70253173, 70145413, 70036486, 69926391, 69815124, 69702685, 69589071, + 69474281, 69358312, 69241163, 69122831, 69003315, 68882614, 68760724, + 68637645, 68513374, 68387910, 68261251, 68133395, 68004340, 67874085, + 67742628, 67609966, 67476099, 67341025, 67204741, 67067246, 66928539, + 66788617, 66647480, 66505125, 66361550, 66216755, 66070737, 65923495, + 65775027, 65625332, 65474407, 65322252, 65168865, 65014245, 64858389, + 64701296, 64542965, 64383394, 64222582, 64060527, 63897228, 63732683, + 63566891, 63399850, 63231560, 63062018, 62891223, 62719173, 62545869, + 62371307, 62195487, 62018407, 61840066, 61660463, 61479596, 61297465, + 61114067, 60929401, 60743467, 60556263, 60367788, 60178041, 59987020, + 59794724, 59601152, 59406303, 59210175, 59012769, 58814081, 58614112, + 58412861, 58210325, 58006505, 57801398, 57595005, 57387323, 57178353, + 56968092, 56756540, 56543697, 56329560, 56114129, 55897404, 55679382, + 55460064, 55239448, 55017534, 54794321, 54569807, 54343992, 54116875, + 53888456, 53658733, 53427705, 53195373, 52961735, 52726790, 52490538, + 52252979, 52014110, 51773932, 51532444, 51289646, 51045536, 50800114, + 50553379, 50305332, 50055970, 49805295, 49553305, 49299999, 49045377, + 48789439, 48532184, 48273612, 48013722, 47752513, 47489986, 47226140, + 46960975, 46694489, 46426683, 46157557, 45887110, 45615341, 45342251, + 45067839, 44792105, 44515048, 44236669, 43956967, 43675942, 43393594, + 43109922, 42824927, 42538608, 42250965, 41961998, 41671707, 41380092, + 41087152, 40792889, 40497301, 40200388, 39902152, 39602591, 39301705, + 38999496, 38695962, 38391104, 38084922, 37777416, 37468587, 37158433, + 36846957, 36534157, 36220034, 35904588, 35587820, 35269729, 34950316, + 34629581, 34307525, 33984147, 33659449, 33333430, 33006091, 32677432, + 32347454, 32016157, 31683541, 31349607, 31014356, 30677788, 30339903, + 30000701, 29660185, 29318353, 28975207, 28630747, 28284974, 27937889, + 27589491, 27239783, 26888763, 26536434, 26182796, 25827849, 25471595, + 25114034, 24755167, 24394994, 24033517, 23670736, 23306653, 22941268, + 22574582, 22206595, 21837310, 21466726, 21094846, 20721669, 20347197, + 19971430, 19594371, 19216020, 18836377, 18455445, 18073224, 17689715, + 17304920, 16918840, 16531475, 16142828, 15752899, 15361690, 14969201, + 14575435, 14180392, 13784074, 13386483, 12987618, 12587483, 12186078, + 11783404, 11379464, 10974259, 10567789, 10160057, 9751064, 9340812, + 8929302, 8516536, 8102515, 7687241, 7270716, 6852941, 6433918, 6013649, + 5592135, 5169378, 4745379, 4320142, 3893666, 3465955, 3037010, 2606833, + 2175425, 1742789, 1308927, 873840, 437530, 0, -438749, -878714, + -1319895, -1762288, -2205891, -2650704, -3096722, -3543945, -3992370, + -4441994, -4892817, -5344835, -5798047, -6252449, -6708041, -7164819, + -7622781, -8081925, -8542249, -9003750, -9466426, -9930274, -10395292, + -10861478, -11328829, -11797343, -12267017, -12737848, -13209835, + -13682974, -14157263, -14632699, -15109280, -15587003, -16065865, + -16545864, -17026997, -17509261, -17992654, -18477173, -18962814, + -19449576, -19937455, -20426448, -20916554, -21407767, -21900087, + -22393509, -22888032, -23383651, -23880364, -24378168, -24877061, + -25377038, -25878096, -26380234, -26883447, -27387732, -27893087, + -28399507, -28906991, -29415534, -29925134, -30435787, -30947490, + -31460239, -31974032, -32488864, -33004733, -33521636, -34039568, + -34558526, -35078507, -35599508, -36121524, -36644553, -37168591, + -37693634, -38219679, -38746722, -39274760, -39803789, -40333804, + -40864804, -41396783, -41929739, -42463667, -42998563, -43534425, + -44071247, -44609027, -45147760, -45687443, -46228072, -46769642, + -47312150, -47855592, -48399964, -48945262, -49491481, -50038619, + -50586671, -51135632, -51685499, -52236267, -52787933, -53340493, + -53893941, -54448274, -55003488, -55559578, -56116541, -56674371, + -57233065, -57792619, -58353027, -58914286, -59476391, -60039338, + -60603122, -61167739, -61733184, -62299454, -62866543, -63434446, + -64003160, -64572680, -65143001, -65714119, -66286029, -66858726, + -67432205, -68006463, -68581493, -69157292, -69733855, -70311177, + -70889253, -71468078, -72047648, -72627957, -73209001, -73790775, + -74373274, -74956492, -75540426, -76125070, -76710418, -77296467, + -77883210, -78470644, -79058762, -79647560, -80237032, -80827174, + -81417980, -82009445, -82601564, -83194331, -83787742, -84381790, + -84976472, -85571781, -86167712, -86764260, -87361419, -87959184, + -88557550, -89156511, -89756062, -90356197, -90956910, -91558197, + -92160052, -92762468, -93365441, -93968965, -94573035, -95177644, + -95782787, -96388459, -96994653, -97601364, -98208587, -98816315, + -99424542, -100033264, -100642473, -101252165, -101862333, -102472972, + -103084075, -103695637, -104307652, -104920114, -105533016, -106146354, + -106760120, -107374309, -107988915, -108603931, -109219352, -109835171, + -110451383, -111067981, -111684959, -112302311, -112920031, -113538112, + -114156548, -114775333, -115394461, -116013925, -116633719, -117253837, + -117874272, -118495017, -119116068, -119737416, -120359056, -120980982, + -121603186, -122225662, -122848404, -123471405, -124094659, -124718159, + -125341898, -125965871, -126590069, -127214487, -127839118, -128463956, + -129088992, -129714222, -130339638, -130965233, -131591001, -132216934, + -132843027, -133469271, -134095661, -134722189, -135348849, -135975634, + -136602536, -137229549, -137856666, -138483880, -139111183, -139738570, + -140366032, -140993563, -141621156, -142248804, -142876499, -143504234, + -144132003, -144759798, -145387612, -146015437, -146643268, -147271095, + -147898913, -148526714, -149154490, -149782234, -150409940, -151037599, + -151665205, -152292749, -152920226, -153547626, -154174943, -154802170, + -155429298, -156056321, -156683231, -157310021, -157936682, -158563208, + -159189591, -159815823, -160441897, -161067806, -161693540, -162319094, + -162944459, -163569628, -164194593, -164819346, -165443880, -166068186, + -166692258, -167316087, -167939666, -168562986, -169186041, -169808822, + -170431321, -171053531, -171675443, -172297050, -172918344, -173539318, + -174159962, -174780269, -175400231, -176019841, -176639090, -177257970, + -177876473, -178494592, -179112317, -179729642, -180346558, -180963056, + -181579129, -182194769, -182809968, -183424717, -184039008, -184652833, + -185266184, -185879053, -186491431, -187103311, -187714683, -188325540, + -188935874, -189545675, -190154937, -190763650, -191371806, -191979397, + -192586415, -193192850, -193798696, -194403942, -195008582, -195612606, + -196216006, -196818774, -197420901, -198022379, -198623199, -199223352, + -199822831, -200421626, -201019730, -201617132, -202213826, -202809803, + -203405053, -203999568, -204593340, -205186360, -205778619, -206370109, + -206960821, -207550746, -208139876, -208728202, -209315715, -209902407, + -210488268, -211073290, -211657465, -212240783, -212823236, -213404815, + -213985511, -214565315, -215144219, -215722214, -216299290, -216875439, + -217450653, -218024921, -218598236, -219170588, -219741969, -220312370, + -220881781, -221450194, -222017599, -222583989, -223149353, -223713683, + -224276970, -224839205, -225400379, -225960482, -226519507, -227077443, + -227634282, -228190015, -228744632, -229298125, -229850484, -230401700, + -230951765, -231500669, -232048403, -232594958, -233140324, -233684493, + -234227456, -234769203, -235309725, -235849013, -236387058, -236923850, + -237459380, -237993640, -238526620, -239058310, -239588702, -240117786, + -240645553, -241171993, -241697098, -242220859, -242743265, -243264307, + -243783977, -244302265, -244819162, -245334658, -245848744, -246361411, + -246872650, -247382450, -247890803, -248397700, -248903130, -249407085, + -249909556, -250410532, -250910005, -251407964, -251904402, -252399308, + -252892673, -253384487, -253874742, -254363427, -254850533, -255336052, + -255819972, -256302286, -256782983, -257262054, -257739490, -258215281, + -258689417, -259161890, -259632689, -260101806, -260569231, -261034953, + -261498965, -261961256, -262421817, -262880637, -263337709, -263793022, + -264246567, -264698334, -265148314, -265596497, -266042874, -266487435, + -266930171, -267371072, -267810128, -268247331, -268682670, -269116136, + -269547720, -269977411, -270405201, -270831079, -271255037, -271677064, + -272097152, -272515290, -272931469, -273345680, -273757913, -274168157, + -274576405, -274982646, -275386871, -275789069, -276189232, -276587351, + -276983414, -277377413, -277769339, -278159181, -278546930, -278932577, + -279316112, -279697526, -280076808, -280453949, -280828940, -281201771, + -281572433, -281940916, -282307210, -282671306, -283033194, -283392865, + -283750310, -284105518, -284458480, -284809186, -285157627, -285503794, + -285847677, -286189266, -286528551, -286865524, -287200175, -287532494, + -287862471, -288190097, -288515363, -288838259, -289158775, -289476902, + -289792630, -290105951, -290416853, -290725329, -291031368, -291334961, + -291636098, -291934769, -292230967, -292524680, -292815899, -293104615, + -293390819, -293674500, -293955650, -294234259, -294510318, -294783816, + -295054745, -295323096, -295588858, -295852022, -296112579, -296370519, + -296625834, -296878513, -297128547, -297375927, -297620644, -297862687, + -298102048, -298338717, -298572685, -298803942, -299032480, -299258288, + -299481358, -299701680, -299919244, -300134042, -300346064, -300555300, + -300761742, -300965381, -301166206, -301364208, -301559379, -301751709, + -301941189, -302127809, -302311561, -302492435, -302670421, -302845511, + -303017695, -303186965, -303353310, -303516723, -303677192, -303834711, + -303989268, -304140856, -304289465, -304435086, -304577709, -304717326, + -304853928, -304987505, -305118048, -305245549, -305369998, -305491386, + -305609704, -305724944, -305837095, -305946150, -306052098, -306154932, + -306254642, -306351219, -306444655, -306534939, -306622064, -306706020, + -306786799, -306864392, -306938789, -307009982, -307077962, -307142720, + -307204248, -307262536, -307317575, -307369358, -307417875, -307463117, + -307505075, -307543742, -307579107, -307611163, -307639901, -307665312, + -307687386, -307706117, -307721495, -307733510, -307742156, -307747423, + -307749302, -307747785, -307742864, -307734529, -307722773, -307707586, + -307688961, -307666888, -307641360, -307612367, -307579902, -307543956, + -307504521, -307461587, -307415147, -307365193, -307311715, -307254707, + -307194158, -307130062, -307062410, -306991193, -306916403, -306838032, + -306756072, -306670514, -306581351, -306488574, -306392175, -306292147, + -306188479, -306081166, -305970198, -305855568, -305737267, -305615288, + -305489622, -305360261, -305227198, -305090425, -304949933, -304805715, + -304657762, -304506068, -304350623, -304191420, -304028452, -303861711, + -303691188, -303516876, -303338767, -303156854, -302971128, -302781583, + -302588210, -302391001, -302189950, -301985049, -301776289, -301563664, + -301347165, -301126786, -300902518, -300674355, -300442288, -300206311, + -299966416, -299722595, -299474842, -299223148, -298967507, -298707910, + -298444352, -298176824, -297905320, -297629831, -297350352, -297066874, + -296779390, -296487894, -296192379, -295892836, -295589260, -295281642, + -294969977, -294654256, -294334474, -294010623, -293682695, -293350685, + -293014586, -292674389, -292330090, -291981680, -291629153, -291272503, + -290911722, -290546803, -290177741, -289804529, -289427159, -289045625, + -288659921, -288270039, -287875974, -287477719, -287075268, -286668613, + -286257749, -285842669, -285423367, -284999835, -284572069, -284140062, + -283703807, -283263297, -282818528, -282369493, -281916184, -281458597, + -280996726, -280530563, -280060103, -279585340, -279106268, -278622881, + -278135172, -277643137, -277146768, -276646061, -276141009, -275631606, + -275117847, -274599726, -274077237, -273550374, -273019132, -272483504, + -271943486, -271399072, -270850256, -270297032, -269739396, -269177341, + -268610862, -268039954, -267464611, -266884827, -266300599, -265711919, + -265118783, -264521186, -263919122, -263312586, -262701573, -262086078, + -261466096, -260841621, -260212648, -259579173, -258941191, -258298696, + -257651684, -257000149, -256344088, -255683494, -255018363, -254348691, + -253674472, -252995702, -252312376, -251624490, -250932038, -250235017, + -249533421, -248827247, -248116489, -247401144, -246681206, -245956672, + -245227536, -244493795, -243755445, -243012480, -242264897, -241512692, + -240755860, -239994397, -239228300, -238457563, -237682183, -236902156, + -236117479, -235328146, -234534154, -233735499, -232932177, -232124185, + -231311519, -230494175, -229672148, -228845437, -228014036, -227177942, + -226337152, -225491662, -224641469, -223786568, -222926958, -222062633, + -221193591, -220319829, -219441343, -218558130, -217670186, -216777509, + -215880095, -214977941, -214071044, -213159401, -212243009, -211321865, + -210395966, -209465308, -208529890, -207589708, -206644759, -205695041, + -204740551, -203781286, -202817243, -201848420, -200874814, -199896423, + -198913244, -197925275, -196932512, -195934954, -194932599, -193925443, + -192913485, -191896723, -190875153, -189848774, -188817584, -187781580, + -186740761, -185695124, -184644668, -183589390, -182529288, -181464360, + -180394606, -179320022, -178240607, -177156359, -176067277, -174973358, + -173874601, -172771005, -171662568, -170549288, -169431164, -168308195, + -167180378, -166047713, -164910199, -163767833, -162620615, -161468543, + -160311616, -159149834, -157983194, -156811696, -155635339, -154454122, + -153268044, -152077104, -150881300, -149680633, -148475101, -147264703, + -146049440, -144829310, -143604312, -142374446, -141139711, -139900107, + -138655633, -137406289, -136152075, -134892989, -133629032, -132360204, + -131086504, -129807931, -128524486, -127236169, -125942979, -124644917, + -123341982, -122034174, -120721494, -119403941, -118081516, -116754219, + -115422050, -114085009, -112743097, -111396314, -110044660, -108688136, + -107326742, -105960479, -104589347, -103213348, -101832480, -100446746, + -99056145, -97660680, -96260349, -94855155, -93445098, -92030179, + -90610398, -89185758, -87756259, -86321901, -84882687, -83438617, + -81989693, -80535915, -79077286, -77613805, -76145476, -74672298, + -73194275, -71711406, -70223693, -68731139, -67233745, -65731512, + -64224442, -62712537, -61195798, -59674228, -58147828, -56616601, + -55080547, -53539670, -51993970, -50443451, -48888115, -47327963, + -45762997, -44193220, -42618635, -41039243, -39455047, -37866049, + -36272253, -34673659, -33070271, -31462091, -29849123, -28231368, + -26608829, -24981509, -23349412, -21712538, -20070893, -18424478, + -16773296, -15117351, -13456645, -11791182, -10120965, -8445996, + -6766279, -5081818, -3392616, -1698675, 0, 1703406, 3411540, 5124399, + 6841978, 8564275, 10291285, 12023005, 13759430, 15500559, 17246385, + 18996906, 20752118, 22512017, 24276599, 26045859, 27819794, 29598400, + 31381673, 33169607, 34962200, 36759446, 38561342, 40367883, 42179065, + 43994882, 45815332, 47640409, 49470108, 51304425, 53143356, 54986895, + 56835038, 58687780, 60545117, 62407042, 64273553, 66144642, 68020306, + 69900540, 71785337, 73674694, 75568605, 77467064, 79370067, 81277609, + 83189683, 85106284, 87027407, 88953047, 90883198, 92817854, 94757010, + 96700660, 98648799, 100601420, 102558519, 104520088, 106486122, + 108456616, 110431564, 112410958, 114394794, 116383065, 118375765, + 120372889, 122374429, 124380379, 126390734, 128405486, 130424630, + 132448159, 134476066, 136508346, 138544991, 140585995, 142631351, + 144681053, 146735094, 148793467, 150856165, 152923182, 154994510, + 157070143, 159150073, 161234294, 163322799, 165415580, 167512631, + 169613943, 171719511, 173829326, 175943381, 178061669, 180184183, + 182310915, 184441857, 186577003, 188716344, 190859873, 193007582, + 195159464, 197315510, 199475714, 201640066, 203808560, 205981188, + 208157941, 210338811, 212523791, 214712872, 216906046, 219103306, + 221304642, 223510047, 225719513, 227933030, 230150591, 232372188, + 234597811, 236827453, 239061104, 241298757, 243540402, 245786031, + 248035636, 250289207, 252546735, 254808213, 257073630, 259342979, + 261616250, 263893434, 266174523, 268459506, 270748376, 273041122, + 275337736, 277638209, 279942530, 282250692, 284562684, 286878497, + 289198122, 291521549, 293848768, 296179771, 298514547, 300853087, + 303195382, 305541421, 307891194, 310244693, 312601907, 314962825, + 317327440, 319695739, 322067714, 324443354, 326822650, 329205590, + 331592166, 333982366, 336376181, 338773600, 341174613, 343579210, + 345987380, 348399112, 350814397, 353233224, 355655582, 358081460, + 360510849, 362943737, 365380114, 367819968, 370263290, 372710068, + 375160291, 377613949, 380071030, 382531525, 384995420, 387462707, + 389933372, 392407406, 394884798, 397365535, 399849607, 402337002, + 404827710, 407321718, 409819016, 412319591, 414823433, 417330530, + 419840871, 422354443, 424871236, 427391237, 429914435, 432440818, + 434970374, 437503092, 440038960, 442577966, 445120097, 447665343, + 450213690, 452765128, 455319643, 457877224, 460437859, 463001536, + 465568241, 468137964, 470710692, 473286412, 475865112, 478446779, + 481031403, 483618969, 486209465, 488802879, 491399199, 493998411, + 496600503, 499205463, 501813277, 504423933, 507037418, 509653720, + 512272825, 514894721, 517519395, 520146833, 522777023, 525409952, + 528045606, 530683974, 533325040, 535968794, 538615220, 541264306, + 543916039, 546570406, 549227393, 551886986, 554549173, 557213939, + 559881273, 562551159, 565223585, 567898537, 570576001, 573255964, + 575938412, 578623331, 581310708, 584000529, 586692781, 589387448, + 592084519, 594783978, 597485811, 600190006, 602896547, 605605421, + 608316615, 611030112, 613745901, 616463966, 619184293, 621906869, + 624631679, 627358708, 630087943, 632819369, 635552972, 638288737, + 641026651, 643766698, 646508864, 649253135, 651999496, 654747932, + 657498430, 660250974, 663005549, 665762142, 668520737, 671281320, + 674043876, 676808390, 679574848, 682343233, 685113533, 687885731, + 690659813, 693435764, 696213569, 698993212, 701774680, 704557956, + 707343026, 710129874, 712918486, 715708846, 718500939, 721294750, + 724090264, 726887464, 729686337, 732486866, 735289037, 738092833, + 740898240, 743705242, 746513823, 749323968, 752135662, 754948889, + 757763634, 760579880, 763397612, 766216815, 769037473, 771859570, + 774683090, 777508018, 780334339, 783162035, 785991092, 788821493, + 791653222, 794486265, 797320604, 800156225, 802993110, 805831244, + 808670611, 811511195, 814352979, 817195949, 820040087, 822885378, + 825731805, 828579352, 831428004, 834277743, 837128554, 839980420, + 842833325, 845687253, 848542187, 851398111, 854255009, 857112865, + 859971661, 862831382, 865692011, 868553531, 871415927, 874279181, + 877143277, 880008198, 882873929, 885740451, 888607750, 891475807, + 894344607, 897214133, 900084367, 902955294, 905826897, 908699158, + 911572062, 914445591, 917319728, 920194457, 923069761, 925945623, + 928822026, 931698954, 934576388, 937454313, 940332712, 943211567, + 946090861, 948970578, 951850700, 954731211, 957612093, 960493330, + 963374903, 966256797, 969138994, 972021477, 974904229, 977787232, + 980670470, 983553925, 986437580, 989321418, 992205421, 995089573, + 997973855, 1000858252, 1003742745, 1006627317, 1009511951, 1012396630, + 1015281336, 1018166051, 1021050759, 1023935442, 1026820083, 1029704664, + 1032589168, 1035473577, 1038357874, 1041242041, 1044126061, 1047009917, + 1049893591, 1052777065, 1055660322, 1058543344, 1061426114, 1064308615, + 1067190828, 1070072736, 1072954322, 1075835567, 1078716455, 1081596968, + 1084477087, 1087356796, 1090236076, 1093114911, 1095993281, 1098871171, + 1101748561, 1104625435, 1107501774, 1110377561, 1113252778, 1116127408, + 1119001432, 1121874833, 1124747593, 1127619694, 1130491119, 1133361849, + 1136231867, 1139101156, 1141969696, 1144837472, 1147704463, 1150570654, + 1153436026, 1156300560, 1159164240, 1162027048, 1164888964, 1167749973, + 1170610055, 1173469194, 1176327370, 1179184566, 1182040765, 1184895947, + 1187750097, 1190603194, 1193455223, 1196306164, 1199155999, 1202004711, + 1204852283, 1207698695, 1210543930, 1213387970, 1216230797, 1219072393, + 1221912740, 1224751821, 1227589616, 1230426109, 1233261281, 1236095115, + 1238927592, 1241758694, 1244588403, 1247416702, 1250243573, 1253068996, + 1255892955, 1258715432, 1261536408, 1264355866, 1267173787, 1269990154, + 1272804948, 1275618151, 1278429747, 1281239715, 1284048040, 1286854702, + 1289659683, 1292462966, 1295264533, 1298064366, 1300862446, 1303658756, + 1306453277, 1309245992, 1312036883, 1314825932, 1317613121, 1320398431, + 1323181846, 1325963346, 1328742914, 1331520532, 1334296182, 1337069847, + 1339841507, 1342611145, 1345378744, 1348144285, 1350907751, 1353669123, + 1356428383, 1359185514, 1361940498, 1364693317, 1367443952, 1370192386, + 1372938602, 1375682580, 1378424304, 1381163756, 1383900917, 1386635769, + 1389368295, 1392098478, 1394826298, 1397551739, 1400274782, 1402995410, + 1405713605, 1408429348, 1411142623, 1413853411, 1416561695, 1419267457, + 1421970678, 1424671342, 1427369431, 1430064926, 1432757810, 1435448066, + 1438135675, 1440820620, 1443502883, 1446182447, 1448859293, 1451533405, + 1454204764, 1456873353, 1459539154, 1462202150, 1464862322, 1467519654, + 1470174128, 1472825725, 1475474430, 1478120223, 1480763087, 1483403006, + 1486039961, 1488673934, 1491304909, 1493932868, 1496557793, 1499179667, + 1501798473, 1504414192, 1507026808, 1509636304, 1512242661, 1514845862, + 1517445890, 1520042728, 1522636358, 1525226763, 1527813926, 1530397829, + 1532978455, 1535555786, 1538129807, 1540700498, 1543267843, 1545831826, + 1548392428, 1550949632, 1553503421, 1556053779, 1558600688, 1561144130, + 1563684089, 1566220548, 1568753490, 1571282897, 1573808752, 1576331039, + 1578849741, 1581364840, 1583876320, 1586384163, 1588888353, 1591388873, + 1593885705, 1596378834, 1598868242, 1601353912, 1603835828, 1606313972, + 1608788328, 1611258880, 1613725610, 1616188502, 1618647538, 1621102703, + 1623553980, 1626001352, 1628444803, 1630884315, 1633319872, 1635751459, + 1638179057, 1640602651, 1643022225, 1645437761, 1647849243, 1650256655, + 1652659981, 1655059203, 1657454307, 1659845275, 1662232091, 1664614738, + 1666993202, 1669367464, 1671737510, 1674103322, 1676464885, 1678822182, + 1681175198, 1683523917, 1685868321, 1688208396, 1690544125, 1692875492, + 1695202481, 1697525076, 1699843261, 1702157021, 1704466340, 1706771201, + 1709071589, 1711367487, 1713658881, 1715945755, 1718228092, 1720505877, + 1722779095, 1725047729, 1727311765, 1729571186, 1731825977, 1734076122, + 1736321606, 1738562414, 1740798529, 1743029938, 1745256623, 1747478570, + 1749695763, 1751908188, 1754115828, 1756318669, 1758516695, 1760709892, + 1762898243, 1765081734, 1767260350, 1769434075, 1771602895, 1773766795, + 1775925759, 1778079773, 1780228821, 1782372889, 1784511962, 1786646024, + 1788775063, 1790899061, 1793018005, 1795131880, 1797240672, 1799344365, + 1801442945, 1803536397, 1805624707, 1807707860, 1809785843, 1811858639, + 1813926236, 1815988618, 1818045771, 1820097680, 1822144333, 1824185713, + 1826221808, 1828252602, 1830278082, 1832298233, 1834313041, 1836322493, + 1838326575, 1840325271, 1842318569, 1844306454, 1846288912, 1848265930, + 1850237494, 1852203589, 1854164203, 1856119322, 1858068931, 1860013017, + 1861951567, 1863884566, 1865812002, 1867733861, 1869650129, 1871560793, + 1873465840, 1875365256, 1877259027, 1879147141, 1881029585, 1882906344, + 1884777407, 1886642759, 1888502388, 1890356280, 1892204422, 1894046803, + 1895883407, 1897714224, 1899539239, 1901358440, 1903171814, 1904979348, + 1906781030, 1908576847, 1910366786, 1912150835, 1913928980, 1915701210, + 1917467513, 1919227874, 1920982283, 1922730727, 1924473193, 1926209669, + 1927940142, 1929664602, 1931383035, 1933095429, 1934801772, 1936502052, + 1938196258, 1939884376, 1941566396, 1943242305, 1944912092, 1946575744, + 1948233249, 1949884597, 1951529776, 1953168773, 1954801577, 1956428177, + 1958048560, 1959662717, 1961270634, 1962872301, 1964467707, 1966056839, + 1967639687, 1969216240, 1970786486, 1972350414, 1973908014, 1975459273, + 1977004182, 1978542728, 1980074901, 1981600691, 1983120086, 1984633076, + 1986139649, 1987639796, 1989133505, 1990620766, 1992101568, 1993575901, + 1995043754, 1996505116, 1997959979, 1999408330, 2000850159, 2002285457, + 2003714214, 2005136418, 2006552060, 2007961130, 2009363618, 2010759513, + 2012148807, 2013531488, 2014907547, 2016276974, 2017639760, 2018995894, + 2020345368, 2021688171, 2023024294, 2024353727, 2025676460, 2026992485, + 2028301792, 2029604372, 2030900215, 2032189312, 2033471653, 2034747231, + 2036016034, 2037278056, 2038533285, 2039781714, 2041023334, 2042258135, + 2043486109, 2044707247, 2045921540, 2047128980, 2048329558, 2049523265, + 2050710093, 2051890033, 2053063077, 2054229216, 2055388443, 2056540748, + 2057686124, 2058824562, 2059956054, 2061080592, 2062198169, 2063308775, + 2064412403, 2065509045, 2066598694, 2067681340, 2068756978, 2069825598, + 2070887194, 2071941757, 2072989280, 2074029756, 2075063177, 2076089536, + 2077108824, 2078121036, 2079126164, 2080124199, 2081115137, 2082098968, + 2083075686, 2084045285, 2085007757, 2085963094, 2086911292, 2087852341, + 2088786237, 2089712971, 2090632538, 2091544930, 2092450142, 2093348167, + 2094238997, 2095122628, 2095999052, 2096868263, 2097730255, 2098585021, + 2099432556, 2100272854, 2101105908, 2101931712, 2102750261, 2103561548, + 2104365568, 2105162315, 2105951783, 2106733967, 2107508860, 2108276458, + 2109036754, 2109789744, 2110535421, 2111273781, 2112004818, 2112728527, + 2113444903, 2114153940, 2114855633, 2115549978, 2116236969, 2116916601, + 2117588870, 2118253770, 2118911297, 2119561447, 2120204213, 2120839593, + 2121467580, 2122088171, 2122701361, 2123307146, 2123905522, 2124496483, + 2125080026, 2125656147, 2126224841, 2126786104, 2127339932, 2127886322, + 2128425269, 2128956770, 2129480819, 2129997415, 2130506553, 2131008229, + 2131502440, 2131989182, 2132468452, 2132940246, 2133404560, 2133861392, + 2134310739, 2134752596, 2135186961, 2135613830, 2136033201, 2136445070, + 2136849435, 2137246292, 2137635639, 2138017473, 2138391791, 2138758590, + 2139117868, 2139469622, 2139813850, 2140150549, 2140479716, 2140801350, + 2141115448, 2141422007, 2141721026, 2142012503, 2142296434, 2142572819, + 2142841655, 2143102940, 2143356672, 2143602850, 2143841472, 2144072535, + 2144296039, 2144511982, 2144720361, 2144921177, 2145114426, 2145300109, + 2145478223, 2145648767, 2145811739, 2145967140, 2146114967, 2146255220, + 2146387897, 2146512998, 2146630522, 2146740467, 2146842833, 2146937620, + 2147024826, 2147104451, 2147176495, 2147240956, 2147297835, 2147347131, + 2147388843, 2147422972, 2147449517, 2147468478, 2147479854, 2147483646, + 2147479854, 2147468478, 2147449517, 2147422972, 2147388843, 2147347131, + 2147297835, 2147240956, 2147176495, 2147104451, 2147024826, 2146937620, + 2146842833, 2146740467, 2146630522, 2146512998, 2146387897, 2146255220, + 2146114967, 2145967140, 2145811739, 2145648767, 2145478223, 2145300109, + 2145114426, 2144921177, 2144720361, 2144511982, 2144296039, 2144072535, + 2143841472, 2143602850, 2143356672, 2143102940, 2142841655, 2142572819, + 2142296434, 2142012503, 2141721026, 2141422007, 2141115448, 2140801350, + 2140479716, 2140150549, 2139813850, 2139469622, 2139117868, 2138758590, + 2138391791, 2138017473, 2137635639, 2137246292, 2136849435, 2136445070, + 2136033201, 2135613830, 2135186961, 2134752596, 2134310739, 2133861392, + 2133404560, 2132940246, 2132468452, 2131989182, 2131502440, 2131008229, + 2130506553, 2129997415, 2129480819, 2128956770, 2128425269, 2127886322, + 2127339932, 2126786104, 2126224841, 2125656147, 2125080026, 2124496483, + 2123905522, 2123307146, 2122701361, 2122088171, 2121467580, 2120839593, + 2120204213, 2119561447, 2118911297, 2118253770, 2117588870, 2116916601, + 2116236969, 2115549978, 2114855633, 2114153940, 2113444903, 2112728527, + 2112004818, 2111273781, 2110535421, 2109789744, 2109036754, 2108276458, + 2107508860, 2106733967, 2105951783, 2105162315, 2104365568, 2103561548, + 2102750261, 2101931712, 2101105908, 2100272854, 2099432556, 2098585021, + 2097730255, 2096868263, 2095999052, 2095122628, 2094238997, 2093348167, + 2092450142, 2091544930, 2090632538, 2089712971, 2088786237, 2087852341, + 2086911292, 2085963094, 2085007757, 2084045285, 2083075686, 2082098968, + 2081115137, 2080124199, 2079126164, 2078121036, 2077108824, 2076089536, + 2075063177, 2074029756, 2072989280, 2071941757, 2070887194, 2069825598, + 2068756978, 2067681340, 2066598694, 2065509045, 2064412403, 2063308775, + 2062198169, 2061080592, 2059956054, 2058824562, 2057686124, 2056540748, + 2055388443, 2054229216, 2053063077, 2051890033, 2050710093, 2049523265, + 2048329558, 2047128980, 2045921540, 2044707247, 2043486109, 2042258135, + 2041023334, 2039781714, 2038533285, 2037278056, 2036016034, 2034747231, + 2033471653, 2032189312, 2030900215, 2029604372, 2028301792, 2026992485, + 2025676460, 2024353727, 2023024294, 2021688171, 2020345368, 2018995894, + 2017639760, 2016276974, 2014907547, 2013531488, 2012148807, 2010759513, + 2009363618, 2007961130, 2006552060, 2005136418, 2003714214, 2002285457, + 2000850159, 1999408330, 1997959979, 1996505116, 1995043754, 1993575901, + 1992101568, 1990620766, 1989133505, 1987639796, 1986139649, 1984633076, + 1983120086, 1981600691, 1980074901, 1978542728, 1977004182, 1975459273, + 1973908014, 1972350414, 1970786486, 1969216240, 1967639687, 1966056839, + 1964467707, 1962872301, 1961270634, 1959662717, 1958048560, 1956428177, + 1954801577, 1953168773, 1951529776, 1949884597, 1948233249, 1946575744, + 1944912092, 1943242305, 1941566396, 1939884376, 1938196258, 1936502052, + 1934801772, 1933095429, 1931383035, 1929664602, 1927940142, 1926209669, + 1924473193, 1922730727, 1920982283, 1919227874, 1917467513, 1915701210, + 1913928980, 1912150835, 1910366786, 1908576847, 1906781030, 1904979348, + 1903171814, 1901358440, 1899539239, 1897714224, 1895883407, 1894046803, + 1892204422, 1890356280, 1888502388, 1886642759, 1884777407, 1882906344, + 1881029585, 1879147141, 1877259027, 1875365256, 1873465840, 1871560793, + 1869650129, 1867733861, 1865812002, 1863884566, 1861951567, 1860013017, + 1858068931, 1856119322, 1854164203, 1852203589, 1850237494, 1848265930, + 1846288912, 1844306454, 1842318569, 1840325271, 1838326575, 1836322493, + 1834313041, 1832298233, 1830278082, 1828252602, 1826221808, 1824185713, + 1822144333, 1820097680, 1818045771, 1815988618, 1813926236, 1811858639, + 1809785843, 1807707860, 1805624707, 1803536397, 1801442945, 1799344365, + 1797240672, 1795131880, 1793018005, 1790899061, 1788775063, 1786646024, + 1784511962, 1782372889, 1780228821, 1778079773, 1775925759, 1773766795, + 1771602895, 1769434075, 1767260350, 1765081734, 1762898243, 1760709892, + 1758516695, 1756318669, 1754115828, 1751908188, 1749695763, 1747478570, + 1745256623, 1743029938, 1740798529, 1738562414, 1736321606, 1734076122, + 1731825977, 1729571186, 1727311765, 1725047729, 1722779095, 1720505877, + 1718228092, 1715945755, 1713658881, 1711367487, 1709071589, 1706771201, + 1704466340, 1702157021, 1699843261, 1697525076, 1695202481, 1692875492, + 1690544125, 1688208396, 1685868321, 1683523917, 1681175198, 1678822182, + 1676464885, 1674103322, 1671737510, 1669367464, 1666993202, 1664614738, + 1662232091, 1659845275, 1657454307, 1655059203, 1652659981, 1650256655, + 1647849243, 1645437761, 1643022225, 1640602651, 1638179057, 1635751459, + 1633319872, 1630884315, 1628444803, 1626001352, 1623553980, 1621102703, + 1618647538, 1616188502, 1613725610, 1611258880, 1608788328, 1606313972, + 1603835828, 1601353912, 1598868242, 1596378834, 1593885705, 1591388873, + 1588888353, 1586384163, 1583876320, 1581364840, 1578849741, 1576331039, + 1573808752, 1571282897, 1568753490, 1566220548, 1563684089, 1561144130, + 1558600688, 1556053779, 1553503421, 1550949632, 1548392428, 1545831826, + 1543267843, 1540700498, 1538129807, 1535555786, 1532978455, 1530397829, + 1527813926, 1525226763, 1522636358, 1520042728, 1517445890, 1514845862, + 1512242661, 1509636304, 1507026808, 1504414192, 1501798473, 1499179667, + 1496557793, 1493932868, 1491304909, 1488673934, 1486039961, 1483403006, + 1480763087, 1478120223, 1475474430, 1472825725, 1470174128, 1467519654, + 1464862322, 1462202150, 1459539154, 1456873353, 1454204764, 1451533405, + 1448859293, 1446182447, 1443502883, 1440820620, 1438135675, 1435448066, + 1432757810, 1430064926, 1427369431, 1424671342, 1421970678, 1419267457, + 1416561695, 1413853411, 1411142623, 1408429348, 1405713605, 1402995410, + 1400274782, 1397551739, 1394826298, 1392098478, 1389368295, 1386635769, + 1383900917, 1381163756, 1378424304, 1375682580, 1372938602, 1370192386, + 1367443952, 1364693317, 1361940498, 1359185514, 1356428383, 1353669123, + 1350907751, 1348144285, 1345378744, 1342611145, 1339841507, 1337069847, + 1334296182, 1331520532, 1328742914, 1325963346, 1323181846, 1320398431, + 1317613121, 1314825932, 1312036883, 1309245992, 1306453277, 1303658756, + 1300862446, 1298064366, 1295264533, 1292462966, 1289659683, 1286854702, + 1284048040, 1281239715, 1278429747, 1275618151, 1272804948, 1269990154, + 1267173787, 1264355866, 1261536408, 1258715432, 1255892955, 1253068996, + 1250243573, 1247416702, 1244588403, 1241758694, 1238927592, 1236095115, + 1233261281, 1230426109, 1227589616, 1224751821, 1221912740, 1219072393, + 1216230797, 1213387970, 1210543930, 1207698695, 1204852283, 1202004711, + 1199155999, 1196306164, 1193455223, 1190603194, 1187750097, 1184895947, + 1182040765, 1179184566, 1176327370, 1173469194, 1170610055, 1167749973, + 1164888964, 1162027048, 1159164240, 1156300560, 1153436026, 1150570654, + 1147704463, 1144837472, 1141969696, 1139101156, 1136231867, 1133361849, + 1130491119, 1127619694, 1124747593, 1121874833, 1119001432, 1116127408, + 1113252778, 1110377561, 1107501774, 1104625435, 1101748561, 1098871171, + 1095993281, 1093114911, 1090236076, 1087356796, 1084477087, 1081596968, + 1078716455, 1075835567, 1072954322, 1070072736, 1067190828, 1064308615, + 1061426114, 1058543344, 1055660322, 1052777065, 1049893591, 1047009917, + 1044126061, 1041242041, 1038357874, 1035473577, 1032589168, 1029704664, + 1026820083, 1023935442, 1021050759, 1018166051, 1015281336, 1012396630, + 1009511951, 1006627317, 1003742745, 1000858252, 997973855, 995089573, + 992205421, 989321418, 986437580, 983553925, 980670470, 977787232, + 974904229, 972021477, 969138994, 966256797, 963374903, 960493330, + 957612093, 954731211, 951850700, 948970578, 946090861, 943211567, + 940332712, 937454313, 934576388, 931698954, 928822026, 925945623, + 923069761, 920194457, 917319728, 914445591, 911572062, 908699158, + 905826897, 902955294, 900084367, 897214133, 894344607, 891475807, + 888607750, 885740451, 882873929, 880008198, 877143277, 874279181, + 871415927, 868553531, 865692011, 862831382, 859971661, 857112865, + 854255009, 851398111, 848542187, 845687253, 842833325, 839980420, + 837128554, 834277743, 831428004, 828579352, 825731805, 822885378, + 820040087, 817195949, 814352979, 811511195, 808670611, 805831244, + 802993110, 800156225, 797320604, 794486265, 791653222, 788821493, + 785991092, 783162035, 780334339, 777508018, 774683090, 771859570, + 769037473, 766216815, 763397612, 760579880, 757763634, 754948889, + 752135662, 749323968, 746513823, 743705242, 740898240, 738092833, + 735289037, 732486866, 729686337, 726887464, 724090264, 721294750, + 718500939, 715708846, 712918486, 710129874, 707343026, 704557956, + 701774680, 698993212, 696213569, 693435764, 690659813, 687885731, + 685113533, 682343233, 679574848, 676808390, 674043876, 671281320, + 668520737, 665762142, 663005549, 660250974, 657498430, 654747932, + 651999496, 649253135, 646508864, 643766698, 641026651, 638288737, + 635552972, 632819369, 630087943, 627358708, 624631679, 621906869, + 619184293, 616463966, 613745901, 611030112, 608316615, 605605421, + 602896547, 600190006, 597485811, 594783978, 592084519, 589387448, + 586692781, 584000529, 581310708, 578623331, 575938412, 573255964, + 570576001, 567898537, 565223585, 562551159, 559881273, 557213939, + 554549173, 551886986, 549227393, 546570406, 543916039, 541264306, + 538615220, 535968794, 533325040, 530683974, 528045606, 525409952, + 522777023, 520146833, 517519395, 514894721, 512272825, 509653720, + 507037418, 504423933, 501813277, 499205463, 496600503, 493998411, + 491399199, 488802879, 486209465, 483618969, 481031403, 478446779, + 475865112, 473286412, 470710692, 468137964, 465568241, 463001536, + 460437859, 457877224, 455319643, 452765128, 450213690, 447665343, + 445120097, 442577966, 440038960, 437503092, 434970374, 432440818, + 429914435, 427391237, 424871236, 422354443, 419840871, 417330530, + 414823433, 412319591, 409819016, 407321718, 404827710, 402337002, + 399849607, 397365535, 394884798, 392407406, 389933372, 387462707, + 384995420, 382531525, 380071030, 377613949, 375160291, 372710068, + 370263290, 367819968, 365380114, 362943737, 360510849, 358081460, + 355655582, 353233224, 350814397, 348399112, 345987380, 343579210, + 341174613, 338773600, 336376181, 333982366, 331592166, 329205590, + 326822650, 324443354, 322067714, 319695739, 317327440, 314962825, + 312601907, 310244693, 307891194, 305541421, 303195382, 300853087, + 298514547, 296179771, 293848768, 291521549, 289198122, 286878497, + 284562684, 282250692, 279942530, 277638209, 275337736, 273041122, + 270748376, 268459506, 266174523, 263893434, 261616250, 259342979, + 257073630, 254808213, 252546735, 250289207, 248035636, 245786031, + 243540402, 241298757, 239061104, 236827453, 234597811, 232372188, + 230150591, 227933030, 225719513, 223510047, 221304642, 219103306, + 216906046, 214712872, 212523791, 210338811, 208157941, 205981188, + 203808560, 201640066, 199475714, 197315510, 195159464, 193007582, + 190859873, 188716344, 186577003, 184441857, 182310915, 180184183, + 178061669, 175943381, 173829326, 171719511, 169613943, 167512631, + 165415580, 163322799, 161234294, 159150073, 157070143, 154994510, + 152923182, 150856165, 148793467, 146735094, 144681053, 142631351, + 140585995, 138544991, 136508346, 134476066, 132448159, 130424630, + 128405486, 126390734, 124380379, 122374429, 120372889, 118375765, + 116383065, 114394794, 112410958, 110431564, 108456616, 106486122, + 104520088, 102558519, 100601420, 98648799, 96700660, 94757010, + 92817854, 90883198, 88953047, 87027407, 85106284, 83189683, 81277609, + 79370067, 77467064, 75568605, 73674694, 71785337, 69900540, 68020306, + 66144642, 64273553, 62407042, 60545117, 58687780, 56835038, 54986895, + 53143356, 51304425, 49470108, 47640409, 45815332, 43994882, 42179065, + 40367883, 38561342, 36759446, 34962200, 33169607, 31381673, 29598400, + 27819794, 26045859, 24276599, 22512017, 20752118, 18996906, 17246385, + 15500559, 13759430, 12023005, 10291285, 8564275, 6841978, 5124399, + 3411540, 1703406, 0, -1698675, -3392616, -5081818, -6766279, -8445996, + -10120965, -11791182, -13456645, -15117351, -16773296, -18424478, + -20070893, -21712538, -23349412, -24981509, -26608829, -28231368, + -29849123, -31462091, -33070271, -34673659, -36272253, -37866049, + -39455047, -41039243, -42618635, -44193220, -45762997, -47327963, + -48888115, -50443451, -51993970, -53539670, -55080547, -56616601, + -58147828, -59674228, -61195798, -62712537, -64224442, -65731512, + -67233745, -68731139, -70223693, -71711406, -73194275, -74672298, + -76145476, -77613805, -79077286, -80535915, -81989693, -83438617, + -84882687, -86321901, -87756259, -89185758, -90610398, -92030179, + -93445098, -94855155, -96260349, -97660680, -99056145, -100446746, + -101832480, -103213348, -104589347, -105960479, -107326742, -108688136, + -110044660, -111396314, -112743097, -114085009, -115422050, -116754219, + -118081516, -119403941, -120721494, -122034174, -123341982, -124644917, + -125942979, -127236169, -128524486, -129807931, -131086504, -132360204, + -133629032, -134892989, -136152075, -137406289, -138655633, -139900107, + -141139711, -142374446, -143604312, -144829310, -146049440, -147264703, + -148475101, -149680633, -150881300, -152077104, -153268044, -154454122, + -155635339, -156811696, -157983194, -159149834, -160311616, -161468543, + -162620615, -163767833, -164910199, -166047713, -167180378, -168308195, + -169431164, -170549288, -171662568, -172771005, -173874601, -174973358, + -176067277, -177156359, -178240607, -179320022, -180394606, -181464360, + -182529288, -183589390, -184644668, -185695124, -186740761, -187781580, + -188817584, -189848774, -190875153, -191896723, -192913485, -193925443, + -194932599, -195934954, -196932512, -197925275, -198913244, -199896423, + -200874814, -201848420, -202817243, -203781286, -204740551, -205695041, + -206644759, -207589708, -208529890, -209465308, -210395966, -211321865, + -212243009, -213159401, -214071044, -214977941, -215880095, -216777509, + -217670186, -218558130, -219441343, -220319829, -221193591, -222062633, + -222926958, -223786568, -224641469, -225491662, -226337152, -227177942, + -228014036, -228845437, -229672148, -230494175, -231311519, -232124185, + -232932177, -233735499, -234534154, -235328146, -236117479, -236902156, + -237682183, -238457563, -239228300, -239994397, -240755860, -241512692, + -242264897, -243012480, -243755445, -244493795, -245227536, -245956672, + -246681206, -247401144, -248116489, -248827247, -249533421, -250235017, + -250932038, -251624490, -252312376, -252995702, -253674472, -254348691, + -255018363, -255683494, -256344088, -257000149, -257651684, -258298696, + -258941191, -259579173, -260212648, -260841621, -261466096, -262086078, + -262701573, -263312586, -263919122, -264521186, -265118783, -265711919, + -266300599, -266884827, -267464611, -268039954, -268610862, -269177341, + -269739396, -270297032, -270850256, -271399072, -271943486, -272483504, + -273019132, -273550374, -274077237, -274599726, -275117847, -275631606, + -276141009, -276646061, -277146768, -277643137, -278135172, -278622881, + -279106268, -279585340, -280060103, -280530563, -280996726, -281458597, + -281916184, -282369493, -282818528, -283263297, -283703807, -284140062, + -284572069, -284999835, -285423367, -285842669, -286257749, -286668613, + -287075268, -287477719, -287875974, -288270039, -288659921, -289045625, + -289427159, -289804529, -290177741, -290546803, -290911722, -291272503, + -291629153, -291981680, -292330090, -292674389, -293014586, -293350685, + -293682695, -294010623, -294334474, -294654256, -294969977, -295281642, + -295589260, -295892836, -296192379, -296487894, -296779390, -297066874, + -297350352, -297629831, -297905320, -298176824, -298444352, -298707910, + -298967507, -299223148, -299474842, -299722595, -299966416, -300206311, + -300442288, -300674355, -300902518, -301126786, -301347165, -301563664, + -301776289, -301985049, -302189950, -302391001, -302588210, -302781583, + -302971128, -303156854, -303338767, -303516876, -303691188, -303861711, + -304028452, -304191420, -304350623, -304506068, -304657762, -304805715, + -304949933, -305090425, -305227198, -305360261, -305489622, -305615288, + -305737267, -305855568, -305970198, -306081166, -306188479, -306292147, + -306392175, -306488574, -306581351, -306670514, -306756072, -306838032, + -306916403, -306991193, -307062410, -307130062, -307194158, -307254707, + -307311715, -307365193, -307415147, -307461587, -307504521, -307543956, + -307579902, -307612367, -307641360, -307666888, -307688961, -307707586, + -307722773, -307734529, -307742864, -307747785, -307749302, -307747423, + -307742156, -307733510, -307721495, -307706117, -307687386, -307665312, + -307639901, -307611163, -307579107, -307543742, -307505075, -307463117, + -307417875, -307369358, -307317575, -307262536, -307204248, -307142720, + -307077962, -307009982, -306938789, -306864392, -306786799, -306706020, + -306622064, -306534939, -306444655, -306351219, -306254642, -306154932, + -306052098, -305946150, -305837095, -305724944, -305609704, -305491386, + -305369998, -305245549, -305118048, -304987505, -304853928, -304717326, + -304577709, -304435086, -304289465, -304140856, -303989268, -303834711, + -303677192, -303516723, -303353310, -303186965, -303017695, -302845511, + -302670421, -302492435, -302311561, -302127809, -301941189, -301751709, + -301559379, -301364208, -301166206, -300965381, -300761742, -300555300, + -300346064, -300134042, -299919244, -299701680, -299481358, -299258288, + -299032480, -298803942, -298572685, -298338717, -298102048, -297862687, + -297620644, -297375927, -297128547, -296878513, -296625834, -296370519, + -296112579, -295852022, -295588858, -295323096, -295054745, -294783816, + -294510318, -294234259, -293955650, -293674500, -293390819, -293104615, + -292815899, -292524680, -292230967, -291934769, -291636098, -291334961, + -291031368, -290725329, -290416853, -290105951, -289792630, -289476902, + -289158775, -288838259, -288515363, -288190097, -287862471, -287532494, + -287200175, -286865524, -286528551, -286189266, -285847677, -285503794, + -285157627, -284809186, -284458480, -284105518, -283750310, -283392865, + -283033194, -282671306, -282307210, -281940916, -281572433, -281201771, + -280828940, -280453949, -280076808, -279697526, -279316112, -278932577, + -278546930, -278159181, -277769339, -277377413, -276983414, -276587351, + -276189232, -275789069, -275386871, -274982646, -274576405, -274168157, + -273757913, -273345680, -272931469, -272515290, -272097152, -271677064, + -271255037, -270831079, -270405201, -269977411, -269547720, -269116136, + -268682670, -268247331, -267810128, -267371072, -266930171, -266487435, + -266042874, -265596497, -265148314, -264698334, -264246567, -263793022, + -263337709, -262880637, -262421817, -261961256, -261498965, -261034953, + -260569231, -260101806, -259632689, -259161890, -258689417, -258215281, + -257739490, -257262054, -256782983, -256302286, -255819972, -255336052, + -254850533, -254363427, -253874742, -253384487, -252892673, -252399308, + -251904402, -251407964, -250910005, -250410532, -249909556, -249407085, + -248903130, -248397700, -247890803, -247382450, -246872650, -246361411, + -245848744, -245334658, -244819162, -244302265, -243783977, -243264307, + -242743265, -242220859, -241697098, -241171993, -240645553, -240117786, + -239588702, -239058310, -238526620, -237993640, -237459380, -236923850, + -236387058, -235849013, -235309725, -234769203, -234227456, -233684493, + -233140324, -232594958, -232048403, -231500669, -230951765, -230401700, + -229850484, -229298125, -228744632, -228190015, -227634282, -227077443, + -226519507, -225960482, -225400379, -224839205, -224276970, -223713683, + -223149353, -222583989, -222017599, -221450194, -220881781, -220312370, + -219741969, -219170588, -218598236, -218024921, -217450653, -216875439, + -216299290, -215722214, -215144219, -214565315, -213985511, -213404815, + -212823236, -212240783, -211657465, -211073290, -210488268, -209902407, + -209315715, -208728202, -208139876, -207550746, -206960821, -206370109, + -205778619, -205186360, -204593340, -203999568, -203405053, -202809803, + -202213826, -201617132, -201019730, -200421626, -199822831, -199223352, + -198623199, -198022379, -197420901, -196818774, -196216006, -195612606, + -195008582, -194403942, -193798696, -193192850, -192586415, -191979397, + -191371806, -190763650, -190154937, -189545675, -188935874, -188325540, + -187714683, -187103311, -186491431, -185879053, -185266184, -184652833, + -184039008, -183424717, -182809968, -182194769, -181579129, -180963056, + -180346558, -179729642, -179112317, -178494592, -177876473, -177257970, + -176639090, -176019841, -175400231, -174780269, -174159962, -173539318, + -172918344, -172297050, -171675443, -171053531, -170431321, -169808822, + -169186041, -168562986, -167939666, -167316087, -166692258, -166068186, + -165443880, -164819346, -164194593, -163569628, -162944459, -162319094, + -161693540, -161067806, -160441897, -159815823, -159189591, -158563208, + -157936682, -157310021, -156683231, -156056321, -155429298, -154802170, + -154174943, -153547626, -152920226, -152292749, -151665205, -151037599, + -150409940, -149782234, -149154490, -148526714, -147898913, -147271095, + -146643268, -146015437, -145387612, -144759798, -144132003, -143504234, + -142876499, -142248804, -141621156, -140993563, -140366032, -139738570, + -139111183, -138483880, -137856666, -137229549, -136602536, -135975634, + -135348849, -134722189, -134095661, -133469271, -132843027, -132216934, + -131591001, -130965233, -130339638, -129714222, -129088992, -128463956, + -127839118, -127214487, -126590069, -125965871, -125341898, -124718159, + -124094659, -123471405, -122848404, -122225662, -121603186, -120980982, + -120359056, -119737416, -119116068, -118495017, -117874272, -117253837, + -116633719, -116013925, -115394461, -114775333, -114156548, -113538112, + -112920031, -112302311, -111684959, -111067981, -110451383, -109835171, + -109219352, -108603931, -107988915, -107374309, -106760120, -106146354, + -105533016, -104920114, -104307652, -103695637, -103084075, -102472972, + -101862333, -101252165, -100642473, -100033264, -99424542, -98816315, + -98208587, -97601364, -96994653, -96388459, -95782787, -95177644, + -94573035, -93968965, -93365441, -92762468, -92160052, -91558197, + -90956910, -90356197, -89756062, -89156511, -88557550, -87959184, + -87361419, -86764260, -86167712, -85571781, -84976472, -84381790, + -83787742, -83194331, -82601564, -82009445, -81417980, -80827174, + -80237032, -79647560, -79058762, -78470644, -77883210, -77296467, + -76710418, -76125070, -75540426, -74956492, -74373274, -73790775, + -73209001, -72627957, -72047648, -71468078, -70889253, -70311177, + -69733855, -69157292, -68581493, -68006463, -67432205, -66858726, + -66286029, -65714119, -65143001, -64572680, -64003160, -63434446, + -62866543, -62299454, -61733184, -61167739, -60603122, -60039338, + -59476391, -58914286, -58353027, -57792619, -57233065, -56674371, + -56116541, -55559578, -55003488, -54448274, -53893941, -53340493, + -52787933, -52236267, -51685499, -51135632, -50586671, -50038619, + -49491481, -48945262, -48399964, -47855592, -47312150, -46769642, + -46228072, -45687443, -45147760, -44609027, -44071247, -43534425, + -42998563, -42463667, -41929739, -41396783, -40864804, -40333804, + -39803789, -39274760, -38746722, -38219679, -37693634, -37168591, + -36644553, -36121524, -35599508, -35078507, -34558526, -34039568, + -33521636, -33004733, -32488864, -31974032, -31460239, -30947490, + -30435787, -29925134, -29415534, -28906991, -28399507, -27893087, + -27387732, -26883447, -26380234, -25878096, -25377038, -24877061, + -24378168, -23880364, -23383651, -22888032, -22393509, -21900087, + -21407767, -20916554, -20426448, -19937455, -19449576, -18962814, + -18477173, -17992654, -17509261, -17026997, -16545864, -16065865, + -15587003, -15109280, -14632699, -14157263, -13682974, -13209835, + -12737848, -12267017, -11797343, -11328829, -10861478, -10395292, + -9930274, -9466426, -9003750, -8542249, -8081925, -7622781, -7164819, + -6708041, -6252449, -5798047, -5344835, -4892817, -4441994, -3992370, + -3543945, -3096722, -2650704, -2205891, -1762288, -1319895, -878714, + -438749, 0, 437530, 873840, 1308927, 1742789, 2175425, 2606833, + 3037010, 3465955, 3893666, 4320142, 4745379, 5169378, 5592135, 6013649, + 6433918, 6852941, 7270716, 7687241, 8102515, 8516536, 8929302, 9340812, + 9751064, 10160057, 10567789, 10974259, 11379464, 11783404, 12186078, + 12587483, 12987618, 13386483, 13784074, 14180392, 14575435, 14969201, + 15361690, 15752899, 16142828, 16531475, 16918840, 17304920, 17689715, + 18073224, 18455445, 18836377, 19216020, 19594371, 19971430, 20347197, + 20721669, 21094846, 21466726, 21837310, 22206595, 22574582, 22941268, + 23306653, 23670736, 24033517, 24394994, 24755167, 25114034, 25471595, + 25827849, 26182796, 26536434, 26888763, 27239783, 27589491, 27937889, + 28284974, 28630747, 28975207, 29318353, 29660185, 30000701, 30339903, + 30677788, 31014356, 31349607, 31683541, 32016157, 32347454, 32677432, + 33006091, 33333430, 33659449, 33984147, 34307525, 34629581, 34950316, + 35269729, 35587820, 35904588, 36220034, 36534157, 36846957, 37158433, + 37468587, 37777416, 38084922, 38391104, 38695962, 38999496, 39301705, + 39602591, 39902152, 40200388, 40497301, 40792889, 41087152, 41380092, + 41671707, 41961998, 42250965, 42538608, 42824927, 43109922, 43393594, + 43675942, 43956967, 44236669, 44515048, 44792105, 45067839, 45342251, + 45615341, 45887110, 46157557, 46426683, 46694489, 46960975, 47226140, + 47489986, 47752513, 48013722, 48273612, 48532184, 48789439, 49045377, + 49299999, 49553305, 49805295, 50055970, 50305332, 50553379, 50800114, + 51045536, 51289646, 51532444, 51773932, 52014110, 52252979, 52490538, + 52726790, 52961735, 53195373, 53427705, 53658733, 53888456, 54116875, + 54343992, 54569807, 54794321, 55017534, 55239448, 55460064, 55679382, + 55897404, 56114129, 56329560, 56543697, 56756540, 56968092, 57178353, + 57387323, 57595005, 57801398, 58006505, 58210325, 58412861, 58614112, + 58814081, 59012769, 59210175, 59406303, 59601152, 59794724, 59987020, + 60178041, 60367788, 60556263, 60743467, 60929401, 61114067, 61297465, + 61479596, 61660463, 61840066, 62018407, 62195487, 62371307, 62545869, + 62719173, 62891223, 63062018, 63231560, 63399850, 63566891, 63732683, + 63897228, 64060527, 64222582, 64383394, 64542965, 64701296, 64858389, + 65014245, 65168865, 65322252, 65474407, 65625332, 65775027, 65923495, + 66070737, 66216755, 66361550, 66505125, 66647480, 66788617, 66928539, + 67067246, 67204741, 67341025, 67476099, 67609966, 67742628, 67874085, + 68004340, 68133395, 68261251, 68387910, 68513374, 68637645, 68760724, + 68882614, 69003315, 69122831, 69241163, 69358312, 69474281, 69589071, + 69702685, 69815124, 69926391, 70036486, 70145413, 70253173, 70359767, + 70465199, 70569470, 70672581, 70774536, 70875335, 70974982, 71073477, + 71170823, 71267022, 71362077, 71455988, 71548759, 71640391, 71730886, + 71820247, 71908476, 71995574, 72081544, 72166387, 72250107, 72332705, + 72414184, 72494545, 72573791, 72651923, 72728945, 72804858, 72879664, + 72953367, 73025967, 73097467, 73167870, 73237177, 73305391, 73372514, + 73438549, 73503498, 73567362, 73630145, 73691848, 73752475, 73812026, + 73870505, 73927914, 73984255, 74039531, 74093744, 74146896, 74198989, + 74250027, 74300011, 74348944, 74396828, 74443665, 74489459, 74534211, + 74577924, 74620600, 74662242, 74702852, 74742433, 74780986, 74818516, + 74855023, 74890511, 74924982, 74958438, 74990882, 75022317, 75052745, + 75082168, 75110589, 75138011, 75164436, 75189867, 75214305, 75237755, + 75260217, 75281696, 75302193, 75321711, 75340253, 75357820, 75374417, + 75390045, 75404706, 75418405, 75431142, 75442921, 75453745, 75463616, + 75472536, 75480509, 75487537, 75493622, 75498768, 75502977, 75506251, + 75508593, 75510007, 75510494, 75510057, 75508699, 75506423, 75503232, + 75499127, 75494112, 75488190, 75481363, 75473634, 75465006, 75455481, + 75445062, 75433752, 75421553, 75408469, 75394502, 75379655, 75363931, + 75347332, 75329861, 75311521, 75292314, 75272244, 75251313, 75229525, + 75206881, 75183384, 75159038, 75133846, 75107809, 75080931, 75053214, + 75024662, 74995277, 74965062, 74934020, 74902154, 74869466, 74835960, + 74801637, 74766502, 74730556, 74693804, 74656246, 74617887, 74578729, + 74538775, 74498028, 74456491, 74414167, 74371058, 74327167, 74282497, + 74237052, 74190833, 74143844, 74096088, 74047568, 73998286, 73948245, + 73897448, 73845899, 73793599, 73740553, 73686762, 73632229, 73576958, + 73520952, 73464213, 73406744, 73348548, 73289628, 73229987, 73169628, + 73108554, 73046767, 72984271, 72921068, 72857162, 72792555, 72727250, + 72661250, 72594558, 72527177, 72459110, 72390359, 72320929, 72250821, + 72180038, 72108584, 72036461, 71963672, 71890221, 71816110, 71741341, + 71665919, 71589846, 71513124, 71435757, 71357748, 71279099, 71199814, + 71119895, 71039346, 70958169, 70876367, 70793944, 70710901, 70627242, + 70542971, 70458089, 70372600, 70286506, 70199812, 70112519, 70024630, + 69936149, 69847078, 69757420, 69667179, 69576356, 69484956, 69392980, + 69300433, 69207316, 69113633, 69019387, 68924580, 68829215, 68733296, + 68636826, 68539806, 68442241, 68344132, 68245484, 68146299, 68046579, + 67946328, 67845548, 67744244, 67642416, 67540069, 67437205, 67333827, + 67229938, 67125541, 67020639, 66915235, 66809331, 66702931, 66596037, + 66488653, 66380781, 66272423, 66163584, 66054265, 65944471, 65834202, + 65723464, 65612257, 65500586, 65388453, 65275861, 65162813, 65049311, + 64935359, 64820960, 64706115, 64590829, 64475104, 64358943, 64242348, + 64125323, 64007870, 63889993, 63771693, 63652975, 63533840, 63414292, + 63294333, 63173967, 63053195, 62932022, 62810449, 62688480, 62566117, + 62443363, 62320221, 62196694, 62072785, 61948496, 61823830, 61698790, + 61573379, 61447599, 61321454, 61194946, 61068078, 60940852, 60813272, + 60685340, 60557059, 60428432, 60299461, 60170150, 60040500, 59910516, + 59780199, 59649552, 59518578, 59387280, 59255660, 59123722, 58991468, + 58858900, 58726021, 58592835, 58459343, 58325549, 58191455, 58057064, + 57922379, 57787402, 57652136, 57516584, 57380747, 57244630, 57108235, + 56971564, 56834620, 56697406, 56559924, 56422177, 56284168, 56145899, + 56007373, 55868593, 55729560, 55590279, 55450751, 55310979, 55170966, + 55030714, 54890226, 54749505, 54608552, 54467372, 54325965, 54184336, + 54042486, 53900418, 53758134, 53615638, 53472931, 53330017, 53186898, + 53043576, 52900054, 52756334, 52612419, 52468312, 52324015, 52179531, + 52034861, 51890009, 51744978, 51599768, 51454384, 51308828, 51163101, + 51017207, 50871148, 50724927, 50578546, 50432007, 50285312, 50138465, + 49991468, 49844323, 49697033, 49549600, 49402026, 49254314, 49106467, + 48958486, 48810374, 48662134, 48513768, 48365278, 48216667, 48067936, + 47919090, 47770129, 47621056, 47471874, 47322584, 47173190, 47023693, + 46874096, 46724402, 46574611, 46424728, 46274754, 46124691, 45974542, + 45824309, 45673995, 45523601, 45373130, 45222584, 45071965, 44921276, + 44770520, 44619697, 44468811, 44317863, 44166856, 44015793, 43864674, + 43713504, 43562283, 43411013, 43259699, 43108340, 42956940, 42805501, + 42654024, 42502513, 42350969, 42199394, 42047790, 41896161, 41744507, + 41592831, 41441135, 41289421, 41137691, 40985948, 40834193, 40682429, + 40530657, 40378880, 40227100, 40075319, 39923538, 39771761, 39619988, + 39468223, 39316467, 39164722, 39012990, 38861273, 38709574, 38557893, + 38406234, 38254598, 38102987, 37951404, 37799849, 37648326, 37496836, + 37345380, 37193962, 37042582, 36891244, 36739948, 36588696, 36437492, + 36286336, 36135230, 35984177, 35833177, 35682234, 35531349, 35380524, + 35229760, 35079060, 34928426, 34777858, 34627360, 34476933, 34326578, + 34176298, 34026094, 33875969, 33725923, 33575960, 33426079, 33276285, + 33126577, 32976958, 32827430, 32677994, 32528652, 32379407, 32230258, + 32081209, 31932262, 31783417, 31634676, 31486042, 31337515, 31189098, + 31040792, 30892599, 30744521, 30596559, 30448715, 30300990, 30153386, + 30005906, 29858549, 29711319, 29564216, 29417243, 29270400, 29123690, + 28977114, 28830674, 28684370, 28538206, 28392181, 28246299, 28100560, + 27954966, 27809518, 27664219, 27519068, 27374069, 27229223, 27084530, + 26939993, 26795613, 26651391, 26507329, 26363429, 26219691, 26076118, + 25932711, 25789470, 25646399, 25503497, 25360767, 25218209, 25075826, + 24933619, 24791588, 24649736, 24508064, 24366573, 24225264, 24084139, + 23943200, 23802447, 23661882, 23521506, 23381320, 23241327, 23101526, + 22961920, 22822510, 22683297, 22544282, 22405467, 22266852, 22128440, + 21990231, 21852227, 21714428, 21576836, 21439453, 21302279, 21165316, + 21028565, 20892027, 20755703, 20619595, 20483703, 20348030, 20212575, + 20077340, 19942327, 19807536, 19672969, 19538626, 19404509, 19270619, + 19136957, 19003525, 18870322, 18737351, 18604612, 18472107, 18339837, + 18207802, 18076003, 17944443, 17813121, 17682039, 17551197, 17420598, + 17290241, 17160128, 17030261, 16900639, 16771263, 16642136, 16513258, + 16384629, 16256251, 16128124, 16000251, 15872631, 15745265, 15618155, + 15491301, 15364704, 15238366, 15112286, 14986467, 14860908, 14735612, + 14610577, 14485807, 14361300, 14237059, 14113084, 13989376, 13865935, + 13742763, 13619860, 13497228, 13374866, 13252777, 13130960, 13009416, + 12888146, 12767152, 12646433, 12525990, 12405825, 12285938, 12166329, + 12047000, 11927952, 11809184, 11690697, 11572493, 11454572, 11336935, + 11219583, 11102515, 10985733, 10869238, 10753030, 10637109, 10521477, + 10406135, 10291082, 10176319, 10061847, 9947667, 9833780, 9720185, + 9606883, 9493876, 9381163, 9268746, 9156625, 9044799, 8933271, 8822040, + 8711108, 8600474, 8490139, 8380104, 8270369, 8160935, 8051802, 7942971, + 7834442, 7726217, 7618294, 7510675, 7403360, 7296351, 7189646, 7083247, + 6977154, 6871368, 6765888, 6660716, 6555852, 6451297, 6347050, 6243112, + 6139484, 6036166, 5933158, 5830461, 5728075, 5626000, 5524237, 5422787, + 5321649, 5220825, 5120313, 5020116, 4920232, 4820662, 4721408, 4622468, + 4523844, 4425535, 4327542, 4229866, 4132505, 4035462, 3938736, 3842327, + 3746236, 3650463, 3555008, 3459871, 3365053, 3270554, 3176374, 3082513, + 2988972, 2895751, 2802850, 2710269, 2618009, 2526069, 2434450, 2343152, + 2252175, 2161520, 2071186, 1981174, 1891484, 1802116, 1713070, 1624347, + 1535946, 1447867, 1360112, 1272679, 1185569, 1098782, 1012319, 926179, + 840362, 754868, 669699, 584853, 500331, 416132, 332258, 248707, 165480, + 82578, 0, -82254, -164184, -245790, -327071, -408029, -488662, -568970, + -648955, -728615, -807951, -886963, -965650, -1044013, -1122052, + -1199766, -1277157, -1354223, -1430965, -1507383, -1583477, -1659247, + -1734694, -1809816, -1884615, -1959090, -2033241, -2107069, -2180573, + -2253755, -2326612, -2399147, -2471359, -2543248, -2614814, -2686057, + -2756978, -2827576, -2897852, -2967806, -3037438, -3106748, -3175736, + -3244403, -3312749, -3380773, -3448476, -3515858, -3582919, -3649660, + -3716081, -3782181, -3847962, -3913423, -3978564, -4043386, -4107888, + -4172072, -4235937, -4299484, -4362712, -4425622, -4488215, -4550490, + -4612447, -4674088, -4735412, -4796419, -4857110, -4917485, -4977544, + -5037288, -5096717, -5155830, -5214629, -5273114, -5331285, -5389142, + -5446685, -5503915, -5560832, -5617437, -5673730, -5729711, -5785380, + -5840737, -5895784, -5950521, -6004947, -6059063, -6112869, -6166367, + -6219555, -6272435, -6325007, -6377270, -6429227, -6480876, -6532219, + -6583255, -6633986, -6684410, -6734530, -6784345, -6833855, -6883062, + -6931964, -6980564, -7028861, -7076855, -7124548, -7171938, -7219028, + -7265817, -7312306, -7358495, -7404384, -7449974, -7495266, -7540260, + -7584956, -7629355, -7673457, -7717262, -7760772, -7803987, -7846906, + -7889531, -7931862, -7973899, -8015644, -8057095, -8098255, -8139123, + -8179700, -8219986, -8259982, -8299689, -8339106, -8378234, -8417075, + -8455627, -8493893, -8531872, -8569564, -8606972, -8644094, -8680931, + -8717485, -8753754, -8789741, -8825446, -8860868, -8896009, -8930870, + -8965450, -8999750, -9033771, -9067513, -9100978, -9134164, -9167074, + -9199707, -9232064, -9264146, -9295954, -9327487, -9358746, -9389733, + -9420447, -9450889, -9481060, -9510960, -9540590, -9569950, -9599042, + -9627865, -9656420, -9684708, -9712730, -9740485, -9767976, -9795201, + -9822162, -9848860, -9875295, -9901467, -9927378, -9953028, -9978417, + -10003546, -10028416, -10053027, -10077381, -10101477, -10125316, + -10148899, -10172227, -10195300, -10218118, -10240683, -10262996, + -10285055, -10306864, -10328421, -10349728, -10370785, -10391593, + -10412153, -10432465, -10452530, -10472349, -10491921, -10511249, + -10530332, -10549172, -10567768, -10586122, -10604234, -10622105, + -10639735, -10657126, -10674278, -10691191, -10707866, -10724305, + -10740507, -10756473, -10772204, -10787701, -10802964, -10817995, + -10832793, -10847359, -10861695, -10875800, -10889676, -10903323, + -10916742, -10929933, -10942897, -10955636, -10968149, -10980438, + -10992502, -11004344, -11015963, -11027360, -11038536, -11049491, + -11060227, -11070743, -11081042, -11091123, -11100987, -11110634, + -11120067, -11129284, -11138288, -11147078, -11155656, -11164022, + -11172176, -11180121, -11187855, -11195381, -11202698, -11209808, + -11216710, -11223407, -11229898, -11236185, -11242268, -11248148, + -11253825, -11259300, -11264574, -11269648, -11274523, -11279199, + -11283676, -11287956, -11292040, -11295928, -11299620, -11303118, + -11306422, -11309534, -11312453, -11315181, -11317717, -11320064, + -11322222, -11324191, -11325972, -11327566, -11328974, -11330196, + -11331233, -11332087, -11332756, -11333243, -11333549, -11333673, + -11333616, -11333380, -11332965, -11332372, -11331601, -11330654, + -11329531, -11328232, -11326759, -11325112, -11323292, -11321300, + -11319136, -11316802, -11314298, -11311624, -11308781, -11305771, + -11302594, -11299250, -11295741, -11292067, -11288229, -11284228, + -11280064, -11275738, -11271250, -11266603, -11261796, -11256830, + -11251705, -11246424, -11240985, -11235391, -11229642, -11223738, + -11217680, -11211469, -11205107, -11198592, -11191927, -11185112, + -11178147, -11171034, -11163774, -11156366, -11148811, -11141112, + -11133267, -11125278, -11117146, -11108871, -11100455, -11091897, + -11083198, -11074360, -11065383, -11056268, -11047015, -11037626, + -11028100, -11018440, -11008644, -10998715, -10988653, -10978458, + -10968131, -10957674, -10947087, -10936370, -10925524, -10914550, + -10903449, -10892221, -10880868, -10869389, -10857786, -10846060, + -10834210, -10822238, -10810145, -10797931, -10785597, -10773143, + -10760571, -10747881, -10735074, -10722150, -10709110, -10695956, + -10682687, -10669304, -10655809, -10642201, -10628482, -10614652, + -10600712, -10586662, -10572504, -10558238, -10543865, -10529385, + -10514799, -10500109, -10485313, -10470414, -10455412, -10440308, + -10425102, -10409794, -10394387, -10378880, -10363275, -10347571, + -10331769, -10315871, -10299877, -10283787, -10267603, -10251324, + -10234952, -10218488, -10201931, -10185284, -10168545, -10151717, + -10134799, -10117793, -10100699, -10083518, -10066250, -10048896, + -10031457, -10013933, -9996326, -9978635, -9960862, -9943007, -9925071, + -9907054, -9888957, -9870782, -9852527, -9834195, -9815785, -9797299, + -9778737, -9760100, -9741388, -9722602, -9703743, -9684811, -9665807, + -9646732, -9627586, -9608370, -9589084, -9569730, -9550308, -9530818, + -9511261, -9491638, -9471949, -9452196, -9432378, -9412496, -9392551, + -9372544, -9352475, -9332344, -9312154, -9291903, -9271593, -9251224, + -9230797, -9210312, -9189771, -9169174, -9148520, -9127812, -9107050, + -9086233, -9065363, -9044441, -9023467, -9002441, -8981365, -8960238, + -8939062, -8917837, -8896563, -8875242, -8853873, -8832458, -8810996, + -8789490, -8767938, -8746342, -8724702, -8703020, -8681294, -8659527, + -8637718, -8615869, -8593979, -8572050, -8550081, -8528074, -8506029, + -8483947, -8461827, -8439672, -8417481, -8395254, -8372993, -8350698, + -8328370, -8306008, -8283614, -8261189, -8238732, -8216244, -8193726, + -8171178, -8148602, -8125996, -8103363, -8080702, -8058014, -8035300, + -8012560, -7989794, -7967004, -7944189, -7921350, -7898488, -7875604, + -7852697, -7829768, -7806818, -7783848, -7760857, -7737847, -7714817, + -7691769, -7668702, -7645618, -7622517, -7599399, -7576265, -7553115, + -7529951, -7506771, -7483577, -7460370, -7437149, -7413916, -7390670, + -7367413, -7344144, -7320865, -7297575, -7274275, -7250966, -7227648, + -7204322, -7180988, -7157646, -7134297, -7110942, -7087580, -7064213, + -7040841, -7017464, -6994083, -6970697, -6947309, -6923917, -6900523, + -6877127, -6853730, -6830331, -6806931, -6783532, -6760132, -6736733, + -6713335, -6689938, -6666544, -6643151, -6619762, -6596375, -6572992, + -6549613, -6526239, -6502869, -6479504, -6456146, -6432793, -6409447, + -6386107, -6362775, -6339451, -6316134, -6292827, -6269528, -6246238, + -6222958, -6199688, -6176428, -6153180, -6129942, -6106717, -6083503, + -6060301, -6037113, -6013937, -5990775, -5967627, -5944493, -5921374, + -5898270, -5875181, -5852108, -5829050, -5806010, -5782986, -5759979, + -5736990, -5714019, -5691066, -5668131, -5645216, -5622320, -5599443, + -5576586, -5553750, -5530934, -5508139, -5485366, -5462614, -5439884, + -5417177, -5394492, -5371830, -5349191, -5326576, -5303985, -5281418, + -5258876, -5236358, -5213866, -5191399, -5168958, -5146544, -5124155, + -5101793, -5079459, -5057152, -5034872, -5012620, -4990397, -4968202, + -4946036, -4923898, -4901791, -4879713, -4857665, -4835647, -4813660, + -4791703, -4769778, -4747884, -4726021, -4704191, -4682393, -4660627, + -4638894, -4617193, -4595526, -4573893, -4552293, -4530728, -4509196, + -4487699, -4466237, -4444810, -4423418, -4402062, -4380741, -4359457, + -4338209, -4316997, -4295822, -4274684, -4253583, -4232520, -4211494, + -4190506, -4169557, -4148645, -4127772, -4106939, -4086144, -4065388, + -4044672, -4023995, -4003359, -3982762, -3962206, -3941690, -3921215, + -3900781, -3880388, -3860037, -3839727, -3819458, -3799232, -3779048, + -3758906, -3738807, -3718750, -3698736, -3678766, -3658838, -3638955, + -3619114, -3599318, -3579565, -3559857, -3540193, -3520574, -3500999, + -3481469, -3461985, -3442545, -3423151, -3403802, -3384499, -3365242, + -3346031, -3326866, -3307747, -3288675, -3269650, -3250671, -3231739, + -3212855, -3194017, -3175227, -3156485, -3137790, -3119143, -3100544, + -3081993, -3063490, -3045035, -3026629, -3008272, -2989963, -2971703, + -2953492, -2935331, -2917218, -2899155, -2881142, -2863178, -2845263, + -2827399, -2809584, -2791820, -2774105, -2756441, -2738828, -2721265, + -2703752, -2686290, -2668879, -2651519, -2634210, -2616951, -2599745, + -2582589, -2565485, -2548432, -2531431, -2514481, -2497583, -2480737, + -2463943, -2447201, -2430511, -2413873, -2397287, -2380754, -2364273, + -2347844, -2331468, -2315144, -2298874, -2282656, -2266490, -2250378, + -2234318, -2218312, -2202358, -2186458, -2170611, -2154817, -2139076, + -2123389, -2107755, -2092175, -2076648, -2061174, -2045755, -2030388, + -2015076, -1999817, -1984612, -1969461, -1954364, -1939320, -1924331, + -1909395, -1894514, -1879686, -1864913, -1850194, -1835528, -1820917, + -1806361, -1791858, -1777410, -1763015, -1748676, -1734390, -1720159, + -1705982, -1691859, -1677791, -1663778, -1649818, -1635913, -1622063, + -1608267, -1594525, -1580838, -1567205, -1553627, -1540103, -1526634, + -1513219, -1499859, -1486553, -1473302, -1460105, -1446962, -1433874, + -1420841, -1407862, -1394937, -1382067, -1369251, -1356490, -1343783, + -1331130, -1318532, -1305988, -1293498, -1281063, -1268682, -1256355, + -1244083, -1231865, -1219701, -1207591, -1195535, -1183534, -1171587, + -1159693, -1147854, -1136069, -1124337, -1112660, -1101037, -1089467, + -1077952, -1066490, -1055082, -1043727, -1032426, -1021179, -1009986, + -998846, -987760, -976727, -965748, -954822, -943949, -933129, -922363, + -911650, -900990, -890384, -879830, -869329, -858881, -848486, -838144, + -827855, -817618, -807434, -797303, -787224, -777197, -767223, -757301, + -747432, -737615, -727849, -718136, -708475, -698866, -689309, -679803, + -670349, -660947, -651597, -642297, -633050, -623853, -614708, -605615, + -596572, -587580, -578639, -569750, -560911, -552122, -543385, -534698, + -526061, -517475, -508939, -500453, -492018, -483632, -475297, -467011, + -458775, -450589, -442452, -434365, -426328, -418339, -410400, -402510, + -394669, -386877, -379134, -371440, -363794, -356197, -348649, -341149, + -333697, -326293, -318937, -311629, -304369, -297157, -289993, -282876, + -275807, -268785, -261810, -254882, -248001, -241168, -234381, -227641, + -220947, -214300, -207699, -201145, -194636, -188174, -181758, -175387, + -169063, -162784, -156550, -150362, -144219, -138121, -132068, -126060, + -120097, -114178, -108304, -102475, -96690, -90949, -85252, -79599, + -73990, -68425, -62903, -57425, -51990, -46598, -41250, -35945, -30682, + -25462, -20285, -15150, -10058, -5008, 0 +}; diff --git a/kernel/framework/audio/fltdata2_h.inc b/kernel/framework/audio/fltdata2_h.inc new file mode 100644 index 0000000..2f3cf33 --- /dev/null +++ b/kernel/framework/audio/fltdata2_h.inc @@ -0,0 +1,2503 @@ +/* + * Purpose: Filter coefficient tables for GRC3 + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +static int32_t filter_data[16385] = { + 0, -2498, -5007, -7527, -10057, -12598, -15149, -17711, -20283, -22866, + -25459, -28063, -30677, -33301, -35936, -38582, -41238, -43904, -46581, + -49268, -51966, -54674, -57392, -60121, -62860, -65610, -68370, -71141, + -73922, -76713, -79515, -82327, -85149, -87982, -90825, -93678, -96542, + -99416, -102301, -105195, -108100, -111016, -113941, -116877, -119823, + -122779, -125746, -128723, -131710, -134707, -137714, -140732, -143760, + -146798, -149846, -152904, -155972, -159051, -162139, -165238, -168347, + -171466, -174594, -177733, -180882, -184041, -187210, -190389, -193578, + -196777, -199986, -203205, -206433, -209672, -212920, -216179, -219447, + -222725, -226013, -229310, -232618, -235935, -239262, -242599, -245945, + -249301, -252667, -256042, -259427, -262822, -266227, -269641, -273064, + -276497, -279940, -283392, -286854, -290325, -293805, -297295, -300795, + -304304, -307822, -311350, -314886, -318433, -321988, -325553, -329127, + -332710, -336303, -339904, -343515, -347135, -350764, -354402, -358050, + -361706, -365371, -369045, -372728, -376421, -380122, -383832, -387550, + -391278, -395014, -398760, -402514, -406276, -410048, -413828, -417617, + -421414, -425220, -429035, -432858, -436690, -440530, -444378, -448235, + -452101, -455974, -459857, -463747, -467646, -471553, -475468, -479391, + -483323, -487262, -491210, -495166, -499130, -503102, -507082, -511069, + -515065, -519069, -523080, -527099, -531126, -535161, -539203, -543253, + -547311, -551376, -555449, -559530, -563618, -567713, -571816, -575926, + -580044, -584169, -588301, -592440, -596587, -600741, -604902, -609070, + -613245, -617427, -621616, -625812, -630015, -634225, -638442, -642665, + -646895, -651132, -655376, -659626, -663883, -668146, -672416, -676693, + -680975, -685265, -689560, -693862, -698170, -702484, -706805, -711132, + -715464, -719803, -724148, -728499, -732855, -737218, -741586, -745961, + -750341, -754726, -759117, -763514, -767917, -772325, -776738, -781157, + -785581, -790011, -794446, -798886, -803331, -807782, -812237, -816698, + -821164, -825634, -830110, -834590, -839075, -843565, -848060, -852559, + -857063, -861571, -866084, -870602, -875123, -879650, -884180, -888715, + -893254, -897797, -902344, -906895, -911451, -916010, -920573, -925140, + -929711, -934285, -938863, -943445, -948031, -952620, -957212, -961808, + -966407, -971009, -975615, -980224, -984836, -989451, -994069, -998690, + -1003314, -1007941, -1012571, -1017203, -1021838, -1026476, -1031116, + -1035759, -1040404, -1045052, -1049702, -1054354, -1059009, -1063665, + -1068324, -1072985, -1077648, -1082313, -1086979, -1091648, -1096318, + -1100990, -1105663, -1110338, -1115015, -1119693, -1124372, -1129053, + -1133735, -1138418, -1143102, -1147787, -1152474, -1157161, -1161849, + -1166538, -1171228, -1175918, -1180609, -1185301, -1189993, -1194686, + -1199379, -1204072, -1208765, -1213459, -1218153, -1222847, -1227540, + -1232234, -1236928, -1241621, -1246314, -1251007, -1255699, -1260391, + -1265082, -1269773, -1274463, -1279152, -1283840, -1288528, -1293214, + -1297900, -1302584, -1307267, -1311950, -1316630, -1321310, -1325987, + -1330664, -1335339, -1340012, -1344683, -1349353, -1354021, -1358687, + -1363350, -1368012, -1372672, -1377329, -1381984, -1386637, -1391288, + -1395935, -1400581, -1405223, -1409863, -1414500, -1419135, -1423766, + -1428394, -1433019, -1437641, -1442260, -1446876, -1451488, -1456097, + -1460702, -1465303, -1469901, -1474495, -1479086, -1483672, -1488255, + -1492833, -1497407, -1501977, -1506543, -1511105, -1515662, -1520214, + -1524762, -1529305, -1533844, -1538377, -1542906, -1547430, -1551949, + -1556463, -1560971, -1565474, -1569972, -1574465, -1578952, -1583433, + -1587909, -1592378, -1596843, -1601301, -1605753, -1610199, -1614639, + -1619073, -1623500, -1627921, -1632336, -1636744, -1641146, -1645540, + -1649929, -1654310, -1658684, -1663051, -1667411, -1671764, -1676110, + -1680448, -1684779, -1689102, -1693418, -1697726, -1702027, -1706319, + -1710604, -1714880, -1719149, -1723409, -1727662, -1731905, -1736141, + -1740368, -1744586, -1748796, -1752997, -1757189, -1761372, -1765546, + -1769711, -1773867, -1778014, -1782152, -1786280, -1790398, -1794507, + -1798606, -1802696, -1806776, -1810845, -1814905, -1818955, -1822995, + -1827024, -1831043, -1835051, -1839050, -1843037, -1847014, -1850980, + -1854935, -1858879, -1862812, -1866734, -1870645, -1874545, -1878433, + -1882310, -1886175, -1890029, -1893871, -1897701, -1901520, -1905326, + -1909120, -1912902, -1916672, -1920430, -1924175, -1927908, -1931628, + -1935336, -1939030, -1942712, -1946381, -1950037, -1953680, -1957310, + -1960926, -1964529, -1968119, -1971695, -1975258, -1978806, -1982341, + -1985863, -1989370, -1992863, -1996342, -1999806, -2003257, -2006693, + -2010114, -2013521, -2016913, -2020291, -2023654, -2027001, -2030334, + -2033651, -2036954, -2040241, -2043513, -2046769, -2050009, -2053234, + -2056444, -2059637, -2062815, -2065976, -2069122, -2072251, -2075364, + -2078461, -2081541, -2084605, -2087652, -2090682, -2093696, -2096693, + -2099672, -2102635, -2105581, -2108509, -2111420, -2114313, -2117189, + -2120048, -2122889, -2125712, -2128517, -2131304, -2134073, -2136824, + -2139557, -2142272, -2144968, -2147646, -2150305, -2152945, -2155567, + -2158170, -2160754, -2163319, -2165865, -2168391, -2170899, -2173387, + -2175855, -2178304, -2180734, -2183144, -2185533, -2187904, -2190254, + -2192584, -2194893, -2197183, -2199452, -2201701, -2203929, -2206137, + -2208324, -2210490, -2212636, -2214760, -2216864, -2218946, -2221007, + -2223047, -2225066, -2227063, -2229038, -2230992, -2232924, -2234834, + -2236722, -2238589, -2240433, -2242255, -2244055, -2245832, -2247587, + -2249320, -2251030, -2252717, -2254382, -2256023, -2257642, -2259238, + -2260810, -2262360, -2263886, -2265388, -2266868, -2268323, -2269755, + -2271164, -2272548, -2273909, -2275246, -2276558, -2277847, -2279111, + -2280351, -2281567, -2282758, -2283924, -2285066, -2286183, -2287276, + -2288343, -2289386, -2290403, -2291395, -2292362, -2293304, -2294220, + -2295111, -2295976, -2296816, -2297630, -2298418, -2299180, -2299916, + -2300626, -2301310, -2301968, -2302600, -2303205, -2303783, -2304335, + -2304861, -2305359, -2305831, -2306276, -2306694, -2307086, -2307449, + -2307786, -2308096, -2308378, -2308633, -2308860, -2309059, -2309231, + -2309375, -2309492, -2309580, -2309640, -2309673, -2309677, -2309653, + -2309601, -2309520, -2309411, -2309273, -2309107, -2308912, -2308688, + -2308436, -2308154, -2307844, -2307504, -2307135, -2306738, -2306310, + -2305854, -2305368, -2304852, -2304307, -2303732, -2303128, -2302493, + -2301829, -2301135, -2300410, -2299656, -2298871, -2298057, -2297211, + -2296336, -2295430, -2294493, -2293526, -2292528, -2291499, -2290440, + -2289350, -2288228, -2287076, -2285892, -2284677, -2283431, -2282154, + -2280845, -2279505, -2278133, -2276730, -2275295, -2273828, -2272330, + -2270800, -2269237, -2267643, -2266016, -2264358, -2262667, -2260944, + -2259189, -2257401, -2255581, -2253728, -2251842, -2249924, -2247974, + -2245990, -2243974, -2241924, -2239842, -2237727, -2235578, -2233396, + -2231181, -2228933, -2226652, -2224337, -2221988, -2219606, -2217191, + -2214741, -2212258, -2209742, -2207191, -2204607, -2201988, -2199336, + -2196649, -2193929, -2191174, -2188385, -2185561, -2182703, -2179811, + -2176885, -2173923, -2170928, -2167897, -2164832, -2161732, -2158598, + -2155428, -2152224, -2148984, -2145710, -2142400, -2139056, -2135676, + -2132261, -2128811, -2125325, -2121804, -2118248, -2114656, -2111029, + -2107366, -2103667, -2099933, -2096163, -2092357, -2088516, -2084638, + -2080725, -2076776, -2072790, -2068769, -2064712, -2060618, -2056488, + -2052322, -2048120, -2043881, -2039607, -2035295, -2030947, -2026563, + -2022142, -2017685, -2013191, -2008660, -2004093, -1999489, -1994848, + -1990171, -1985456, -1980705, -1975916, -1971091, -1966229, -1961329, + -1956393, -1951420, -1946409, -1941361, -1936276, -1931154, -1925994, + -1920797, -1915563, -1910291, -1904982, -1899636, -1894252, -1888830, + -1883371, -1877874, -1872340, -1866768, -1861159, -1855511, -1849826, + -1844104, -1838343, -1832545, -1826709, -1820835, -1814923, -1808973, + -1802985, -1796959, -1790896, -1784794, -1778654, -1772476, -1766261, + -1760007, -1753714, -1747384, -1741016, -1734609, -1728164, -1721681, + -1715160, -1708600, -1702002, -1695366, -1688692, -1681979, -1675228, + -1668438, -1661610, -1654744, -1647839, -1640896, -1633914, -1626894, + -1619836, -1612739, -1605603, -1598429, -1591217, -1583966, -1576676, + -1569348, -1561981, -1554576, -1547132, -1539650, -1532129, -1524569, + -1516971, -1509334, -1501659, -1493945, -1486192, -1478401, -1470571, + -1462702, -1454795, -1446849, -1438865, -1430842, -1422780, -1414680, + -1406540, -1398363, -1390147, -1381892, -1373598, -1365266, -1356895, + -1348486, -1340038, -1331551, -1323026, -1314462, -1305859, -1297218, + -1288538, -1279820, -1271063, -1262268, -1253434, -1244562, -1235651, + -1226701, -1217713, -1208687, -1199622, -1190518, -1181376, -1172196, + -1162977, -1153720, -1144425, -1135091, -1125718, -1116308, -1106859, + -1097371, -1087846, -1078282, -1068680, -1059039, -1049361, -1039644, + -1029889, -1020096, -1010265, -1000396, -990488, -980543, -970560, + -960538, -950479, -940381, -930246, -920073, -909862, -899613, -889326, + -879002, -868640, -858240, -847802, -837327, -826814, -816264, -805676, + -795050, -784387, -773687, -762949, -752174, -741362, -730512, -719625, + -708700, -697739, -686740, -675704, -664632, -653522, -642375, -631191, + -619971, -608713, -597419, -586088, -574720, -563316, -551875, -540397, + -528883, -517333, -505746, -494122, -482463, -470767, -459035, -447266, + -435462, -423621, -411745, -399832, -387884, -375899, -363879, -351823, + -339732, -327605, -315442, -303244, -291010, -278741, -266437, -254097, + -241723, -229313, -216868, -204388, -191873, -179323, -166738, -154119, + -141465, -128776, -116053, -103295, -90503, -77676, -64815, -51920, + -38991, -26028, -13031, 0, 13064, 26163, 39296, 52462, 65661, 78894, + 92161, 105461, 118794, 132160, 145559, 158991, 172457, 185955, 199485, + 213049, 226645, 240274, 253934, 267628, 281353, 295111, 308901, 322723, + 336576, 350462, 364379, 378328, 392308, 406320, 420364, 434438, 448544, + 462681, 476848, 491047, 505277, 519537, 533828, 548149, 562501, 576883, + 591295, 605737, 620210, 634712, 649244, 663806, 678398, 693019, 707669, + 722349, 737058, 751796, 766563, 781359, 796184, 811037, 825919, 840830, + 855768, 870735, 885731, 900754, 915805, 930884, 945990, 961124, 976286, + 991475, 1006691, 1021934, 1037204, 1052501, 1067825, 1083175, 1098552, + 1113956, 1129385, 1144841, 1160323, 1175831, 1191364, 1206923, 1222508, + 1238118, 1253754, 1269414, 1285100, 1300811, 1316546, 1332306, 1348091, + 1363899, 1379733, 1395590, 1411471, 1427377, 1443306, 1459258, 1475234, + 1491234, 1507257, 1523302, 1539371, 1555462, 1571577, 1587713, 1603872, + 1620054, 1636257, 1652483, 1668730, 1684999, 1701289, 1717601, 1733935, + 1750289, 1766664, 1783060, 1799477, 1815915, 1832373, 1848851, 1865349, + 1881867, 1898405, 1914963, 1931540, 1948136, 1964752, 1981387, 1998040, + 2014713, 2031404, 2048113, 2064841, 2081587, 2098351, 2115133, 2131932, + 2148749, 2165583, 2182435, 2199303, 2216189, 2233091, 2250010, 2266945, + 2283896, 2300864, 2317847, 2334846, 2351861, 2368891, 2385936, 2402997, + 2420072, 2437162, 2454267, 2471386, 2488520, 2505667, 2522829, 2540004, + 2557193, 2574395, 2591610, 2608839, 2626080, 2643334, 2660601, 2677880, + 2695171, 2712474, 2729790, 2747116, 2764455, 2781804, 2799165, 2816537, + 2833919, 2851312, 2868716, 2886129, 2903553, 2920987, 2938430, 2955883, + 2973345, 2990816, 3008297, 3025786, 3043283, 3060790, 3078304, 3095826, + 3113356, 3130894, 3148439, 3165992, 3183552, 3201118, 3218692, 3236271, + 3253858, 3271450, 3289048, 3306652, 3324261, 3341876, 3359496, 3377121, + 3394751, 3412386, 3430024, 3447667, 3465314, 3482965, 3500619, 3518277, + 3535938, 3553602, 3571269, 3588938, 3606610, 3624284, 3641960, 3659637, + 3677317, 3694997, 3712679, 3730362, 3748046, 3765730, 3783414, 3801099, + 3818784, 3836468, 3854152, 3871835, 3889517, 3907199, 3924879, 3942557, + 3960234, 3977909, 3995581, 4013251, 4030919, 4048584, 4066246, 4083905, + 4101560, 4119212, 4136859, 4154503, 4172143, 4189778, 4207408, 4225033, + 4242653, 4260268, 4277877, 4295481, 4313078, 4330669, 4348254, 4365832, + 4383403, 4400967, 4418524, 4436073, 4453614, 4471148, 4488673, 4506189, + 4523697, 4541196, 4558686, 4576167, 4593638, 4611099, 4628550, 4645991, + 4663421, 4680841, 4698250, 4715648, 4733034, 4750409, 4767771, 4785122, + 4802460, 4819786, 4837099, 4854400, 4871687, 4888960, 4906220, 4923466, + 4940697, 4957915, 4975117, 4992305, 5009478, 5026635, 5043777, 5060903, + 5078013, 5095107, 5112184, 5129245, 5146289, 5163315, 5180324, 5197315, + 5214289, 5231244, 5248181, 5265099, 5281999, 5298879, 5315740, 5332581, + 5349403, 5366204, 5382986, 5399746, 5416486, 5433205, 5449903, 5466579, + 5483233, 5499865, 5516476, 5533063, 5549628, 5566170, 5582689, 5599184, + 5615656, 5632104, 5648527, 5664927, 5681301, 5697651, 5713975, 5730274, + 5746548, 5762795, 5779016, 5795211, 5811380, 5827521, 5843636, 5859722, + 5875782, 5891813, 5907817, 5923792, 5939738, 5955656, 5971544, 5987403, + 6003233, 6019032, 6034802, 6050541, 6066250, 6081927, 6097574, 6113189, + 6128773, 6144325, 6159845, 6175332, 6190787, 6206209, 6221598, 6236953, + 6252275, 6267563, 6282817, 6298036, 6313221, 6328371, 6343486, 6358566, + 6373610, 6388618, 6403590, 6418526, 6433425, 6448287, 6463112, 6477899, + 6492649, 6507361, 6522035, 6536671, 6551267, 6565825, 6580344, 6594823, + 6609263, 6623663, 6638022, 6652341, 6666620, 6680857, 6695054, 6709208, + 6723322, 6737393, 6751422, 6765408, 6779352, 6793253, 6807110, 6820924, + 6834695, 6848421, 6862103, 6875741, 6889334, 6902882, 6916384, 6929841, + 6943253, 6956618, 6969937, 6983209, 6996435, 7009613, 7022745, 7035829, + 7048864, 7061852, 7074792, 7087683, 7100525, 7113318, 7126062, 7138756, + 7151400, 7163994, 7176538, 7189031, 7201474, 7213865, 7226205, 7238493, + 7250730, 7262914, 7275046, 7287125, 7299151, 7311125, 7323044, 7334911, + 7346723, 7358481, 7370185, 7381834, 7393428, 7404967, 7416451, 7427878, + 7439250, 7450566, 7461826, 7473028, 7484174, 7495263, 7506294, 7517268, + 7528183, 7539041, 7549840, 7560580, 7571261, 7581884, 7592446, 7602949, + 7613393, 7623776, 7634098, 7644360, 7654561, 7664701, 7674779, 7684796, + 7694751, 7704643, 7714473, 7724241, 7733946, 7743587, 7753165, 7762680, + 7772130, 7781517, 7790839, 7800096, 7809289, 7818416, 7827478, 7836475, + 7845406, 7854270, 7863068, 7871800, 7880465, 7889063, 7897593, 7906056, + 7914451, 7922778, 7931037, 7939227, 7947349, 7955401, 7963385, 7971299, + 7979143, 7986917, 7994621, 8002254, 8009817, 8017309, 8024730, 8032080, + 8039358, 8046564, 8053698, 8060759, 8067748, 8074665, 8081508, 8088278, + 8094974, 8101597, 8108146, 8114620, 8121021, 8127346, 8133597, 8139772, + 8145873, 8151897, 8157846, 8163719, 8169515, 8175235, 8180879, 8186445, + 8191934, 8197346, 8202680, 8207936, 8213115, 8218215, 8223236, 8228179, + 8233042, 8237827, 8242532, 8247157, 8251703, 8256168, 8260553, 8264858, + 8269082, 8273225, 8277286, 8281267, 8285165, 8288982, 8292717, 8296369, + 8299939, 8303427, 8306831, 8310152, 8313390, 8316545, 8319615, 8322602, + 8325504, 8328322, 8331056, 8333704, 8336268, 8338746, 8341139, 8343446, + 8345668, 8347803, 8349852, 8351814, 8353690, 8355479, 8357181, 8358796, + 8360323, 8361762, 8363113, 8364377, 8365552, 8366638, 8367636, 8368545, + 8369365, 8370096, 8370737, 8371288, 8371750, 8372121, 8372403, 8372593, + 8372693, 8372703, 8372621, 8372448, 8372184, 8371828, 8371380, 8370840, + 8370208, 8369484, 8368667, 8367758, 8366756, 8365660, 8364471, 8363189, + 8361814, 8360344, 8358780, 8357123, 8355371, 8353524, 8351583, 8349547, + 8347416, 8345189, 8342867, 8340450, 8337937, 8335328, 8332623, 8329822, + 8326924, 8323929, 8320838, 8317650, 8314365, 8310983, 8307503, 8303926, + 8300251, 8296478, 8292607, 8288637, 8284570, 8280404, 8276139, 8271775, + 8267312, 8262750, 8258089, 8253328, 8248468, 8243508, 8238448, 8233288, + 8228027, 8222666, 8217205, 8211643, 8205980, 8200217, 8194352, 8188386, + 8182318, 8176149, 8169878, 8163506, 8157031, 8150455, 8143776, 8136995, + 8130111, 8123125, 8116036, 8108844, 8101549, 8094151, 8086649, 8079044, + 8071336, 8063524, 8055608, 8047588, 8039464, 8031236, 8022904, 8014467, + 8005926, 7997280, 7988529, 7979673, 7970713, 7961647, 7952476, 7943200, + 7933818, 7924330, 7914737, 7905038, 7895234, 7885323, 7875306, 7865183, + 7854953, 7844618, 7834175, 7823626, 7812970, 7802208, 7791338, 7780362, + 7769278, 7758087, 7746789, 7735383, 7723870, 7712250, 7700521, 7688685, + 7676741, 7664689, 7652529, 7640261, 7627885, 7615401, 7602808, 7590106, + 7577297, 7564378, 7551351, 7538215, 7524971, 7511617, 7498154, 7484583, + 7470902, 7457112, 7443213, 7429205, 7415087, 7400860, 7386523, 7372077, + 7357521, 7342855, 7328080, 7313195, 7298200, 7283095, 7267880, 7252555, + 7237120, 7221575, 7205919, 7190154, 7174278, 7158292, 7142195, 7125988, + 7109671, 7093243, 7076704, 7060055, 7043296, 7026426, 7009445, 6992353, + 6975150, 6957837, 6940413, 6922878, 6905233, 6887476, 6869608, 6851630, + 6833540, 6815340, 6797028, 6778606, 6760072, 6741428, 6722672, 6703805, + 6684827, 6665738, 6646538, 6627226, 6607804, 6588270, 6568625, 6548869, + 6529002, 6509023, 6488934, 6468733, 6448421, 6427998, 6407463, 6386818, + 6366061, 6345193, 6324214, 6303124, 6281923, 6260610, 6239187, 6217652, + 6196007, 6174250, 6152382, 6130404, 6108314, 6086113, 6063802, 6041379, + 6018846, 5996201, 5973446, 5950581, 5927604, 5904517, 5881318, 5858010, + 5834590, 5811061, 5787420, 5763669, 5739808, 5715836, 5691754, 5667561, + 5643258, 5618845, 5594322, 5569689, 5544946, 5520092, 5495129, 5470056, + 5444873, 5419580, 5394178, 5368666, 5343044, 5317313, 5291472, 5265522, + 5239463, 5213294, 5187016, 5160630, 5134134, 5107529, 5080815, 5053993, + 5027062, 5000022, 4972874, 4945618, 4918253, 4890779, 4863198, 4835508, + 4807711, 4779805, 4751792, 4723671, 4695443, 4667107, 4638663, 4610113, + 4581455, 4552690, 4523818, 4494839, 4465753, 4436561, 4407262, 4377857, + 4348345, 4318727, 4289003, 4259173, 4229238, 4199196, 4169049, 4138797, + 4108439, 4077976, 4047408, 4016735, 3985957, 3955074, 3924087, 3892996, + 3861800, 3830500, 3799096, 3767588, 3735976, 3704261, 3672443, 3640521, + 3608496, 3576368, 3544137, 3511804, 3479368, 3446830, 3414190, 3381447, + 3348603, 3315657, 3282609, 3249460, 3216210, 3182859, 3149407, 3115854, + 3082201, 3048447, 3014593, 2980639, 2946586, 2912432, 2878180, 2843828, + 2809377, 2774827, 2740178, 2705431, 2670585, 2635641, 2600600, 2565460, + 2530223, 2494889, 2459457, 2423929, 2388303, 2352582, 2316763, 2280849, + 2244839, 2208733, 2172532, 2136235, 2099843, 2063356, 2026775, 1990099, + 1953329, 1916465, 1879507, 1842456, 1805311, 1768073, 1730743, 1693320, + 1655804, 1618196, 1580496, 1542705, 1504822, 1466848, 1428783, 1390627, + 1352381, 1314044, 1275617, 1237101, 1198495, 1159800, 1121016, 1082143, + 1043182, 1004132, 964995, 925770, 886457, 847057, 807570, 767997, + 728337, 688591, 648759, 608842, 568839, 528751, 488579, 448322, 407980, + 367555, 327046, 286454, 245779, 205021, 164181, 123258, 82253, 41167, + 0, -41248, -82577, -123987, -165477, -207047, -248696, -290425, + -332232, -374118, -416083, -458125, -500245, -542443, -584718, -627069, + -669497, -712001, -754580, -797235, -839966, -882771, -925651, -968604, + -1011632, -1054733, -1097908, -1141155, -1184475, -1227867, -1271331, + -1314866, -1358472, -1402150, -1445898, -1489716, -1533603, -1577560, + -1621587, -1665682, -1709845, -1754077, -1798376, -1842743, -1887176, + -1931676, -1976243, -2020875, -2065573, -2110336, -2155164, -2200056, + -2245013, -2290033, -2335116, -2380263, -2425472, -2470743, -2516076, + -2561470, -2606926, -2652442, -2698019, -2743656, -2789352, -2835107, + -2880921, -2926794, -2972724, -3018712, -3064757, -3110860, -3157018, + -3203233, -3249503, -3295828, -3342209, -3388643, -3435132, -3481675, + -3528270, -3574919, -3621619, -3668372, -3715177, -3762032, -3808938, + -3855895, -3902902, -3949958, -3997063, -4044217, -4091419, -4138668, + -4185966, -4233310, -4280701, -4328137, -4375620, -4423148, -4470720, + -4518337, -4565998, -4613702, -4661450, -4709240, -4757072, -4804946, + -4852862, -4900818, -4948815, -4996851, -5044927, -5093042, -5141196, + -5189388, -5237618, -5285885, -5334189, -5382529, -5430905, -5479316, + -5527763, -5576244, -5624759, -5673308, -5721889, -5770504, -5819150, + -5867829, -5916538, -5965279, -6014049, -6062850, -6111680, -6160538, + -6209425, -6258341, -6307283, -6356253, -6405249, -6454271, -6503318, + -6552391, -6601488, -6650609, -6699754, -6748922, -6798112, -6847324, + -6896559, -6945814, -6995090, -7044386, -7093701, -7143036, -7192389, + -7241761, -7291150, -7340556, -7389979, -7439418, -7488872, -7538342, + -7587826, -7637325, -7686836, -7736361, -7785899, -7835448, -7885009, + -7934581, -7984164, -8033756, -8083358, -8132969, -8182588, -8232215, + -8281850, -8331491, -8381139, -8430792, -8480451, -8530114, -8579781, + -8629453, -8679127, -8728804, -8778483, -8828163, -8877845, -8927527, + -8977209, -9026890, -9076570, -9126249, -9175925, -9225598, -9275268, + -9324935, -9374596, -9424253, -9473905, -9523550, -9573189, -9622820, + -9672444, -9722060, -9771667, -9821264, -9870852, -9920429, -9969995, + -10019549, -10069092, -10118622, -10168138, -10217641, -10267129, + -10316602, -10366060, -10415502, -10464927, -10514335, -10563726, + -10613097, -10662451, -10711784, -10761098, -10810391, -10859663, + -10908913, -10958141, -11007346, -11056527, -11105685, -11154818, + -11203925, -11253007, -11302063, -11351092, -11400093, -11449066, + -11498011, -11546926, -11595811, -11644667, -11693491, -11742283, + -11791044, -11839772, -11888466, -11937127, -11985753, -12034344, + -12082899, -12131418, -12179901, -12228345, -12276752, -12325120, + -12373450, -12421739, -12469988, -12518196, -12566362, -12614486, + -12662567, -12710605, -12758599, -12806549, -12854453, -12902312, + -12950124, -12997890, -13045607, -13093277, -13140898, -13188469, + -13235991, -13283462, -13330882, -13378250, -13425566, -13472828, + -13520038, -13567193, -13614293, -13661338, -13708327, -13755259, + -13802134, -13848951, -13895710, -13942409, -13989049, -14035629, + -14082148, -14128606, -14175001, -14221334, -14267603, -14313808, + -14359949, -14406025, -14452035, -14497979, -14543855, -14589664, + -14635405, -14681077, -14726679, -14772212, -14817673, -14863064, + -14908382, -14953628, -14998801, -15043900, -15088925, -15133874, + -15178748, -15223546, -15268267, -15312910, -15357476, -15401962, + -15446370, -15490697, -15534944, -15579109, -15623193, -15667194, + -15711113, -15754947, -15798698, -15842363, -15885943, -15929436, + -15972843, -16016163, -16059394, -16102537, -16145591, -16188554, + -16231427, -16274209, -16316900, -16359498, -16402002, -16444414, + -16486731, -16528953, -16571079, -16613110, -16655044, -16696880, + -16738619, -16780258, -16821799, -16863240, -16904580, -16945819, + -16986957, -17027992, -17068924, -17109753, -17150477, -17191096, + -17231611, -17272019, -17312320, -17352514, -17392600, -17432577, + -17472446, -17512204, -17551852, -17591389, -17630815, -17670128, + -17709328, -17748414, -17787387, -17826245, -17864987, -17903613, + -17942123, -17980515, -18018790, -18056946, -18094983, -18132900, + -18170697, -18208373, -18245927, -18283359, -18320668, -18357854, + -18394916, -18431853, -18468665, -18505351, -18541911, -18578343, + -18614648, -18650824, -18686871, -18722789, -18758576, -18794233, + -18829758, -18865152, -18900412, -18935539, -18970533, -19005392, + -19040116, -19074704, -19109156, -19143471, -19177648, -19211688, + -19245588, -19279349, -19312971, -19346451, -19379791, -19412989, + -19446044, -19478957, -19511725, -19544350, -19576830, -19609165, + -19641353, -19673395, -19705290, -19737037, -19768635, -19800085, + -19831385, -19862535, -19893534, -19924381, -19955077, -19985620, + -20016010, -20046246, -20076328, -20106255, -20136027, -20165642, + -20195101, -20224402, -20253546, -20282531, -20311356, -20340023, + -20368529, -20396874, -20425058, -20453080, -20480939, -20508636, + -20536168, -20563536, -20590740, -20617777, -20644649, -20671354, + -20697892, -20724263, -20750465, -20776498, -20802361, -20828055, + -20853578, -20878929, -20904109, -20929117, -20953951, -20978613, + -21003100, -21027412, -21051550, -21075512, -21099297, -21122906, + -21146337, -21169590, -21192665, -21215561, -21238277, -21260813, + -21283168, -21305342, -21327334, -21349144, -21370770, -21392214, + -21413473, -21434548, -21455437, -21476141, -21496659, -21516990, + -21537133, -21557089, -21576857, -21596435, -21615825, -21635024, + -21654032, -21672850, -21691476, -21709910, -21728152, -21746200, + -21764054, -21781715, -21799180, -21816451, -21833525, -21850404, + -21867085, -21883569, -21899856, -21915944, -21931833, -21947523, + -21963013, -21978302, -21993391, -22008278, -22022963, -22037446, + -22051726, -22065802, -22079675, -22093343, -22106806, -22120064, + -22133115, -22145961, -22158599, -22171030, -22183254, -22195269, + -22207075, -22218671, -22230058, -22241235, -22252201, -22262955, + -22273498, -22283828, -22293946, -22303851, -22313542, -22323019, + -22332281, -22341329, -22350161, -22358777, -22367176, -22375359, + -22383324, -22391072, -22398601, -22405911, -22413003, -22419874, + -22426526, -22432957, -22439167, -22445156, -22450923, -22456468, + -22461790, -22466889, -22471764, -22476415, -22480842, -22485044, + -22489020, -22492771, -22496295, -22499594, -22502665, -22505508, + -22508124, -22510511, -22512670, -22514600, -22516300, -22517770, + -22519010, -22520019, -22520797, -22521344, -22521659, -22521741, + -22521590, -22521207, -22520590, -22519739, -22518653, -22517333, + -22515778, -22513988, -22511962, -22509699, -22507200, -22504464, + -22501490, -22498279, -22494830, -22491142, -22487216, -22483050, + -22478645, -22474000, -22469115, -22463989, -22458622, -22453014, + -22447164, -22441072, -22434738, -22428161, -22421341, -22414277, + -22406970, -22399419, -22391624, -22383584, -22375298, -22366768, + -22357991, -22348969, -22339700, -22330185, -22320423, -22310413, + -22300156, -22289651, -22278897, -22267896, -22256645, -22245145, + -22233396, -22221397, -22209148, -22196649, -22183899, -22170898, + -22157646, -22144143, -22130388, -22116381, -22102121, -22087610, + -22072845, -22057827, -22042556, -22027031, -22011252, -21995219, + -21978932, -21962390, -21945593, -21928541, -21911233, -21893670, + -21875851, -21857776, -21839444, -21820856, -21802011, -21782909, + -21763549, -21743932, -21724057, -21703925, -21683533, -21662884, + -21641976, -21620809, -21599383, -21577697, -21555753, -21533548, + -21511084, -21488359, -21465374, -21442129, -21418623, -21394856, + -21370829, -21346540, -21321989, -21297177, -21272103, -21246768, + -21221170, -21195310, -21169187, -21142802, -21116155, -21089244, + -21062070, -21034633, -21006933, -20978969, -20950741, -20922250, + -20893495, -20864476, -20835192, -20805644, -20775832, -20745755, + -20715413, -20684807, -20653936, -20622799, -20591397, -20559731, + -20527798, -20495600, -20463137, -20430408, -20397413, -20364152, + -20330625, -20296832, -20262773, -20228448, -20193856, -20158998, + -20123874, -20088483, -20052825, -20016901, -19980710, -19944252, + -19907527, -19870535, -19833277, -19795751, -19757958, -19719898, + -19681571, -19642977, -19604116, -19564987, -19525591, -19485928, + -19445997, -19405799, -19365334, -19324601, -19283601, -19242333, + -19200798, -19158996, -19116926, -19074588, -19031984, -18989111, + -18945972, -18902565, -18858890, -18814948, -18770739, -18726263, + -18681519, -18636508, -18591230, -18545684, -18499872, -18453792, + -18407445, -18360832, -18313951, -18266803, -18219389, -18171707, + -18123759, -18075545, -18027063, -17978315, -17929301, -17880020, + -17830473, -17780660, -17730581, -17680235, -17629624, -17578747, + -17527604, -17476195, -17424521, -17372581, -17320376, -17267906, + -17215171, -17162171, -17108906, -17055376, -17001582, -16947523, + -16893200, -16838612, -16783761, -16728645, -16673266, -16617623, + -16561717, -16505548, -16449115, -16392419, -16335461, -16278240, + -16220756, -16163010, -16105002, -16046732, -15988200, -15929407, + -15870352, -15811036, -15751460, -15691622, -15631524, -15571165, + -15510546, -15449667, -15388529, -15327131, -15265473, -15203557, + -15141381, -15078948, -15016255, -14953305, -14890096, -14826630, + -14762907, -14698926, -14634688, -14570194, -14505443, -14440436, + -14375174, -14309655, -14243882, -14177853, -14111569, -14045031, + -13978239, -13911193, -13843893, -13776340, -13708534, -13640475, + -13572163, -13503600, -13434784, -13365717, -13296399, -13226830, + -13157011, -13086941, -13016621, -12946052, -12875233, -12804166, + -12732850, -12661286, -12589474, -12517414, -12445108, -12372554, + -12299754, -12226708, -12153417, -12079880, -12006098, -11932071, + -11857800, -11783286, -11708527, -11633526, -11558283, -11482797, + -11407069, -11331100, -11254889, -11178438, -11101747, -11024816, + -10947646, -10870236, -10792588, -10714702, -10636579, -10558218, + -10479620, -10400786, -10321716, -10242410, -10162870, -10083095, + -10003086, -9922843, -9842367, -9761658, -9680717, -9599544, -9518140, + -9436505, -9354640, -9272545, -9190221, -9107667, -9024886, -8941876, + -8858639, -8775176, -8691485, -8607570, -8523428, -8439062, -8354472, + -8269658, -8184620, -8099360, -8013878, -7928174, -7842250, -7756104, + -7669739, -7583154, -7496350, -7409328, -7322088, -7234631, -7146957, + -7059068, -6970962, -6882642, -6794108, -6705359, -6616398, -6527224, + -6437838, -6348241, -6258432, -6168414, -6078186, -5987749, -5897104, + -5806251, -5715190, -5623924, -5532451, -5440773, -5348891, -5256804, + -5164514, -5072022, -4979327, -4886431, -4793334, -4700037, -4606541, + -4512845, -4418952, -4324861, -4230573, -4136089, -4041410, -3946536, + -3851467, -3756206, -3660751, -3565105, -3469267, -3373238, -3277020, + -3180612, -3084016, -2987232, -2890260, -2793102, -2695759, -2598231, + -2500518, -2402622, -2304543, -2206282, -2107839, -2009216, -1910414, + -1811432, -1712271, -1612933, -1513419, -1413728, -1313862, -1213821, + -1113607, -1013219, -912659, -811928, -711026, -609954, -508713, + -407304, -305727, -203984, -102074, 0, 102239, 204641, 307206, 409934, + 512822, 615871, 719079, 822446, 925970, 1029652, 1133489, 1237482, + 1341630, 1445931, 1550385, 1654991, 1759748, 1864655, 1969711, 2074917, + 2180269, 2285769, 2391414, 2497205, 2603140, 2709218, 2815438, 2921800, + 3028303, 3134945, 3241726, 3348645, 3455702, 3562894, 3670222, 3777684, + 3885280, 3993008, 4100868, 4208859, 4316979, 4425228, 4533606, 4642110, + 4750740, 4859496, 4968376, 5077379, 5186504, 5295751, 5405118, 5514605, + 5624211, 5733934, 5843773, 5953729, 6063799, 6173982, 6284279, 6394687, + 6505207, 6615836, 6726574, 6837420, 6948373, 7059432, 7170595, 7281863, + 7393234, 7504706, 7616280, 7727953, 7839726, 7951596, 8063564, 8175627, + 8287785, 8400037, 8512382, 8624819, 8737346, 8849964, 8962670, 9075463, + 9188344, 9301310, 9414361, 9527495, 9640712, 9754010, 9867389, 9980847, + 10094383, 10207997, 10321687, 10435452, 10549291, 10663203, 10777187, + 10891241, 11005366, 11119559, 11233820, 11348147, 11462540, 11576997, + 11691518, 11806100, 11920744, 12035448, 12150210, 12265030, 12379907, + 12494840, 12609827, 12724868, 12839960, 12955104, 13070298, 13185541, + 13300831, 13416168, 13531551, 13646978, 13762448, 13877961, 13993514, + 14109108, 14224740, 14340410, 14456116, 14571857, 14687633, 14803441, + 14919282, 15035153, 15151054, 15266983, 15382939, 15498922, 15614929, + 15730960, 15847014, 15963089, 16079184, 16195298, 16311430, 16427579, + 16543743, 16659922, 16776114, 16892318, 17008533, 17124757, 17240989, + 17357229, 17473475, 17589726, 17705980, 17822237, 17938495, 18054753, + 18171009, 18287264, 18403515, 18519761, 18636000, 18752233, 18868457, + 18984672, 19100875, 19217067, 19333245, 19449409, 19565556, 19681687, + 19797800, 19913893, 20029965, 20146015, 20262042, 20378045, 20494022, + 20609972, 20725894, 20841787, 20957648, 21073478, 21189275, 21305038, + 21420764, 21536454, 21652106, 21767718, 21883290, 21998820, 22114306, + 22229748, 22345145, 22460494, 22575795, 22691046, 22806247, 22921396, + 23036491, 23151532, 23266517, 23381444, 23496314, 23611123, 23725872, + 23840558, 23955181, 24069739, 24184230, 24298654, 24413010, 24527296, + 24641510, 24755652, 24869719, 24983712, 25097628, 25211467, 25325226, + 25438905, 25552502, 25666017, 25779447, 25892792, 26006049, 26119219, + 26232299, 26345288, 26458186, 26570990, 26683699, 26796312, 26908828, + 27021245, 27133562, 27245778, 27357891, 27469901, 27581805, 27693603, + 27805293, 27916874, 28028344, 28139702, 28250948, 28362078, 28473094, + 28583992, 28694771, 28805431, 28915970, 29026386, 29136678, 29246846, + 29356887, 29466800, 29576585, 29686239, 29795761, 29905150, 30014405, + 30123524, 30232506, 30341350, 30450054, 30558617, 30667037, 30775314, + 30883446, 30991431, 31099269, 31206957, 31314496, 31421882, 31529115, + 31636194, 31743117, 31849883, 31956491, 32062939, 32169225, 32275349, + 32381310, 32487105, 32592733, 32698194, 32803486, 32908607, 33013556, + 33118332, 33222934, 33327359, 33431607, 33535677, 33639567, 33743275, + 33846801, 33950143, 34053300, 34156270, 34259051, 34361644, 34464046, + 34566256, 34668272, 34770094, 34871719, 34973148, 35074377, 35175406, + 35276234, 35376859, 35477280, 35577496, 35677504, 35777305, 35876896, + 35976276, 36075444, 36174398, 36273137, 36371661, 36469966, 36568053, + 36665920, 36763565, 36860987, 36958184, 37055156, 37151902, 37248418, + 37344706, 37440762, 37536586, 37632176, 37727532, 37822651, 37917532, + 38012175, 38106577, 38200737, 38294655, 38388328, 38481755, 38574936, + 38667868, 38760551, 38852982, 38945162, 39037087, 39128758, 39220173, + 39311330, 39402228, 39492865, 39583241, 39673354, 39763203, 39852787, + 39942103, 40031152, 40119931, 40208439, 40296675, 40384637, 40472325, + 40559736, 40646871, 40733726, 40820302, 40906596, 40992607, 41078335, + 41163777, 41248933, 41333801, 41418379, 41502668, 41586664, 41670367, + 41753777, 41836890, 41919706, 42002224, 42084443, 42166361, 42247976, + 42329288, 42410296, 42490997, 42571391, 42651477, 42731253, 42810717, + 42889869, 42968708, 43047231, 43125438, 43203328, 43280899, 43358150, + 43435079, 43511686, 43587969, 43663926, 43739558, 43814861, 43889836, + 43964480, 44038793, 44112774, 44186420, 44259731, 44332706, 44405342, + 44477640, 44549598, 44621214, 44692487, 44763417, 44834001, 44904239, + 44974129, 45043671, 45112862, 45181701, 45250189, 45318322, 45386100, + 45453522, 45520587, 45587293, 45653639, 45719623, 45785246, 45850505, + 45915399, 45979927, 46044088, 46107880, 46171303, 46234355, 46297036, + 46359343, 46421275, 46482832, 46544013, 46604815, 46665238, 46725281, + 46784943, 46844222, 46903117, 46961627, 47019751, 47077487, 47134835, + 47191794, 47248361, 47304537, 47360319, 47415707, 47470700, 47525296, + 47579495, 47633294, 47686694, 47739692, 47792288, 47844481, 47896269, + 47947652, 47998628, 48049195, 48099354, 48149103, 48198440, 48247365, + 48295876, 48343973, 48391654, 48438919, 48485765, 48532193, 48578200, + 48623786, 48668950, 48713691, 48758007, 48801897, 48845361, 48888398, + 48931006, 48973183, 49014930, 49056246, 49097128, 49137576, 49177589, + 49217166, 49256306, 49295007, 49333269, 49371091, 49408472, 49445410, + 49481905, 49517956, 49553561, 49588720, 49623431, 49657694, 49691507, + 49724870, 49757781, 49790240, 49822245, 49853796, 49884891, 49915530, + 49945712, 49975435, 50004699, 50033502, 50061844, 50089724, 50117141, + 50144093, 50170580, 50196602, 50222156, 50247242, 50271859, 50296006, + 50319683, 50342887, 50365619, 50387878, 50409662, 50430970, 50451803, + 50472158, 50492034, 50511432, 50530350, 50548787, 50566742, 50584215, + 50601204, 50617709, 50633729, 50649262, 50664309, 50678867, 50692937, + 50706517, 50719607, 50732206, 50744313, 50755926, 50767046, 50777671, + 50787801, 50797435, 50806571, 50815210, 50823350, 50830990, 50838130, + 50844769, 50850906, 50856540, 50861671, 50866297, 50870419, 50874034, + 50877143, 50879745, 50881838, 50883423, 50884498, 50885062, 50885116, + 50884657, 50883686, 50882201, 50880203, 50877689, 50874660, 50871115, + 50867053, 50862473, 50857375, 50851758, 50845621, 50838963, 50831785, + 50824084, 50815861, 50807115, 50797845, 50788051, 50777731, 50766886, + 50755514, 50743615, 50731188, 50718233, 50704749, 50690735, 50676191, + 50661116, 50645510, 50629372, 50612700, 50595496, 50577758, 50559485, + 50540677, 50521333, 50501454, 50481037, 50460083, 50438591, 50416561, + 50393992, 50370883, 50347234, 50323044, 50298313, 50273041, 50247226, + 50220868, 50193968, 50166523, 50138534, 50110001, 50080922, 50051297, + 50021126, 49990409, 49959144, 49927332, 49894971, 49862062, 49828604, + 49794597, 49760039, 49724931, 49689273, 49653063, 49616301, 49578988, + 49541122, 49502703, 49463731, 49424205, 49384126, 49343491, 49302302, + 49260558, 49218258, 49175402, 49131990, 49088021, 49043496, 48998413, + 48952772, 48906573, 48859816, 48812500, 48764625, 48716191, 48667198, + 48617644, 48567530, 48516856, 48465621, 48413825, 48361467, 48308548, + 48255067, 48201024, 48146419, 48091251, 48035520, 47979226, 47922369, + 47864948, 47806963, 47748414, 47689301, 47629624, 47569382, 47508575, + 47447204, 47385267, 47322765, 47259697, 47196064, 47131864, 47067099, + 47001768, 46935870, 46869406, 46802376, 46734778, 46666614, 46597884, + 46528586, 46458721, 46388288, 46317289, 46245722, 46173588, 46100886, + 46027616, 45953779, 45879374, 45804402, 45728861, 45652753, 45576077, + 45498833, 45421021, 45342641, 45263693, 45184177, 45104093, 45023442, + 44942222, 44860434, 44778079, 44695155, 44611664, 44527605, 44442979, + 44357784, 44272022, 44185693, 44098796, 44011332, 43923300, 43834701, + 43745535, 43655802, 43565502, 43474636, 43383202, 43291203, 43198636, + 43105504, 43011805, 42917541, 42822710, 42727314, 42631353, 42534826, + 42437734, 42340077, 42241855, 42143069, 42043719, 41943804, 41843326, + 41742283, 41640678, 41538509, 41435777, 41332483, 41228626, 41124206, + 41019225, 40913682, 40807578, 40700913, 40593687, 40485900, 40377554, + 40268647, 40159181, 40049155, 39938571, 39827428, 39715727, 39603468, + 39490651, 39377277, 39263347, 39148860, 39033817, 38918218, 38802064, + 38685355, 38568091, 38450274, 38331903, 38212978, 38093501, 37973472, + 37852890, 37731757, 37610073, 37487839, 37365054, 37241720, 37117837, + 36993405, 36868425, 36742897, 36616822, 36490200, 36363033, 36235319, + 36107061, 35978258, 35848911, 35719021, 35588588, 35457612, 35326095, + 35194037, 35061438, 34928299, 34794620, 34660403, 34525647, 34390354, + 34254524, 34118158, 33981256, 33843819, 33705847, 33567342, 33428303, + 33288732, 33148630, 33007996, 32866832, 32725138, 32582915, 32440163, + 32296884, 32153079, 32008746, 31863889, 31718507, 31572601, 31426171, + 31279219, 31131746, 30983751, 30835236, 30686202, 30536649, 30386579, + 30235991, 30084887, 29933268, 29781134, 29628487, 29475326, 29321654, + 29167470, 29012776, 28857572, 28701859, 28545639, 28388912, 28231679, + 28073940, 27915698, 27756952, 27597703, 27437953, 27277702, 27116952, + 26955703, 26793956, 26631712, 26468973, 26305738, 26142009, 25977788, + 25813074, 25647869, 25482174, 25315990, 25149319, 24982160, 24814514, + 24646384, 24477770, 24308673, 24139094, 23969035, 23798495, 23627477, + 23455981, 23284008, 23111560, 22938638, 22765242, 22591374, 22417034, + 22242225, 22066947, 21891201, 21714989, 21538310, 21361168, 21183562, + 21005495, 20826966, 20647978, 20468531, 20288627, 20108266, 19927451, + 19746182, 19564460, 19382287, 19199664, 19016592, 18833072, 18649105, + 18464694, 18279839, 18094540, 17908801, 17722621, 17536003, 17348947, + 17161454, 16973527, 16785165, 16596372, 16407147, 16217493, 16027410, + 15836900, 15645964, 15454604, 15262821, 15070616, 14877990, 14684946, + 14491484, 14297606, 14103313, 13908606, 13713488, 13517958, 13322020, + 13125674, 12928921, 12731764, 12534202, 12336239, 12137875, 11939112, + 11739952, 11540395, 11340443, 11140098, 10939361, 10738234, 10536718, + 10334815, 10132526, 9929852, 9726796, 9523359, 9319542, 9115346, + 8910774, 8705827, 8500507, 8294814, 8088752, 7882320, 7675521, 7468356, + 7260828, 7052937, 6844685, 6636074, 6427105, 6217780, 6008101, 5798069, + 5587686, 5376954, 5165874, 4954447, 4742676, 4530563, 4318108, 4105313, + 3892181, 3678713, 3464911, 3250775, 3036309, 2821514, 2606391, 2390942, + 2175169, 1959073, 1742658, 1525923, 1308871, 1091504, 873823, 655830, + 437528, 218917, 0, -219222, -438746, -658572, -878698, -1099120, + -1319839, -1540851, -1762155, -1983749, -2205631, -2427800, -2650254, + -2872990, -3096007, -3319303, -3542877, -3766725, -3990847, -4215240, + -4439903, -4664834, -4890030, -5115490, -5341212, -5567194, -5793434, + -6019931, -6246681, -6473684, -6700937, -6928439, -7156187, -7384179, + -7612414, -7840889, -8069603, -8298553, -8527738, -8757156, -8986804, + -9216680, -9446783, -9677111, -9907661, -10138432, -10369421, + -10600626, -10832046, -11063678, -11295521, -11527572, -11759828, + -11992289, -12224952, -12457815, -12690876, -12924133, -13157583, + -13391225, -13625056, -13859075, -14093279, -14327667, -14562235, + -14796983, -15031907, -15267006, -15502277, -15737719, -15973330, + -16209106, -16445046, -16681148, -16917410, -17153829, -17390404, + -17627132, -17864010, -18101038, -18338212, -18575530, -18812991, + -19050592, -19288330, -19526204, -19764211, -20002350, -20240617, + -20479011, -20717530, -20956171, -21194931, -21433810, -21672804, + -21911911, -22151129, -22390455, -22629889, -22869426, -23109065, + -23348804, -23588640, -23828571, -24068595, -24308710, -24548912, + -24789200, -25029572, -25270025, -25510557, -25751166, -25991849, + -26232604, -26473428, -26714320, -26955277, -27196296, -27437375, + -27678513, -27919706, -28160952, -28402249, -28643594, -28884986, + -29126421, -29367898, -29609413, -29850966, -30092552, -30334170, + -30575818, -30817493, -31059192, -31300913, -31542655, -31784414, + -32026187, -32267974, -32509770, -32751575, -32993384, -33235197, + -33477009, -33718820, -33960627, -34202426, -34444217, -34685995, + -34927760, -35169507, -35411236, -35652943, -35894625, -36136282, + -36377909, -36619505, -36861067, -37102592, -37344079, -37585524, + -37826925, -38068280, -38309586, -38550841, -38792042, -39033186, + -39274272, -39515296, -39756256, -39997150, -40237975, -40478728, + -40719408, -40960011, -41200535, -41440978, -41681336, -41921608, + -42161791, -42401882, -42641878, -42881778, -43121579, -43361278, + -43600873, -43840360, -44079738, -44319004, -44558155, -44797189, + -45036104, -45274895, -45513563, -45752102, -45990512, -46228789, + -46466930, -46704934, -46942798, -47180519, -47418094, -47655521, + -47892797, -48129920, -48366888, -48603696, -48840344, -49076828, + -49313146, -49549294, -49785272, -50021075, -50256702, -50492149, + -50727414, -50962495, -51197389, -51432093, -51666605, -51900921, + -52135040, -52368959, -52602675, -52836186, -53069488, -53302580, + -53535458, -53768121, -54000564, -54232787, -54464786, -54696558, + -54928101, -55159412, -55390489, -55621329, -55851929, -56082287, + -56312400, -56542265, -56771880, -57001242, -57230349, -57459197, + -57687785, -57916109, -58144166, -58371956, -58599473, -58826717, + -59053684, -59280371, -59506777, -59732897, -59958731, -60184274, + -60409525, -60634480, -60859138, -61083494, -61307548, -61531295, + -61754734, -61977862, -62200676, -62423173, -62645351, -62867207, + -63088738, -63309942, -63530817, -63751359, -63971565, -64191434, + -64410962, -64630147, -64848986, -65067477, -65285616, -65503402, + -65720831, -65937901, -66154610, -66370953, -66586930, -66802537, + -67017771, -67232630, -67447112, -67661213, -67874931, -68088263, + -68301207, -68513759, -68725918, -68937681, -69149045, -69360007, + -69570564, -69780715, -69990456, -70199784, -70408698, -70617194, + -70825270, -71032923, -71240150, -71446949, -71653318, -71859252, + -72064751, -72269811, -72474430, -72678604, -72882332, -73085610, + -73288436, -73490808, -73692723, -73894177, -74095169, -74295696, + -74495755, -74695344, -74894459, -75093099, -75291261, -75488941, + -75686138, -75882849, -76079071, -76274802, -76470039, -76664779, + -76859019, -77052758, -77245992, -77438719, -77630937, -77822642, + -78013832, -78204505, -78394657, -78584287, -78773391, -78961968, + -79150014, -79337527, -79524504, -79710943, -79896841, -80082195, + -80267004, -80451264, -80634973, -80818128, -81000726, -81182766, + -81364244, -81545158, -81725506, -81905284, -82084491, -82263124, + -82441179, -82618655, -82795550, -82971860, -83147582, -83322716, + -83497257, -83671203, -83844553, -84017302, -84189450, -84360992, + -84531928, -84702253, -84871967, -85041065, -85209546, -85377408, + -85544647, -85711261, -85877247, -86042604, -86207329, -86371419, + -86534872, -86697684, -86859855, -87021381, -87182259, -87342488, + -87502065, -87660987, -87819252, -87976858, -88133801, -88290081, + -88445693, -88600636, -88754907, -88908505, -89061425, -89213667, + -89365227, -89516103, -89666293, -89815794, -89964604, -90112720, + -90260141, -90406863, -90552885, -90698203, -90842816, -90986721, + -91129916, -91272399, -91414166, -91555216, -91695546, -91835154, + -91974038, -92112195, -92249623, -92386320, -92522282, -92657509, + -92791997, -92925745, -93058749, -93191008, -93322519, -93453280, + -93583289, -93712544, -93841041, -93968780, -94095757, -94221970, + -94347417, -94472096, -94596004, -94719140, -94841501, -94963084, + -95083888, -95203910, -95323148, -95441600, -95559263, -95676136, + -95792216, -95907501, -96021989, -96135677, -96248563, -96360646, + -96471923, -96582391, -96692049, -96800895, -96908925, -97016139, + -97122534, -97228108, -97332859, -97436784, -97539882, -97642150, + -97743586, -97844188, -97943954, -98042883, -98140971, -98238217, + -98334618, -98430173, -98524880, -98618736, -98711739, -98803888, + -98895180, -98985613, -99075186, -99163896, -99251741, -99338719, + -99424828, -99510066, -99594432, -99677922, -99760536, -99842271, + -99923126, -100003097, -100082184, -100160384, -100237696, -100314117, + -100389645, -100464279, -100538017, -100610856, -100682796, -100753833, + -100823966, -100893194, -100961514, -101028924, -101095423, -101161008, + -101225679, -101289432, -101352266, -101414180, -101475171, -101535238, + -101594379, -101652591, -101709874, -101766226, -101821644, -101876127, + -101929673, -101982280, -102033947, -102084672, -102134453, -102183288, + -102231176, -102278115, -102324103, -102369138, -102413220, -102456345, + -102498513, -102539721, -102579969, -102619254, -102657575, -102694930, + -102731317, -102766736, -102801183, -102834658, -102867159, -102898685, + -102929233, -102958803, -102987392, -103014999, -103041623, -103067261, + -103091913, -103115577, -103138252, -103159935, -103180625, -103200322, + -103219022, -103236725, -103253430, -103269135, -103283838, -103297538, + -103310233, -103321922, -103332604, -103342278, -103350941, -103358592, + -103365230, -103370854, -103375462, -103379053, -103381625, -103383178, + -103383709, -103383217, -103381702, -103379161, -103375594, -103370999, + -103365375, -103358720, -103351034, -103342314, -103332561, -103321771, + -103309945, -103297081, -103283178, -103268234, -103252249, -103235220, + -103217148, -103198030, -103177866, -103156655, -103134394, -103111084, + -103086723, -103061309, -103034842, -103007321, -102978745, -102949111, + -102918420, -102886671, -102853861, -102819991, -102785059, -102749064, + -102712004, -102673880, -102634690, -102594433, -102553108, -102510713, + -102467249, -102422714, -102377107, -102330428, -102282674, -102233846, + -102183942, -102132962, -102080904, -102027769, -101973554, -101918259, + -101861883, -101804425, -101745885, -101686261, -101625553, -101563761, + -101500882, -101436917, -101371864, -101305724, -101238494, -101170175, + -101100765, -101030264, -100958672, -100885986, -100812208, -100737336, + -100661369, -100584306, -100506148, -100426893, -100346541, -100265091, + -100182543, -100098895, -100014148, -99928301, -99841352, -99753303, + -99664151, -99573897, -99482539, -99390079, -99296514, -99201844, + -99106069, -99009189, -98911203, -98812110, -98711910, -98610603, + -98508188, -98404664, -98300032, -98194291, -98087441, -97979480, + -97870410, -97760228, -97648936, -97536533, -97423018, -97308391, + -97192651, -97075800, -96957835, -96838758, -96718567, -96597262, + -96474844, -96351312, -96226665, -96100904, -95974028, -95846038, + -95716932, -95586711, -95455375, -95322924, -95189356, -95054673, + -94918874, -94781960, -94643929, -94504782, -94364518, -94223139, + -94080643, -93937031, -93792303, -93646458, -93499497, -93351420, + -93202226, -93051916, -92900490, -92747947, -92594289, -92439514, + -92283624, -92126618, -91968496, -91809258, -91648905, -91487436, + -91324853, -91161154, -90996341, -90830413, -90663370, -90495214, + -90325943, -90155559, -89984061, -89811450, -89637726, -89462889, + -89286940, -89109879, -88931706, -88752422, -88572026, -88390520, + -88207904, -88024177, -87839341, -87653396, -87466341, -87278179, + -87088908, -86898530, -86707045, -86514454, -86320756, -86125952, + -85930044, -85733031, -85534914, -85335693, -85135369, -84933943, + -84731415, -84527786, -84323056, -84117226, -83910296, -83702268, + -83493141, -83282917, -83071597, -82859180, -82645667, -82431060, + -82215358, -81998564, -81780676, -81561697, -81341627, -81120466, + -80898216, -80674877, -80450450, -80224936, -79998335, -79770649, + -79541879, -79312025, -79081088, -78849069, -78615969, -78381788, + -78146529, -77910191, -77672776, -77434285, -77194718, -76954077, + -76712362, -76469575, -76225716, -75980787, -75734789, -75487723, + -75239589, -74990390, -74740125, -74488796, -74236405, -73982952, + -73728439, -73472866, -73216235, -72958546, -72699802, -72440004, + -72179152, -71917248, -71654292, -71390288, -71125234, -70859134, + -70591987, -70323796, -70054562, -69784286, -69512969, -69240613, + -68967219, -68692788, -68417323, -68140823, -67863291, -67584728, + -67305136, -67024515, -66742868, -66460196, -66176500, -65891781, + -65606042, -65319284, -65031508, -64742716, -64452910, -64162090, + -63870259, -63577418, -63283569, -62988714, -62692853, -62395989, + -62098123, -61799256, -61499392, -61198531, -60896674, -60593825, + -60289984, -59985152, -59679333, -59372527, -59064737, -58755964, + -58446210, -58135476, -57823765, -57511078, -57197418, -56882786, + -56567183, -56250612, -55933075, -55614574, -55295110, -54974686, + -54653302, -54330962, -54007668, -53683420, -53358222, -53032075, + -52704981, -52376942, -52047961, -51718039, -51387178, -51055380, + -50722648, -50388984, -50054389, -49718866, -49382417, -49045043, + -48706748, -48367534, -48027402, -47686354, -47344393, -47001522, + -46657742, -46313055, -45967464, -45620971, -45273579, -44925288, + -44576103, -44226025, -43875057, -43523200, -43170457, -42816831, + -42462324, -42106938, -41750675, -41393538, -41035530, -40676653, + -40316909, -39956300, -39594830, -39232500, -38869313, -38505272, + -38140379, -37774637, -37408047, -37040613, -36672338, -36303223, + -35933271, -35562485, -35190868, -34818422, -34445149, -34071053, + -33696135, -33320400, -32943848, -32566483, -32188308, -31809326, + -31429538, -31048948, -30667558, -30285372, -29902391, -29518619, + -29134059, -28748713, -28362584, -27975675, -27587988, -27199527, + -26810294, -26420293, -26029525, -25637995, -25245704, -24852656, + -24458854, -24064300, -23668998, -23272950, -22876159, -22478629, + -22080362, -21681361, -21281630, -20881171, -20479987, -20078081, + -19675457, -19272118, -18868066, -18463304, -18057836, -17651665, + -17244793, -16837225, -16428962, -16020009, -15610369, -15200043, + -14789037, -14377352, -13964992, -13551961, -13138261, -12723896, + -12308869, -11893183, -11476842, -11059848, -10642205, -10223916, + -9804985, -9385415, -8965209, -8544371, -8122903, -7700810, -7278094, + -6854759, -6430809, -6006246, -5581074, -5155297, -4728918, -4301940, + -3874367, -3446202, -3017449, -2588111, -2158192, -1727695, -1296624, + -864982, -432773, 0, 433333, 867223, 1301666, 1736658, 2172197, + 2608278, 3044897, 3482052, 3919738, 4357952, 4796690, 5235949, 5675725, + 6116014, 6556813, 6998117, 7439924, 7882229, 8325029, 8768320, 9212098, + 9656360, 10101101, 10546319, 10992008, 11438166, 11884789, 12331873, + 12779414, 13227408, 13675851, 14124740, 14574070, 15023839, 15474041, + 15924674, 16375732, 16827213, 17279113, 17731426, 18184151, 18637282, + 19090816, 19544748, 19999075, 20453793, 20908898, 21364386, 21820253, + 22276494, 22733107, 23190086, 23647428, 24105128, 24563184, 25021590, + 25480343, 25939438, 26398872, 26858640, 27318738, 27779162, 28239909, + 28700973, 29162352, 29624039, 30086033, 30548327, 31010919, 31473804, + 31936978, 32400437, 32864175, 33328190, 33792478, 34257033, 34721851, + 35186929, 35652262, 36117846, 36583677, 37049749, 37516060, 37982605, + 38449379, 38916379, 39383599, 39851036, 40318685, 40786542, 41254603, + 41722862, 42191317, 42659963, 43128794, 43597807, 44066998, 44536362, + 45005894, 45475591, 45945448, 46415460, 46885623, 47355932, 47826384, + 48296973, 48767696, 49238547, 49709523, 50180619, 50651830, 51123152, + 51594580, 52066110, 52537738, 53009458, 53481267, 53953160, 54425132, + 54897178, 55369295, 55841478, 56313722, 56786022, 57258375, 57730775, + 58203217, 58675698, 59148213, 59620757, 60093325, 60565913, 61038516, + 61511130, 61983750, 62456371, 62928989, 63401599, 63874196, 64346776, + 64819334, 65291866, 65764366, 66236830, 66709254, 67181632, 67653961, + 68126234, 68598449, 69070599, 69542680, 70014688, 70486617, 70958463, + 71430222, 71901887, 72373456, 72844923, 73316282, 73787531, 74258662, + 74729673, 75200558, 75671312, 76141931, 76612410, 77082743, 77552927, + 78022956, 78492825, 78962530, 79432066, 79901428, 80370612, 80839611, + 81308423, 81777041, 82245461, 82713678, 83181687, 83649483, 84117062, + 84584419, 85051548, 85518445, 85985105, 86451523, 86917694, 87383613, + 87849276, 88314678, 88779813, 89244677, 89709264, 90173571, 90637591, + 91101321, 91564754, 92027887, 92490714, 92953230, 93415431, 93877312, + 94338866, 94800091, 95260980, 95721529, 96181732, 96641586, 97101084, + 97560222, 98018995, 98477398, 98935426, 99393074, 99850336, 100307209, + 100763687, 101219766, 101675439, 102130702, 102585551, 103039979, + 103493983, 103947557, 104400696, 104853395, 105305650, 105757454, + 106208804, 106659694, 107110119, 107560074, 108009554, 108458555, + 108907070, 109355096, 109802626, 110249657, 110696183, 111142198, + 111587699, 112032679, 112477135, 112921060, 113364450, 113807300, + 114249605, 114691360, 115132559, 115573198, 116013272, 116452775, + 116891703, 117330051, 117767813, 118204984, 118641560, 119077535, + 119512905, 119947664, 120381807, 120815330, 121248226, 121680492, + 122112122, 122543111, 122973454, 123403146, 123832183, 124260557, + 124688266, 125115304, 125541665, 125967345, 126392339, 126816642, + 127240248, 127663152, 128085351, 128506837, 128927607, 129347656, + 129766978, 130185568, 130603422, 131020534, 131436899, 131852512, + 132267369, 132681463, 133094791, 133507347, 133919126, 134330123, + 134740333, 135149751, 135558372, 135966191, 136373202, 136779402, + 137184785, 137589345, 137993078, 138395980, 138798044, 139199265, + 139599640, 139999162, 140397828, 140795631, 141192567, 141588630, + 141983817, 142378121, 142771538, 143164064, 143555691, 143946417, + 144336236, 144725143, 145113132, 145500200, 145886341, 146271550, + 146655821, 147039151, 147421535, 147802966, 148183440, 148562953, + 148941500, 149319074, 149695673, 150071290, 150445920, 150819559, + 151192202, 151563844, 151934479, 152304104, 152672713, 153040300, + 153406863, 153772394, 154136890, 154500346, 154862756, 155224116, + 155584421, 155943667, 156301847, 156658958, 157014994, 157369950, + 157723823, 158076606, 158428295, 158778886, 159128373, 159476751, + 159824016, 160170163, 160515187, 160859083, 161201847, 161543473, + 161883957, 162223294, 162561479, 162898508, 163234375, 163569077, + 163902607, 164234962, 164566136, 164896125, 165224925, 165552529, + 165878934, 166204135, 166528128, 166850906, 167172467, 167492804, + 167811914, 168129791, 168446432, 168761830, 169075982, 169388883, + 169700528, 170010913, 170320033, 170627882, 170934458, 171239755, + 171543767, 171846492, 172147924, 172448058, 172746890, 173044416, + 173340630, 173635528, 173929106, 174221359, 174512282, 174801872, + 175090122, 175377030, 175662589, 175946797, 176229648, 176511137, + 176791261, 177070014, 177347393, 177623392, 177898008, 178171236, + 178443070, 178713508, 178982545, 179250175, 179516395, 179781200, + 180044586, 180306549, 180567083, 180826185, 181083851, 181340075, + 181594854, 181848183, 182100057, 182350473, 182599427, 182846913, + 183092928, 183337467, 183580526, 183822101, 184062187, 184300780, + 184537876, 184773471, 185007560, 185240140, 185471205, 185700752, + 185928777, 186155275, 186380242, 186603674, 186825567, 187045916, + 187264719, 187481969, 187697664, 187911799, 188124371, 188335374, + 188544805, 188752660, 188958934, 189163625, 189366727, 189568236, + 189768149, 189966462, 190163171, 190358271, 190551758, 190743629, + 190933880, 191122507, 191309505, 191494871, 191678602, 191860692, + 192041138, 192219937, 192397084, 192572575, 192746407, 192918576, + 193089078, 193257909, 193425065, 193590543, 193754338, 193916448, + 194076868, 194235594, 194392623, 194547951, 194701574, 194853489, + 195003692, 195152179, 195298946, 195443991, 195587308, 195728895, + 195868748, 196006864, 196143238, 196277867, 196410748, 196541877, + 196671250, 196798864, 196924716, 197048802, 197171118, 197291661, + 197410427, 197527413, 197642616, 197756032, 197867657, 197977489, + 198085524, 198191758, 198296188, 198398811, 198499623, 198598621, + 198695802, 198791163, 198884699, 198976408, 199066287, 199154333, + 199240541, 199324909, 199407434, 199488112, 199566940, 199643916, + 199719035, 199792295, 199863693, 199933225, 200000889, 200066681, + 200130598, 200192637, 200252796, 200311071, 200367458, 200421956, + 200474561, 200525270, 200574080, 200620988, 200665991, 200709087, + 200750272, 200789544, 200826899, 200862335, 200895849, 200927438, + 200957100, 200984831, 201010629, 201034490, 201056413, 201076394, + 201094431, 201110521, 201124661, 201136849, 201147082, 201155357, + 201161671, 201166023, 201168409, 201168827, 201167274, 201163748, + 201158246, 201150766, 201141305, 201129860, 201116430, 201101011, + 201083601, 201064198, 201042800, 201019404, 200994007, 200966607, + 200937202, 200905790, 200872368, 200836934, 200799485, 200760020, + 200718535, 200675030, 200629501, 200581947, 200532365, 200480753, + 200427108, 200371430, 200313715, 200253961, 200192167, 200128331, + 200062449, 199994521, 199924544, 199852516, 199778436, 199702301, + 199624109, 199543858, 199461547, 199377173, 199290735, 199202231, + 199111658, 199019016, 198924302, 198827514, 198728651, 198627711, + 198524692, 198419593, 198312411, 198203145, 198091794, 197978355, + 197862827, 197745209, 197625498, 197503694, 197379794, 197253798, + 197125703, 196995507, 196863211, 196728811, 196592308, 196453698, + 196312981, 196170155, 196025219, 195878172, 195729012, 195577737, + 195424347, 195268841, 195111216, 194951472, 194789608, 194625621, + 194459512, 194291278, 194120919, 193948434, 193773821, 193597079, + 193418207, 193237205, 193054070, 192868803, 192681401, 192491864, + 192300191, 192106382, 191910434, 191712347, 191512121, 191309754, + 191105245, 190898594, 190689800, 190478862, 190265779, 190050551, + 189833176, 189613654, 189391984, 189168166, 188942199, 188714081, + 188483814, 188251395, 188016825, 187780102, 187541227, 187300198, + 187057016, 186811679, 186564187, 186314540, 186062737, 185808779, + 185552663, 185294391, 185033961, 184771374, 184506629, 184239725, + 183970664, 183699443, 183426063, 183150524, 182872826, 182592967, + 182310950, 182026772, 181740434, 181451936, 181161278, 180868459, + 180573480, 180276341, 179977042, 179675582, 179371962, 179066182, + 178758241, 178448141, 178135880, 177821460, 177504881, 177186142, + 176865243, 176542186, 176216970, 175889596, 175560063, 175228373, + 174894525, 174558520, 174220358, 173880040, 173537566, 173192936, + 172846152, 172497212, 172146119, 171792872, 171437471, 171079919, + 170720214, 170358358, 169994352, 169628195, 169259889, 168889435, + 168516832, 168142082, 167765186, 167386144, 167004956, 166621625, + 166236151, 165848534, 165458776, 165066876, 164672838, 164276660, + 163878345, 163477892, 163075304, 162670581, 162263724, 161854735, + 161443614, 161030363, 160614982, 160197473, 159777837, 159356075, + 158932188, 158506178, 158078046, 157647793, 157215421, 156780930, + 156344323, 155905600, 155464763, 155021814, 154576753, 154129582, + 153680303, 153228918, 152775427, 152319832, 151862135, 151402338, + 150940441, 150476448, 150010358, 149542175, 149071899, 148599533, + 148125078, 147648535, 147169908, 146689197, 146206404, 145721531, + 145234581, 144745554, 144254454, 143761281, 143266037, 142768726, + 142269348, 141767906, 141264402, 140758837, 140251215, 139741537, + 139229805, 138716021, 138200188, 137682307, 137162382, 136640413, + 136116404, 135590357, 135062274, 134532157, 134000009, 133465833, + 132929629, 132391402, 131851153, 131308885, 130764600, 130218301, + 129669990, 129119671, 128567345, 128013014, 127456683, 126898353, + 126338027, 125775708, 125211398, 124645100, 124076817, 123506552, + 122934307, 122360086, 121783890, 121205724, 120625589, 120043489, + 119459427, 118873406, 118285428, 117695497, 117103615, 116509786, + 115914013, 115316298, 114716645, 114115058, 113511539, 112906090, + 112298717, 111689421, 111078206, 110465076, 109850033, 109233081, + 108614223, 107993462, 107370803, 106746248, 106119800, 105491463, + 104861241, 104229138, 103595155, 102959298, 102321569, 101681973, + 101040512, 100397191, 99752013, 99104981, 98456100, 97805373, 97152804, + 96498396, 95842153, 95184080, 94524179, 93862456, 93198912, 92533554, + 91866383, 91197405, 90526623, 89854041, 89179663, 88503494, 87825537, + 87145795, 86464275, 85780978, 85095911, 84409075, 83720477, 83030120, + 82338007, 81644145, 80948536, 80251184, 79552096, 78851273, 78148722, + 77444445, 76738449, 76030736, 75321312, 74610181, 73897346, 73182814, + 72466588, 71748673, 71029074, 70307794, 69584839, 68860213, 68133921, + 67405967, 66676357, 65945094, 65212184, 64477631, 63741440, 63003617, + 62264164, 61523089, 60780395, 60036086, 59290169, 58542648, 57793528, + 57042814, 56290511, 55536624, 54781158, 54024117, 53265508, 52505334, + 51743602, 50980317, 50215482, 49449105, 48681189, 47911740, 47140764, + 46368265, 45594249, 44818721, 44041686, 43263150, 42483118, 41701596, + 40918588, 40134101, 39348140, 38560710, 37771816, 36981465, 36189661, + 35396411, 34601719, 33805592, 33008035, 32209053, 31408653, 30606839, + 29803618, 28998996, 28192978, 27385569, 26576776, 25766604, 24955060, + 24142148, 23327876, 22512248, 21695271, 20876950, 20057292, 19236302, + 18413986, 17590351, 16765402, 15939146, 15111588, 14282735, 13452592, + 12621166, 11788463, 10954488, 10119249, 9282752, 8445002, 7606006, + 6765770, 5924300, 5081603, 4237684, 3392552, 2546210, 1698667, 849928, + 0, -851111, -1703398, -2556855, -3411476, -4267254, -5124182, -5982254, + -6841463, -7701803, -8563267, -9425848, -10289541, -11154337, + -12020232, -12887217, -13755286, -14624432, -15494649, -16365930, + -17238268, -18111657, -18986089, -19861557, -20738055, -21615576, + -22494114, -23373660, -24254208, -25135751, -26018283, -26901796, + -27786283, -28671737, -29558151, -30445519, -31333832, -32223084, + -33113268, -34004377, -34896403, -35789340, -36683179, -37577914, + -38473539, -39370044, -40267424, -41165670, -42064777, -42964735, + -43865538, -44767179, -45669651, -46572945, -47477054, -48381972, + -49287690, -50194201, -51101498, -52009574, -52918420, -53828029, + -54738393, -55649506, -56561359, -57473945, -58387257, -59301286, + -60216025, -61131467, -62047603, -62964426, -63881929, -64800103, + -65718941, -66638435, -67558578, -68479361, -69400776, -70322817, + -71245475, -72168742, -73092610, -74017072, -74942119, -75867744, + -76793939, -77720695, -78648005, -79575861, -80504255, -81433179, + -82362624, -83292584, -84223048, -85154011, -86085463, -87017396, + -87949803, -88882675, -89816004, -90749782, -91684000, -92618651, + -93553726, -94489218, -95425117, -96361415, -97298105, -98235178, + -99172625, -100110439, -101048611, -101987132, -102925995, -103865191, + -104804712, -105744548, -106684693, -107625137, -108565871, -109506888, + -110448179, -111389736, -112331549, -113273611, -114215913, -115158447, + -116101203, -117044174, -117987350, -118930723, -119874285, -120818027, + -121761940, -122706015, -123650245, -124594619, -125539131, -126483770, + -127428528, -128373397, -129318368, -130263431, -131208579, -132153802, + -133099091, -134044439, -134989835, -135935272, -136880740, -137826230, + -138771734, -139717243, -140662748, -141608239, -142553709, -143499147, + -144444546, -145389896, -146335189, -147280414, -148225564, -149170629, + -150115601, -151060470, -152005227, -152949863, -153894370, -154838737, + -155782957, -156727019, -157670916, -158614637, -159558173, -160501517, + -161444657, -162387586, -163330294, -164272771, -165215010, -166156999, + -167098731, -168040197, -168981386, -169922289, -170862898, -171803203, + -172743195, -173682864, -174622202, -175561199, -176499845, -177438132, + -178376050, -179313590, -180250742, -181187497, -182123845, -183059778, + -183995286, -184930359, -185864989, -186799165, -187732879, -188666120, + -189598880, -190531149, -191462917, -192394176, -193324915, -194255125, + -195184797, -196113922, -197042488, -197970489, -198897912, -199824750, + -200750993, -201676630, -202601653, -203526052, -204449817, -205372939, + -206295409, -207217216, -208138351, -209058805, -209978567, -210897629, + -211815980, -212733611, -213650513, -214566675, -215482088, -216396743, + -217310630, -218223738, -219136059, -220047583, -220958299, -221868199, + -222777273, -223685510, -224592902, -225499438, -226405109, -227309904, + -228213815, -229116832, -230018944, -230920143, -231820417, -232719759, + -233618157, -234515601, -235412083, -236307593, -237202120, -238095654, + -238988187, -239879708, -240770207, -241659675, -242548102, -243435477, + -244321791, -245207035, -246091198, -246974271, -247856243, -248737106, + -249616848, -250495460, -251372933, -252249256, -253124420, -253998414, + -254871229, -255742855, -256613282, -257482501, -258350500, -259217271, + -260082803, -260947087, -261810112, -262671870, -263532349, -264391540, + -265249433, -266106018, -266961285, -267815225, -268667826, -269519081, + -270368977, -271217507, -272064659, -272910423, -273754791, -274597751, + -275439294, -276279410, -277118089, -277955321, -278791096, -279625404, + -280458235, -281289580, -282119428, -282947769, -283774594, -284599892, + -285423654, -286245869, -287066528, -287885620, -288703136, -289519066, + -290333400, -291146127, -291957238, -292766724, -293574573, -294380776, + -295185323, -295988204, -296789409, -297588928, -298386752, -299182870, + -299977272, -300769949, -301560889, -302350085, -303137524, -303923199, + -304707098, -305489211, -306269530, -307048043, -307824741, -308599613, + -309372651, -310143844, -310913182, -311680655, -312446253, -313209966, + -313971785, -314731699, -315489699, -316245774, -316999915, -317752112, + -318502355, -319250633, -319996938, -320741258, -321483585, -322223908, + -322962218, -323698504, -324432757, -325164967, -325895123, -326623217, + -327349238, -328073176, -328795021, -329514764, -330232395, -330947903, + -331661280, -332372514, -333081597, -333788518, -334493268, -335195837, + -335896215, -336594392, -337290358, -337984104, -338675620, -339364895, + -340051921, -340736687, -341419183, -342099400, -342777329, -343452958, + -344126280, -344797282, -345465957, -346132294, -346796284, -347457916, + -348117182, -348774071, -349428573, -350080679, -350730380, -351377665, + -352022525, -352664950, -353304930, -353942456, -354577519, -355210108, + -355840214, -356467827, -357092937, -357715536, -358335613, -358953158, + -359568163, -360180618, -360790512, -361397837, -362002582, -362604739, + -363204297, -363801248, -364395581, -364987287, -365576357, -366162781, + -366746550, -367327653, -367906083, -368481828, -369054880, -369625229, + -370192866, -370757781, -371319965, -371879408, -372436102, -372990036, + -373541201, -374089588, -374635188, -375177990, -375717987, -376255168, + -376789524, -377321045, -377849723, -378375549, -378898512, -379418604, + -379935815, -380450136, -380961558, -381470071, -381975667, -382478336, + -382978069, -383474856, -383968689, -384459559, -384947455, -385432370, + -385914294, -386393217, -386869131, -387342027, -387811895, -388278727, + -388742512, -389203244, -389660911, -390115506, -390567019, -391015441, + -391460763, -391902977, -392342073, -392778042, -393210876, -393640565, + -394067100, -394490474, -394910676, -395327698, -395741531, -396152166, + -396559594, -396963807, -397364796, -397762552, -398157066, -398548329, + -398936333, -399321069, -399702528, -400080701, -400455581, -400827157, + -401195422, -401560367, -401921983, -402280261, -402635194, -402986771, + -403334986, -403679829, -404021291, -404359365, -404694041, -405025311, + -405353167, -405677601, -405998603, -406316165, -406630279, -406940937, + -407248130, -407551850, -407852088, -408148836, -408442085, -408731829, + -409018057, -409300762, -409579936, -409855570, -410127656, -410396186, + -410661152, -410922546, -411180359, -411434583, -411685211, -411932233, + -412175643, -412415431, -412651590, -412884112, -413112989, -413338213, + -413559775, -413777669, -413991885, -414202417, -414409255, -414612393, + -414811822, -415007535, -415199523, -415387779, -415572295, -415753064, + -415930077, -416103326, -416272805, -416438506, -416600420, -416758540, + -416912858, -417063367, -417210059, -417352927, -417491963, -417627159, + -417758509, -417886003, -418009636, -418129399, -418245286, -418357287, + -418465397, -418569608, -418669913, -418766303, -418858772, -418947313, + -419031918, -419112580, -419189292, -419262046, -419330835, -419395653, + -419456491, -419513344, -419566203, -419615061, -419659912, -419700749, + -419737564, -419770351, -419799102, -419823811, -419844470, -419861073, + -419873612, -419882082, -419886474, -419886783, -419883001, -419875121, + -419863138, -419847044, -419826832, -419802495, -419774028, -419741423, + -419704674, -419663774, -419618716, -419569494, -419516102, -419458533, + -419396780, -419330837, -419260698, -419186356, -419107804, -419025037, + -418938048, -418846831, -418751379, -418651686, -418547746, -418439552, + -418327099, -418210380, -418089389, -417964121, -417834568, -417700724, + -417562585, -417420143, -417273392, -417122328, -416966943, -416807232, + -416643188, -416474807, -416302082, -416125007, -415943576, -415757784, + -415567625, -415373093, -415174183, -414970888, -414763204, -414551124, + -414334643, -414113755, -413888455, -413658738, -413424597, -413186027, + -412943023, -412695579, -412443691, -412187351, -411926557, -411661301, + -411391578, -411117384, -410838714, -410555561, -410267921, -409975788, + -409679158, -409378025, -409072384, -408762231, -408447559, -408128365, + -407804643, -407476389, -407143596, -406806261, -406464379, -406117944, + -405766953, -405411399, -405051279, -404686587, -404317320, -403943472, + -403565038, -403182015, -402794397, -402402180, -402005359, -401603930, + -401197889, -400787230, -400371950, -399952044, -399527508, -399098338, + -398664529, -398226076, -397782976, -397335225, -396882818, -396425751, + -395964020, -395497621, -395026549, -394550802, -394070374, -393585262, + -393095461, -392600969, -392101780, -391597892, -391089299, -390576000, + -390057988, -389535262, -389007817, -388475650, -387938756, -387397133, + -386850776, -386299683, -385743848, -385183270, -384617945, -384047868, + -383473037, -382893449, -382309099, -381719985, -381126103, -380527450, + -379924023, -379315818, -378702833, -378085064, -377462509, -376835163, + -376203024, -375566089, -374924355, -374277819, -373626479, -372970330, + -372309371, -371643598, -370973009, -370297600, -369617370, -368932315, + -368242433, -367547721, -366848177, -366143797, -365434580, -364720522, + -364001622, -363277877, -362549284, -361815841, -361077546, -360334396, + -359586389, -358833523, -358075795, -357313204, -356545746, -355773421, + -354996225, -354214158, -353427216, -352635397, -351838701, -351037124, + -350230665, -349419322, -348603093, -347781977, -346955971, -346125073, + -345289283, -344448598, -343603017, -342752538, -341897159, -341036879, + -340171697, -339301610, -338426618, -337546719, -336661911, -335772194, + -334877565, -333978025, -333073570, -332164201, -331249915, -330330712, + -329406591, -328477550, -327543589, -326604706, -325660900, -324712171, + -323758517, -322799938, -321836433, -320868001, -319894640, -318916351, + -317933133, -316944985, -315951905, -314953895, -313950952, -312943077, + -311930269, -310912527, -309889851, -308862241, -307829696, -306792215, + -305749799, -304702448, -303650160, -302592936, -301530775, -300463677, + -299391643, -298314672, -297232764, -296145919, -295054137, -293957418, + -292855762, -291749170, -290637641, -289521175, -288399774, -287273436, + -286142163, -285005955, -283864811, -282718733, -281567721, -280411776, + -279250897, -278085085, -276914342, -275738667, -274558061, -273372525, + -272182059, -270986665, -269786343, -268581093, -267370917, -266155816, + -264935790, -263710841, -262480969, -261246175, -260006461, -258761828, + -257512275, -256257806, -254998421, -253734121, -252464907, -251190781, + -249911745, -248627798, -247338944, -246045183, -244746516, -243442946, + -242134474, -240821100, -239502828, -238179659, -236851593, -235518634, + -234180783, -232838041, -231490410, -230137892, -228780490, -227418205, + -226051038, -224678993, -223302070, -221920273, -220533602, -219142061, + -217745652, -216344376, -214938236, -213527234, -212111372, -210690654, + -209265080, -207834654, -206399379, -204959256, -203514288, -202064477, + -200609827, -199150340, -197686018, -196216864, -194742882, -193264073, + -191780440, -190291987, -188798717, -187300631, -185797733, -184290027, + -182777515, -181260199, -179738085, -178211173, -176679468, -175142972, + -173601690, -172055624, -170504777, -168949153, -167388755, -165823587, + -164253652, -162678954, -161099495, -159515280, -157926313, -156332596, + -154734133, -153130929, -151522986, -149910309, -148292902, -146670768, + -145043910, -143412334, -141776043, -140135041, -138489331, -136838919, + -135183807, -133524001, -131859504, -130190320, -128516454, -126837910, + -125154692, -123466805, -121774253, -120077040, -118375170, -116668649, + -114957481, -113241670, -111521220, -109796137, -108066425, -106332089, + -104593133, -102849562, -101101382, -99348596, -97591209, -95829227, + -94062655, -92291497, -90515758, -88735444, -86950559, -85161109, + -83367098, -81568532, -79765416, -77957756, -76145556, -74328822, + -72507559, -70681773, -68851468, -67016651, -65177327, -63333502, + -61485180, -59632368, -57775071, -55913295, -54047045, -52176328, + -50301149, -48421513, -46537427, -44648897, -42755927, -40858526, + -38956697, -37050448, -35139784, -33224711, -31305236, -29381364, + -27453102, -25520456, -23583433, -21642037, -19696277, -17746158, + -15791686, -13832868, -11869711, -9902220, -7930403, -5954266, + -3973815, -1989057, 0, 1993351, 3990989, 5992908, 7999099, 10009557, + 12024275, 14043245, 16066462, 18093917, 20125604, 22161515, 24201645, + 26245985, 28294529, 30347269, 32404199, 34465310, 36530596, 38600050, + 40673664, 42751430, 44833342, 46919392, 49009572, 51103875, 53202294, + 55304821, 57411447, 59522167, 61636972, 63755854, 65878805, 68005819, + 70136886, 72272000, 74411152, 76554335, 78701540, 80852759, 83007986, + 85167211, 87330427, 89497625, 91668797, 93843936, 96023032, 98206079, + 100393067, 102583988, 104778834, 106977597, 109180268, 111386839, + 113597301, 115811647, 118029866, 120251952, 122477895, 124707686, + 126941318, 129178781, 131420066, 133665166, 135914071, 138166772, + 140423261, 142683529, 144947566, 147215364, 149486915, 151762208, + 154041235, 156323988, 158610456, 160900631, 163194503, 165492064, + 167793304, 170098214, 172406785, 174719008, 177034872, 179354369, + 181677490, 184004225, 186334564, 188668498, 191006017, 193347113, + 195691775, 198039994, 200391760, 202747064, 205105895, 207468245, + 209834102, 212203459, 214576304, 216952628, 219332421, 221715674, + 224102375, 226492516, 228886086, 231283075, 233683473, 236087271, + 238494457, 240905023, 243318957, 245736249, 248156890, 250580868, + 253008175, 255438798, 257872729, 260309957, 262750470, 265194260, + 267641315, 270091624, 272545178, 275001966, 277461978, 279925201, + 282391627, 284861244, 287334042, 289810010, 292289136, 294771412, + 297256824, 299745364, 302237020, 304731780, 307229635, 309730572, + 312234582, 314741654, 317251775, 319764936, 322281124, 324800329, + 327322541, 329847747, 332375936, 334907097, 337441220, 339978292, + 342518303, 345061240, 347607094, 350155852, 352707502, 355262035, + 357819437, 360379698, 362942806, 365508749, 368077516, 370649096, + 373223477, 375800646, 378380593, 380963306, 383548773, 386136982, + 388727921, 391321579, 393917945, 396517005, 399118748, 401723162, + 404330236, 406939958, 409552314, 412167294, 414784886, 417405076, + 420027854, 422653207, 425281123, 427911590, 430544596, 433180128, + 435818174, 438458723, 441101761, 443747277, 446395257, 449045691, + 451698565, 454353867, 457011584, 459671705, 462334217, 464999106, + 467666362, 470335970, 473007919, 475682196, 478358789, 481037684, + 483718870, 486402333, 489088061, 491776040, 494466260, 497158705, + 499853365, 502550225, 505249274, 507950497, 510653883, 513359419, + 516067091, 518776887, 521488793, 524202797, 526918886, 529637047, + 532357266, 535079530, 537803827, 540530143, 543258465, 545988781, + 548721076, 551455337, 554191552, 556929708, 559669790, 562411785, + 565155681, 567901464, 570649121, 573398637, 576150001, 578903198, + 581658215, 584415039, 587173656, 589934052, 592696215, 595460130, + 598225784, 600993163, 603762255, 606533045, 609305519, 612079664, + 614855467, 617632914, 620411990, 623192683, 625974978, 628758862, + 631544321, 634331341, 637119908, 639910009, 642701630, 645494757, + 648289375, 651085472, 653883033, 656682043, 659482491, 662284360, + 665087638, 667892309, 670698362, 673505780, 676314550, 679124659, + 681936091, 684748834, 687562872, 690378191, 693194778, 696012619, + 698831698, 701652002, 704473517, 707296228, 710120121, 712945183, + 715771397, 718598751, 721427230, 724256820, 727087505, 729919273, + 732752108, 735585996, 738420923, 741256874, 744093835, 746931791, + 749770728, 752610632, 755451487, 758293280, 761135996, 763979620, + 766824137, 769669534, 772515796, 775362907, 778210854, 781059622, + 783909195, 786759561, 789610703, 792462607, 795315258, 798168642, + 801022745, 803877550, 806733044, 809589212, 812446038, 815303509, + 818161610, 821020325, 823879639, 826739539, 829600009, 832461034, + 835322599, 838184690, 841047292, 843910389, 846773967, 849638011, + 852502506, 855367437, 858232788, 861098546, 863964696, 866831221, + 869698107, 872565339, 875432903, 878300782, 881168963, 884037429, + 886906166, 889775160, 892644394, 895513853, 898383523, 901253389, + 904123434, 906993645, 909864006, 912734502, 915605118, 918475838, + 921346648, 924217532, 927088475, 929959462, 932830478, 935701506, + 938572534, 941443544, 944314522, 947185452, 950056319, 952927109, + 955797805, 958668393, 961538857, 964409182, 967279352, 970149352, + 973019168, 975888783, 978758182, 981627351, 984496273, 987364933, + 990233316, 993101407, 995969190, 998836650, 1001703771, 1004570539, + 1007436937, 1010302950, 1013168564, 1016033762, 1018898529, 1021762849, + 1024626709, 1027490091, 1030352980, 1033215361, 1036077219, 1038938538, + 1041799303, 1044659498, 1047519108, 1050378117, 1053236511, 1056094272, + 1058951387, 1061807839, 1064663612, 1067518693, 1070373065, 1073226712, + 1076079619, 1078931771, 1081783151, 1084633746, 1087483539, 1090332514, + 1093180656, 1096027950, 1098874380, 1101719930, 1104564586, 1107408331, + 1110251150, 1113093028, 1115933949, 1118773897, 1121612857, 1124450814, + 1127287751, 1130123654, 1132958507, 1135792294, 1138625000, 1141456610, + 1144287107, 1147116476, 1149944702, 1152771769, 1155597662, 1158422365, + 1161245863, 1164068139, 1166889179, 1169708968, 1172527488, 1175344726, + 1178160665, 1180975290, 1183788586, 1186600536, 1189411126, 1192220340, + 1195028162, 1197834577, 1200639569, 1203443123, 1206245223, 1209045854, + 1211845000, 1214642646, 1217438776, 1220233375, 1223026428, 1225817918, + 1228607830, 1231396150, 1234182860, 1236967947, 1239751393, 1242533185, + 1245313306, 1248091742, 1250868475, 1253643492, 1256416776, 1259188313, + 1261958086, 1264726080, 1267492280, 1270256671, 1273019236, 1275779961, + 1278538831, 1281295828, 1284050940, 1286804149, 1289555440, 1292304799, + 1295052209, 1297797656, 1300541123, 1303282596, 1306022060, 1308759498, + 1311494895, 1314228237, 1316959508, 1319688692, 1322415774, 1325140739, + 1327863572, 1330584256, 1333302778, 1336019121, 1338733271, 1341445211, + 1344154928, 1346862404, 1349567627, 1352270579, 1354971246, 1357669612, + 1360365663, 1363059382, 1365750756, 1368439768, 1371126404, 1373810648, + 1376492485, 1379171901, 1381848879, 1384523404, 1387195462, 1389865038, + 1392532116, 1395196681, 1397858718, 1400518212, 1403175148, 1405829511, + 1408481285, 1411130456, 1413777009, 1416420929, 1419062200, 1421700808, + 1424336737, 1426969973, 1429600501, 1432228305, 1434853371, 1437475684, + 1440095228, 1442711990, 1445325953, 1447937104, 1450545427, 1453150907, + 1455753530, 1458353281, 1460950144, 1463544105, 1466135149, 1468723262, + 1471308429, 1473890634, 1476469863, 1479046101, 1481619334, 1484189547, + 1486756725, 1489320854, 1491881918, 1494439903, 1496994794, 1499546578, + 1502095238, 1504640761, 1507183132, 1509722336, 1512258360, 1514791187, + 1517320804, 1519847196, 1522370348, 1524890247, 1527406877, 1529920225, + 1532430275, 1534937014, 1537440426, 1539940498, 1542437215, 1544930562, + 1547420526, 1549907092, 1552390245, 1554869972, 1557346257, 1559819088, + 1562288449, 1564754326, 1567216705, 1569675572, 1572130912, 1574582712, + 1577030957, 1579475633, 1581916726, 1584354222, 1586788106, 1589218366, + 1591644985, 1594067952, 1596487251, 1598902868, 1601314790, 1603723003, + 1606127492, 1608528243, 1610925244, 1613318479, 1615707936, 1618093599, + 1620475456, 1622853492, 1625227694, 1627598048, 1629964539, 1632327156, + 1634685882, 1637040706, 1639391613, 1641738589, 1644081622, 1646420696, + 1648755800, 1651086918, 1653414038, 1655737146, 1658056228, 1660371271, + 1662682262, 1664989187, 1667292032, 1669590784, 1671885430, 1674175956, + 1676462350, 1678744597, 1681022684, 1683296598, 1685566326, 1687831854, + 1690093170, 1692350260, 1694603110, 1696851709, 1699096042, 1701336096, + 1703571858, 1705803316, 1708030456, 1710253265, 1712471731, 1714685839, + 1716895578, 1719100934, 1721301894, 1723498446, 1725690576, 1727878272, + 1730061521, 1732240310, 1734414627, 1736584458, 1738749790, 1740910612, + 1743066911, 1745218673, 1747365887, 1749508539, 1751646617, 1753780108, + 1755909000, 1758033281, 1760152938, 1762267958, 1764378329, 1766484039, + 1768585075, 1770681424, 1772773076, 1774860016, 1776942233, 1779019715, + 1781092450, 1783160425, 1785223627, 1787282046, 1789335668, 1791384482, + 1793428476, 1795467637, 1797501954, 1799531414, 1801556006, 1803575717, + 1805590536, 1807600451, 1809605450, 1811605521, 1813600652, 1815590832, + 1817576048, 1819556289, 1821531544, 1823501800, 1825467047, 1827427272, + 1829382463, 1831332610, 1833277700, 1835217723, 1837152667, 1839082519, + 1841007270, 1842926907, 1844841419, 1846750795, 1848655023, 1850554092, + 1852447992, 1854336710, 1856220236, 1858098558, 1859971665, 1861839546, + 1863702190, 1865559587, 1867411724, 1869258591, 1871100178, 1872936472, + 1874767464, 1876593142, 1878413495, 1880228513, 1882038186, 1883842501, + 1885641449, 1887435018, 1889223199, 1891005980, 1892783351, 1894555301, + 1896321820, 1898082898, 1899838523, 1901588686, 1903333375, 1905072582, + 1906806294, 1908534502, 1910257196, 1911974366, 1913686000, 1915392090, + 1917092624, 1918787593, 1920476987, 1922160795, 1923839008, 1925511615, + 1927178607, 1928839973, 1930495704, 1932145790, 1933790221, 1935428987, + 1937062078, 1938689486, 1940311199, 1941927208, 1943537504, 1945142077, + 1946740917, 1948334016, 1949921363, 1951502948, 1953078764, 1954648799, + 1956213045, 1957771492, 1959324131, 1960870953, 1962411949, 1963947109, + 1965476424, 1966999885, 1968517483, 1970029209, 1971535053, 1973035008, + 1974529063, 1976017210, 1977499440, 1978975744, 1980446113, 1981910538, + 1983369012, 1984821524, 1986268067, 1987708631, 1989143208, 1990571790, + 1991994367, 1993410932, 1994821475, 1996225989, 1997624465, 1999016895, + 2000403269, 2001783581, 2003157821, 2004525982, 2005888055, 2007244032, + 2008593904, 2009937665, 2011275306, 2012606818, 2013932194, 2015251425, + 2016564505, 2017871425, 2019172176, 2020466752, 2021755145, 2023037347, + 2024313349, 2025583145, 2026846727, 2028104088, 2029355219, 2030600113, + 2031838763, 2033071161, 2034297301, 2035517173, 2036730772, 2037938090, + 2039139119, 2040333853, 2041522284, 2042704405, 2043880210, 2045049690, + 2046212839, 2047369650, 2048520115, 2049664229, 2050801984, 2051933373, + 2053058390, 2054177028, 2055289279, 2056395138, 2057494597, 2058587651, + 2059674291, 2060754513, 2061828309, 2062895673, 2063956599, 2065011080, + 2066059109, 2067100681, 2068135789, 2069164427, 2070186589, 2071202268, + 2072211459, 2073214155, 2074210351, 2075200040, 2076183216, 2077159874, + 2078130008, 2079093611, 2080050678, 2081001203, 2081945181, 2082882605, + 2083813470, 2084737771, 2085655502, 2086566657, 2087471231, 2088369219, + 2089260614, 2090145412, 2091023607, 2091895195, 2092760169, 2093618524, + 2094470256, 2095315359, 2096153828, 2096985658, 2097810844, 2098629381, + 2099441264, 2100246488, 2101045049, 2101836941, 2102622160, 2103400701, + 2104172559, 2104937730, 2105696208, 2106447991, 2107193072, 2107931447, + 2108663112, 2109388063, 2110106295, 2110817803, 2111522584, 2112220634, + 2112911947, 2113596520, 2114274349, 2114945429, 2115609757, 2116267329, + 2116918140, 2117562186, 2118199465, 2118829971, 2119453701, 2120070652, + 2120680819, 2121284199, 2121880788, 2122470582, 2123053579, 2123629775, + 2124199165, 2124761747, 2125317517, 2125866472, 2126408608, 2126943923, + 2127472413, 2127994074, 2128508904, 2129016900, 2129518058, 2130012376, + 2130499850, 2130980477, 2131454255, 2131921181, 2132381251, 2132834464, + 2133280816, 2133720305, 2134152928, 2134578682, 2134997565, 2135409574, + 2135814707, 2136212961, 2136604334, 2136988824, 2137366428, 2137737144, + 2138100969, 2138457902, 2138807941, 2139151082, 2139487325, 2139816667, + 2140139106, 2140454640, 2140763267, 2141064986, 2141359794, 2141647690, + 2141928672, 2142202738, 2142469887, 2142730117, 2142983427, 2143229814, + 2143469278, 2143701817, 2143927429, 2144146114, 2144357869, 2144562694, + 2144760588, 2144951548, 2145135575, 2145312666, 2145482822, 2145646040, + 2145802320, 2145951661, 2146094061, 2146229521, 2146358039, 2146479615, + 2146594247, 2146701936, 2146802680, 2146896478, 2146983331, 2147063238, + 2147136198, 2147202210, 2147261275, 2147313392, 2147358561, 2147396781, + 2147428052, 2147452375, 2147469748, 2147480172, 2147483647, 2147480172, + 2147469748, 2147452375, 2147428052, 2147396781, 2147358561, 2147313392, + 2147261275, 2147202210, 2147136198, 2147063238, 2146983331, 2146896478, + 2146802680, 2146701936, 2146594247, 2146479615, 2146358039, 2146229521, + 2146094061, 2145951661, 2145802320, 2145646040, 2145482822, 2145312666, + 2145135575, 2144951548, 2144760588, 2144562694, 2144357869, 2144146114, + 2143927429, 2143701817, 2143469278, 2143229814, 2142983427, 2142730117, + 2142469887, 2142202738, 2141928672, 2141647690, 2141359794, 2141064986, + 2140763267, 2140454640, 2140139106, 2139816667, 2139487325, 2139151082, + 2138807941, 2138457902, 2138100969, 2137737144, 2137366428, 2136988824, + 2136604334, 2136212961, 2135814707, 2135409574, 2134997565, 2134578682, + 2134152928, 2133720305, 2133280816, 2132834464, 2132381251, 2131921181, + 2131454255, 2130980477, 2130499850, 2130012376, 2129518058, 2129016900, + 2128508904, 2127994074, 2127472413, 2126943923, 2126408608, 2125866472, + 2125317517, 2124761747, 2124199165, 2123629775, 2123053579, 2122470582, + 2121880788, 2121284199, 2120680819, 2120070652, 2119453701, 2118829971, + 2118199465, 2117562186, 2116918140, 2116267329, 2115609757, 2114945429, + 2114274349, 2113596520, 2112911947, 2112220634, 2111522584, 2110817803, + 2110106295, 2109388063, 2108663112, 2107931447, 2107193072, 2106447991, + 2105696208, 2104937730, 2104172559, 2103400701, 2102622160, 2101836941, + 2101045049, 2100246488, 2099441264, 2098629381, 2097810844, 2096985658, + 2096153828, 2095315359, 2094470256, 2093618524, 2092760169, 2091895195, + 2091023607, 2090145412, 2089260614, 2088369219, 2087471231, 2086566657, + 2085655502, 2084737771, 2083813470, 2082882605, 2081945181, 2081001203, + 2080050678, 2079093611, 2078130008, 2077159874, 2076183216, 2075200040, + 2074210351, 2073214155, 2072211459, 2071202268, 2070186589, 2069164427, + 2068135789, 2067100681, 2066059109, 2065011080, 2063956599, 2062895673, + 2061828309, 2060754513, 2059674291, 2058587651, 2057494597, 2056395138, + 2055289279, 2054177028, 2053058390, 2051933373, 2050801984, 2049664229, + 2048520115, 2047369650, 2046212839, 2045049690, 2043880210, 2042704405, + 2041522284, 2040333853, 2039139119, 2037938090, 2036730772, 2035517173, + 2034297301, 2033071161, 2031838763, 2030600113, 2029355219, 2028104088, + 2026846727, 2025583145, 2024313349, 2023037347, 2021755145, 2020466752, + 2019172176, 2017871425, 2016564505, 2015251425, 2013932194, 2012606818, + 2011275306, 2009937665, 2008593904, 2007244032, 2005888055, 2004525982, + 2003157821, 2001783581, 2000403269, 1999016895, 1997624465, 1996225989, + 1994821475, 1993410932, 1991994367, 1990571790, 1989143208, 1987708631, + 1986268067, 1984821524, 1983369012, 1981910538, 1980446113, 1978975744, + 1977499440, 1976017210, 1974529063, 1973035008, 1971535053, 1970029209, + 1968517483, 1966999885, 1965476424, 1963947109, 1962411949, 1960870953, + 1959324131, 1957771492, 1956213045, 1954648799, 1953078764, 1951502948, + 1949921363, 1948334016, 1946740917, 1945142077, 1943537504, 1941927208, + 1940311199, 1938689486, 1937062078, 1935428987, 1933790221, 1932145790, + 1930495704, 1928839973, 1927178607, 1925511615, 1923839008, 1922160795, + 1920476987, 1918787593, 1917092624, 1915392090, 1913686000, 1911974366, + 1910257196, 1908534502, 1906806294, 1905072582, 1903333375, 1901588686, + 1899838523, 1898082898, 1896321820, 1894555301, 1892783351, 1891005980, + 1889223199, 1887435018, 1885641449, 1883842501, 1882038186, 1880228513, + 1878413495, 1876593142, 1874767464, 1872936472, 1871100178, 1869258591, + 1867411724, 1865559587, 1863702190, 1861839546, 1859971665, 1858098558, + 1856220236, 1854336710, 1852447992, 1850554092, 1848655023, 1846750795, + 1844841419, 1842926907, 1841007270, 1839082519, 1837152667, 1835217723, + 1833277700, 1831332610, 1829382463, 1827427272, 1825467047, 1823501800, + 1821531544, 1819556289, 1817576048, 1815590832, 1813600652, 1811605521, + 1809605450, 1807600451, 1805590536, 1803575717, 1801556006, 1799531414, + 1797501954, 1795467637, 1793428476, 1791384482, 1789335668, 1787282046, + 1785223627, 1783160425, 1781092450, 1779019715, 1776942233, 1774860016, + 1772773076, 1770681424, 1768585075, 1766484039, 1764378329, 1762267958, + 1760152938, 1758033281, 1755909000, 1753780108, 1751646617, 1749508539, + 1747365887, 1745218673, 1743066911, 1740910612, 1738749790, 1736584458, + 1734414627, 1732240310, 1730061521, 1727878272, 1725690576, 1723498446, + 1721301894, 1719100934, 1716895578, 1714685839, 1712471731, 1710253265, + 1708030456, 1705803316, 1703571858, 1701336096, 1699096042, 1696851709, + 1694603110, 1692350260, 1690093170, 1687831854, 1685566326, 1683296598, + 1681022684, 1678744597, 1676462350, 1674175956, 1671885430, 1669590784, + 1667292032, 1664989187, 1662682262, 1660371271, 1658056228, 1655737146, + 1653414038, 1651086918, 1648755800, 1646420696, 1644081622, 1641738589, + 1639391613, 1637040706, 1634685882, 1632327156, 1629964539, 1627598048, + 1625227694, 1622853492, 1620475456, 1618093599, 1615707936, 1613318479, + 1610925244, 1608528243, 1606127492, 1603723003, 1601314790, 1598902868, + 1596487251, 1594067952, 1591644985, 1589218366, 1586788106, 1584354222, + 1581916726, 1579475633, 1577030957, 1574582712, 1572130912, 1569675572, + 1567216705, 1564754326, 1562288449, 1559819088, 1557346257, 1554869972, + 1552390245, 1549907092, 1547420526, 1544930562, 1542437215, 1539940498, + 1537440426, 1534937014, 1532430275, 1529920225, 1527406877, 1524890247, + 1522370348, 1519847196, 1517320804, 1514791187, 1512258360, 1509722336, + 1507183132, 1504640761, 1502095238, 1499546578, 1496994794, 1494439903, + 1491881918, 1489320854, 1486756725, 1484189547, 1481619334, 1479046101, + 1476469863, 1473890634, 1471308429, 1468723262, 1466135149, 1463544105, + 1460950144, 1458353281, 1455753530, 1453150907, 1450545427, 1447937104, + 1445325953, 1442711990, 1440095228, 1437475684, 1434853371, 1432228305, + 1429600501, 1426969973, 1424336737, 1421700808, 1419062200, 1416420929, + 1413777009, 1411130456, 1408481285, 1405829511, 1403175148, 1400518212, + 1397858718, 1395196681, 1392532116, 1389865038, 1387195462, 1384523404, + 1381848879, 1379171901, 1376492485, 1373810648, 1371126404, 1368439768, + 1365750756, 1363059382, 1360365663, 1357669612, 1354971246, 1352270579, + 1349567627, 1346862404, 1344154928, 1341445211, 1338733271, 1336019121, + 1333302778, 1330584256, 1327863572, 1325140739, 1322415774, 1319688692, + 1316959508, 1314228237, 1311494895, 1308759498, 1306022060, 1303282596, + 1300541123, 1297797656, 1295052209, 1292304799, 1289555440, 1286804149, + 1284050940, 1281295828, 1278538831, 1275779961, 1273019236, 1270256671, + 1267492280, 1264726080, 1261958086, 1259188313, 1256416776, 1253643492, + 1250868475, 1248091742, 1245313306, 1242533185, 1239751393, 1236967947, + 1234182860, 1231396150, 1228607830, 1225817918, 1223026428, 1220233375, + 1217438776, 1214642646, 1211845000, 1209045854, 1206245223, 1203443123, + 1200639569, 1197834577, 1195028162, 1192220340, 1189411126, 1186600536, + 1183788586, 1180975290, 1178160665, 1175344726, 1172527488, 1169708968, + 1166889179, 1164068139, 1161245863, 1158422365, 1155597662, 1152771769, + 1149944702, 1147116476, 1144287107, 1141456610, 1138625000, 1135792294, + 1132958507, 1130123654, 1127287751, 1124450814, 1121612857, 1118773897, + 1115933949, 1113093028, 1110251150, 1107408331, 1104564586, 1101719930, + 1098874380, 1096027950, 1093180656, 1090332514, 1087483539, 1084633746, + 1081783151, 1078931771, 1076079619, 1073226712, 1070373065, 1067518693, + 1064663612, 1061807839, 1058951387, 1056094272, 1053236511, 1050378117, + 1047519108, 1044659498, 1041799303, 1038938538, 1036077219, 1033215361, + 1030352980, 1027490091, 1024626709, 1021762849, 1018898529, 1016033762, + 1013168564, 1010302950, 1007436937, 1004570539, 1001703771, 998836650, + 995969190, 993101407, 990233316, 987364933, 984496273, 981627351, + 978758182, 975888783, 973019168, 970149352, 967279352, 964409182, + 961538857, 958668393, 955797805, 952927109, 950056319, 947185452, + 944314522, 941443544, 938572534, 935701506, 932830478, 929959462, + 927088475, 924217532, 921346648, 918475838, 915605118, 912734502, + 909864006, 906993645, 904123434, 901253389, 898383523, 895513853, + 892644394, 889775160, 886906166, 884037429, 881168963, 878300782, + 875432903, 872565339, 869698107, 866831221, 863964696, 861098546, + 858232788, 855367437, 852502506, 849638011, 846773967, 843910389, + 841047292, 838184690, 835322599, 832461034, 829600009, 826739539, + 823879639, 821020325, 818161610, 815303509, 812446038, 809589212, + 806733044, 803877550, 801022745, 798168642, 795315258, 792462607, + 789610703, 786759561, 783909195, 781059622, 778210854, 775362907, + 772515796, 769669534, 766824137, 763979620, 761135996, 758293280, + 755451487, 752610632, 749770728, 746931791, 744093835, 741256874, + 738420923, 735585996, 732752108, 729919273, 727087505, 724256820, + 721427230, 718598751, 715771397, 712945183, 710120121, 707296228, + 704473517, 701652002, 698831698, 696012619, 693194778, 690378191, + 687562872, 684748834, 681936091, 679124659, 676314550, 673505780, + 670698362, 667892309, 665087638, 662284360, 659482491, 656682043, + 653883033, 651085472, 648289375, 645494757, 642701630, 639910009, + 637119908, 634331341, 631544321, 628758862, 625974978, 623192683, + 620411990, 617632914, 614855467, 612079664, 609305519, 606533045, + 603762255, 600993163, 598225784, 595460130, 592696215, 589934052, + 587173656, 584415039, 581658215, 578903198, 576150001, 573398637, + 570649121, 567901464, 565155681, 562411785, 559669790, 556929708, + 554191552, 551455337, 548721076, 545988781, 543258465, 540530143, + 537803827, 535079530, 532357266, 529637047, 526918886, 524202797, + 521488793, 518776887, 516067091, 513359419, 510653883, 507950497, + 505249274, 502550225, 499853365, 497158705, 494466260, 491776040, + 489088061, 486402333, 483718870, 481037684, 478358789, 475682196, + 473007919, 470335970, 467666362, 464999106, 462334217, 459671705, + 457011584, 454353867, 451698565, 449045691, 446395257, 443747277, + 441101761, 438458723, 435818174, 433180128, 430544596, 427911590, + 425281123, 422653207, 420027854, 417405076, 414784886, 412167294, + 409552314, 406939958, 404330236, 401723162, 399118748, 396517005, + 393917945, 391321579, 388727921, 386136982, 383548773, 380963306, + 378380593, 375800646, 373223477, 370649096, 368077516, 365508749, + 362942806, 360379698, 357819437, 355262035, 352707502, 350155852, + 347607094, 345061240, 342518303, 339978292, 337441220, 334907097, + 332375936, 329847747, 327322541, 324800329, 322281124, 319764936, + 317251775, 314741654, 312234582, 309730572, 307229635, 304731780, + 302237020, 299745364, 297256824, 294771412, 292289136, 289810010, + 287334042, 284861244, 282391627, 279925201, 277461978, 275001966, + 272545178, 270091624, 267641315, 265194260, 262750470, 260309957, + 257872729, 255438798, 253008175, 250580868, 248156890, 245736249, + 243318957, 240905023, 238494457, 236087271, 233683473, 231283075, + 228886086, 226492516, 224102375, 221715674, 219332421, 216952628, + 214576304, 212203459, 209834102, 207468245, 205105895, 202747064, + 200391760, 198039994, 195691775, 193347113, 191006017, 188668498, + 186334564, 184004225, 181677490, 179354369, 177034872, 174719008, + 172406785, 170098214, 167793304, 165492064, 163194503, 160900631, + 158610456, 156323988, 154041235, 151762208, 149486915, 147215364, + 144947566, 142683529, 140423261, 138166772, 135914071, 133665166, + 131420066, 129178781, 126941318, 124707686, 122477895, 120251952, + 118029866, 115811647, 113597301, 111386839, 109180268, 106977597, + 104778834, 102583988, 100393067, 98206079, 96023032, 93843936, + 91668797, 89497625, 87330427, 85167211, 83007986, 80852759, 78701540, + 76554335, 74411152, 72272000, 70136886, 68005819, 65878805, 63755854, + 61636972, 59522167, 57411447, 55304821, 53202294, 51103875, 49009572, + 46919392, 44833342, 42751430, 40673664, 38600050, 36530596, 34465310, + 32404199, 30347269, 28294529, 26245985, 24201645, 22161515, 20125604, + 18093917, 16066462, 14043245, 12024275, 10009557, 7999099, 5992908, + 3990989, 1993351, 0, -1989057, -3973815, -5954266, -7930403, -9902220, + -11869711, -13832868, -15791686, -17746158, -19696277, -21642037, + -23583433, -25520456, -27453102, -29381364, -31305236, -33224711, + -35139784, -37050448, -38956697, -40858526, -42755927, -44648897, + -46537427, -48421513, -50301149, -52176328, -54047045, -55913295, + -57775071, -59632368, -61485180, -63333502, -65177327, -67016651, + -68851468, -70681773, -72507559, -74328822, -76145556, -77957756, + -79765416, -81568532, -83367098, -85161109, -86950559, -88735444, + -90515758, -92291497, -94062655, -95829227, -97591209, -99348596, + -101101382, -102849562, -104593133, -106332089, -108066425, -109796137, + -111521220, -113241670, -114957481, -116668649, -118375170, -120077040, + -121774253, -123466805, -125154692, -126837910, -128516454, -130190320, + -131859504, -133524001, -135183807, -136838919, -138489331, -140135041, + -141776043, -143412334, -145043910, -146670768, -148292902, -149910309, + -151522986, -153130929, -154734133, -156332596, -157926313, -159515280, + -161099495, -162678954, -164253652, -165823587, -167388755, -168949153, + -170504777, -172055624, -173601690, -175142972, -176679468, -178211173, + -179738085, -181260199, -182777515, -184290027, -185797733, -187300631, + -188798717, -190291987, -191780440, -193264073, -194742882, -196216864, + -197686018, -199150340, -200609827, -202064477, -203514288, -204959256, + -206399379, -207834654, -209265080, -210690654, -212111372, -213527234, + -214938236, -216344376, -217745652, -219142061, -220533602, -221920273, + -223302070, -224678993, -226051038, -227418205, -228780490, -230137892, + -231490410, -232838041, -234180783, -235518634, -236851593, -238179659, + -239502828, -240821100, -242134474, -243442946, -244746516, -246045183, + -247338944, -248627798, -249911745, -251190781, -252464907, -253734121, + -254998421, -256257806, -257512275, -258761828, -260006461, -261246175, + -262480969, -263710841, -264935790, -266155816, -267370917, -268581093, + -269786343, -270986665, -272182059, -273372525, -274558061, -275738667, + -276914342, -278085085, -279250897, -280411776, -281567721, -282718733, + -283864811, -285005955, -286142163, -287273436, -288399774, -289521175, + -290637641, -291749170, -292855762, -293957418, -295054137, -296145919, + -297232764, -298314672, -299391643, -300463677, -301530775, -302592936, + -303650160, -304702448, -305749799, -306792215, -307829696, -308862241, + -309889851, -310912527, -311930269, -312943077, -313950952, -314953895, + -315951905, -316944985, -317933133, -318916351, -319894640, -320868001, + -321836433, -322799938, -323758517, -324712171, -325660900, -326604706, + -327543589, -328477550, -329406591, -330330712, -331249915, -332164201, + -333073570, -333978025, -334877565, -335772194, -336661911, -337546719, + -338426618, -339301610, -340171697, -341036879, -341897159, -342752538, + -343603017, -344448598, -345289283, -346125073, -346955971, -347781977, + -348603093, -349419322, -350230665, -351037124, -351838701, -352635397, + -353427216, -354214158, -354996225, -355773421, -356545746, -357313204, + -358075795, -358833523, -359586389, -360334396, -361077546, -361815841, + -362549284, -363277877, -364001622, -364720522, -365434580, -366143797, + -366848177, -367547721, -368242433, -368932315, -369617370, -370297600, + -370973009, -371643598, -372309371, -372970330, -373626479, -374277819, + -374924355, -375566089, -376203024, -376835163, -377462509, -378085064, + -378702833, -379315818, -379924023, -380527450, -381126103, -381719985, + -382309099, -382893449, -383473037, -384047868, -384617945, -385183270, + -385743848, -386299683, -386850776, -387397133, -387938756, -388475650, + -389007817, -389535262, -390057988, -390576000, -391089299, -391597892, + -392101780, -392600969, -393095461, -393585262, -394070374, -394550802, + -395026549, -395497621, -395964020, -396425751, -396882818, -397335225, + -397782976, -398226076, -398664529, -399098338, -399527508, -399952044, + -400371950, -400787230, -401197889, -401603930, -402005359, -402402180, + -402794397, -403182015, -403565038, -403943472, -404317320, -404686587, + -405051279, -405411399, -405766953, -406117944, -406464379, -406806261, + -407143596, -407476389, -407804643, -408128365, -408447559, -408762231, + -409072384, -409378025, -409679158, -409975788, -410267921, -410555561, + -410838714, -411117384, -411391578, -411661301, -411926557, -412187351, + -412443691, -412695579, -412943023, -413186027, -413424597, -413658738, + -413888455, -414113755, -414334643, -414551124, -414763204, -414970888, + -415174183, -415373093, -415567625, -415757784, -415943576, -416125007, + -416302082, -416474807, -416643188, -416807232, -416966943, -417122328, + -417273392, -417420143, -417562585, -417700724, -417834568, -417964121, + -418089389, -418210380, -418327099, -418439552, -418547746, -418651686, + -418751379, -418846831, -418938048, -419025037, -419107804, -419186356, + -419260698, -419330837, -419396780, -419458533, -419516102, -419569494, + -419618716, -419663774, -419704674, -419741423, -419774028, -419802495, + -419826832, -419847044, -419863138, -419875121, -419883001, -419886783, + -419886474, -419882082, -419873612, -419861073, -419844470, -419823811, + -419799102, -419770351, -419737564, -419700749, -419659912, -419615061, + -419566203, -419513344, -419456491, -419395653, -419330835, -419262046, + -419189292, -419112580, -419031918, -418947313, -418858772, -418766303, + -418669913, -418569608, -418465397, -418357287, -418245286, -418129399, + -418009636, -417886003, -417758509, -417627159, -417491963, -417352927, + -417210059, -417063367, -416912858, -416758540, -416600420, -416438506, + -416272805, -416103326, -415930077, -415753064, -415572295, -415387779, + -415199523, -415007535, -414811822, -414612393, -414409255, -414202417, + -413991885, -413777669, -413559775, -413338213, -413112989, -412884112, + -412651590, -412415431, -412175643, -411932233, -411685211, -411434583, + -411180359, -410922546, -410661152, -410396186, -410127656, -409855570, + -409579936, -409300762, -409018057, -408731829, -408442085, -408148836, + -407852088, -407551850, -407248130, -406940937, -406630279, -406316165, + -405998603, -405677601, -405353167, -405025311, -404694041, -404359365, + -404021291, -403679829, -403334986, -402986771, -402635194, -402280261, + -401921983, -401560367, -401195422, -400827157, -400455581, -400080701, + -399702528, -399321069, -398936333, -398548329, -398157066, -397762552, + -397364796, -396963807, -396559594, -396152166, -395741531, -395327698, + -394910676, -394490474, -394067100, -393640565, -393210876, -392778042, + -392342073, -391902977, -391460763, -391015441, -390567019, -390115506, + -389660911, -389203244, -388742512, -388278727, -387811895, -387342027, + -386869131, -386393217, -385914294, -385432370, -384947455, -384459559, + -383968689, -383474856, -382978069, -382478336, -381975667, -381470071, + -380961558, -380450136, -379935815, -379418604, -378898512, -378375549, + -377849723, -377321045, -376789524, -376255168, -375717987, -375177990, + -374635188, -374089588, -373541201, -372990036, -372436102, -371879408, + -371319965, -370757781, -370192866, -369625229, -369054880, -368481828, + -367906083, -367327653, -366746550, -366162781, -365576357, -364987287, + -364395581, -363801248, -363204297, -362604739, -362002582, -361397837, + -360790512, -360180618, -359568163, -358953158, -358335613, -357715536, + -357092937, -356467827, -355840214, -355210108, -354577519, -353942456, + -353304930, -352664950, -352022525, -351377665, -350730380, -350080679, + -349428573, -348774071, -348117182, -347457916, -346796284, -346132294, + -345465957, -344797282, -344126280, -343452958, -342777329, -342099400, + -341419183, -340736687, -340051921, -339364895, -338675620, -337984104, + -337290358, -336594392, -335896215, -335195837, -334493268, -333788518, + -333081597, -332372514, -331661280, -330947903, -330232395, -329514764, + -328795021, -328073176, -327349238, -326623217, -325895123, -325164967, + -324432757, -323698504, -322962218, -322223908, -321483585, -320741258, + -319996938, -319250633, -318502355, -317752112, -316999915, -316245774, + -315489699, -314731699, -313971785, -313209966, -312446253, -311680655, + -310913182, -310143844, -309372651, -308599613, -307824741, -307048043, + -306269530, -305489211, -304707098, -303923199, -303137524, -302350085, + -301560889, -300769949, -299977272, -299182870, -298386752, -297588928, + -296789409, -295988204, -295185323, -294380776, -293574573, -292766724, + -291957238, -291146127, -290333400, -289519066, -288703136, -287885620, + -287066528, -286245869, -285423654, -284599892, -283774594, -282947769, + -282119428, -281289580, -280458235, -279625404, -278791096, -277955321, + -277118089, -276279410, -275439294, -274597751, -273754791, -272910423, + -272064659, -271217507, -270368977, -269519081, -268667826, -267815225, + -266961285, -266106018, -265249433, -264391540, -263532349, -262671870, + -261810112, -260947087, -260082803, -259217271, -258350500, -257482501, + -256613282, -255742855, -254871229, -253998414, -253124420, -252249256, + -251372933, -250495460, -249616848, -248737106, -247856243, -246974271, + -246091198, -245207035, -244321791, -243435477, -242548102, -241659675, + -240770207, -239879708, -238988187, -238095654, -237202120, -236307593, + -235412083, -234515601, -233618157, -232719759, -231820417, -230920143, + -230018944, -229116832, -228213815, -227309904, -226405109, -225499438, + -224592902, -223685510, -222777273, -221868199, -220958299, -220047583, + -219136059, -218223738, -217310630, -216396743, -215482088, -214566675, + -213650513, -212733611, -211815980, -210897629, -209978567, -209058805, + -208138351, -207217216, -206295409, -205372939, -204449817, -203526052, + -202601653, -201676630, -200750993, -199824750, -198897912, -197970489, + -197042488, -196113922, -195184797, -194255125, -193324915, -192394176, + -191462917, -190531149, -189598880, -188666120, -187732879, -186799165, + -185864989, -184930359, -183995286, -183059778, -182123845, -181187497, + -180250742, -179313590, -178376050, -177438132, -176499845, -175561199, + -174622202, -173682864, -172743195, -171803203, -170862898, -169922289, + -168981386, -168040197, -167098731, -166156999, -165215010, -164272771, + -163330294, -162387586, -161444657, -160501517, -159558173, -158614637, + -157670916, -156727019, -155782957, -154838737, -153894370, -152949863, + -152005227, -151060470, -150115601, -149170629, -148225564, -147280414, + -146335189, -145389896, -144444546, -143499147, -142553709, -141608239, + -140662748, -139717243, -138771734, -137826230, -136880740, -135935272, + -134989835, -134044439, -133099091, -132153802, -131208579, -130263431, + -129318368, -128373397, -127428528, -126483770, -125539131, -124594619, + -123650245, -122706015, -121761940, -120818027, -119874285, -118930723, + -117987350, -117044174, -116101203, -115158447, -114215913, -113273611, + -112331549, -111389736, -110448179, -109506888, -108565871, -107625137, + -106684693, -105744548, -104804712, -103865191, -102925995, -101987132, + -101048611, -100110439, -99172625, -98235178, -97298105, -96361415, + -95425117, -94489218, -93553726, -92618651, -91684000, -90749782, + -89816004, -88882675, -87949803, -87017396, -86085463, -85154011, + -84223048, -83292584, -82362624, -81433179, -80504255, -79575861, + -78648005, -77720695, -76793939, -75867744, -74942119, -74017072, + -73092610, -72168742, -71245475, -70322817, -69400776, -68479361, + -67558578, -66638435, -65718941, -64800103, -63881929, -62964426, + -62047603, -61131467, -60216025, -59301286, -58387257, -57473945, + -56561359, -55649506, -54738393, -53828029, -52918420, -52009574, + -51101498, -50194201, -49287690, -48381972, -47477054, -46572945, + -45669651, -44767179, -43865538, -42964735, -42064777, -41165670, + -40267424, -39370044, -38473539, -37577914, -36683179, -35789340, + -34896403, -34004377, -33113268, -32223084, -31333832, -30445519, + -29558151, -28671737, -27786283, -26901796, -26018283, -25135751, + -24254208, -23373660, -22494114, -21615576, -20738055, -19861557, + -18986089, -18111657, -17238268, -16365930, -15494649, -14624432, + -13755286, -12887217, -12020232, -11154337, -10289541, -9425848, + -8563267, -7701803, -6841463, -5982254, -5124182, -4267254, -3411476, + -2556855, -1703398, -851111, 0, 849928, 1698667, 2546210, 3392552, + 4237684, 5081603, 5924300, 6765770, 7606006, 8445002, 9282752, + 10119249, 10954488, 11788463, 12621166, 13452592, 14282735, 15111588, + 15939146, 16765402, 17590351, 18413986, 19236302, 20057292, 20876950, + 21695271, 22512248, 23327876, 24142148, 24955060, 25766604, 26576776, + 27385569, 28192978, 28998996, 29803618, 30606839, 31408653, 32209053, + 33008035, 33805592, 34601719, 35396411, 36189661, 36981465, 37771816, + 38560710, 39348140, 40134101, 40918588, 41701596, 42483118, 43263150, + 44041686, 44818721, 45594249, 46368265, 47140764, 47911740, 48681189, + 49449105, 50215482, 50980317, 51743602, 52505334, 53265508, 54024117, + 54781158, 55536624, 56290511, 57042814, 57793528, 58542648, 59290169, + 60036086, 60780395, 61523089, 62264164, 63003617, 63741440, 64477631, + 65212184, 65945094, 66676357, 67405967, 68133921, 68860213, 69584839, + 70307794, 71029074, 71748673, 72466588, 73182814, 73897346, 74610181, + 75321312, 76030736, 76738449, 77444445, 78148722, 78851273, 79552096, + 80251184, 80948536, 81644145, 82338007, 83030120, 83720477, 84409075, + 85095911, 85780978, 86464275, 87145795, 87825537, 88503494, 89179663, + 89854041, 90526623, 91197405, 91866383, 92533554, 93198912, 93862456, + 94524179, 95184080, 95842153, 96498396, 97152804, 97805373, 98456100, + 99104981, 99752013, 100397191, 101040512, 101681973, 102321569, + 102959298, 103595155, 104229138, 104861241, 105491463, 106119800, + 106746248, 107370803, 107993462, 108614223, 109233081, 109850033, + 110465076, 111078206, 111689421, 112298717, 112906090, 113511539, + 114115058, 114716645, 115316298, 115914013, 116509786, 117103615, + 117695497, 118285428, 118873406, 119459427, 120043489, 120625589, + 121205724, 121783890, 122360086, 122934307, 123506552, 124076817, + 124645100, 125211398, 125775708, 126338027, 126898353, 127456683, + 128013014, 128567345, 129119671, 129669990, 130218301, 130764600, + 131308885, 131851153, 132391402, 132929629, 133465833, 134000009, + 134532157, 135062274, 135590357, 136116404, 136640413, 137162382, + 137682307, 138200188, 138716021, 139229805, 139741537, 140251215, + 140758837, 141264402, 141767906, 142269348, 142768726, 143266037, + 143761281, 144254454, 144745554, 145234581, 145721531, 146206404, + 146689197, 147169908, 147648535, 148125078, 148599533, 149071899, + 149542175, 150010358, 150476448, 150940441, 151402338, 151862135, + 152319832, 152775427, 153228918, 153680303, 154129582, 154576753, + 155021814, 155464763, 155905600, 156344323, 156780930, 157215421, + 157647793, 158078046, 158506178, 158932188, 159356075, 159777837, + 160197473, 160614982, 161030363, 161443614, 161854735, 162263724, + 162670581, 163075304, 163477892, 163878345, 164276660, 164672838, + 165066876, 165458776, 165848534, 166236151, 166621625, 167004956, + 167386144, 167765186, 168142082, 168516832, 168889435, 169259889, + 169628195, 169994352, 170358358, 170720214, 171079919, 171437471, + 171792872, 172146119, 172497212, 172846152, 173192936, 173537566, + 173880040, 174220358, 174558520, 174894525, 175228373, 175560063, + 175889596, 176216970, 176542186, 176865243, 177186142, 177504881, + 177821460, 178135880, 178448141, 178758241, 179066182, 179371962, + 179675582, 179977042, 180276341, 180573480, 180868459, 181161278, + 181451936, 181740434, 182026772, 182310950, 182592967, 182872826, + 183150524, 183426063, 183699443, 183970664, 184239725, 184506629, + 184771374, 185033961, 185294391, 185552663, 185808779, 186062737, + 186314540, 186564187, 186811679, 187057016, 187300198, 187541227, + 187780102, 188016825, 188251395, 188483814, 188714081, 188942199, + 189168166, 189391984, 189613654, 189833176, 190050551, 190265779, + 190478862, 190689800, 190898594, 191105245, 191309754, 191512121, + 191712347, 191910434, 192106382, 192300191, 192491864, 192681401, + 192868803, 193054070, 193237205, 193418207, 193597079, 193773821, + 193948434, 194120919, 194291278, 194459512, 194625621, 194789608, + 194951472, 195111216, 195268841, 195424347, 195577737, 195729012, + 195878172, 196025219, 196170155, 196312981, 196453698, 196592308, + 196728811, 196863211, 196995507, 197125703, 197253798, 197379794, + 197503694, 197625498, 197745209, 197862827, 197978355, 198091794, + 198203145, 198312411, 198419593, 198524692, 198627711, 198728651, + 198827514, 198924302, 199019016, 199111658, 199202231, 199290735, + 199377173, 199461547, 199543858, 199624109, 199702301, 199778436, + 199852516, 199924544, 199994521, 200062449, 200128331, 200192167, + 200253961, 200313715, 200371430, 200427108, 200480753, 200532365, + 200581947, 200629501, 200675030, 200718535, 200760020, 200799485, + 200836934, 200872368, 200905790, 200937202, 200966607, 200994007, + 201019404, 201042800, 201064198, 201083601, 201101011, 201116430, + 201129860, 201141305, 201150766, 201158246, 201163748, 201167274, + 201168827, 201168409, 201166023, 201161671, 201155357, 201147082, + 201136849, 201124661, 201110521, 201094431, 201076394, 201056413, + 201034490, 201010629, 200984831, 200957100, 200927438, 200895849, + 200862335, 200826899, 200789544, 200750272, 200709087, 200665991, + 200620988, 200574080, 200525270, 200474561, 200421956, 200367458, + 200311071, 200252796, 200192637, 200130598, 200066681, 200000889, + 199933225, 199863693, 199792295, 199719035, 199643916, 199566940, + 199488112, 199407434, 199324909, 199240541, 199154333, 199066287, + 198976408, 198884699, 198791163, 198695802, 198598621, 198499623, + 198398811, 198296188, 198191758, 198085524, 197977489, 197867657, + 197756032, 197642616, 197527413, 197410427, 197291661, 197171118, + 197048802, 196924716, 196798864, 196671250, 196541877, 196410748, + 196277867, 196143238, 196006864, 195868748, 195728895, 195587308, + 195443991, 195298946, 195152179, 195003692, 194853489, 194701574, + 194547951, 194392623, 194235594, 194076868, 193916448, 193754338, + 193590543, 193425065, 193257909, 193089078, 192918576, 192746407, + 192572575, 192397084, 192219937, 192041138, 191860692, 191678602, + 191494871, 191309505, 191122507, 190933880, 190743629, 190551758, + 190358271, 190163171, 189966462, 189768149, 189568236, 189366727, + 189163625, 188958934, 188752660, 188544805, 188335374, 188124371, + 187911799, 187697664, 187481969, 187264719, 187045916, 186825567, + 186603674, 186380242, 186155275, 185928777, 185700752, 185471205, + 185240140, 185007560, 184773471, 184537876, 184300780, 184062187, + 183822101, 183580526, 183337467, 183092928, 182846913, 182599427, + 182350473, 182100057, 181848183, 181594854, 181340075, 181083851, + 180826185, 180567083, 180306549, 180044586, 179781200, 179516395, + 179250175, 178982545, 178713508, 178443070, 178171236, 177898008, + 177623392, 177347393, 177070014, 176791261, 176511137, 176229648, + 175946797, 175662589, 175377030, 175090122, 174801872, 174512282, + 174221359, 173929106, 173635528, 173340630, 173044416, 172746890, + 172448058, 172147924, 171846492, 171543767, 171239755, 170934458, + 170627882, 170320033, 170010913, 169700528, 169388883, 169075982, + 168761830, 168446432, 168129791, 167811914, 167492804, 167172467, + 166850906, 166528128, 166204135, 165878934, 165552529, 165224925, + 164896125, 164566136, 164234962, 163902607, 163569077, 163234375, + 162898508, 162561479, 162223294, 161883957, 161543473, 161201847, + 160859083, 160515187, 160170163, 159824016, 159476751, 159128373, + 158778886, 158428295, 158076606, 157723823, 157369950, 157014994, + 156658958, 156301847, 155943667, 155584421, 155224116, 154862756, + 154500346, 154136890, 153772394, 153406863, 153040300, 152672713, + 152304104, 151934479, 151563844, 151192202, 150819559, 150445920, + 150071290, 149695673, 149319074, 148941500, 148562953, 148183440, + 147802966, 147421535, 147039151, 146655821, 146271550, 145886341, + 145500200, 145113132, 144725143, 144336236, 143946417, 143555691, + 143164064, 142771538, 142378121, 141983817, 141588630, 141192567, + 140795631, 140397828, 139999162, 139599640, 139199265, 138798044, + 138395980, 137993078, 137589345, 137184785, 136779402, 136373202, + 135966191, 135558372, 135149751, 134740333, 134330123, 133919126, + 133507347, 133094791, 132681463, 132267369, 131852512, 131436899, + 131020534, 130603422, 130185568, 129766978, 129347656, 128927607, + 128506837, 128085351, 127663152, 127240248, 126816642, 126392339, + 125967345, 125541665, 125115304, 124688266, 124260557, 123832183, + 123403146, 122973454, 122543111, 122112122, 121680492, 121248226, + 120815330, 120381807, 119947664, 119512905, 119077535, 118641560, + 118204984, 117767813, 117330051, 116891703, 116452775, 116013272, + 115573198, 115132559, 114691360, 114249605, 113807300, 113364450, + 112921060, 112477135, 112032679, 111587699, 111142198, 110696183, + 110249657, 109802626, 109355096, 108907070, 108458555, 108009554, + 107560074, 107110119, 106659694, 106208804, 105757454, 105305650, + 104853395, 104400696, 103947557, 103493983, 103039979, 102585551, + 102130702, 101675439, 101219766, 100763687, 100307209, 99850336, + 99393074, 98935426, 98477398, 98018995, 97560222, 97101084, 96641586, + 96181732, 95721529, 95260980, 94800091, 94338866, 93877312, 93415431, + 92953230, 92490714, 92027887, 91564754, 91101321, 90637591, 90173571, + 89709264, 89244677, 88779813, 88314678, 87849276, 87383613, 86917694, + 86451523, 85985105, 85518445, 85051548, 84584419, 84117062, 83649483, + 83181687, 82713678, 82245461, 81777041, 81308423, 80839611, 80370612, + 79901428, 79432066, 78962530, 78492825, 78022956, 77552927, 77082743, + 76612410, 76141931, 75671312, 75200558, 74729673, 74258662, 73787531, + 73316282, 72844923, 72373456, 71901887, 71430222, 70958463, 70486617, + 70014688, 69542680, 69070599, 68598449, 68126234, 67653961, 67181632, + 66709254, 66236830, 65764366, 65291866, 64819334, 64346776, 63874196, + 63401599, 62928989, 62456371, 61983750, 61511130, 61038516, 60565913, + 60093325, 59620757, 59148213, 58675698, 58203217, 57730775, 57258375, + 56786022, 56313722, 55841478, 55369295, 54897178, 54425132, 53953160, + 53481267, 53009458, 52537738, 52066110, 51594580, 51123152, 50651830, + 50180619, 49709523, 49238547, 48767696, 48296973, 47826384, 47355932, + 46885623, 46415460, 45945448, 45475591, 45005894, 44536362, 44066998, + 43597807, 43128794, 42659963, 42191317, 41722862, 41254603, 40786542, + 40318685, 39851036, 39383599, 38916379, 38449379, 37982605, 37516060, + 37049749, 36583677, 36117846, 35652262, 35186929, 34721851, 34257033, + 33792478, 33328190, 32864175, 32400437, 31936978, 31473804, 31010919, + 30548327, 30086033, 29624039, 29162352, 28700973, 28239909, 27779162, + 27318738, 26858640, 26398872, 25939438, 25480343, 25021590, 24563184, + 24105128, 23647428, 23190086, 22733107, 22276494, 21820253, 21364386, + 20908898, 20453793, 19999075, 19544748, 19090816, 18637282, 18184151, + 17731426, 17279113, 16827213, 16375732, 15924674, 15474041, 15023839, + 14574070, 14124740, 13675851, 13227408, 12779414, 12331873, 11884789, + 11438166, 10992008, 10546319, 10101101, 9656360, 9212098, 8768320, + 8325029, 7882229, 7439924, 6998117, 6556813, 6116014, 5675725, 5235949, + 4796690, 4357952, 3919738, 3482052, 3044897, 2608278, 2172197, 1736658, + 1301666, 867223, 433333, 0, -432773, -864982, -1296624, -1727695, + -2158192, -2588111, -3017449, -3446202, -3874367, -4301940, -4728918, + -5155297, -5581074, -6006246, -6430809, -6854759, -7278094, -7700810, + -8122903, -8544371, -8965209, -9385415, -9804985, -10223916, -10642205, + -11059848, -11476842, -11893183, -12308869, -12723896, -13138261, + -13551961, -13964992, -14377352, -14789037, -15200043, -15610369, + -16020009, -16428962, -16837225, -17244793, -17651665, -18057836, + -18463304, -18868066, -19272118, -19675457, -20078081, -20479987, + -20881171, -21281630, -21681361, -22080362, -22478629, -22876159, + -23272950, -23668998, -24064300, -24458854, -24852656, -25245704, + -25637995, -26029525, -26420293, -26810294, -27199527, -27587988, + -27975675, -28362584, -28748713, -29134059, -29518619, -29902391, + -30285372, -30667558, -31048948, -31429538, -31809326, -32188308, + -32566483, -32943848, -33320400, -33696135, -34071053, -34445149, + -34818422, -35190868, -35562485, -35933271, -36303223, -36672338, + -37040613, -37408047, -37774637, -38140379, -38505272, -38869313, + -39232500, -39594830, -39956300, -40316909, -40676653, -41035530, + -41393538, -41750675, -42106938, -42462324, -42816831, -43170457, + -43523200, -43875057, -44226025, -44576103, -44925288, -45273579, + -45620971, -45967464, -46313055, -46657742, -47001522, -47344393, + -47686354, -48027402, -48367534, -48706748, -49045043, -49382417, + -49718866, -50054389, -50388984, -50722648, -51055380, -51387178, + -51718039, -52047961, -52376942, -52704981, -53032075, -53358222, + -53683420, -54007668, -54330962, -54653302, -54974686, -55295110, + -55614574, -55933075, -56250612, -56567183, -56882786, -57197418, + -57511078, -57823765, -58135476, -58446210, -58755964, -59064737, + -59372527, -59679333, -59985152, -60289984, -60593825, -60896674, + -61198531, -61499392, -61799256, -62098123, -62395989, -62692853, + -62988714, -63283569, -63577418, -63870259, -64162090, -64452910, + -64742716, -65031508, -65319284, -65606042, -65891781, -66176500, + -66460196, -66742868, -67024515, -67305136, -67584728, -67863291, + -68140823, -68417323, -68692788, -68967219, -69240613, -69512969, + -69784286, -70054562, -70323796, -70591987, -70859134, -71125234, + -71390288, -71654292, -71917248, -72179152, -72440004, -72699802, + -72958546, -73216235, -73472866, -73728439, -73982952, -74236405, + -74488796, -74740125, -74990390, -75239589, -75487723, -75734789, + -75980787, -76225716, -76469575, -76712362, -76954077, -77194718, + -77434285, -77672776, -77910191, -78146529, -78381788, -78615969, + -78849069, -79081088, -79312025, -79541879, -79770649, -79998335, + -80224936, -80450450, -80674877, -80898216, -81120466, -81341627, + -81561697, -81780676, -81998564, -82215358, -82431060, -82645667, + -82859180, -83071597, -83282917, -83493141, -83702268, -83910296, + -84117226, -84323056, -84527786, -84731415, -84933943, -85135369, + -85335693, -85534914, -85733031, -85930044, -86125952, -86320756, + -86514454, -86707045, -86898530, -87088908, -87278179, -87466341, + -87653396, -87839341, -88024177, -88207904, -88390520, -88572026, + -88752422, -88931706, -89109879, -89286940, -89462889, -89637726, + -89811450, -89984061, -90155559, -90325943, -90495214, -90663370, + -90830413, -90996341, -91161154, -91324853, -91487436, -91648905, + -91809258, -91968496, -92126618, -92283624, -92439514, -92594289, + -92747947, -92900490, -93051916, -93202226, -93351420, -93499497, + -93646458, -93792303, -93937031, -94080643, -94223139, -94364518, + -94504782, -94643929, -94781960, -94918874, -95054673, -95189356, + -95322924, -95455375, -95586711, -95716932, -95846038, -95974028, + -96100904, -96226665, -96351312, -96474844, -96597262, -96718567, + -96838758, -96957835, -97075800, -97192651, -97308391, -97423018, + -97536533, -97648936, -97760228, -97870410, -97979480, -98087441, + -98194291, -98300032, -98404664, -98508188, -98610603, -98711910, + -98812110, -98911203, -99009189, -99106069, -99201844, -99296514, + -99390079, -99482539, -99573897, -99664151, -99753303, -99841352, + -99928301, -100014148, -100098895, -100182543, -100265091, -100346541, + -100426893, -100506148, -100584306, -100661369, -100737336, -100812208, + -100885986, -100958672, -101030264, -101100765, -101170175, -101238494, + -101305724, -101371864, -101436917, -101500882, -101563761, -101625553, + -101686261, -101745885, -101804425, -101861883, -101918259, -101973554, + -102027769, -102080904, -102132962, -102183942, -102233846, -102282674, + -102330428, -102377107, -102422714, -102467249, -102510713, -102553108, + -102594433, -102634690, -102673880, -102712004, -102749064, -102785059, + -102819991, -102853861, -102886671, -102918420, -102949111, -102978745, + -103007321, -103034842, -103061309, -103086723, -103111084, -103134394, + -103156655, -103177866, -103198030, -103217148, -103235220, -103252249, + -103268234, -103283178, -103297081, -103309945, -103321771, -103332561, + -103342314, -103351034, -103358720, -103365375, -103370999, -103375594, + -103379161, -103381702, -103383217, -103383709, -103383178, -103381625, + -103379053, -103375462, -103370854, -103365230, -103358592, -103350941, + -103342278, -103332604, -103321922, -103310233, -103297538, -103283838, + -103269135, -103253430, -103236725, -103219022, -103200322, -103180625, + -103159935, -103138252, -103115577, -103091913, -103067261, -103041623, + -103014999, -102987392, -102958803, -102929233, -102898685, -102867159, + -102834658, -102801183, -102766736, -102731317, -102694930, -102657575, + -102619254, -102579969, -102539721, -102498513, -102456345, -102413220, + -102369138, -102324103, -102278115, -102231176, -102183288, -102134453, + -102084672, -102033947, -101982280, -101929673, -101876127, -101821644, + -101766226, -101709874, -101652591, -101594379, -101535238, -101475171, + -101414180, -101352266, -101289432, -101225679, -101161008, -101095423, + -101028924, -100961514, -100893194, -100823966, -100753833, -100682796, + -100610856, -100538017, -100464279, -100389645, -100314117, -100237696, + -100160384, -100082184, -100003097, -99923126, -99842271, -99760536, + -99677922, -99594432, -99510066, -99424828, -99338719, -99251741, + -99163896, -99075186, -98985613, -98895180, -98803888, -98711739, + -98618736, -98524880, -98430173, -98334618, -98238217, -98140971, + -98042883, -97943954, -97844188, -97743586, -97642150, -97539882, + -97436784, -97332859, -97228108, -97122534, -97016139, -96908925, + -96800895, -96692049, -96582391, -96471923, -96360646, -96248563, + -96135677, -96021989, -95907501, -95792216, -95676136, -95559263, + -95441600, -95323148, -95203910, -95083888, -94963084, -94841501, + -94719140, -94596004, -94472096, -94347417, -94221970, -94095757, + -93968780, -93841041, -93712544, -93583289, -93453280, -93322519, + -93191008, -93058749, -92925745, -92791997, -92657509, -92522282, + -92386320, -92249623, -92112195, -91974038, -91835154, -91695546, + -91555216, -91414166, -91272399, -91129916, -90986721, -90842816, + -90698203, -90552885, -90406863, -90260141, -90112720, -89964604, + -89815794, -89666293, -89516103, -89365227, -89213667, -89061425, + -88908505, -88754907, -88600636, -88445693, -88290081, -88133801, + -87976858, -87819252, -87660987, -87502065, -87342488, -87182259, + -87021381, -86859855, -86697684, -86534872, -86371419, -86207329, + -86042604, -85877247, -85711261, -85544647, -85377408, -85209546, + -85041065, -84871967, -84702253, -84531928, -84360992, -84189450, + -84017302, -83844553, -83671203, -83497257, -83322716, -83147582, + -82971860, -82795550, -82618655, -82441179, -82263124, -82084491, + -81905284, -81725506, -81545158, -81364244, -81182766, -81000726, + -80818128, -80634973, -80451264, -80267004, -80082195, -79896841, + -79710943, -79524504, -79337527, -79150014, -78961968, -78773391, + -78584287, -78394657, -78204505, -78013832, -77822642, -77630937, + -77438719, -77245992, -77052758, -76859019, -76664779, -76470039, + -76274802, -76079071, -75882849, -75686138, -75488941, -75291261, + -75093099, -74894459, -74695344, -74495755, -74295696, -74095169, + -73894177, -73692723, -73490808, -73288436, -73085610, -72882332, + -72678604, -72474430, -72269811, -72064751, -71859252, -71653318, + -71446949, -71240150, -71032923, -70825270, -70617194, -70408698, + -70199784, -69990456, -69780715, -69570564, -69360007, -69149045, + -68937681, -68725918, -68513759, -68301207, -68088263, -67874931, + -67661213, -67447112, -67232630, -67017771, -66802537, -66586930, + -66370953, -66154610, -65937901, -65720831, -65503402, -65285616, + -65067477, -64848986, -64630147, -64410962, -64191434, -63971565, + -63751359, -63530817, -63309942, -63088738, -62867207, -62645351, + -62423173, -62200676, -61977862, -61754734, -61531295, -61307548, + -61083494, -60859138, -60634480, -60409525, -60184274, -59958731, + -59732897, -59506777, -59280371, -59053684, -58826717, -58599473, + -58371956, -58144166, -57916109, -57687785, -57459197, -57230349, + -57001242, -56771880, -56542265, -56312400, -56082287, -55851929, + -55621329, -55390489, -55159412, -54928101, -54696558, -54464786, + -54232787, -54000564, -53768121, -53535458, -53302580, -53069488, + -52836186, -52602675, -52368959, -52135040, -51900921, -51666605, + -51432093, -51197389, -50962495, -50727414, -50492149, -50256702, + -50021075, -49785272, -49549294, -49313146, -49076828, -48840344, + -48603696, -48366888, -48129920, -47892797, -47655521, -47418094, + -47180519, -46942798, -46704934, -46466930, -46228789, -45990512, + -45752102, -45513563, -45274895, -45036104, -44797189, -44558155, + -44319004, -44079738, -43840360, -43600873, -43361278, -43121579, + -42881778, -42641878, -42401882, -42161791, -41921608, -41681336, + -41440978, -41200535, -40960011, -40719408, -40478728, -40237975, + -39997150, -39756256, -39515296, -39274272, -39033186, -38792042, + -38550841, -38309586, -38068280, -37826925, -37585524, -37344079, + -37102592, -36861067, -36619505, -36377909, -36136282, -35894625, + -35652943, -35411236, -35169507, -34927760, -34685995, -34444217, + -34202426, -33960627, -33718820, -33477009, -33235197, -32993384, + -32751575, -32509770, -32267974, -32026187, -31784414, -31542655, + -31300913, -31059192, -30817493, -30575818, -30334170, -30092552, + -29850966, -29609413, -29367898, -29126421, -28884986, -28643594, + -28402249, -28160952, -27919706, -27678513, -27437375, -27196296, + -26955277, -26714320, -26473428, -26232604, -25991849, -25751166, + -25510557, -25270025, -25029572, -24789200, -24548912, -24308710, + -24068595, -23828571, -23588640, -23348804, -23109065, -22869426, + -22629889, -22390455, -22151129, -21911911, -21672804, -21433810, + -21194931, -20956171, -20717530, -20479011, -20240617, -20002350, + -19764211, -19526204, -19288330, -19050592, -18812991, -18575530, + -18338212, -18101038, -17864010, -17627132, -17390404, -17153829, + -16917410, -16681148, -16445046, -16209106, -15973330, -15737719, + -15502277, -15267006, -15031907, -14796983, -14562235, -14327667, + -14093279, -13859075, -13625056, -13391225, -13157583, -12924133, + -12690876, -12457815, -12224952, -11992289, -11759828, -11527572, + -11295521, -11063678, -10832046, -10600626, -10369421, -10138432, + -9907661, -9677111, -9446783, -9216680, -8986804, -8757156, -8527738, + -8298553, -8069603, -7840889, -7612414, -7384179, -7156187, -6928439, + -6700937, -6473684, -6246681, -6019931, -5793434, -5567194, -5341212, + -5115490, -4890030, -4664834, -4439903, -4215240, -3990847, -3766725, + -3542877, -3319303, -3096007, -2872990, -2650254, -2427800, -2205631, + -1983749, -1762155, -1540851, -1319839, -1099120, -878698, -658572, + -438746, -219222, 0, 218917, 437528, 655830, 873823, 1091504, 1308871, + 1525923, 1742658, 1959073, 2175169, 2390942, 2606391, 2821514, 3036309, + 3250775, 3464911, 3678713, 3892181, 4105313, 4318108, 4530563, 4742676, + 4954447, 5165874, 5376954, 5587686, 5798069, 6008101, 6217780, 6427105, + 6636074, 6844685, 7052937, 7260828, 7468356, 7675521, 7882320, 8088752, + 8294814, 8500507, 8705827, 8910774, 9115346, 9319542, 9523359, 9726796, + 9929852, 10132526, 10334815, 10536718, 10738234, 10939361, 11140098, + 11340443, 11540395, 11739952, 11939112, 12137875, 12336239, 12534202, + 12731764, 12928921, 13125674, 13322020, 13517958, 13713488, 13908606, + 14103313, 14297606, 14491484, 14684946, 14877990, 15070616, 15262821, + 15454604, 15645964, 15836900, 16027410, 16217493, 16407147, 16596372, + 16785165, 16973527, 17161454, 17348947, 17536003, 17722621, 17908801, + 18094540, 18279839, 18464694, 18649105, 18833072, 19016592, 19199664, + 19382287, 19564460, 19746182, 19927451, 20108266, 20288627, 20468531, + 20647978, 20826966, 21005495, 21183562, 21361168, 21538310, 21714989, + 21891201, 22066947, 22242225, 22417034, 22591374, 22765242, 22938638, + 23111560, 23284008, 23455981, 23627477, 23798495, 23969035, 24139094, + 24308673, 24477770, 24646384, 24814514, 24982160, 25149319, 25315990, + 25482174, 25647869, 25813074, 25977788, 26142009, 26305738, 26468973, + 26631712, 26793956, 26955703, 27116952, 27277702, 27437953, 27597703, + 27756952, 27915698, 28073940, 28231679, 28388912, 28545639, 28701859, + 28857572, 29012776, 29167470, 29321654, 29475326, 29628487, 29781134, + 29933268, 30084887, 30235991, 30386579, 30536649, 30686202, 30835236, + 30983751, 31131746, 31279219, 31426171, 31572601, 31718507, 31863889, + 32008746, 32153079, 32296884, 32440163, 32582915, 32725138, 32866832, + 33007996, 33148630, 33288732, 33428303, 33567342, 33705847, 33843819, + 33981256, 34118158, 34254524, 34390354, 34525647, 34660403, 34794620, + 34928299, 35061438, 35194037, 35326095, 35457612, 35588588, 35719021, + 35848911, 35978258, 36107061, 36235319, 36363033, 36490200, 36616822, + 36742897, 36868425, 36993405, 37117837, 37241720, 37365054, 37487839, + 37610073, 37731757, 37852890, 37973472, 38093501, 38212978, 38331903, + 38450274, 38568091, 38685355, 38802064, 38918218, 39033817, 39148860, + 39263347, 39377277, 39490651, 39603468, 39715727, 39827428, 39938571, + 40049155, 40159181, 40268647, 40377554, 40485900, 40593687, 40700913, + 40807578, 40913682, 41019225, 41124206, 41228626, 41332483, 41435777, + 41538509, 41640678, 41742283, 41843326, 41943804, 42043719, 42143069, + 42241855, 42340077, 42437734, 42534826, 42631353, 42727314, 42822710, + 42917541, 43011805, 43105504, 43198636, 43291203, 43383202, 43474636, + 43565502, 43655802, 43745535, 43834701, 43923300, 44011332, 44098796, + 44185693, 44272022, 44357784, 44442979, 44527605, 44611664, 44695155, + 44778079, 44860434, 44942222, 45023442, 45104093, 45184177, 45263693, + 45342641, 45421021, 45498833, 45576077, 45652753, 45728861, 45804402, + 45879374, 45953779, 46027616, 46100886, 46173588, 46245722, 46317289, + 46388288, 46458721, 46528586, 46597884, 46666614, 46734778, 46802376, + 46869406, 46935870, 47001768, 47067099, 47131864, 47196064, 47259697, + 47322765, 47385267, 47447204, 47508575, 47569382, 47629624, 47689301, + 47748414, 47806963, 47864948, 47922369, 47979226, 48035520, 48091251, + 48146419, 48201024, 48255067, 48308548, 48361467, 48413825, 48465621, + 48516856, 48567530, 48617644, 48667198, 48716191, 48764625, 48812500, + 48859816, 48906573, 48952772, 48998413, 49043496, 49088021, 49131990, + 49175402, 49218258, 49260558, 49302302, 49343491, 49384126, 49424205, + 49463731, 49502703, 49541122, 49578988, 49616301, 49653063, 49689273, + 49724931, 49760039, 49794597, 49828604, 49862062, 49894971, 49927332, + 49959144, 49990409, 50021126, 50051297, 50080922, 50110001, 50138534, + 50166523, 50193968, 50220868, 50247226, 50273041, 50298313, 50323044, + 50347234, 50370883, 50393992, 50416561, 50438591, 50460083, 50481037, + 50501454, 50521333, 50540677, 50559485, 50577758, 50595496, 50612700, + 50629372, 50645510, 50661116, 50676191, 50690735, 50704749, 50718233, + 50731188, 50743615, 50755514, 50766886, 50777731, 50788051, 50797845, + 50807115, 50815861, 50824084, 50831785, 50838963, 50845621, 50851758, + 50857375, 50862473, 50867053, 50871115, 50874660, 50877689, 50880203, + 50882201, 50883686, 50884657, 50885116, 50885062, 50884498, 50883423, + 50881838, 50879745, 50877143, 50874034, 50870419, 50866297, 50861671, + 50856540, 50850906, 50844769, 50838130, 50830990, 50823350, 50815210, + 50806571, 50797435, 50787801, 50777671, 50767046, 50755926, 50744313, + 50732206, 50719607, 50706517, 50692937, 50678867, 50664309, 50649262, + 50633729, 50617709, 50601204, 50584215, 50566742, 50548787, 50530350, + 50511432, 50492034, 50472158, 50451803, 50430970, 50409662, 50387878, + 50365619, 50342887, 50319683, 50296006, 50271859, 50247242, 50222156, + 50196602, 50170580, 50144093, 50117141, 50089724, 50061844, 50033502, + 50004699, 49975435, 49945712, 49915530, 49884891, 49853796, 49822245, + 49790240, 49757781, 49724870, 49691507, 49657694, 49623431, 49588720, + 49553561, 49517956, 49481905, 49445410, 49408472, 49371091, 49333269, + 49295007, 49256306, 49217166, 49177589, 49137576, 49097128, 49056246, + 49014930, 48973183, 48931006, 48888398, 48845361, 48801897, 48758007, + 48713691, 48668950, 48623786, 48578200, 48532193, 48485765, 48438919, + 48391654, 48343973, 48295876, 48247365, 48198440, 48149103, 48099354, + 48049195, 47998628, 47947652, 47896269, 47844481, 47792288, 47739692, + 47686694, 47633294, 47579495, 47525296, 47470700, 47415707, 47360319, + 47304537, 47248361, 47191794, 47134835, 47077487, 47019751, 46961627, + 46903117, 46844222, 46784943, 46725281, 46665238, 46604815, 46544013, + 46482832, 46421275, 46359343, 46297036, 46234355, 46171303, 46107880, + 46044088, 45979927, 45915399, 45850505, 45785246, 45719623, 45653639, + 45587293, 45520587, 45453522, 45386100, 45318322, 45250189, 45181701, + 45112862, 45043671, 44974129, 44904239, 44834001, 44763417, 44692487, + 44621214, 44549598, 44477640, 44405342, 44332706, 44259731, 44186420, + 44112774, 44038793, 43964480, 43889836, 43814861, 43739558, 43663926, + 43587969, 43511686, 43435079, 43358150, 43280899, 43203328, 43125438, + 43047231, 42968708, 42889869, 42810717, 42731253, 42651477, 42571391, + 42490997, 42410296, 42329288, 42247976, 42166361, 42084443, 42002224, + 41919706, 41836890, 41753777, 41670367, 41586664, 41502668, 41418379, + 41333801, 41248933, 41163777, 41078335, 40992607, 40906596, 40820302, + 40733726, 40646871, 40559736, 40472325, 40384637, 40296675, 40208439, + 40119931, 40031152, 39942103, 39852787, 39763203, 39673354, 39583241, + 39492865, 39402228, 39311330, 39220173, 39128758, 39037087, 38945162, + 38852982, 38760551, 38667868, 38574936, 38481755, 38388328, 38294655, + 38200737, 38106577, 38012175, 37917532, 37822651, 37727532, 37632176, + 37536586, 37440762, 37344706, 37248418, 37151902, 37055156, 36958184, + 36860987, 36763565, 36665920, 36568053, 36469966, 36371661, 36273137, + 36174398, 36075444, 35976276, 35876896, 35777305, 35677504, 35577496, + 35477280, 35376859, 35276234, 35175406, 35074377, 34973148, 34871719, + 34770094, 34668272, 34566256, 34464046, 34361644, 34259051, 34156270, + 34053300, 33950143, 33846801, 33743275, 33639567, 33535677, 33431607, + 33327359, 33222934, 33118332, 33013556, 32908607, 32803486, 32698194, + 32592733, 32487105, 32381310, 32275349, 32169225, 32062939, 31956491, + 31849883, 31743117, 31636194, 31529115, 31421882, 31314496, 31206957, + 31099269, 30991431, 30883446, 30775314, 30667037, 30558617, 30450054, + 30341350, 30232506, 30123524, 30014405, 29905150, 29795761, 29686239, + 29576585, 29466800, 29356887, 29246846, 29136678, 29026386, 28915970, + 28805431, 28694771, 28583992, 28473094, 28362078, 28250948, 28139702, + 28028344, 27916874, 27805293, 27693603, 27581805, 27469901, 27357891, + 27245778, 27133562, 27021245, 26908828, 26796312, 26683699, 26570990, + 26458186, 26345288, 26232299, 26119219, 26006049, 25892792, 25779447, + 25666017, 25552502, 25438905, 25325226, 25211467, 25097628, 24983712, + 24869719, 24755652, 24641510, 24527296, 24413010, 24298654, 24184230, + 24069739, 23955181, 23840558, 23725872, 23611123, 23496314, 23381444, + 23266517, 23151532, 23036491, 22921396, 22806247, 22691046, 22575795, + 22460494, 22345145, 22229748, 22114306, 21998820, 21883290, 21767718, + 21652106, 21536454, 21420764, 21305038, 21189275, 21073478, 20957648, + 20841787, 20725894, 20609972, 20494022, 20378045, 20262042, 20146015, + 20029965, 19913893, 19797800, 19681687, 19565556, 19449409, 19333245, + 19217067, 19100875, 18984672, 18868457, 18752233, 18636000, 18519761, + 18403515, 18287264, 18171009, 18054753, 17938495, 17822237, 17705980, + 17589726, 17473475, 17357229, 17240989, 17124757, 17008533, 16892318, + 16776114, 16659922, 16543743, 16427579, 16311430, 16195298, 16079184, + 15963089, 15847014, 15730960, 15614929, 15498922, 15382939, 15266983, + 15151054, 15035153, 14919282, 14803441, 14687633, 14571857, 14456116, + 14340410, 14224740, 14109108, 13993514, 13877961, 13762448, 13646978, + 13531551, 13416168, 13300831, 13185541, 13070298, 12955104, 12839960, + 12724868, 12609827, 12494840, 12379907, 12265030, 12150210, 12035448, + 11920744, 11806100, 11691518, 11576997, 11462540, 11348147, 11233820, + 11119559, 11005366, 10891241, 10777187, 10663203, 10549291, 10435452, + 10321687, 10207997, 10094383, 9980847, 9867389, 9754010, 9640712, + 9527495, 9414361, 9301310, 9188344, 9075463, 8962670, 8849964, 8737346, + 8624819, 8512382, 8400037, 8287785, 8175627, 8063564, 7951596, 7839726, + 7727953, 7616280, 7504706, 7393234, 7281863, 7170595, 7059432, 6948373, + 6837420, 6726574, 6615836, 6505207, 6394687, 6284279, 6173982, 6063799, + 5953729, 5843773, 5733934, 5624211, 5514605, 5405118, 5295751, 5186504, + 5077379, 4968376, 4859496, 4750740, 4642110, 4533606, 4425228, 4316979, + 4208859, 4100868, 3993008, 3885280, 3777684, 3670222, 3562894, 3455702, + 3348645, 3241726, 3134945, 3028303, 2921800, 2815438, 2709218, 2603140, + 2497205, 2391414, 2285769, 2180269, 2074917, 1969711, 1864655, 1759748, + 1654991, 1550385, 1445931, 1341630, 1237482, 1133489, 1029652, 925970, + 822446, 719079, 615871, 512822, 409934, 307206, 204641, 102239, 0, + -102074, -203984, -305727, -407304, -508713, -609954, -711026, -811928, + -912659, -1013219, -1113607, -1213821, -1313862, -1413728, -1513419, + -1612933, -1712271, -1811432, -1910414, -2009216, -2107839, -2206282, + -2304543, -2402622, -2500518, -2598231, -2695759, -2793102, -2890260, + -2987232, -3084016, -3180612, -3277020, -3373238, -3469267, -3565105, + -3660751, -3756206, -3851467, -3946536, -4041410, -4136089, -4230573, + -4324861, -4418952, -4512845, -4606541, -4700037, -4793334, -4886431, + -4979327, -5072022, -5164514, -5256804, -5348891, -5440773, -5532451, + -5623924, -5715190, -5806251, -5897104, -5987749, -6078186, -6168414, + -6258432, -6348241, -6437838, -6527224, -6616398, -6705359, -6794108, + -6882642, -6970962, -7059068, -7146957, -7234631, -7322088, -7409328, + -7496350, -7583154, -7669739, -7756104, -7842250, -7928174, -8013878, + -8099360, -8184620, -8269658, -8354472, -8439062, -8523428, -8607570, + -8691485, -8775176, -8858639, -8941876, -9024886, -9107667, -9190221, + -9272545, -9354640, -9436505, -9518140, -9599544, -9680717, -9761658, + -9842367, -9922843, -10003086, -10083095, -10162870, -10242410, + -10321716, -10400786, -10479620, -10558218, -10636579, -10714702, + -10792588, -10870236, -10947646, -11024816, -11101747, -11178438, + -11254889, -11331100, -11407069, -11482797, -11558283, -11633526, + -11708527, -11783286, -11857800, -11932071, -12006098, -12079880, + -12153417, -12226708, -12299754, -12372554, -12445108, -12517414, + -12589474, -12661286, -12732850, -12804166, -12875233, -12946052, + -13016621, -13086941, -13157011, -13226830, -13296399, -13365717, + -13434784, -13503600, -13572163, -13640475, -13708534, -13776340, + -13843893, -13911193, -13978239, -14045031, -14111569, -14177853, + -14243882, -14309655, -14375174, -14440436, -14505443, -14570194, + -14634688, -14698926, -14762907, -14826630, -14890096, -14953305, + -15016255, -15078948, -15141381, -15203557, -15265473, -15327131, + -15388529, -15449667, -15510546, -15571165, -15631524, -15691622, + -15751460, -15811036, -15870352, -15929407, -15988200, -16046732, + -16105002, -16163010, -16220756, -16278240, -16335461, -16392419, + -16449115, -16505548, -16561717, -16617623, -16673266, -16728645, + -16783761, -16838612, -16893200, -16947523, -17001582, -17055376, + -17108906, -17162171, -17215171, -17267906, -17320376, -17372581, + -17424521, -17476195, -17527604, -17578747, -17629624, -17680235, + -17730581, -17780660, -17830473, -17880020, -17929301, -17978315, + -18027063, -18075545, -18123759, -18171707, -18219389, -18266803, + -18313951, -18360832, -18407445, -18453792, -18499872, -18545684, + -18591230, -18636508, -18681519, -18726263, -18770739, -18814948, + -18858890, -18902565, -18945972, -18989111, -19031984, -19074588, + -19116926, -19158996, -19200798, -19242333, -19283601, -19324601, + -19365334, -19405799, -19445997, -19485928, -19525591, -19564987, + -19604116, -19642977, -19681571, -19719898, -19757958, -19795751, + -19833277, -19870535, -19907527, -19944252, -19980710, -20016901, + -20052825, -20088483, -20123874, -20158998, -20193856, -20228448, + -20262773, -20296832, -20330625, -20364152, -20397413, -20430408, + -20463137, -20495600, -20527798, -20559731, -20591397, -20622799, + -20653936, -20684807, -20715413, -20745755, -20775832, -20805644, + -20835192, -20864476, -20893495, -20922250, -20950741, -20978969, + -21006933, -21034633, -21062070, -21089244, -21116155, -21142802, + -21169187, -21195310, -21221170, -21246768, -21272103, -21297177, + -21321989, -21346540, -21370829, -21394856, -21418623, -21442129, + -21465374, -21488359, -21511084, -21533548, -21555753, -21577697, + -21599383, -21620809, -21641976, -21662884, -21683533, -21703925, + -21724057, -21743932, -21763549, -21782909, -21802011, -21820856, + -21839444, -21857776, -21875851, -21893670, -21911233, -21928541, + -21945593, -21962390, -21978932, -21995219, -22011252, -22027031, + -22042556, -22057827, -22072845, -22087610, -22102121, -22116381, + -22130388, -22144143, -22157646, -22170898, -22183899, -22196649, + -22209148, -22221397, -22233396, -22245145, -22256645, -22267896, + -22278897, -22289651, -22300156, -22310413, -22320423, -22330185, + -22339700, -22348969, -22357991, -22366768, -22375298, -22383584, + -22391624, -22399419, -22406970, -22414277, -22421341, -22428161, + -22434738, -22441072, -22447164, -22453014, -22458622, -22463989, + -22469115, -22474000, -22478645, -22483050, -22487216, -22491142, + -22494830, -22498279, -22501490, -22504464, -22507200, -22509699, + -22511962, -22513988, -22515778, -22517333, -22518653, -22519739, + -22520590, -22521207, -22521590, -22521741, -22521659, -22521344, + -22520797, -22520019, -22519010, -22517770, -22516300, -22514600, + -22512670, -22510511, -22508124, -22505508, -22502665, -22499594, + -22496295, -22492771, -22489020, -22485044, -22480842, -22476415, + -22471764, -22466889, -22461790, -22456468, -22450923, -22445156, + -22439167, -22432957, -22426526, -22419874, -22413003, -22405911, + -22398601, -22391072, -22383324, -22375359, -22367176, -22358777, + -22350161, -22341329, -22332281, -22323019, -22313542, -22303851, + -22293946, -22283828, -22273498, -22262955, -22252201, -22241235, + -22230058, -22218671, -22207075, -22195269, -22183254, -22171030, + -22158599, -22145961, -22133115, -22120064, -22106806, -22093343, + -22079675, -22065802, -22051726, -22037446, -22022963, -22008278, + -21993391, -21978302, -21963013, -21947523, -21931833, -21915944, + -21899856, -21883569, -21867085, -21850404, -21833525, -21816451, + -21799180, -21781715, -21764054, -21746200, -21728152, -21709910, + -21691476, -21672850, -21654032, -21635024, -21615825, -21596435, + -21576857, -21557089, -21537133, -21516990, -21496659, -21476141, + -21455437, -21434548, -21413473, -21392214, -21370770, -21349144, + -21327334, -21305342, -21283168, -21260813, -21238277, -21215561, + -21192665, -21169590, -21146337, -21122906, -21099297, -21075512, + -21051550, -21027412, -21003100, -20978613, -20953951, -20929117, + -20904109, -20878929, -20853578, -20828055, -20802361, -20776498, + -20750465, -20724263, -20697892, -20671354, -20644649, -20617777, + -20590740, -20563536, -20536168, -20508636, -20480939, -20453080, + -20425058, -20396874, -20368529, -20340023, -20311356, -20282531, + -20253546, -20224402, -20195101, -20165642, -20136027, -20106255, + -20076328, -20046246, -20016010, -19985620, -19955077, -19924381, + -19893534, -19862535, -19831385, -19800085, -19768635, -19737037, + -19705290, -19673395, -19641353, -19609165, -19576830, -19544350, + -19511725, -19478957, -19446044, -19412989, -19379791, -19346451, + -19312971, -19279349, -19245588, -19211688, -19177648, -19143471, + -19109156, -19074704, -19040116, -19005392, -18970533, -18935539, + -18900412, -18865152, -18829758, -18794233, -18758576, -18722789, + -18686871, -18650824, -18614648, -18578343, -18541911, -18505351, + -18468665, -18431853, -18394916, -18357854, -18320668, -18283359, + -18245927, -18208373, -18170697, -18132900, -18094983, -18056946, + -18018790, -17980515, -17942123, -17903613, -17864987, -17826245, + -17787387, -17748414, -17709328, -17670128, -17630815, -17591389, + -17551852, -17512204, -17472446, -17432577, -17392600, -17352514, + -17312320, -17272019, -17231611, -17191096, -17150477, -17109753, + -17068924, -17027992, -16986957, -16945819, -16904580, -16863240, + -16821799, -16780258, -16738619, -16696880, -16655044, -16613110, + -16571079, -16528953, -16486731, -16444414, -16402002, -16359498, + -16316900, -16274209, -16231427, -16188554, -16145591, -16102537, + -16059394, -16016163, -15972843, -15929436, -15885943, -15842363, + -15798698, -15754947, -15711113, -15667194, -15623193, -15579109, + -15534944, -15490697, -15446370, -15401962, -15357476, -15312910, + -15268267, -15223546, -15178748, -15133874, -15088925, -15043900, + -14998801, -14953628, -14908382, -14863064, -14817673, -14772212, + -14726679, -14681077, -14635405, -14589664, -14543855, -14497979, + -14452035, -14406025, -14359949, -14313808, -14267603, -14221334, + -14175001, -14128606, -14082148, -14035629, -13989049, -13942409, + -13895710, -13848951, -13802134, -13755259, -13708327, -13661338, + -13614293, -13567193, -13520038, -13472828, -13425566, -13378250, + -13330882, -13283462, -13235991, -13188469, -13140898, -13093277, + -13045607, -12997890, -12950124, -12902312, -12854453, -12806549, + -12758599, -12710605, -12662567, -12614486, -12566362, -12518196, + -12469988, -12421739, -12373450, -12325120, -12276752, -12228345, + -12179901, -12131418, -12082899, -12034344, -11985753, -11937127, + -11888466, -11839772, -11791044, -11742283, -11693491, -11644667, + -11595811, -11546926, -11498011, -11449066, -11400093, -11351092, + -11302063, -11253007, -11203925, -11154818, -11105685, -11056527, + -11007346, -10958141, -10908913, -10859663, -10810391, -10761098, + -10711784, -10662451, -10613097, -10563726, -10514335, -10464927, + -10415502, -10366060, -10316602, -10267129, -10217641, -10168138, + -10118622, -10069092, -10019549, -9969995, -9920429, -9870852, + -9821264, -9771667, -9722060, -9672444, -9622820, -9573189, -9523550, + -9473905, -9424253, -9374596, -9324935, -9275268, -9225598, -9175925, + -9126249, -9076570, -9026890, -8977209, -8927527, -8877845, -8828163, + -8778483, -8728804, -8679127, -8629453, -8579781, -8530114, -8480451, + -8430792, -8381139, -8331491, -8281850, -8232215, -8182588, -8132969, + -8083358, -8033756, -7984164, -7934581, -7885009, -7835448, -7785899, + -7736361, -7686836, -7637325, -7587826, -7538342, -7488872, -7439418, + -7389979, -7340556, -7291150, -7241761, -7192389, -7143036, -7093701, + -7044386, -6995090, -6945814, -6896559, -6847324, -6798112, -6748922, + -6699754, -6650609, -6601488, -6552391, -6503318, -6454271, -6405249, + -6356253, -6307283, -6258341, -6209425, -6160538, -6111680, -6062850, + -6014049, -5965279, -5916538, -5867829, -5819150, -5770504, -5721889, + -5673308, -5624759, -5576244, -5527763, -5479316, -5430905, -5382529, + -5334189, -5285885, -5237618, -5189388, -5141196, -5093042, -5044927, + -4996851, -4948815, -4900818, -4852862, -4804946, -4757072, -4709240, + -4661450, -4613702, -4565998, -4518337, -4470720, -4423148, -4375620, + -4328137, -4280701, -4233310, -4185966, -4138668, -4091419, -4044217, + -3997063, -3949958, -3902902, -3855895, -3808938, -3762032, -3715177, + -3668372, -3621619, -3574919, -3528270, -3481675, -3435132, -3388643, + -3342209, -3295828, -3249503, -3203233, -3157018, -3110860, -3064757, + -3018712, -2972724, -2926794, -2880921, -2835107, -2789352, -2743656, + -2698019, -2652442, -2606926, -2561470, -2516076, -2470743, -2425472, + -2380263, -2335116, -2290033, -2245013, -2200056, -2155164, -2110336, + -2065573, -2020875, -1976243, -1931676, -1887176, -1842743, -1798376, + -1754077, -1709845, -1665682, -1621587, -1577560, -1533603, -1489716, + -1445898, -1402150, -1358472, -1314866, -1271331, -1227867, -1184475, + -1141155, -1097908, -1054733, -1011632, -968604, -925651, -882771, + -839966, -797235, -754580, -712001, -669497, -627069, -584718, -542443, + -500245, -458125, -416083, -374118, -332232, -290425, -248696, -207047, + -165477, -123987, -82577, -41248, 0, 41167, 82253, 123258, 164181, + 205021, 245779, 286454, 327046, 367555, 407980, 448322, 488579, 528751, + 568839, 608842, 648759, 688591, 728337, 767997, 807570, 847057, 886457, + 925770, 964995, 1004132, 1043182, 1082143, 1121016, 1159800, 1198495, + 1237101, 1275617, 1314044, 1352381, 1390627, 1428783, 1466848, 1504822, + 1542705, 1580496, 1618196, 1655804, 1693320, 1730743, 1768073, 1805311, + 1842456, 1879507, 1916465, 1953329, 1990099, 2026775, 2063356, 2099843, + 2136235, 2172532, 2208733, 2244839, 2280849, 2316763, 2352582, 2388303, + 2423929, 2459457, 2494889, 2530223, 2565460, 2600600, 2635641, 2670585, + 2705431, 2740178, 2774827, 2809377, 2843828, 2878180, 2912432, 2946586, + 2980639, 3014593, 3048447, 3082201, 3115854, 3149407, 3182859, 3216210, + 3249460, 3282609, 3315657, 3348603, 3381447, 3414190, 3446830, 3479368, + 3511804, 3544137, 3576368, 3608496, 3640521, 3672443, 3704261, 3735976, + 3767588, 3799096, 3830500, 3861800, 3892996, 3924087, 3955074, 3985957, + 4016735, 4047408, 4077976, 4108439, 4138797, 4169049, 4199196, 4229238, + 4259173, 4289003, 4318727, 4348345, 4377857, 4407262, 4436561, 4465753, + 4494839, 4523818, 4552690, 4581455, 4610113, 4638663, 4667107, 4695443, + 4723671, 4751792, 4779805, 4807711, 4835508, 4863198, 4890779, 4918253, + 4945618, 4972874, 5000022, 5027062, 5053993, 5080815, 5107529, 5134134, + 5160630, 5187016, 5213294, 5239463, 5265522, 5291472, 5317313, 5343044, + 5368666, 5394178, 5419580, 5444873, 5470056, 5495129, 5520092, 5544946, + 5569689, 5594322, 5618845, 5643258, 5667561, 5691754, 5715836, 5739808, + 5763669, 5787420, 5811061, 5834590, 5858010, 5881318, 5904517, 5927604, + 5950581, 5973446, 5996201, 6018846, 6041379, 6063802, 6086113, 6108314, + 6130404, 6152382, 6174250, 6196007, 6217652, 6239187, 6260610, 6281923, + 6303124, 6324214, 6345193, 6366061, 6386818, 6407463, 6427998, 6448421, + 6468733, 6488934, 6509023, 6529002, 6548869, 6568625, 6588270, 6607804, + 6627226, 6646538, 6665738, 6684827, 6703805, 6722672, 6741428, 6760072, + 6778606, 6797028, 6815340, 6833540, 6851630, 6869608, 6887476, 6905233, + 6922878, 6940413, 6957837, 6975150, 6992353, 7009445, 7026426, 7043296, + 7060055, 7076704, 7093243, 7109671, 7125988, 7142195, 7158292, 7174278, + 7190154, 7205919, 7221575, 7237120, 7252555, 7267880, 7283095, 7298200, + 7313195, 7328080, 7342855, 7357521, 7372077, 7386523, 7400860, 7415087, + 7429205, 7443213, 7457112, 7470902, 7484583, 7498154, 7511617, 7524971, + 7538215, 7551351, 7564378, 7577297, 7590106, 7602808, 7615401, 7627885, + 7640261, 7652529, 7664689, 7676741, 7688685, 7700521, 7712250, 7723870, + 7735383, 7746789, 7758087, 7769278, 7780362, 7791338, 7802208, 7812970, + 7823626, 7834175, 7844618, 7854953, 7865183, 7875306, 7885323, 7895234, + 7905038, 7914737, 7924330, 7933818, 7943200, 7952476, 7961647, 7970713, + 7979673, 7988529, 7997280, 8005926, 8014467, 8022904, 8031236, 8039464, + 8047588, 8055608, 8063524, 8071336, 8079044, 8086649, 8094151, 8101549, + 8108844, 8116036, 8123125, 8130111, 8136995, 8143776, 8150455, 8157031, + 8163506, 8169878, 8176149, 8182318, 8188386, 8194352, 8200217, 8205980, + 8211643, 8217205, 8222666, 8228027, 8233288, 8238448, 8243508, 8248468, + 8253328, 8258089, 8262750, 8267312, 8271775, 8276139, 8280404, 8284570, + 8288637, 8292607, 8296478, 8300251, 8303926, 8307503, 8310983, 8314365, + 8317650, 8320838, 8323929, 8326924, 8329822, 8332623, 8335328, 8337937, + 8340450, 8342867, 8345189, 8347416, 8349547, 8351583, 8353524, 8355371, + 8357123, 8358780, 8360344, 8361814, 8363189, 8364471, 8365660, 8366756, + 8367758, 8368667, 8369484, 8370208, 8370840, 8371380, 8371828, 8372184, + 8372448, 8372621, 8372703, 8372693, 8372593, 8372403, 8372121, 8371750, + 8371288, 8370737, 8370096, 8369365, 8368545, 8367636, 8366638, 8365552, + 8364377, 8363113, 8361762, 8360323, 8358796, 8357181, 8355479, 8353690, + 8351814, 8349852, 8347803, 8345668, 8343446, 8341139, 8338746, 8336268, + 8333704, 8331056, 8328322, 8325504, 8322602, 8319615, 8316545, 8313390, + 8310152, 8306831, 8303427, 8299939, 8296369, 8292717, 8288982, 8285165, + 8281267, 8277286, 8273225, 8269082, 8264858, 8260553, 8256168, 8251703, + 8247157, 8242532, 8237827, 8233042, 8228179, 8223236, 8218215, 8213115, + 8207936, 8202680, 8197346, 8191934, 8186445, 8180879, 8175235, 8169515, + 8163719, 8157846, 8151897, 8145873, 8139772, 8133597, 8127346, 8121021, + 8114620, 8108146, 8101597, 8094974, 8088278, 8081508, 8074665, 8067748, + 8060759, 8053698, 8046564, 8039358, 8032080, 8024730, 8017309, 8009817, + 8002254, 7994621, 7986917, 7979143, 7971299, 7963385, 7955401, 7947349, + 7939227, 7931037, 7922778, 7914451, 7906056, 7897593, 7889063, 7880465, + 7871800, 7863068, 7854270, 7845406, 7836475, 7827478, 7818416, 7809289, + 7800096, 7790839, 7781517, 7772130, 7762680, 7753165, 7743587, 7733946, + 7724241, 7714473, 7704643, 7694751, 7684796, 7674779, 7664701, 7654561, + 7644360, 7634098, 7623776, 7613393, 7602949, 7592446, 7581884, 7571261, + 7560580, 7549840, 7539041, 7528183, 7517268, 7506294, 7495263, 7484174, + 7473028, 7461826, 7450566, 7439250, 7427878, 7416451, 7404967, 7393428, + 7381834, 7370185, 7358481, 7346723, 7334911, 7323044, 7311125, 7299151, + 7287125, 7275046, 7262914, 7250730, 7238493, 7226205, 7213865, 7201474, + 7189031, 7176538, 7163994, 7151400, 7138756, 7126062, 7113318, 7100525, + 7087683, 7074792, 7061852, 7048864, 7035829, 7022745, 7009613, 6996435, + 6983209, 6969937, 6956618, 6943253, 6929841, 6916384, 6902882, 6889334, + 6875741, 6862103, 6848421, 6834695, 6820924, 6807110, 6793253, 6779352, + 6765408, 6751422, 6737393, 6723322, 6709208, 6695054, 6680857, 6666620, + 6652341, 6638022, 6623663, 6609263, 6594823, 6580344, 6565825, 6551267, + 6536671, 6522035, 6507361, 6492649, 6477899, 6463112, 6448287, 6433425, + 6418526, 6403590, 6388618, 6373610, 6358566, 6343486, 6328371, 6313221, + 6298036, 6282817, 6267563, 6252275, 6236953, 6221598, 6206209, 6190787, + 6175332, 6159845, 6144325, 6128773, 6113189, 6097574, 6081927, 6066250, + 6050541, 6034802, 6019032, 6003233, 5987403, 5971544, 5955656, 5939738, + 5923792, 5907817, 5891813, 5875782, 5859722, 5843636, 5827521, 5811380, + 5795211, 5779016, 5762795, 5746548, 5730274, 5713975, 5697651, 5681301, + 5664927, 5648527, 5632104, 5615656, 5599184, 5582689, 5566170, 5549628, + 5533063, 5516476, 5499865, 5483233, 5466579, 5449903, 5433205, 5416486, + 5399746, 5382986, 5366204, 5349403, 5332581, 5315740, 5298879, 5281999, + 5265099, 5248181, 5231244, 5214289, 5197315, 5180324, 5163315, 5146289, + 5129245, 5112184, 5095107, 5078013, 5060903, 5043777, 5026635, 5009478, + 4992305, 4975117, 4957915, 4940697, 4923466, 4906220, 4888960, 4871687, + 4854400, 4837099, 4819786, 4802460, 4785122, 4767771, 4750409, 4733034, + 4715648, 4698250, 4680841, 4663421, 4645991, 4628550, 4611099, 4593638, + 4576167, 4558686, 4541196, 4523697, 4506189, 4488673, 4471148, 4453614, + 4436073, 4418524, 4400967, 4383403, 4365832, 4348254, 4330669, 4313078, + 4295481, 4277877, 4260268, 4242653, 4225033, 4207408, 4189778, 4172143, + 4154503, 4136859, 4119212, 4101560, 4083905, 4066246, 4048584, 4030919, + 4013251, 3995581, 3977909, 3960234, 3942557, 3924879, 3907199, 3889517, + 3871835, 3854152, 3836468, 3818784, 3801099, 3783414, 3765730, 3748046, + 3730362, 3712679, 3694997, 3677317, 3659637, 3641960, 3624284, 3606610, + 3588938, 3571269, 3553602, 3535938, 3518277, 3500619, 3482965, 3465314, + 3447667, 3430024, 3412386, 3394751, 3377121, 3359496, 3341876, 3324261, + 3306652, 3289048, 3271450, 3253858, 3236271, 3218692, 3201118, 3183552, + 3165992, 3148439, 3130894, 3113356, 3095826, 3078304, 3060790, 3043283, + 3025786, 3008297, 2990816, 2973345, 2955883, 2938430, 2920987, 2903553, + 2886129, 2868716, 2851312, 2833919, 2816537, 2799165, 2781804, 2764455, + 2747116, 2729790, 2712474, 2695171, 2677880, 2660601, 2643334, 2626080, + 2608839, 2591610, 2574395, 2557193, 2540004, 2522829, 2505667, 2488520, + 2471386, 2454267, 2437162, 2420072, 2402997, 2385936, 2368891, 2351861, + 2334846, 2317847, 2300864, 2283896, 2266945, 2250010, 2233091, 2216189, + 2199303, 2182435, 2165583, 2148749, 2131932, 2115133, 2098351, 2081587, + 2064841, 2048113, 2031404, 2014713, 1998040, 1981387, 1964752, 1948136, + 1931540, 1914963, 1898405, 1881867, 1865349, 1848851, 1832373, 1815915, + 1799477, 1783060, 1766664, 1750289, 1733935, 1717601, 1701289, 1684999, + 1668730, 1652483, 1636257, 1620054, 1603872, 1587713, 1571577, 1555462, + 1539371, 1523302, 1507257, 1491234, 1475234, 1459258, 1443306, 1427377, + 1411471, 1395590, 1379733, 1363899, 1348091, 1332306, 1316546, 1300811, + 1285100, 1269414, 1253754, 1238118, 1222508, 1206923, 1191364, 1175831, + 1160323, 1144841, 1129385, 1113956, 1098552, 1083175, 1067825, 1052501, + 1037204, 1021934, 1006691, 991475, 976286, 961124, 945990, 930884, + 915805, 900754, 885731, 870735, 855768, 840830, 825919, 811037, 796184, + 781359, 766563, 751796, 737058, 722349, 707669, 693019, 678398, 663806, + 649244, 634712, 620210, 605737, 591295, 576883, 562501, 548149, 533828, + 519537, 505277, 491047, 476848, 462681, 448544, 434438, 420364, 406320, + 392308, 378328, 364379, 350462, 336576, 322723, 308901, 295111, 281353, + 267628, 253934, 240274, 226645, 213049, 199485, 185955, 172457, 158991, + 145559, 132160, 118794, 105461, 92161, 78894, 65661, 52462, 39296, + 26163, 13064, 0, -13031, -26028, -38991, -51920, -64815, -77676, + -90503, -103295, -116053, -128776, -141465, -154119, -166738, -179323, + -191873, -204388, -216868, -229313, -241723, -254097, -266437, -278741, + -291010, -303244, -315442, -327605, -339732, -351823, -363879, -375899, + -387884, -399832, -411745, -423621, -435462, -447266, -459035, -470767, + -482463, -494122, -505746, -517333, -528883, -540397, -551875, -563316, + -574720, -586088, -597419, -608713, -619971, -631191, -642375, -653522, + -664632, -675704, -686740, -697739, -708700, -719625, -730512, -741362, + -752174, -762949, -773687, -784387, -795050, -805676, -816264, -826814, + -837327, -847802, -858240, -868640, -879002, -889326, -899613, -909862, + -920073, -930246, -940381, -950479, -960538, -970560, -980543, -990488, + -1000396, -1010265, -1020096, -1029889, -1039644, -1049361, -1059039, + -1068680, -1078282, -1087846, -1097371, -1106859, -1116308, -1125718, + -1135091, -1144425, -1153720, -1162977, -1172196, -1181376, -1190518, + -1199622, -1208687, -1217713, -1226701, -1235651, -1244562, -1253434, + -1262268, -1271063, -1279820, -1288538, -1297218, -1305859, -1314462, + -1323026, -1331551, -1340038, -1348486, -1356895, -1365266, -1373598, + -1381892, -1390147, -1398363, -1406540, -1414680, -1422780, -1430842, + -1438865, -1446849, -1454795, -1462702, -1470571, -1478401, -1486192, + -1493945, -1501659, -1509334, -1516971, -1524569, -1532129, -1539650, + -1547132, -1554576, -1561981, -1569348, -1576676, -1583966, -1591217, + -1598429, -1605603, -1612739, -1619836, -1626894, -1633914, -1640896, + -1647839, -1654744, -1661610, -1668438, -1675228, -1681979, -1688692, + -1695366, -1702002, -1708600, -1715160, -1721681, -1728164, -1734609, + -1741016, -1747384, -1753714, -1760007, -1766261, -1772476, -1778654, + -1784794, -1790896, -1796959, -1802985, -1808973, -1814923, -1820835, + -1826709, -1832545, -1838343, -1844104, -1849826, -1855511, -1861159, + -1866768, -1872340, -1877874, -1883371, -1888830, -1894252, -1899636, + -1904982, -1910291, -1915563, -1920797, -1925994, -1931154, -1936276, + -1941361, -1946409, -1951420, -1956393, -1961329, -1966229, -1971091, + -1975916, -1980705, -1985456, -1990171, -1994848, -1999489, -2004093, + -2008660, -2013191, -2017685, -2022142, -2026563, -2030947, -2035295, + -2039607, -2043881, -2048120, -2052322, -2056488, -2060618, -2064712, + -2068769, -2072790, -2076776, -2080725, -2084638, -2088516, -2092357, + -2096163, -2099933, -2103667, -2107366, -2111029, -2114656, -2118248, + -2121804, -2125325, -2128811, -2132261, -2135676, -2139056, -2142400, + -2145710, -2148984, -2152224, -2155428, -2158598, -2161732, -2164832, + -2167897, -2170928, -2173923, -2176885, -2179811, -2182703, -2185561, + -2188385, -2191174, -2193929, -2196649, -2199336, -2201988, -2204607, + -2207191, -2209742, -2212258, -2214741, -2217191, -2219606, -2221988, + -2224337, -2226652, -2228933, -2231181, -2233396, -2235578, -2237727, + -2239842, -2241924, -2243974, -2245990, -2247974, -2249924, -2251842, + -2253728, -2255581, -2257401, -2259189, -2260944, -2262667, -2264358, + -2266016, -2267643, -2269237, -2270800, -2272330, -2273828, -2275295, + -2276730, -2278133, -2279505, -2280845, -2282154, -2283431, -2284677, + -2285892, -2287076, -2288228, -2289350, -2290440, -2291499, -2292528, + -2293526, -2294493, -2295430, -2296336, -2297211, -2298057, -2298871, + -2299656, -2300410, -2301135, -2301829, -2302493, -2303128, -2303732, + -2304307, -2304852, -2305368, -2305854, -2306310, -2306738, -2307135, + -2307504, -2307844, -2308154, -2308436, -2308688, -2308912, -2309107, + -2309273, -2309411, -2309520, -2309601, -2309653, -2309677, -2309673, + -2309640, -2309580, -2309492, -2309375, -2309231, -2309059, -2308860, + -2308633, -2308378, -2308096, -2307786, -2307449, -2307086, -2306694, + -2306276, -2305831, -2305359, -2304861, -2304335, -2303783, -2303205, + -2302600, -2301968, -2301310, -2300626, -2299916, -2299180, -2298418, + -2297630, -2296816, -2295976, -2295111, -2294220, -2293304, -2292362, + -2291395, -2290403, -2289386, -2288343, -2287276, -2286183, -2285066, + -2283924, -2282758, -2281567, -2280351, -2279111, -2277847, -2276558, + -2275246, -2273909, -2272548, -2271164, -2269755, -2268323, -2266868, + -2265388, -2263886, -2262360, -2260810, -2259238, -2257642, -2256023, + -2254382, -2252717, -2251030, -2249320, -2247587, -2245832, -2244055, + -2242255, -2240433, -2238589, -2236722, -2234834, -2232924, -2230992, + -2229038, -2227063, -2225066, -2223047, -2221007, -2218946, -2216864, + -2214760, -2212636, -2210490, -2208324, -2206137, -2203929, -2201701, + -2199452, -2197183, -2194893, -2192584, -2190254, -2187904, -2185533, + -2183144, -2180734, -2178304, -2175855, -2173387, -2170899, -2168391, + -2165865, -2163319, -2160754, -2158170, -2155567, -2152945, -2150305, + -2147646, -2144968, -2142272, -2139557, -2136824, -2134073, -2131304, + -2128517, -2125712, -2122889, -2120048, -2117189, -2114313, -2111420, + -2108509, -2105581, -2102635, -2099672, -2096693, -2093696, -2090682, + -2087652, -2084605, -2081541, -2078461, -2075364, -2072251, -2069122, + -2065976, -2062815, -2059637, -2056444, -2053234, -2050009, -2046769, + -2043513, -2040241, -2036954, -2033651, -2030334, -2027001, -2023654, + -2020291, -2016913, -2013521, -2010114, -2006693, -2003257, -1999806, + -1996342, -1992863, -1989370, -1985863, -1982341, -1978806, -1975258, + -1971695, -1968119, -1964529, -1960926, -1957310, -1953680, -1950037, + -1946381, -1942712, -1939030, -1935336, -1931628, -1927908, -1924175, + -1920430, -1916672, -1912902, -1909120, -1905326, -1901520, -1897701, + -1893871, -1890029, -1886175, -1882310, -1878433, -1874545, -1870645, + -1866734, -1862812, -1858879, -1854935, -1850980, -1847014, -1843037, + -1839050, -1835051, -1831043, -1827024, -1822995, -1818955, -1814905, + -1810845, -1806776, -1802696, -1798606, -1794507, -1790398, -1786280, + -1782152, -1778014, -1773867, -1769711, -1765546, -1761372, -1757189, + -1752997, -1748796, -1744586, -1740368, -1736141, -1731905, -1727662, + -1723409, -1719149, -1714880, -1710604, -1706319, -1702027, -1697726, + -1693418, -1689102, -1684779, -1680448, -1676110, -1671764, -1667411, + -1663051, -1658684, -1654310, -1649929, -1645540, -1641146, -1636744, + -1632336, -1627921, -1623500, -1619073, -1614639, -1610199, -1605753, + -1601301, -1596843, -1592378, -1587909, -1583433, -1578952, -1574465, + -1569972, -1565474, -1560971, -1556463, -1551949, -1547430, -1542906, + -1538377, -1533844, -1529305, -1524762, -1520214, -1515662, -1511105, + -1506543, -1501977, -1497407, -1492833, -1488255, -1483672, -1479086, + -1474495, -1469901, -1465303, -1460702, -1456097, -1451488, -1446876, + -1442260, -1437641, -1433019, -1428394, -1423766, -1419135, -1414500, + -1409863, -1405223, -1400581, -1395935, -1391288, -1386637, -1381984, + -1377329, -1372672, -1368012, -1363350, -1358687, -1354021, -1349353, + -1344683, -1340012, -1335339, -1330664, -1325987, -1321310, -1316630, + -1311950, -1307267, -1302584, -1297900, -1293214, -1288528, -1283840, + -1279152, -1274463, -1269773, -1265082, -1260391, -1255699, -1251007, + -1246314, -1241621, -1236928, -1232234, -1227540, -1222847, -1218153, + -1213459, -1208765, -1204072, -1199379, -1194686, -1189993, -1185301, + -1180609, -1175918, -1171228, -1166538, -1161849, -1157161, -1152474, + -1147787, -1143102, -1138418, -1133735, -1129053, -1124372, -1119693, + -1115015, -1110338, -1105663, -1100990, -1096318, -1091648, -1086979, + -1082313, -1077648, -1072985, -1068324, -1063665, -1059009, -1054354, + -1049702, -1045052, -1040404, -1035759, -1031116, -1026476, -1021838, + -1017203, -1012571, -1007941, -1003314, -998690, -994069, -989451, + -984836, -980224, -975615, -971009, -966407, -961808, -957212, -952620, + -948031, -943445, -938863, -934285, -929711, -925140, -920573, -916010, + -911451, -906895, -902344, -897797, -893254, -888715, -884180, -879650, + -875123, -870602, -866084, -861571, -857063, -852559, -848060, -843565, + -839075, -834590, -830110, -825634, -821164, -816698, -812237, -807782, + -803331, -798886, -794446, -790011, -785581, -781157, -776738, -772325, + -767917, -763514, -759117, -754726, -750341, -745961, -741586, -737218, + -732855, -728499, -724148, -719803, -715464, -711132, -706805, -702484, + -698170, -693862, -689560, -685265, -680975, -676693, -672416, -668146, + -663883, -659626, -655376, -651132, -646895, -642665, -638442, -634225, + -630015, -625812, -621616, -617427, -613245, -609070, -604902, -600741, + -596587, -592440, -588301, -584169, -580044, -575926, -571816, -567713, + -563618, -559530, -555449, -551376, -547311, -543253, -539203, -535161, + -531126, -527099, -523080, -519069, -515065, -511069, -507082, -503102, + -499130, -495166, -491210, -487262, -483323, -479391, -475468, -471553, + -467646, -463747, -459857, -455974, -452101, -448235, -444378, -440530, + -436690, -432858, -429035, -425220, -421414, -417617, -413828, -410048, + -406276, -402514, -398760, -395014, -391278, -387550, -383832, -380122, + -376421, -372728, -369045, -365371, -361706, -358050, -354402, -350764, + -347135, -343515, -339904, -336303, -332710, -329127, -325553, -321988, + -318433, -314886, -311350, -307822, -304304, -300795, -297295, -293805, + -290325, -286854, -283392, -279940, -276497, -273064, -269641, -266227, + -262822, -259427, -256042, -252667, -249301, -245945, -242599, -239262, + -235935, -232618, -229310, -226013, -222725, -219447, -216179, -212920, + -209672, -206433, -203205, -199986, -196777, -193578, -190389, -187210, + -184041, -180882, -177733, -174594, -171466, -168347, -165238, -162139, + -159051, -155972, -152904, -149846, -146798, -143760, -140732, -137714, + -134707, -131710, -128723, -125746, -122779, -119823, -116877, -113941, + -111016, -108100, -105195, -102301, -99416, -96542, -93678, -90825, + -87982, -85149, -82327, -79515, -76713, -73922, -71141, -68370, -65610, + -62860, -60121, -57392, -54674, -51966, -49268, -46581, -43904, -41238, + -38582, -35936, -33301, -30677, -28063, -25459, -22866, -20283, -17711, + -15149, -12598, -10057, -7527, -5007, -2498, 0 +}; diff --git a/kernel/framework/audio/fltdata3_l.inc b/kernel/framework/audio/fltdata3_l.inc new file mode 100644 index 0000000..c606c74 --- /dev/null +++ b/kernel/framework/audio/fltdata3_l.inc @@ -0,0 +1,689 @@ +/* + * Purpose: Filter coefficient tables for GRC3 + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +static int32_t filter_data[4097] = { + 0, -43570, -87593, -132073, -177009, -222405, -268261, -314581, + -361366, -408617, -456336, -504526, -553189, -602325, -651938, -702028, + -752598, -803650, -855185, -907205, -959713, -1012709, -1066196, + -1120176, -1174650, -1229621, -1285089, -1341058, -1397528, -1454502, + -1511982, -1569968, -1628464, -1687470, -1746989, -1807023, -1867572, + -1928640, -1990227, -2052336, -2114969, -2178126, -2241810, -2306023, + -2370767, -2436042, -2501851, -2568196, -2635079, -2702500, -2770463, + -2838968, -2908017, -2977612, -3047755, -3118448, -3189691, -3261488, + -3333839, -3406746, -3480211, -3554236, -3628822, -3703971, -3779685, + -3855965, -3932813, -4010230, -4088218, -4166780, -4245915, -4325627, + -4405917, -4486785, -4568235, -4650267, -4732883, -4816085, -4899874, + -4984252, -5069220, -5154780, -5240933, -5327682, -5415027, -5502970, + -5591512, -5680656, -5770402, -5860752, -5951708, -6043271, -6135443, + -6228224, -6321617, -6415623, -6510244, -6605480, -6701333, -6797805, + -6894897, -6992611, -7090947, -7189908, -7289494, -7389707, -7490549, + -7592020, -7694123, -7796857, -7900226, -8004230, -8108870, -8214147, + -8320064, -8426621, -8533819, -8641661, -8750146, -8859276, -8969053, + -9079478, -9190552, -9302276, -9414651, -9527679, -9641360, -9755697, + -9870689, -9986339, -10102647, -10219615, -10337243, -10455532, + -10574485, -10694101, -10814383, -10935330, -11056944, -11179227, + -11302178, -11425800, -11550093, -11675058, -11800696, -11927008, + -12053996, -12181659, -12309999, -12439017, -12568714, -12699091, + -12830148, -12961887, -13094307, -13227412, -13361200, -13495673, + -13630832, -13766677, -13903209, -14040430, -14178339, -14316938, + -14456228, -14596208, -14736880, -14878245, -15020302, -15163054, + -15306500, -15450641, -15595478, -15741012, -15887242, -16034170, + -16181797, -16330122, -16479146, -16628871, -16779295, -16930421, + -17082248, -17234777, -17388008, -17541942, -17696580, -17851921, + -18007966, -18164716, -18322170, -18480330, -18639196, -18798767, + -18959045, -19120029, -19281720, -19444119, -19607224, -19771038, + -19935559, -20100788, -20266726, -20433372, -20600727, -20768791, + -20937563, -21107045, -21277236, -21448136, -21619746, -21792065, + -21965093, -22138831, -22313278, -22488435, -22664301, -22840876, + -23018161, -23196155, -23374859, -23554271, -23734392, -23915223, + -24096761, -24279008, -24461964, -24645627, -24829998, -25015077, + -25200863, -25387356, -25574556, -25762462, -25951074, -26140392, + -26330415, -26521143, -26712576, -26904712, -27097553, -27291096, + -27485342, -27680290, -27875940, -28072291, -28269343, -28467095, + -28665546, -28864695, -29064543, -29265089, -29466331, -29668269, + -29870903, -30074231, -30278253, -30482969, -30688377, -30894476, + -31101266, -31308746, -31516915, -31725772, -31935317, -32145547, + -32356463, -32568064, -32780347, -32993313, -33206961, -33421289, + -33636296, -33851981, -34068343, -34285381, -34503094, -34721480, + -34940539, -35160268, -35380668, -35601737, -35823472, -36045874, + -36268941, -36492671, -36717063, -36942116, -37167828, -37394198, + -37621224, -37848905, -38077240, -38306227, -38535863, -38766149, + -38997082, -39228661, -39460883, -39693748, -39927254, -40161398, + -40396180, -40631598, -40867649, -41104332, -41341645, -41579587, + -41818156, -42057349, -42297164, -42537601, -42778656, -43020329, + -43262616, -43505516, -43749028, -43993148, -44237875, -44483206, + -44729140, -44975675, -45222807, -45470536, -45718859, -45967773, + -46217276, -46467367, -46718042, -46969299, -47221137, -47473552, + -47726542, -47980105, -48234239, -48488940, -48744207, -49000036, + -49256426, -49513373, -49770876, -50028931, -50287535, -50546687, + -50806383, -51066621, -51327398, -51588711, -51850557, -52112934, + -52375839, -52639268, -52903220, -53167690, -53432677, -53698176, + -53964186, -54230703, -54497724, -54765245, -55033265, -55301779, + -55570785, -55840279, -56110259, -56380720, -56651661, -56923077, + -57194964, -57467321, -57740143, -58013428, -58287171, -58561369, + -58836019, -59111118, -59386661, -59662646, -59939068, -60215925, + -60493212, -60770926, -61049064, -61327621, -61606594, -61885979, + -62165772, -62445970, -62726569, -63007564, -63288953, -63570731, + -63852894, -64135438, -64418360, -64701655, -64985319, -65269349, + -65553739, -65838487, -66123588, -66409037, -66694831, -66980965, + -67267436, -67554238, -67841368, -68128821, -68416593, -68704680, + -68993076, -69281779, -69570782, -69860083, -70149675, -70439556, + -70729720, -71020162, -71310878, -71601864, -71893114, -72184624, + -72476390, -72768406, -73060668, -73353171, -73645909, -73938880, + -74232076, -74525494, -74819129, -75112975, -75407028, -75701282, + -75995733, -76290376, -76585205, -76880215, -77175401, -77470758, + -77766281, -78061964, -78357803, -78653792, -78949925, -79246197, + -79542604, -79839139, -80135797, -80432572, -80729460, -81026455, + -81323551, -81620742, -81918024, -82215389, -82512834, -82810352, + -83107937, -83405584, -83703287, -84001040, -84298837, -84596673, + -84894542, -85192437, -85490354, -85788285, -86086225, -86384169, + -86682109, -86980041, -87277957, -87575852, -87873720, -88171554, + -88469349, -88767098, -89064795, -89362433, -89660007, -89957510, + -90254936, -90552278, -90849530, -91146685, -91443738, -91740681, + -92037509, -92334214, -92630790, -92927231, -93223529, -93519679, + -93815673, -94111506, -94407169, -94702657, -94997963, -95293079, + -95588000, -95882717, -96177226, -96471517, -96765585, -97059423, + -97353024, -97646380, -97939484, -98232330, -98524911, -98817219, + -99109247, -99400988, -99692436, -99983581, -100274419, -100564940, + -100855138, -101145006, -101434536, -101723721, -102012553, -102301026, + -102589131, -102876861, -103164209, -103451167, -103737727, -104023883, + -104309626, -104594949, -104879843, -105164303, -105448319, -105731884, + -106014991, -106297631, -106579796, -106861480, -107142674, -107423370, + -107703560, -107983236, -108262391, -108541017, -108819105, -109096647, + -109373636, -109650063, -109925920, -110201200, -110475893, -110749992, + -111023489, -111296375, -111568643, -111840283, -112111288, -112381649, + -112651358, -112920406, -113188786, -113456489, -113723506, -113989829, + -114255449, -114520359, -114784548, -115048010, -115310735, -115572715, + -115833940, -116094404, -116354096, -116613008, -116871131, -117128457, + -117384977, -117640682, -117895564, -118149613, -118402820, -118655178, + -118906676, -119157307, -119407060, -119655927, -119903900, -120150969, + -120397125, -120642359, -120886662, -121130025, -121372438, -121613894, + -121854382, -122093893, -122332418, -122569949, -122806475, -123041988, + -123276477, -123509935, -123742351, -123973717, -124204022, -124433258, + -124661415, -124888484, -125114455, -125339319, -125563066, -125785687, + -126007172, -126227512, -126446697, -126664718, -126881565, -127097228, + -127311698, -127524965, -127737019, -127947852, -128157452, -128365810, + -128572918, -128778764, -128983338, -129186633, -129388636, -129589339, + -129788732, -129986805, -130183547, -130378950, -130573002, -130765695, + -130957018, -131146961, -131335514, -131522667, -131708411, -131892735, + -132075628, -132257082, -132437085, -132615628, -132792701, -132968293, + -133142395, -133314995, -133486085, -133655653, -133823690, -133990184, + -134155127, -134318508, -134480316, -134640541, -134799172, -134956201, + -135111615, -135265405, -135417561, -135568071, -135716926, -135864115, + -136009628, -136153454, -136295583, -136436004, -136574707, -136711682, + -136846917, -136980402, -137112128, -137242082, -137370255, -137496636, + -137621215, -137743980, -137864922, -137984030, -138101292, -138216698, + -138330239, -138441902, -138551678, -138659555, -138765523, -138869571, + -138971689, -139071865, -139170090, -139266351, -139360639, -139452943, + -139543251, -139631554, -139717840, -139802098, -139884317, -139964488, + -140042598, -140118638, -140192595, -140264460, -140334221, -140401868, + -140467389, -140530774, -140592011, -140651091, -140708001, -140762732, + -140815271, -140865608, -140913733, -140959634, -141003299, -141044719, + -141083882, -141120778, -141155394, -141187721, -141217746, -141245460, + -141270851, -141293908, -141314620, -141332976, -141348965, -141362575, + -141373797, -141382618, -141389028, -141393015, -141394570, -141393679, + -141390333, -141384520, -141376229, -141365450, -141352170, -141336379, + -141318066, -141297220, -141273829, -141247883, -141219370, -141188279, + -141154599, -141118320, -141079429, -141037916, -140993770, -140946979, + -140897532, -140845419, -140790628, -140733147, -140672967, -140610075, + -140544461, -140476114, -140405022, -140331174, -140254559, -140175166, + -140092984, -140008001, -139920208, -139829591, -139736141, -139639847, + -139540696, -139438679, -139333783, -139225998, -139115313, -139001717, + -138885198, -138765745, -138643348, -138517995, -138389675, -138258377, + -138124090, -137986803, -137846505, -137703185, -137556831, -137407433, + -137254980, -137099461, -136940863, -136779178, -136614393, -136446497, + -136275480, -136101331, -135924037, -135743590, -135559977, -135373187, + -135183210, -134990034, -134793650, -134594044, -134391208, -134185129, + -133975798, -133763202, -133547331, -133328175, -133105722, -132879961, + -132650882, -132418474, -132182725, -131943626, -131701164, -131455330, + -131206113, -130953501, -130697485, -130438052, -130175193, -129908897, + -129639153, -129365950, -129089277, -128809125, -128525481, -128238336, + -127947679, -127653499, -127355785, -127054528, -126749716, -126441338, + -126129385, -125813845, -125494708, -125171963, -124845601, -124515610, + -124181980, -123844700, -123503761, -123159150, -122810860, -122458877, + -122103193, -121743798, -121380679, -121013828, -120643234, -120268886, + -119890775, -119508889, -119123220, -118733756, -118340487, -117943403, + -117542495, -117137751, -116729161, -116316716, -115900406, -115480219, + -115056147, -114628179, -114196305, -113760516, -113320800, -112877148, + -112429551, -111977998, -111522479, -111062985, -110599506, -110132031, + -109660551, -109185057, -108705537, -108221984, -107734386, -107242735, + -106747020, -106247232, -105743361, -105235398, -104723333, -104207157, + -103686860, -103162432, -102633863, -102101146, -101564269, -101023225, + -100478002, -99928593, -99374986, -98817175, -98255148, -97688897, + -97118412, -96543685, -95964706, -95381466, -94793956, -94202167, + -93606089, -93005714, -92401033, -91792036, -91178715, -90561061, + -89939065, -89312718, -88682011, -88046936, -87407483, -86763645, + -86115411, -85462774, -84805725, -84144255, -83478356, -82808019, + -82133236, -81453997, -80770296, -80082122, -79389469, -78692326, + -77990687, -77284543, -76573885, -75858706, -75138996, -74414749, + -73685955, -72952607, -72214696, -71472216, -70725156, -69973511, + -69217271, -68456429, -67690977, -66920907, -66146211, -65366882, + -64582911, -63794292, -63001017, -62203077, -61400466, -60593176, + -59781199, -58964527, -58143155, -57317073, -56486275, -55650754, + -54810501, -53965511, -53115775, -52261287, -51402039, -50538025, + -49669237, -48795669, -47917312, -47034162, -46146210, -45253449, + -44355874, -43453477, -42546251, -41634190, -40717287, -39795536, + -38868930, -37937462, -37001127, -36059917, -35113826, -34162849, + -33206977, -32246207, -31280530, -30309941, -29334435, -28354004, + -27368642, -26378345, -25383105, -24382917, -23377775, -22367673, + -21352606, -20332568, -19307552, -18277554, -17242567, -16202587, + -15157608, -14107623, -13052629, -11992619, -10927588, -9857532, + -8782443, -7702319, -6617153, -5526940, -4431675, -3331353, -2225970, + -1115521, 0, 1120597, 2246275, 3377039, 4512893, 5653843, 6799891, + 7951044, 9107305, 10268679, 11435170, 12606782, 13783521, 14965389, + 16152391, 17344532, 18541815, 19744244, 20951823, 22164556, 23382448, + 24605501, 25833720, 27067108, 28305668, 29549406, 30798323, 32052423, + 33311711, 34576189, 35845860, 37120729, 38400797, 39686069, 40976547, + 42272235, 43573135, 44879251, 46190585, 47507140, 48828919, 50155925, + 51488160, 52825627, 54168329, 55516268, 56869446, 58227867, 59591532, + 60960443, 62334604, 63714015, 65098680, 66488600, 67883777, 69284214, + 70689911, 72100872, 73517098, 74938590, 76365350, 77797380, 79234682, + 80677257, 82125106, 83578230, 85036632, 86500312, 87969272, 89443512, + 90923035, 92407840, 93897929, 95393303, 96893963, 98399909, 99911142, + 101427664, 102949474, 104476572, 106008961, 107546640, 109089609, + 110637869, 112191420, 113750263, 115314396, 116883822, 118458539, + 120038547, 121623847, 123214439, 124810321, 126411494, 128017958, + 129629712, 131246756, 132869088, 134496710, 136129619, 137767815, + 139411298, 141060066, 142714119, 144373456, 146038076, 147707977, + 149383159, 151063621, 152749360, 154440377, 156136668, 157838234, + 159545072, 161257181, 162974559, 164697204, 166425116, 168158291, + 169896728, 171640425, 173389381, 175143592, 176903057, 178667774, + 180437740, 182212953, 183993411, 185779111, 187570050, 189366227, + 191167637, 192974280, 194786151, 196603248, 198425568, 200253108, + 202085865, 203923836, 205767018, 207615407, 209469001, 211327795, + 213191786, 215060971, 216935347, 218814909, 220699654, 222589578, + 224484677, 226384948, 228290386, 230200988, 232116749, 234037665, + 235963732, 237894945, 239831301, 241772795, 243719422, 245671177, + 247628057, 249590056, 251557170, 253529394, 255506722, 257489151, + 259476675, 261469288, 263466986, 265469763, 267477615, 269490536, + 271508519, 273531561, 275559655, 277592796, 279630977, 281674194, + 283722440, 285775710, 287833997, 289897295, 291965599, 294038902, + 296117199, 298200481, 300288744, 302381981, 304480185, 306583350, + 308691469, 310804535, 312922542, 315045483, 317173351, 319306138, + 321443839, 323586445, 325733949, 327886345, 330043625, 332205781, + 334372807, 336544694, 338721435, 340903022, 343089448, 345280705, + 347476785, 349677680, 351883382, 354093883, 356309174, 358529248, + 360754097, 362983712, 365218084, 367457205, 369701067, 371949661, + 374202979, 376461011, 378723748, 380991183, 383263305, 385540107, + 387821578, 390107710, 392398493, 394693919, 396993977, 399298659, + 401607955, 403921855, 406240350, 408563430, 410891085, 413223306, + 415560082, 417901404, 420247261, 422597644, 424952542, 427311946, + 429675844, 432044226, 434417083, 436794402, 439176175, 441562390, + 443953037, 446348105, 448747582, 451151459, 453559723, 455972365, + 458389373, 460810735, 463236441, 465666479, 468100838, 470539507, + 472982473, 475429726, 477881254, 480337044, 482797086, 485261367, + 487729876, 490202600, 492679528, 495160647, 497645945, 500135411, + 502629031, 505126793, 507628686, 510134695, 512644810, 515159016, + 517677303, 520199656, 522726063, 525256511, 527790987, 530329478, + 532871971, 535418453, 537968910, 540523330, 543081699, 545644003, + 548210230, 550780365, 553354395, 555932307, 558514086, 561099718, + 563689191, 566282490, 568879600, 571480509, 574085201, 576693663, + 579305881, 581921839, 584541524, 587164922, 589792017, 592422796, + 595057243, 597695344, 600337084, 602982449, 605631423, 608283992, + 610940141, 613599853, 616263116, 618929912, 621600227, 624274046, + 626951354, 629632134, 632316371, 635004051, 637695156, 640389672, + 643087583, 645788873, 648493526, 651201526, 653912857, 656627504, + 659345449, 662066678, 664791173, 667518918, 670249898, 672984095, + 675721494, 678462077, 681205828, 683952731, 686702768, 689455924, + 692212181, 694971522, 697733931, 700499390, 703267882, 706039390, + 708813898, 711591388, 714371842, 717155244, 719941575, 722730819, + 725522958, 728317974, 731115850, 733916567, 736720110, 739526459, + 742335596, 745147504, 747962165, 750779561, 753599674, 756422486, + 759247977, 762076132, 764906930, 767740353, 770576384, 773415004, + 776256194, 779099935, 781946210, 784794999, 787646284, 790500045, + 793356265, 796214924, 799076003, 801939484, 804805347, 807673573, + 810544143, 813417038, 816292238, 819169725, 822049479, 824931480, + 827815710, 830702148, 833590775, 836481572, 839374518, 842269595, + 845166782, 848066059, 850967407, 853870806, 856776236, 859683677, + 862593109, 865504511, 868417864, 871333148, 874250341, 877169425, + 880090378, 883013180, 885937811, 888864250, 891792477, 894722471, + 897654212, 900587679, 903522851, 906459707, 909398227, 912338390, + 915280175, 918223561, 921168527, 924115052, 927063115, 930012694, + 932963770, 935916320, 938870323, 941825758, 944782604, 947740839, + 950700442, 953661392, 956623666, 959587244, 962552104, 965518224, + 968485582, 971454158, 974423928, 977394872, 980366968, 983340193, + 986314526, 989289944, 992266427, 995243951, 998222495, 1001202037, + 1004182555, 1007164025, 1010146427, 1013129738, 1016113936, 1019098998, + 1022084902, 1025071625, 1028059146, 1031047441, 1034036489, 1037026266, + 1040016750, 1043007919, 1045999750, 1048992219, 1051985306, 1054978985, + 1057973236, 1060968035, 1063963359, 1066959186, 1069955492, 1072952255, + 1075949451, 1078947057, 1081945052, 1084943410, 1087942110, 1090941128, + 1093940441, 1096940026, 1099939860, 1102939919, 1105940180, 1108940619, + 1111941215, 1114941942, 1117942777, 1120943698, 1123944681, 1126945702, + 1129946738, 1132947764, 1135948759, 1138949697, 1141950556, 1144951312, + 1147951940, 1150952419, 1153952722, 1156952828, 1159952711, 1162952349, + 1165951718, 1168950793, 1171949551, 1174947968, 1177946019, 1180943682, + 1183940932, 1186937744, 1189934096, 1192929963, 1195925320, 1198920145, + 1201914412, 1204908098, 1207901179, 1210893629, 1213885426, 1216876545, + 1219866962, 1222856652, 1225845591, 1228833755, 1231821120, 1234807662, + 1237793355, 1240778176, 1243762101, 1246745104, 1249727162, 1252708250, + 1255688343, 1258667418, 1261645450, 1264622414, 1267598286, 1270573041, + 1273546655, 1276519103, 1279490361, 1282460404, 1285429208, 1288396747, + 1291362998, 1294327936, 1297291536, 1300253773, 1303214624, 1306174062, + 1309132064, 1312088605, 1315043660, 1317997205, 1320949214, 1323899663, + 1326848528, 1329795783, 1332741404, 1335685366, 1338627645, 1341568215, + 1344507051, 1347444130, 1350379426, 1353312914, 1356244570, 1359174369, + 1362102286, 1365028296, 1367952374, 1370874496, 1373794637, 1376712771, + 1379628875, 1382542922, 1385454889, 1388364751, 1391272482, 1394178058, + 1397081453, 1399982644, 1402881606, 1405778312, 1408672739, 1411564862, + 1414454656, 1417342095, 1420227156, 1423109813, 1425990041, 1428867816, + 1431743112, 1434615906, 1437486171, 1440353883, 1443219018, 1446081551, + 1448941456, 1451798708, 1454653284, 1457505158, 1460354306, 1463200702, + 1466044321, 1468885140, 1471723133, 1474558275, 1477390542, 1480219909, + 1483046351, 1485869843, 1488690361, 1491507880, 1494322374, 1497133821, + 1499942194, 1502747469, 1505549621, 1508348626, 1511144459, 1513937095, + 1516726510, 1519512679, 1522295577, 1525075180, 1527851463, 1530624402, + 1533393972, 1536160149, 1538922907, 1541682223, 1544438072, 1547190429, + 1549939270, 1552684570, 1555426306, 1558164452, 1560898984, 1563629877, + 1566357108, 1569080652, 1571800485, 1574516582, 1577228919, 1579937471, + 1582642215, 1585343126, 1588040180, 1590733352, 1593422619, 1596107956, + 1598789339, 1601466744, 1604140146, 1606809523, 1609474849, 1612136101, + 1614793254, 1617446285, 1620095169, 1622739883, 1625380402, 1628016704, + 1630648763, 1633276556, 1635900059, 1638519248, 1641134100, 1643744591, + 1646350697, 1648952394, 1651549658, 1654142467, 1656730796, 1659314621, + 1661893920, 1664468669, 1667038843, 1669604420, 1672165376, 1674721688, + 1677273332, 1679820285, 1682362524, 1684900025, 1687432765, 1689960721, + 1692483869, 1695002186, 1697515650, 1700024237, 1702527924, 1705026688, + 1707520506, 1710009354, 1712493211, 1714972053, 1717445857, 1719914600, + 1722378260, 1724836813, 1727290238, 1729738511, 1732181610, 1734619511, + 1737052193, 1739479633, 1741901809, 1744318697, 1746730275, 1749136522, + 1751537414, 1753932930, 1756323047, 1758707742, 1761086994, 1763460781, + 1765829080, 1768191869, 1770549126, 1772900830, 1775246958, 1777587488, + 1779922398, 1782251667, 1784575273, 1786893194, 1789205409, 1791511895, + 1793812631, 1796107596, 1798396768, 1800680125, 1802957646, 1805229311, + 1807495096, 1809754982, 1812008946, 1814256968, 1816499026, 1818735100, + 1820965168, 1823189210, 1825407204, 1827619129, 1829824964, 1832024690, + 1834218284, 1836405726, 1838586996, 1840762073, 1842930937, 1845093566, + 1847249940, 1849400040, 1851543844, 1853681332, 1855812485, 1857937281, + 1860055701, 1862167724, 1864273331, 1866372501, 1868465215, 1870551452, + 1872631194, 1874704419, 1876771108, 1878831243, 1880884802, 1882931767, + 1884972117, 1887005834, 1889032899, 1891053291, 1893066991, 1895073981, + 1897074241, 1899067752, 1901054494, 1903034450, 1905007600, 1906973925, + 1908933406, 1910886025, 1912831762, 1914770600, 1916702519, 1918627502, + 1920545529, 1922456583, 1924360644, 1926257695, 1928147718, 1930030694, + 1931906605, 1933775433, 1935637160, 1937491769, 1939339241, 1941179559, + 1943012705, 1944838661, 1946657410, 1948468934, 1950273215, 1952070238, + 1953859983, 1955642434, 1957417573, 1959185384, 1960945850, 1962698952, + 1964444675, 1966183002, 1967913915, 1969637399, 1971353435, 1973062009, + 1974763103, 1976456700, 1978142785, 1979821341, 1981492351, 1983155800, + 1984811672, 1986459950, 1988100618, 1989733661, 1991359063, 1992976807, + 1994586878, 1996189261, 1997783940, 1999370900, 2000950124, 2002521598, + 2004085307, 2005641235, 2007189366, 2008729687, 2010262182, 2011786836, + 2013303634, 2014812562, 2016313604, 2017806746, 2019291974, 2020769273, + 2022238629, 2023700027, 2025153454, 2026598894, 2028036334, 2029465759, + 2030887157, 2032300512, 2033705812, 2035103042, 2036492189, 2037873238, + 2039246178, 2040610993, 2041967672, 2043316200, 2044656565, 2045988752, + 2047312750, 2048628546, 2049936125, 2051235476, 2052526587, 2053809443, + 2055084032, 2056350343, 2057608363, 2058858079, 2060099479, 2061332551, + 2062557282, 2063773662, 2064981677, 2066181316, 2067372568, 2068555420, + 2069729861, 2070895879, 2072053463, 2073202601, 2074343283, 2075475496, + 2076599231, 2077714475, 2078821218, 2079919449, 2081009157, 2082090331, + 2083162962, 2084227037, 2085282547, 2086329481, 2087367829, 2088397581, + 2089418727, 2090431256, 2091435159, 2092430425, 2093417045, 2094395009, + 2095364308, 2096324932, 2097276871, 2098220116, 2099154657, 2100080487, + 2100997594, 2101905971, 2102805608, 2103696497, 2104578628, 2105451993, + 2106316584, 2107172391, 2108019406, 2108857622, 2109687029, 2110507619, + 2111319385, 2112122318, 2112916410, 2113701654, 2114478042, 2115245566, + 2116004218, 2116753991, 2117494877, 2118226870, 2118949962, 2119664145, + 2120369413, 2121065759, 2121753176, 2122431657, 2123101195, 2123761783, + 2124413416, 2125056087, 2125689789, 2126314515, 2126930261, 2127537019, + 2128134784, 2128723550, 2129303311, 2129874061, 2130435794, 2130988506, + 2131532190, 2132066841, 2132592453, 2133109023, 2133616544, 2134115011, + 2134604419, 2135084765, 2135556042, 2136018246, 2136471373, 2136915418, + 2137350376, 2137776244, 2138193017, 2138600691, 2138999262, 2139388726, + 2139769079, 2140140317, 2140502437, 2140855436, 2141199308, 2141534052, + 2141859663, 2142176139, 2142483477, 2142781673, 2143070724, 2143350628, + 2143621381, 2143882982, 2144135427, 2144378714, 2144612841, 2144837804, + 2145053603, 2145260235, 2145457697, 2145645988, 2145825106, 2145995050, + 2146155816, 2146307405, 2146449814, 2146583042, 2146707087, 2146821949, + 2146927626, 2147024118, 2147111422, 2147189539, 2147258468, 2147318207, + 2147368757, 2147410117, 2147442286, 2147465264, 2147479051, 2147483647, + 2147479051, 2147465264, 2147442286, 2147410117, 2147368757, 2147318207, + 2147258468, 2147189539, 2147111422, 2147024118, 2146927626, 2146821949, + 2146707087, 2146583042, 2146449814, 2146307405, 2146155816, 2145995050, + 2145825106, 2145645988, 2145457697, 2145260235, 2145053603, 2144837804, + 2144612841, 2144378714, 2144135427, 2143882982, 2143621381, 2143350628, + 2143070724, 2142781673, 2142483477, 2142176139, 2141859663, 2141534052, + 2141199308, 2140855436, 2140502437, 2140140317, 2139769079, 2139388726, + 2138999262, 2138600691, 2138193017, 2137776244, 2137350376, 2136915418, + 2136471373, 2136018246, 2135556042, 2135084765, 2134604419, 2134115011, + 2133616544, 2133109023, 2132592453, 2132066841, 2131532190, 2130988506, + 2130435794, 2129874061, 2129303311, 2128723550, 2128134784, 2127537019, + 2126930261, 2126314515, 2125689789, 2125056087, 2124413416, 2123761783, + 2123101195, 2122431657, 2121753176, 2121065759, 2120369413, 2119664145, + 2118949962, 2118226870, 2117494877, 2116753991, 2116004218, 2115245566, + 2114478042, 2113701654, 2112916410, 2112122318, 2111319385, 2110507619, + 2109687029, 2108857622, 2108019406, 2107172391, 2106316584, 2105451993, + 2104578628, 2103696497, 2102805608, 2101905971, 2100997594, 2100080487, + 2099154657, 2098220116, 2097276871, 2096324932, 2095364308, 2094395009, + 2093417045, 2092430425, 2091435159, 2090431256, 2089418727, 2088397581, + 2087367829, 2086329481, 2085282547, 2084227037, 2083162962, 2082090331, + 2081009157, 2079919449, 2078821218, 2077714475, 2076599231, 2075475496, + 2074343283, 2073202601, 2072053463, 2070895879, 2069729861, 2068555420, + 2067372568, 2066181316, 2064981677, 2063773662, 2062557282, 2061332551, + 2060099479, 2058858079, 2057608363, 2056350343, 2055084032, 2053809443, + 2052526587, 2051235476, 2049936125, 2048628546, 2047312750, 2045988752, + 2044656565, 2043316200, 2041967672, 2040610993, 2039246178, 2037873238, + 2036492189, 2035103042, 2033705812, 2032300512, 2030887157, 2029465759, + 2028036334, 2026598894, 2025153454, 2023700027, 2022238629, 2020769273, + 2019291974, 2017806746, 2016313604, 2014812562, 2013303634, 2011786836, + 2010262182, 2008729687, 2007189366, 2005641235, 2004085307, 2002521598, + 2000950124, 1999370900, 1997783940, 1996189261, 1994586878, 1992976807, + 1991359063, 1989733661, 1988100618, 1986459950, 1984811672, 1983155800, + 1981492351, 1979821341, 1978142785, 1976456700, 1974763103, 1973062009, + 1971353435, 1969637399, 1967913915, 1966183002, 1964444675, 1962698952, + 1960945850, 1959185384, 1957417573, 1955642434, 1953859983, 1952070238, + 1950273215, 1948468934, 1946657410, 1944838661, 1943012705, 1941179559, + 1939339241, 1937491769, 1935637160, 1933775433, 1931906605, 1930030694, + 1928147718, 1926257695, 1924360644, 1922456583, 1920545529, 1918627502, + 1916702519, 1914770600, 1912831762, 1910886025, 1908933406, 1906973925, + 1905007600, 1903034450, 1901054494, 1899067752, 1897074241, 1895073981, + 1893066991, 1891053291, 1889032899, 1887005834, 1884972117, 1882931767, + 1880884802, 1878831243, 1876771108, 1874704419, 1872631194, 1870551452, + 1868465215, 1866372501, 1864273331, 1862167724, 1860055701, 1857937281, + 1855812485, 1853681332, 1851543844, 1849400040, 1847249940, 1845093566, + 1842930937, 1840762073, 1838586996, 1836405726, 1834218284, 1832024690, + 1829824964, 1827619129, 1825407204, 1823189210, 1820965168, 1818735100, + 1816499026, 1814256968, 1812008946, 1809754982, 1807495096, 1805229311, + 1802957646, 1800680125, 1798396768, 1796107596, 1793812631, 1791511895, + 1789205409, 1786893194, 1784575273, 1782251667, 1779922398, 1777587488, + 1775246958, 1772900830, 1770549126, 1768191869, 1765829080, 1763460781, + 1761086994, 1758707742, 1756323047, 1753932930, 1751537414, 1749136522, + 1746730275, 1744318697, 1741901809, 1739479633, 1737052193, 1734619511, + 1732181610, 1729738511, 1727290238, 1724836813, 1722378260, 1719914600, + 1717445857, 1714972053, 1712493211, 1710009354, 1707520506, 1705026688, + 1702527924, 1700024237, 1697515650, 1695002186, 1692483869, 1689960721, + 1687432765, 1684900025, 1682362524, 1679820285, 1677273332, 1674721688, + 1672165376, 1669604420, 1667038843, 1664468669, 1661893920, 1659314621, + 1656730796, 1654142467, 1651549658, 1648952394, 1646350697, 1643744591, + 1641134100, 1638519248, 1635900059, 1633276556, 1630648763, 1628016704, + 1625380402, 1622739883, 1620095169, 1617446285, 1614793254, 1612136101, + 1609474849, 1606809523, 1604140146, 1601466744, 1598789339, 1596107956, + 1593422619, 1590733352, 1588040180, 1585343126, 1582642215, 1579937471, + 1577228919, 1574516582, 1571800485, 1569080652, 1566357108, 1563629877, + 1560898984, 1558164452, 1555426306, 1552684570, 1549939270, 1547190429, + 1544438072, 1541682223, 1538922907, 1536160149, 1533393972, 1530624402, + 1527851463, 1525075180, 1522295577, 1519512679, 1516726510, 1513937095, + 1511144459, 1508348626, 1505549621, 1502747469, 1499942194, 1497133821, + 1494322374, 1491507880, 1488690361, 1485869843, 1483046351, 1480219909, + 1477390542, 1474558275, 1471723133, 1468885140, 1466044321, 1463200702, + 1460354306, 1457505158, 1454653284, 1451798708, 1448941456, 1446081551, + 1443219018, 1440353883, 1437486171, 1434615906, 1431743112, 1428867816, + 1425990041, 1423109813, 1420227156, 1417342095, 1414454656, 1411564862, + 1408672739, 1405778312, 1402881606, 1399982644, 1397081453, 1394178058, + 1391272482, 1388364751, 1385454889, 1382542922, 1379628875, 1376712771, + 1373794637, 1370874496, 1367952374, 1365028296, 1362102286, 1359174369, + 1356244570, 1353312914, 1350379426, 1347444130, 1344507051, 1341568215, + 1338627645, 1335685366, 1332741404, 1329795783, 1326848528, 1323899663, + 1320949214, 1317997205, 1315043660, 1312088605, 1309132064, 1306174062, + 1303214624, 1300253773, 1297291536, 1294327936, 1291362998, 1288396747, + 1285429208, 1282460404, 1279490361, 1276519103, 1273546655, 1270573041, + 1267598286, 1264622414, 1261645450, 1258667418, 1255688343, 1252708250, + 1249727162, 1246745104, 1243762101, 1240778176, 1237793355, 1234807662, + 1231821120, 1228833755, 1225845591, 1222856652, 1219866962, 1216876545, + 1213885426, 1210893629, 1207901179, 1204908098, 1201914412, 1198920145, + 1195925320, 1192929963, 1189934096, 1186937744, 1183940932, 1180943682, + 1177946019, 1174947968, 1171949551, 1168950793, 1165951718, 1162952349, + 1159952711, 1156952828, 1153952722, 1150952419, 1147951940, 1144951312, + 1141950556, 1138949697, 1135948759, 1132947764, 1129946738, 1126945702, + 1123944681, 1120943698, 1117942777, 1114941942, 1111941215, 1108940619, + 1105940180, 1102939919, 1099939860, 1096940026, 1093940441, 1090941128, + 1087942110, 1084943410, 1081945052, 1078947057, 1075949451, 1072952255, + 1069955492, 1066959186, 1063963359, 1060968035, 1057973236, 1054978985, + 1051985306, 1048992219, 1045999750, 1043007919, 1040016750, 1037026266, + 1034036489, 1031047441, 1028059146, 1025071625, 1022084902, 1019098998, + 1016113936, 1013129738, 1010146427, 1007164025, 1004182555, 1001202037, + 998222495, 995243951, 992266427, 989289944, 986314526, 983340193, + 980366968, 977394872, 974423928, 971454158, 968485582, 965518224, + 962552104, 959587244, 956623666, 953661392, 950700442, 947740839, + 944782604, 941825758, 938870323, 935916320, 932963770, 930012694, + 927063115, 924115052, 921168527, 918223561, 915280175, 912338390, + 909398227, 906459707, 903522851, 900587679, 897654212, 894722471, + 891792477, 888864250, 885937811, 883013180, 880090378, 877169425, + 874250341, 871333148, 868417864, 865504511, 862593109, 859683677, + 856776236, 853870806, 850967407, 848066059, 845166782, 842269595, + 839374518, 836481572, 833590775, 830702148, 827815710, 824931480, + 822049479, 819169725, 816292238, 813417038, 810544143, 807673573, + 804805347, 801939484, 799076003, 796214924, 793356265, 790500045, + 787646284, 784794999, 781946210, 779099935, 776256194, 773415004, + 770576384, 767740353, 764906930, 762076132, 759247977, 756422486, + 753599674, 750779561, 747962165, 745147504, 742335596, 739526459, + 736720110, 733916567, 731115850, 728317974, 725522958, 722730819, + 719941575, 717155244, 714371842, 711591388, 708813898, 706039390, + 703267882, 700499390, 697733931, 694971522, 692212181, 689455924, + 686702768, 683952731, 681205828, 678462077, 675721494, 672984095, + 670249898, 667518918, 664791173, 662066678, 659345449, 656627504, + 653912857, 651201526, 648493526, 645788873, 643087583, 640389672, + 637695156, 635004051, 632316371, 629632134, 626951354, 624274046, + 621600227, 618929912, 616263116, 613599853, 610940141, 608283992, + 605631423, 602982449, 600337084, 597695344, 595057243, 592422796, + 589792017, 587164922, 584541524, 581921839, 579305881, 576693663, + 574085201, 571480509, 568879600, 566282490, 563689191, 561099718, + 558514086, 555932307, 553354395, 550780365, 548210230, 545644003, + 543081699, 540523330, 537968910, 535418453, 532871971, 530329478, + 527790987, 525256511, 522726063, 520199656, 517677303, 515159016, + 512644810, 510134695, 507628686, 505126793, 502629031, 500135411, + 497645945, 495160647, 492679528, 490202600, 487729876, 485261367, + 482797086, 480337044, 477881254, 475429726, 472982473, 470539507, + 468100838, 465666479, 463236441, 460810735, 458389373, 455972365, + 453559723, 451151459, 448747582, 446348105, 443953037, 441562390, + 439176175, 436794402, 434417083, 432044226, 429675844, 427311946, + 424952542, 422597644, 420247261, 417901404, 415560082, 413223306, + 410891085, 408563430, 406240350, 403921855, 401607955, 399298659, + 396993977, 394693919, 392398493, 390107710, 387821578, 385540107, + 383263305, 380991183, 378723748, 376461011, 374202979, 371949661, + 369701067, 367457205, 365218084, 362983712, 360754097, 358529248, + 356309174, 354093883, 351883382, 349677680, 347476785, 345280705, + 343089448, 340903022, 338721435, 336544694, 334372807, 332205781, + 330043625, 327886345, 325733949, 323586445, 321443839, 319306138, + 317173351, 315045483, 312922542, 310804535, 308691469, 306583350, + 304480185, 302381981, 300288744, 298200481, 296117199, 294038902, + 291965599, 289897295, 287833997, 285775710, 283722440, 281674194, + 279630977, 277592796, 275559655, 273531561, 271508519, 269490536, + 267477615, 265469763, 263466986, 261469288, 259476675, 257489151, + 255506722, 253529394, 251557170, 249590056, 247628057, 245671177, + 243719422, 241772795, 239831301, 237894945, 235963732, 234037665, + 232116749, 230200988, 228290386, 226384948, 224484677, 222589578, + 220699654, 218814909, 216935347, 215060971, 213191786, 211327795, + 209469001, 207615407, 205767018, 203923836, 202085865, 200253108, + 198425568, 196603248, 194786151, 192974280, 191167637, 189366227, + 187570050, 185779111, 183993411, 182212953, 180437740, 178667774, + 176903057, 175143592, 173389381, 171640425, 169896728, 168158291, + 166425116, 164697204, 162974559, 161257181, 159545072, 157838234, + 156136668, 154440377, 152749360, 151063621, 149383159, 147707977, + 146038076, 144373456, 142714119, 141060066, 139411298, 137767815, + 136129619, 134496710, 132869088, 131246756, 129629712, 128017958, + 126411494, 124810321, 123214439, 121623847, 120038547, 118458539, + 116883822, 115314396, 113750263, 112191420, 110637869, 109089609, + 107546640, 106008961, 104476572, 102949474, 101427664, 99911142, + 98399909, 96893963, 95393303, 93897929, 92407840, 90923035, 89443512, + 87969272, 86500312, 85036632, 83578230, 82125106, 80677257, 79234682, + 77797380, 76365350, 74938590, 73517098, 72100872, 70689911, 69284214, + 67883777, 66488600, 65098680, 63714015, 62334604, 60960443, 59591532, + 58227867, 56869446, 55516268, 54168329, 52825627, 51488160, 50155925, + 48828919, 47507140, 46190585, 44879251, 43573135, 42272235, 40976547, + 39686069, 38400797, 37120729, 35845860, 34576189, 33311711, 32052423, + 30798323, 29549406, 28305668, 27067108, 25833720, 24605501, 23382448, + 22164556, 20951823, 19744244, 18541815, 17344532, 16152391, 14965389, + 13783521, 12606782, 11435170, 10268679, 9107305, 7951044, 6799891, + 5653843, 4512893, 3377039, 2246275, 1120597, 0, -1115521, -2225970, + -3331353, -4431675, -5526940, -6617153, -7702319, -8782443, -9857532, + -10927588, -11992619, -13052629, -14107623, -15157608, -16202587, + -17242567, -18277554, -19307552, -20332568, -21352606, -22367673, + -23377775, -24382917, -25383105, -26378345, -27368642, -28354004, + -29334435, -30309941, -31280530, -32246207, -33206977, -34162849, + -35113826, -36059917, -37001127, -37937462, -38868930, -39795536, + -40717287, -41634190, -42546251, -43453477, -44355874, -45253449, + -46146210, -47034162, -47917312, -48795669, -49669237, -50538025, + -51402039, -52261287, -53115775, -53965511, -54810501, -55650754, + -56486275, -57317073, -58143155, -58964527, -59781199, -60593176, + -61400466, -62203077, -63001017, -63794292, -64582911, -65366882, + -66146211, -66920907, -67690977, -68456429, -69217271, -69973511, + -70725156, -71472216, -72214696, -72952607, -73685955, -74414749, + -75138996, -75858706, -76573885, -77284543, -77990687, -78692326, + -79389469, -80082122, -80770296, -81453997, -82133236, -82808019, + -83478356, -84144255, -84805725, -85462774, -86115411, -86763645, + -87407483, -88046936, -88682011, -89312718, -89939065, -90561061, + -91178715, -91792036, -92401033, -93005714, -93606089, -94202167, + -94793956, -95381466, -95964706, -96543685, -97118412, -97688897, + -98255148, -98817175, -99374986, -99928593, -100478002, -101023225, + -101564269, -102101146, -102633863, -103162432, -103686860, -104207157, + -104723333, -105235398, -105743361, -106247232, -106747020, -107242735, + -107734386, -108221984, -108705537, -109185057, -109660551, -110132031, + -110599506, -111062985, -111522479, -111977998, -112429551, -112877148, + -113320800, -113760516, -114196305, -114628179, -115056147, -115480219, + -115900406, -116316716, -116729161, -117137751, -117542495, -117943403, + -118340487, -118733756, -119123220, -119508889, -119890775, -120268886, + -120643234, -121013828, -121380679, -121743798, -122103193, -122458877, + -122810860, -123159150, -123503761, -123844700, -124181980, -124515610, + -124845601, -125171963, -125494708, -125813845, -126129385, -126441338, + -126749716, -127054528, -127355785, -127653499, -127947679, -128238336, + -128525481, -128809125, -129089277, -129365950, -129639153, -129908897, + -130175193, -130438052, -130697485, -130953501, -131206113, -131455330, + -131701164, -131943626, -132182725, -132418474, -132650882, -132879961, + -133105722, -133328175, -133547331, -133763202, -133975798, -134185129, + -134391208, -134594044, -134793650, -134990034, -135183210, -135373187, + -135559977, -135743590, -135924037, -136101331, -136275480, -136446497, + -136614393, -136779178, -136940863, -137099461, -137254980, -137407433, + -137556831, -137703185, -137846505, -137986803, -138124090, -138258377, + -138389675, -138517995, -138643348, -138765745, -138885198, -139001717, + -139115313, -139225998, -139333783, -139438679, -139540696, -139639847, + -139736141, -139829591, -139920208, -140008001, -140092984, -140175166, + -140254559, -140331174, -140405022, -140476114, -140544461, -140610075, + -140672967, -140733147, -140790628, -140845419, -140897532, -140946979, + -140993770, -141037916, -141079429, -141118320, -141154599, -141188279, + -141219370, -141247883, -141273829, -141297220, -141318066, -141336379, + -141352170, -141365450, -141376229, -141384520, -141390333, -141393679, + -141394570, -141393015, -141389028, -141382618, -141373797, -141362575, + -141348965, -141332976, -141314620, -141293908, -141270851, -141245460, + -141217746, -141187721, -141155394, -141120778, -141083882, -141044719, + -141003299, -140959634, -140913733, -140865608, -140815271, -140762732, + -140708001, -140651091, -140592011, -140530774, -140467389, -140401868, + -140334221, -140264460, -140192595, -140118638, -140042598, -139964488, + -139884317, -139802098, -139717840, -139631554, -139543251, -139452943, + -139360639, -139266351, -139170090, -139071865, -138971689, -138869571, + -138765523, -138659555, -138551678, -138441902, -138330239, -138216698, + -138101292, -137984030, -137864922, -137743980, -137621215, -137496636, + -137370255, -137242082, -137112128, -136980402, -136846917, -136711682, + -136574707, -136436004, -136295583, -136153454, -136009628, -135864115, + -135716926, -135568071, -135417561, -135265405, -135111615, -134956201, + -134799172, -134640541, -134480316, -134318508, -134155127, -133990184, + -133823690, -133655653, -133486085, -133314995, -133142395, -132968293, + -132792701, -132615628, -132437085, -132257082, -132075628, -131892735, + -131708411, -131522667, -131335514, -131146961, -130957018, -130765695, + -130573002, -130378950, -130183547, -129986805, -129788732, -129589339, + -129388636, -129186633, -128983338, -128778764, -128572918, -128365810, + -128157452, -127947852, -127737019, -127524965, -127311698, -127097228, + -126881565, -126664718, -126446697, -126227512, -126007172, -125785687, + -125563066, -125339319, -125114455, -124888484, -124661415, -124433258, + -124204022, -123973717, -123742351, -123509935, -123276477, -123041988, + -122806475, -122569949, -122332418, -122093893, -121854382, -121613894, + -121372438, -121130025, -120886662, -120642359, -120397125, -120150969, + -119903900, -119655927, -119407060, -119157307, -118906676, -118655178, + -118402820, -118149613, -117895564, -117640682, -117384977, -117128457, + -116871131, -116613008, -116354096, -116094404, -115833940, -115572715, + -115310735, -115048010, -114784548, -114520359, -114255449, -113989829, + -113723506, -113456489, -113188786, -112920406, -112651358, -112381649, + -112111288, -111840283, -111568643, -111296375, -111023489, -110749992, + -110475893, -110201200, -109925920, -109650063, -109373636, -109096647, + -108819105, -108541017, -108262391, -107983236, -107703560, -107423370, + -107142674, -106861480, -106579796, -106297631, -106014991, -105731884, + -105448319, -105164303, -104879843, -104594949, -104309626, -104023883, + -103737727, -103451167, -103164209, -102876861, -102589131, -102301026, + -102012553, -101723721, -101434536, -101145006, -100855138, -100564940, + -100274419, -99983581, -99692436, -99400988, -99109247, -98817219, + -98524911, -98232330, -97939484, -97646380, -97353024, -97059423, + -96765585, -96471517, -96177226, -95882717, -95588000, -95293079, + -94997963, -94702657, -94407169, -94111506, -93815673, -93519679, + -93223529, -92927231, -92630790, -92334214, -92037509, -91740681, + -91443738, -91146685, -90849530, -90552278, -90254936, -89957510, + -89660007, -89362433, -89064795, -88767098, -88469349, -88171554, + -87873720, -87575852, -87277957, -86980041, -86682109, -86384169, + -86086225, -85788285, -85490354, -85192437, -84894542, -84596673, + -84298837, -84001040, -83703287, -83405584, -83107937, -82810352, + -82512834, -82215389, -81918024, -81620742, -81323551, -81026455, + -80729460, -80432572, -80135797, -79839139, -79542604, -79246197, + -78949925, -78653792, -78357803, -78061964, -77766281, -77470758, + -77175401, -76880215, -76585205, -76290376, -75995733, -75701282, + -75407028, -75112975, -74819129, -74525494, -74232076, -73938880, + -73645909, -73353171, -73060668, -72768406, -72476390, -72184624, + -71893114, -71601864, -71310878, -71020162, -70729720, -70439556, + -70149675, -69860083, -69570782, -69281779, -68993076, -68704680, + -68416593, -68128821, -67841368, -67554238, -67267436, -66980965, + -66694831, -66409037, -66123588, -65838487, -65553739, -65269349, + -64985319, -64701655, -64418360, -64135438, -63852894, -63570731, + -63288953, -63007564, -62726569, -62445970, -62165772, -61885979, + -61606594, -61327621, -61049064, -60770926, -60493212, -60215925, + -59939068, -59662646, -59386661, -59111118, -58836019, -58561369, + -58287171, -58013428, -57740143, -57467321, -57194964, -56923077, + -56651661, -56380720, -56110259, -55840279, -55570785, -55301779, + -55033265, -54765245, -54497724, -54230703, -53964186, -53698176, + -53432677, -53167690, -52903220, -52639268, -52375839, -52112934, + -51850557, -51588711, -51327398, -51066621, -50806383, -50546687, + -50287535, -50028931, -49770876, -49513373, -49256426, -49000036, + -48744207, -48488940, -48234239, -47980105, -47726542, -47473552, + -47221137, -46969299, -46718042, -46467367, -46217276, -45967773, + -45718859, -45470536, -45222807, -44975675, -44729140, -44483206, + -44237875, -43993148, -43749028, -43505516, -43262616, -43020329, + -42778656, -42537601, -42297164, -42057349, -41818156, -41579587, + -41341645, -41104332, -40867649, -40631598, -40396180, -40161398, + -39927254, -39693748, -39460883, -39228661, -38997082, -38766149, + -38535863, -38306227, -38077240, -37848905, -37621224, -37394198, + -37167828, -36942116, -36717063, -36492671, -36268941, -36045874, + -35823472, -35601737, -35380668, -35160268, -34940539, -34721480, + -34503094, -34285381, -34068343, -33851981, -33636296, -33421289, + -33206961, -32993313, -32780347, -32568064, -32356463, -32145547, + -31935317, -31725772, -31516915, -31308746, -31101266, -30894476, + -30688377, -30482969, -30278253, -30074231, -29870903, -29668269, + -29466331, -29265089, -29064543, -28864695, -28665546, -28467095, + -28269343, -28072291, -27875940, -27680290, -27485342, -27291096, + -27097553, -26904712, -26712576, -26521143, -26330415, -26140392, + -25951074, -25762462, -25574556, -25387356, -25200863, -25015077, + -24829998, -24645627, -24461964, -24279008, -24096761, -23915223, + -23734392, -23554271, -23374859, -23196155, -23018161, -22840876, + -22664301, -22488435, -22313278, -22138831, -21965093, -21792065, + -21619746, -21448136, -21277236, -21107045, -20937563, -20768791, + -20600727, -20433372, -20266726, -20100788, -19935559, -19771038, + -19607224, -19444119, -19281720, -19120029, -18959045, -18798767, + -18639196, -18480330, -18322170, -18164716, -18007966, -17851921, + -17696580, -17541942, -17388008, -17234777, -17082248, -16930421, + -16779295, -16628871, -16479146, -16330122, -16181797, -16034170, + -15887242, -15741012, -15595478, -15450641, -15306500, -15163054, + -15020302, -14878245, -14736880, -14596208, -14456228, -14316938, + -14178339, -14040430, -13903209, -13766677, -13630832, -13495673, + -13361200, -13227412, -13094307, -12961887, -12830148, -12699091, + -12568714, -12439017, -12309999, -12181659, -12053996, -11927008, + -11800696, -11675058, -11550093, -11425800, -11302178, -11179227, + -11056944, -10935330, -10814383, -10694101, -10574485, -10455532, + -10337243, -10219615, -10102647, -9986339, -9870689, -9755697, + -9641360, -9527679, -9414651, -9302276, -9190552, -9079478, -8969053, + -8859276, -8750146, -8641661, -8533819, -8426621, -8320064, -8214147, + -8108870, -8004230, -7900226, -7796857, -7694123, -7592020, -7490549, + -7389707, -7289494, -7189908, -7090947, -6992611, -6894897, -6797805, + -6701333, -6605480, -6510244, -6415623, -6321617, -6228224, -6135443, + -6043271, -5951708, -5860752, -5770402, -5680656, -5591512, -5502970, + -5415027, -5327682, -5240933, -5154780, -5069220, -4984252, -4899874, + -4816085, -4732883, -4650267, -4568235, -4486785, -4405917, -4325627, + -4245915, -4166780, -4088218, -4010230, -3932813, -3855965, -3779685, + -3703971, -3628822, -3554236, -3480211, -3406746, -3333839, -3261488, + -3189691, -3118448, -3047755, -2977612, -2908017, -2838968, -2770463, + -2702500, -2635079, -2568196, -2501851, -2436042, -2370767, -2306023, + -2241810, -2178126, -2114969, -2052336, -1990227, -1928640, -1867572, + -1807023, -1746989, -1687470, -1628464, -1569968, -1511982, -1454502, + -1397528, -1341058, -1285089, -1229621, -1174650, -1120176, -1066196, + -1012709, -959713, -907205, -855185, -803650, -752598, -702028, + -651938, -602325, -553189, -504526, -456336, -408617, -361366, -314581, + -268261, -222405, -177009, -132073, -87593, -43570, 0 +}; diff --git a/kernel/framework/audio/fltdata4_p.inc b/kernel/framework/audio/fltdata4_p.inc new file mode 100644 index 0000000..f6eda34 --- /dev/null +++ b/kernel/framework/audio/fltdata4_p.inc @@ -0,0 +1,4832 @@ +/* + * Purpose: Filter coefficient tables for GRC3 + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +static int32_t filter_data[32769] = { + 0, -1248, -2498, -3752, -5007, -6266, -7527, -8790, -10057, -11325, + -12597, -13870, -15147, -16426, -17707, -18991, -20277, -21566, -22857, + -24151, -25447, -26746, -28047, -29350, -30656, -31964, -33275, -34588, + -35903, -37221, -38541, -39863, -41188, -42515, -43844, -45176, -46510, + -47846, -49184, -50525, -51868, -53213, -54560, -55910, -57261, -58615, + -59971, -61330, -62690, -64053, -65417, -66784, -68153, -69524, -70897, + -72272, -73649, -75028, -76410, -77793, -79178, -80565, -81955, -83346, + -84739, -86134, -87531, -88930, -90331, -91734, -93139, -94545, -95954, + -97364, -98776, -100190, -101606, -103024, -104443, -105864, -107287, + -108712, -110138, -111567, -112997, -114428, -115861, -117296, -118733, + -120171, -121611, -123053, -124496, -125940, -127387, -128835, -130284, + -131735, -133188, -134642, -136097, -137554, -139013, -140473, -141934, + -143397, -144861, -146327, -147794, -149262, -150732, -152203, -153676, + -155150, -156625, -158101, -159579, -161058, -162538, -164020, -165503, + -166986, -168472, -169958, -171445, -172934, -174424, -175915, -177407, + -178900, -180394, -181889, -183385, -184883, -186381, -187880, -189381, + -190882, -192384, -193888, -195392, -196897, -198403, -199910, -201417, + -202926, -204435, -205945, -207456, -208968, -210481, -211994, -213508, + -215023, -216539, -218055, -219572, -221090, -222608, -224127, -225646, + -227166, -228687, -230208, -231730, -233253, -234776, -236299, -237823, + -239347, -240872, -242397, -243923, -245449, -246976, -248503, -250030, + -251557, -253085, -254614, -256142, -257671, -259200, -260729, -262259, + -263789, -265319, -266849, -268379, -269910, -271440, -272971, -274502, + -276033, -277564, -279094, -280625, -282157, -283688, -285218, -286749, + -288280, -289811, -291342, -292872, -294403, -295933, -297463, -298993, + -300523, -302053, -303582, -305111, -306640, -308169, -309697, -311225, + -312752, -314280, -315806, -317333, -318859, -320385, -321910, -323435, + -324959, -326483, -328006, -329528, -331051, -332572, -334093, -335614, + -337133, -338652, -340171, -341689, -343206, -344722, -346238, -347753, + -349267, -350780, -352293, -353804, -355315, -356825, -358334, -359843, + -361350, -362856, -364362, -365866, -367370, -368872, -370374, -371874, + -373373, -374872, -376369, -377865, -379360, -380853, -382346, -383837, + -385327, -386816, -388304, -389790, -391275, -392759, -394242, -395723, + -397203, -398681, -400158, -401633, -403107, -404580, -406051, -407521, + -408989, -410456, -411921, -413384, -414846, -416306, -417765, -419222, + -420677, -422131, -423583, -425033, -426482, -427928, -429373, -430816, + -432258, -433697, -435135, -436570, -438004, -439436, -440866, -442294, + -443720, -445144, -446566, -447986, -449404, -450820, -452234, -453645, + -455055, -456462, -457867, -459270, -460671, -462069, -463466, -464860, + -466251, -467641, -469028, -470413, -471795, -473175, -474553, -475928, + -477300, -478671, -480038, -481404, -482766, -484127, -485484, -486839, + -488192, -489542, -490889, -492233, -493575, -494914, -496251, -497584, + -498915, -500243, -501569, -502891, -504211, -505528, -506842, -508153, + -509461, -510766, -512068, -513367, -514664, -515957, -517247, -518534, + -519818, -521099, -522377, -523652, -524924, -526192, -527457, -528719, + -529978, -531234, -532486, -533735, -534980, -536223, -537462, -538697, + -539930, -541158, -542384, -543606, -544824, -546039, -547251, -548459, + -549663, -550864, -552061, -553255, -554445, -555631, -556814, -557993, + -559169, -560340, -561508, -562672, -563833, -564989, -566142, -567291, + -568436, -569577, -570714, -571848, -572977, -574102, -575224, -576341, + -577455, -578564, -579670, -580771, -581868, -582961, -584050, -585135, + -586216, -587293, -588365, -589433, -590497, -591556, -592612, -593663, + -594709, -595752, -596790, -597823, -598852, -599877, -600898, -601913, + -602925, -603932, -604934, -605932, -606926, -607914, -608899, -609878, + -610853, -611823, -612789, -613750, -614706, -615658, -616605, -617547, + -618484, -619417, -620344, -621267, -622185, -623099, -624007, -624910, + -625809, -626702, -627591, -628474, -629353, -630226, -631095, -631959, + -632817, -633670, -634519, -635362, -636200, -637032, -637860, -638682, + -639500, -640312, -641118, -641920, -642716, -643507, -644293, -645073, + -645848, -646617, -647381, -648140, -648893, -649641, -650383, -651120, + -651852, -652578, -653298, -654013, -654722, -655426, -656124, -656816, + -657503, -658184, -658859, -659529, -660193, -660851, -661504, -662151, + -662792, -663427, -664057, -664680, -665298, -665910, -666516, -667116, + -667710, -668299, -668881, -669457, -670028, -670592, -671151, -671703, + -672250, -672790, -673324, -673852, -674374, -674890, -675400, -675904, + -676401, -676892, -677377, -677856, -678329, -678795, -679255, -679709, + -680157, -680598, -681033, -681461, -681883, -682299, -682708, -683111, + -683508, -683898, -684282, -684659, -685030, -685394, -685752, -686103, + -686447, -686785, -687117, -687442, -687760, -688072, -688377, -688675, + -688967, -689252, -689530, -689802, -690067, -690325, -690577, -690821, + -691059, -691290, -691515, -691732, -691943, -692146, -692343, -692533, + -692717, -692893, -693062, -693225, -693380, -693529, -693670, -693805, + -693932, -694053, -694167, -694273, -694373, -694465, -694550, -694628, + -694700, -694764, -694820, -694870, -694913, -694948, -694976, -694997, + -695011, -695018, -695017, -695010, -694994, -694972, -694942, -694906, + -694861, -694810, -694751, -694685, -694611, -694530, -694442, -694346, + -694243, -694133, -694015, -693890, -693757, -693617, -693469, -693314, + -693151, -692981, -692804, -692619, -692426, -692226, -692018, -691803, + -691580, -691349, -691111, -690866, -690613, -690352, -690083, -689807, + -689523, -689232, -688933, -688626, -688312, -687990, -687660, -687322, + -686977, -686624, -686263, -685895, -685518, -685134, -684742, -684343, + -683935, -683520, -683097, -682666, -682228, -681781, -681327, -680864, + -680394, -679916, -679430, -678937, -678435, -677926, -677408, -676883, + -676349, -675808, -675259, -674702, -674137, -673564, -672983, -672394, + -671797, -671192, -670579, -669958, -669329, -668692, -668047, -667394, + -666733, -666064, -665386, -664701, -664008, -663307, -662597, -661880, + -661154, -660420, -659678, -658929, -658171, -657404, -656630, -655848, + -655057, -654259, -653452, -652637, -651814, -650983, -650144, -649296, + -648440, -647577, -646705, -645824, -644936, -644039, -643135, -642222, + -641301, -640371, -639434, -638488, -637534, -636572, -635601, -634623, + -633636, -632641, -631637, -630626, -629606, -628578, -627542, -626497, + -625445, -624384, -623314, -622237, -621151, -620057, -618955, -617844, + -616726, -615599, -614463, -613320, -612168, -611008, -609839, -608663, + -607478, -606285, -605083, -603873, -602655, -601429, -600195, -598952, + -597701, -596441, -595174, -593898, -592613, -591321, -590020, -588711, + -587394, -586068, -584734, -583392, -582042, -580683, -579316, -577941, + -576557, -575166, -573766, -572357, -570941, -569516, -568083, -566641, + -565192, -563734, -562268, -560794, -559311, -557820, -556321, -554814, + -553298, -551775, -550243, -548702, -547154, -545597, -544032, -542459, + -540878, -539288, -537691, -536085, -534471, -532848, -531218, -529579, + -527932, -526277, -524614, -522943, -521263, -519575, -517879, -516175, + -514463, -512743, -511015, -509278, -507533, -505781, -504020, -502251, + -500474, -498689, -496895, -495094, -493284, -491467, -489641, -487808, + -485966, -484116, -482259, -480393, -478519, -476637, -474747, -472850, + -470944, -469030, -467108, -465179, -463241, -461295, -459342, -457380, + -455410, -453433, -451448, -449454, -447453, -445444, -443427, -441403, + -439370, -437330, -435281, -433225, -431161, -429089, -427010, -424922, + -422827, -420724, -418613, -416495, -414368, -412234, -410093, -407943, + -405786, -403621, -401449, -399268, -397081, -394885, -392682, -390471, + -388253, -386027, -383793, -381552, -379303, -377047, -374783, -372511, + -370232, -367946, -365652, -363350, -361041, -358725, -356401, -354070, + -351731, -349385, -347032, -344671, -342302, -339927, -337544, -335153, + -332756, -330351, -327939, -325519, -323092, -320658, -318217, -315768, + -313313, -310850, -308380, -305903, -303418, -300927, -298428, -295922, + -293410, -290890, -288363, -285829, -283288, -280740, -278185, -275623, + -273054, -270478, -267895, -265306, -262709, -260106, -257495, -254878, + -252254, -249623, -246986, -244341, -241690, -239032, -236368, -233696, + -231018, -228333, -225642, -222944, -220240, -217528, -214811, -212086, + -209355, -206618, -203874, -201124, -198367, -195604, -192834, -190058, + -187275, -184486, -181691, -178889, -176081, -173267, -170447, -167620, + -164787, -161948, -159102, -156251, -153393, -150529, -147659, -144783, + -141901, -139013, -136119, -133219, -130312, -127400, -124482, -121558, + -118628, -115692, -112751, -109803, -106850, -103891, -100926, -97955, + -94979, -91997, -89009, -86016, -83017, -80012, -77002, -73986, -70965, + -67938, -64906, -61868, -58825, -55776, -52722, -49662, -46598, -43527, + -40452, -37371, -34285, -31194, -28098, -24996, -21889, -18777, -15660, + -12538, -9411, -6279, -3142, 0, 3147, 6299, 9456, 12618, 15784, 18956, + 22132, 25313, 28499, 31690, 34885, 38085, 41290, 44499, 47713, 50931, + 54154, 57382, 60614, 63850, 67091, 70336, 73586, 76840, 80098, 83361, + 86628, 89899, 93174, 96454, 99738, 103026, 106317, 109613, 112913, + 116218, 119526, 122838, 126153, 129473, 132797, 136125, 139456, 142791, + 146130, 149473, 152819, 156169, 159522, 162880, 166241, 169605, 172973, + 176344, 179719, 183097, 186479, 189864, 193252, 196644, 200039, 203437, + 206839, 210243, 213651, 217062, 220476, 223893, 227313, 230736, 234162, + 237591, 241023, 244457, 247895, 251335, 254779, 258224, 261673, 265124, + 268578, 272035, 275494, 278956, 282420, 285887, 289356, 292828, 296302, + 299778, 303257, 306738, 310221, 313706, 317194, 320684, 324176, 327670, + 331166, 334664, 338164, 341666, 345170, 348676, 352184, 355693, 359205, + 362718, 366233, 369749, 373268, 376787, 380309, 383832, 387356, 390882, + 394410, 397938, 401469, 405000, 408533, 412067, 415602, 419139, 422677, + 426216, 429755, 433296, 436839, 440382, 443926, 447470, 451016, 454563, + 458110, 461659, 465208, 468757, 472308, 475859, 479410, 482962, 486515, + 490068, 493622, 497176, 500730, 504285, 507840, 511395, 514951, 518507, + 522062, 525618, 529175, 532731, 536287, 539843, 543399, 546955, 550511, + 554067, 557622, 561177, 564732, 568287, 571841, 575395, 578948, 582501, + 586054, 589605, 593157, 596707, 600257, 603807, 607355, 610903, 614450, + 617996, 621541, 625085, 628629, 632171, 635712, 639252, 642791, 646329, + 649866, 653401, 656936, 660468, 664000, 667530, 671059, 674586, 678111, + 681636, 685158, 688679, 692198, 695716, 699232, 702746, 706258, 709768, + 713276, 716783, 720287, 723790, 727290, 730789, 734285, 737779, 741271, + 744760, 748247, 751732, 755215, 758695, 762172, 765648, 769120, 772590, + 776058, 779522, 782984, 786444, 789900, 793354, 796805, 800253, 803698, + 807140, 810579, 814015, 817448, 820878, 824304, 827728, 831148, 834565, + 837978, 841388, 844795, 848198, 851598, 854994, 858387, 861776, 865161, + 868543, 871921, 875295, 878665, 882031, 885394, 888752, 892107, 895458, + 898804, 902146, 905485, 908819, 912148, 915474, 918795, 922112, 925425, + 928733, 932036, 935335, 938630, 941920, 945205, 948485, 951761, 955032, + 958299, 961560, 964816, 968068, 971315, 974556, 977793, 981025, 984251, + 987472, 990688, 993899, 997104, 1000304, 1003499, 1006689, 1009872, + 1013051, 1016224, 1019391, 1022552, 1025708, 1028859, 1032003, 1035142, + 1038275, 1041402, 1044523, 1047638, 1050747, 1053851, 1056948, 1060039, + 1063123, 1066202, 1069274, 1072341, 1075400, 1078454, 1081501, 1084541, + 1087576, 1090603, 1093624, 1096639, 1099646, 1102647, 1105642, 1108629, + 1111610, 1114584, 1117551, 1120511, 1123465, 1126411, 1129350, 1132282, + 1135207, 1138125, 1141035, 1143938, 1146834, 1149723, 1152604, 1155478, + 1158344, 1161203, 1164055, 1166898, 1169735, 1172563, 1175384, 1178197, + 1181002, 1183800, 1186589, 1189371, 1192145, 1194910, 1197668, 1200418, + 1203159, 1205893, 1208618, 1211335, 1214044, 1216745, 1219437, 1222121, + 1224796, 1227463, 1230121, 1232771, 1235412, 1238045, 1240669, 1243284, + 1245891, 1248489, 1251078, 1253658, 1256229, 1258792, 1261345, 1263889, + 1266425, 1268951, 1271468, 1273976, 1276475, 1278964, 1281444, 1283915, + 1286377, 1288829, 1291271, 1293704, 1296128, 1298542, 1300947, 1303342, + 1305727, 1308102, 1310468, 1312824, 1315170, 1317506, 1319833, 1322149, + 1324456, 1326752, 1329038, 1331315, 1333581, 1335837, 1338083, 1340318, + 1342544, 1344758, 1346963, 1349157, 1351341, 1353514, 1355677, 1357829, + 1359971, 1362102, 1364223, 1366332, 1368431, 1370520, 1372597, 1374664, + 1376719, 1378764, 1380798, 1382821, 1384833, 1386834, 1388823, 1390802, + 1392770, 1394726, 1396671, 1398604, 1400527, 1402438, 1404338, 1406226, + 1408103, 1409968, 1411822, 1413664, 1415495, 1417314, 1419121, 1420917, + 1422701, 1424473, 1426233, 1427982, 1429719, 1431443, 1433156, 1434857, + 1436546, 1438223, 1439887, 1441540, 1443180, 1444809, 1446425, 1448028, + 1449620, 1451199, 1452766, 1454320, 1455862, 1457392, 1458909, 1460414, + 1461906, 1463385, 1464852, 1466306, 1467748, 1469177, 1470593, 1471996, + 1473386, 1474764, 1476129, 1477480, 1478819, 1480145, 1481458, 1482758, + 1484045, 1485319, 1486579, 1487827, 1489061, 1490282, 1491490, 1492684, + 1493865, 1495033, 1496187, 1497328, 1498456, 1499570, 1500671, 1501758, + 1502831, 1503891, 1504938, 1505970, 1506989, 1507995, 1508986, 1509964, + 1510928, 1511878, 1512814, 1513737, 1514645, 1515540, 1516420, 1517287, + 1518139, 1518978, 1519802, 1520613, 1521409, 1522191, 1522959, 1523712, + 1524451, 1525177, 1525887, 1526584, 1527266, 1527933, 1528587, 1529225, + 1529850, 1530460, 1531055, 1531636, 1532202, 1532754, 1533291, 1533813, + 1534321, 1534814, 1535292, 1535755, 1536204, 1536638, 1537057, 1537461, + 1537851, 1538225, 1538585, 1538929, 1539259, 1539574, 1539873, 1540158, + 1540427, 1540682, 1540921, 1541145, 1541354, 1541548, 1541726, 1541890, + 1542038, 1542171, 1542288, 1542390, 1542477, 1542549, 1542605, 1542646, + 1542671, 1542681, 1542675, 1542654, 1542617, 1542565, 1542497, 1542414, + 1542315, 1542200, 1542070, 1541924, 1541763, 1541586, 1541393, 1541184, + 1540959, 1540719, 1540463, 1540191, 1539904, 1539600, 1539281, 1538945, + 1538594, 1538227, 1537844, 1537445, 1537030, 1536599, 1536152, 1535689, + 1535209, 1534714, 1534203, 1533676, 1533132, 1532572, 1531997, 1531405, + 1530796, 1530172, 1529531, 1528875, 1528202, 1527512, 1526807, 1526085, + 1525347, 1524592, 1523821, 1523034, 1522230, 1521411, 1520574, 1519721, + 1518852, 1517967, 1517065, 1516146, 1515211, 1514260, 1513292, 1512307, + 1511306, 1510289, 1509255, 1508204, 1507137, 1506053, 1504953, 1503836, + 1502702, 1501552, 1500385, 1499201, 1498001, 1496784, 1495551, 1494300, + 1493033, 1491750, 1490449, 1489132, 1487798, 1486448, 1485080, 1483696, + 1482295, 1480878, 1479443, 1477992, 1476524, 1475039, 1473537, 1472019, + 1470483, 1468931, 1467362, 1465776, 1464173, 1462554, 1460917, 1459264, + 1457593, 1455906, 1454202, 1452481, 1450743, 1448988, 1447217, 1445428, + 1443622, 1441800, 1439960, 1438104, 1436230, 1434340, 1432433, 1430508, + 1428567, 1426609, 1424634, 1422642, 1420633, 1418607, 1416564, 1414504, + 1412427, 1410333, 1408222, 1406094, 1403949, 1401787, 1399608, 1397412, + 1395199, 1392969, 1390722, 1388459, 1386178, 1383880, 1381565, 1379233, + 1376884, 1374519, 1372136, 1369736, 1367320, 1364886, 1362435, 1359968, + 1357483, 1354981, 1352463, 1349927, 1347375, 1344805, 1342219, 1339616, + 1336995, 1334358, 1331704, 1329033, 1326345, 1323640, 1320918, 1318179, + 1315424, 1312651, 1309862, 1307055, 1304232, 1301392, 1298535, 1295661, + 1292770, 1289863, 1286938, 1283997, 1281039, 1278064, 1275073, 1272064, + 1269039, 1265997, 1262938, 1259862, 1256770, 1253661, 1250535, 1247392, + 1244233, 1241057, 1237864, 1234654, 1231428, 1228185, 1224926, 1221650, + 1218357, 1215047, 1211721, 1208379, 1205020, 1201644, 1198251, 1194842, + 1191417, 1187975, 1184516, 1181041, 1177550, 1174042, 1170517, 1166977, + 1163419, 1159845, 1156255, 1152649, 1149026, 1145387, 1141731, 1138059, + 1134371, 1130666, 1126945, 1123208, 1119455, 1115685, 1111900, 1108098, + 1104279, 1100445, 1096595, 1092728, 1088845, 1084947, 1081032, 1077101, + 1073154, 1069191, 1065212, 1061217, 1057206, 1053179, 1049136, 1045078, + 1041003, 1036913, 1032807, 1028685, 1024547, 1020393, 1016224, 1012039, + 1007838, 1003622, 999389, 995142, 990878, 986599, 982305, 977995, + 973669, 969328, 964971, 960599, 956212, 951809, 947391, 942957, 938508, + 934044, 929564, 925069, 920559, 916034, 911494, 906938, 902368, 897782, + 893181, 888565, 883934, 879288, 874627, 869952, 865261, 860555, 855835, + 851100, 846350, 841585, 836806, 832011, 827202, 822379, 817541, 812688, + 807821, 802939, 798043, 793132, 788207, 783267, 778313, 773345, 768362, + 763365, 758354, 753329, 748289, 743236, 738168, 733086, 727990, 722880, + 717756, 712618, 707467, 702301, 697122, 691928, 686721, 681501, 676266, + 671018, 665756, 660481, 655192, 649890, 644574, 639244, 633902, 628545, + 623176, 617793, 612397, 606988, 601565, 596130, 590681, 585219, 579744, + 574257, 568756, 563242, 557715, 552176, 546624, 541059, 535481, 529891, + 524288, 518672, 513044, 507403, 501750, 496084, 490406, 484716, 479013, + 473298, 467571, 461832, 456080, 450317, 444541, 438753, 432954, 427142, + 421318, 415483, 409636, 403777, 397907, 392024, 386131, 380225, 374308, + 368380, 362440, 356489, 350526, 344552, 338567, 332571, 326563, 320544, + 314515, 308474, 302422, 296360, 290286, 284202, 278107, 272001, 265884, + 259757, 253619, 247471, 241312, 235143, 228963, 222773, 216573, 210362, + 204141, 197911, 191670, 185419, 179157, 172886, 166606, 160315, 154014, + 147704, 141384, 135054, 128715, 122367, 116008, 109641, 103264, 96877, + 90482, 84077, 77663, 71240, 64808, 58366, 51916, 45457, 38989, 32513, + 26027, 19533, 13031, 6519, 0, -6528, -13064, -19609, -26163, -32724, + -39294, -45872, -52458, -59052, -65654, -72263, -78881, -85507, -92140, + -98781, -105429, -112085, -118748, -125419, -132098, -138783, -145476, + -152176, -158884, -165598, -172319, -179048, -185783, -192525, -199274, + -206030, -212792, -219561, -226337, -233119, -239907, -246702, -253503, + -260310, -267124, -273944, -280770, -287601, -294439, -301283, -308132, + -314987, -321848, -328715, -335587, -342464, -349347, -356236, -363130, + -370029, -376933, -383842, -390757, -397676, -404600, -411530, -418464, + -425403, -432346, -439294, -446247, -453204, -460166, -467132, -474102, + -481076, -488055, -495038, -502024, -509015, -516010, -523008, -530011, + -537017, -544026, -551040, -558056, -565076, -572100, -579127, -586157, + -593190, -600227, -607266, -614308, -621354, -628402, -635453, -642506, + -649563, -656621, -663683, -670746, -677813, -684881, -691952, -699024, + -706099, -713176, -720255, -727336, -734418, -741502, -748588, -755676, + -762765, -769856, -776947, -784041, -791135, -798231, -805328, -812426, + -819524, -826624, -833725, -840826, -847928, -855031, -862134, -869237, + -876341, -883446, -890550, -897655, -904760, -911865, -918970, -926075, + -933180, -940284, -947389, -954492, -961596, -968698, -975801, -982902, + -990003, -997103, -1004202, -1011300, -1018397, -1025493, -1032588, + -1039681, -1046774, -1053864, -1060954, -1068042, -1075128, -1082212, + -1089295, -1096376, -1103455, -1110531, -1117606, -1124679, -1131750, + -1138818, -1145884, -1152947, -1160008, -1167066, -1174122, -1181175, + -1188225, -1195272, -1202317, -1209358, -1216396, -1223431, -1230463, + -1237491, -1244516, -1251537, -1258555, -1265570, -1272580, -1279587, + -1286590, -1293589, -1300584, -1307575, -1314562, -1321544, -1328522, + -1335496, -1342465, -1349430, -1356390, -1363346, -1370297, -1377243, + -1384183, -1391119, -1398050, -1404976, -1411897, -1418812, -1425722, + -1432626, -1439525, -1446418, -1453306, -1460187, -1467063, -1473933, + -1480797, -1487655, -1494507, -1501353, -1508192, -1515025, -1521852, + -1528672, -1535485, -1542292, -1549092, -1555885, -1562671, -1569450, + -1576222, -1582987, -1589745, -1596496, -1603239, -1609974, -1616703, + -1623423, -1630136, -1636841, -1643538, -1650228, -1656909, -1663582, + -1670247, -1676904, -1683553, -1690193, -1696825, -1703448, -1710063, + -1716669, -1723266, -1729854, -1736434, -1743004, -1749565, -1756118, + -1762661, -1769194, -1775719, -1782233, -1788739, -1795234, -1801720, + -1808197, -1814663, -1821119, -1827566, -1834002, -1840429, -1846845, + -1853250, -1859646, -1866030, -1872405, -1878768, -1885121, -1891464, + -1897795, -1904115, -1910425, -1916723, -1923010, -1929286, -1935551, + -1941804, -1948046, -1954276, -1960495, -1966702, -1972897, -1979081, + -1985252, -1991411, -1997559, -2003694, -2009817, -2015927, -2022026, + -2028111, -2034185, -2040245, -2046293, -2052328, -2058351, -2064360, + -2070357, -2076340, -2082310, -2088267, -2094211, -2100141, -2106058, + -2111961, -2117851, -2123727, -2129589, -2135438, -2141272, -2147093, + -2152899, -2158692, -2164470, -2170234, -2175983, -2181718, -2187439, + -2193145, -2198836, -2204512, -2210174, -2215821, -2221453, -2227070, + -2232671, -2238258, -2243829, -2249385, -2254926, -2260451, -2265960, + -2271454, -2276932, -2282395, -2287841, -2293272, -2298686, -2304085, + -2309467, -2314833, -2320183, -2325517, -2330834, -2336134, -2341418, + -2346685, -2351936, -2357169, -2362386, -2367586, -2372769, -2377934, + -2383083, -2388214, -2393328, -2398425, -2403504, -2408565, -2413609, + -2418635, -2423644, -2428635, -2433607, -2438562, -2443499, -2448417, + -2453318, -2458200, -2463064, -2467909, -2472736, -2477545, -2482335, + -2487106, -2491858, -2496592, -2501307, -2506002, -2510679, -2515337, + -2519975, -2524594, -2529194, -2533775, -2538336, -2542877, -2547399, + -2551902, -2556384, -2560847, -2565290, -2569713, -2574116, -2578499, + -2582861, -2587204, -2591526, -2595828, -2600110, -2604371, -2608611, + -2612831, -2617030, -2621209, -2625366, -2629503, -2633619, -2637714, + -2641787, -2645840, -2649871, -2653881, -2657870, -2661838, -2665783, + -2669708, -2673610, -2677492, -2681351, -2685188, -2689004, -2692798, + -2696570, -2700319, -2704047, -2707752, -2711435, -2715096, -2718734, + -2722350, -2725944, -2729515, -2733063, -2736589, -2740092, -2743572, + -2747029, -2750463, -2753874, -2757262, -2760627, -2763969, -2767288, + -2770583, -2773855, -2777103, -2780328, -2783530, -2786708, -2789862, + -2792992, -2796099, -2799181, -2802240, -2805275, -2808286, -2811273, + -2814235, -2817174, -2820088, -2822978, -2825843, -2828684, -2831501, + -2834293, -2837060, -2839803, -2842521, -2845214, -2847882, -2850525, + -2853144, -2855737, -2858306, -2860849, -2863367, -2865860, -2868328, + -2870770, -2873187, -2875578, -2877944, -2880285, -2882599, -2884889, + -2887152, -2889390, -2891601, -2893787, -2895947, -2898081, -2900189, + -2902271, -2904327, -2906356, -2908360, -2910337, -2912288, -2914212, + -2916110, -2917981, -2919826, -2921644, -2923436, -2925201, -2926939, + -2928650, -2930335, -2931992, -2933623, -2935227, -2936803, -2938353, + -2939875, -2941371, -2942839, -2944280, -2945693, -2947079, -2948438, + -2949769, -2951073, -2952349, -2953598, -2954819, -2956012, -2957177, + -2958315, -2959425, -2960507, -2961562, -2962588, -2963586, -2964556, + -2965499, -2966413, -2967298, -2968156, -2968986, -2969787, -2970560, + -2971304, -2972020, -2972708, -2973367, -2973997, -2974599, -2975173, + -2975717, -2976234, -2976721, -2977179, -2977609, -2978010, -2978382, + -2978725, -2979039, -2979325, -2979581, -2979808, -2980006, -2980175, + -2980314, -2980425, -2980506, -2980558, -2980580, -2980574, -2980537, + -2980472, -2980377, -2980252, -2980098, -2979915, -2979702, -2979459, + -2979186, -2978884, -2978552, -2978191, -2977799, -2977378, -2976927, + -2976446, -2975936, -2975395, -2974824, -2974224, -2973593, -2972932, + -2972241, -2971520, -2970769, -2969988, -2969177, -2968335, -2967463, + -2966561, -2965629, -2964666, -2963673, -2962650, -2961596, -2960511, + -2959397, -2958252, -2957076, -2955870, -2954633, -2953366, -2952068, + -2950739, -2949380, -2947990, -2946570, -2945119, -2943637, -2942124, + -2940581, -2939007, -2937402, -2935766, -2934099, -2932402, -2930673, + -2928914, -2927124, -2925303, -2923451, -2921567, -2919653, -2917708, + -2915732, -2913725, -2911687, -2909618, -2907517, -2905386, -2903223, + -2901030, -2898805, -2896549, -2894262, -2891944, -2889594, -2887213, + -2884801, -2882358, -2879884, -2877378, -2874841, -2872273, -2869673, + -2867042, -2864380, -2861687, -2858962, -2856206, -2853418, -2850599, + -2847749, -2844868, -2841955, -2839010, -2836034, -2833027, -2829989, + -2826919, -2823817, -2820684, -2817520, -2814325, -2811097, -2807839, + -2804549, -2801227, -2797874, -2794490, -2791074, -2787627, -2784148, + -2780638, -2777096, -2773523, -2769918, -2766282, -2762615, -2758916, + -2755185, -2751423, -2747630, -2743805, -2739949, -2736061, -2732142, + -2728191, -2724209, -2720195, -2716150, -2712073, -2707966, -2703826, + -2699655, -2695453, -2691220, -2686954, -2682658, -2678330, -2673971, + -2669580, -2665158, -2660705, -2656220, -2651704, -2647157, -2642578, + -2637968, -2633327, -2628654, -2623951, -2619215, -2614449, -2609651, + -2604822, -2599962, -2595071, -2590148, -2585194, -2580209, -2575193, + -2570146, -2565068, -2559958, -2554818, -2549646, -2544443, -2539209, + -2533944, -2528648, -2523322, -2517964, -2512575, -2507155, -2501704, + -2496223, -2490710, -2485167, -2479593, -2473987, -2468352, -2462685, + -2456987, -2451259, -2445500, -2439711, -2433890, -2428039, -2422158, + -2416245, -2410303, -2404329, -2398325, -2392291, -2386226, -2380130, + -2374005, -2367848, -2361662, -2355445, -2349197, -2342920, -2336612, + -2330274, -2323906, -2317507, -2311078, -2304619, -2298131, -2291612, + -2285063, -2278484, -2271875, -2265236, -2258567, -2251868, -2245139, + -2238381, -2231593, -2224775, -2217927, -2211050, -2204143, -2197207, + -2190241, -2183245, -2176220, -2169165, -2162081, -2154968, -2147825, + -2140653, -2133451, -2126221, -2118961, -2111672, -2104354, -2097007, + -2089631, -2082226, -2074791, -2067328, -2059836, -2052316, -2044766, + -2037188, -2029581, -2021945, -2014281, -2006588, -1998867, -1991117, + -1983339, -1975532, -1967697, -1959834, -1951942, -1944022, -1936074, + -1928098, -1920094, -1912062, -1904002, -1895914, -1887798, -1879654, + -1871482, -1863283, -1855056, -1846802, -1838519, -1830210, -1821873, + -1813508, -1805116, -1796697, -1788251, -1779777, -1771276, -1762748, + -1754193, -1745611, -1737002, -1728367, -1719704, -1711015, -1702298, + -1693556, -1684786, -1675991, -1667168, -1658320, -1649444, -1640543, + -1631615, -1622661, -1613681, -1604675, -1595643, -1586585, -1577501, + -1568392, -1559256, -1550095, -1540908, -1531696, -1522458, -1513194, + -1503906, -1494592, -1485252, -1475888, -1466498, -1457083, -1447644, + -1438179, -1428690, -1419175, -1409636, -1400072, -1390484, -1380871, + -1371234, -1361572, -1351886, -1342176, -1332442, -1322683, -1312900, + -1303094, -1293263, -1283409, -1273531, -1263629, -1253704, -1243755, + -1233783, -1223787, -1213768, -1203725, -1193660, -1183571, -1173459, + -1163325, -1153167, -1142987, -1132784, -1122558, -1112310, -1102039, + -1091746, -1081430, -1071092, -1060732, -1050350, -1039946, -1029520, + -1019072, -1008602, -998111, -987597, -977063, -966507, -955929, + -945330, -934710, -924069, -913407, -902723, -892019, -881294, -870548, + -859782, -848995, -838188, -827360, -816512, -805643, -794755, -783846, + -772918, -761969, -751001, -740013, -729006, -717979, -706932, -695866, + -684781, -673677, -662553, -651411, -640250, -629069, -617871, -606653, + -595417, -584163, -572890, -561599, -550289, -538962, -527616, -516253, + -504872, -493473, -482057, -470623, -459171, -447702, -436216, -424713, + -413193, -401656, -390102, -378531, -366943, -355339, -343719, -332082, + -320428, -308759, -297073, -285372, -273655, -261921, -250173, -238408, + -226628, -214833, -203022, -191196, -179355, -167499, -155629, -143743, + -131843, -119928, -107998, -96055, -84097, -72124, -60138, -48138, + -36124, -24096, -12055, 0, 12068, 24150, 36245, 48353, 60474, 72608, + 84755, 96915, 109087, 121272, 133469, 145679, 157900, 170134, 182379, + 194637, 206906, 219187, 231479, 243783, 256098, 268424, 280761, 293110, + 305469, 317838, 330219, 342610, 355011, 367423, 379845, 392277, 404719, + 417171, 429632, 442103, 454584, 467074, 479573, 492082, 504599, 517126, + 529661, 542205, 554758, 567319, 579888, 592466, 605052, 617646, 630248, + 642857, 655475, 668099, 680732, 693371, 706018, 718672, 731332, 744000, + 756674, 769355, 782043, 794737, 807437, 820143, 832855, 845573, 858297, + 871027, 883762, 896502, 909248, 921999, 934755, 947516, 960282, 973052, + 985827, 998607, 1011391, 1024179, 1036971, 1049767, 1062567, 1075370, + 1088177, 1100988, 1113802, 1126619, 1139439, 1152262, 1165088, 1177917, + 1190749, 1203583, 1216419, 1229257, 1242098, 1254940, 1267784, 1280631, + 1293478, 1306327, 1319178, 1332029, 1344882, 1357736, 1370591, 1383446, + 1396302, 1409158, 1422015, 1434872, 1447729, 1460586, 1473442, 1486299, + 1499155, 1512010, 1524865, 1537719, 1550572, 1563424, 1576274, 1589124, + 1601971, 1614818, 1627662, 1640505, 1653346, 1666184, 1679021, 1691855, + 1704686, 1717515, 1730341, 1743165, 1755985, 1768802, 1781616, 1794426, + 1807233, 1820036, 1832836, 1845631, 1858422, 1871210, 1883993, 1896771, + 1909545, 1922314, 1935078, 1947837, 1960591, 1973340, 1986084, 1998822, + 2011554, 2024281, 2037001, 2049716, 2062424, 2075126, 2087822, 2100511, + 2113194, 2125869, 2138538, 2151199, 2163853, 2176500, 2189140, 2201771, + 2214395, 2227011, 2239619, 2252219, 2264811, 2277394, 2289968, 2302534, + 2315091, 2327639, 2340177, 2352707, 2365227, 2377738, 2390239, 2402730, + 2415212, 2427683, 2440144, 2452595, 2465035, 2477465, 2489884, 2502292, + 2514689, 2527075, 2539450, 2551813, 2564165, 2576505, 2588834, 2601150, + 2613454, 2625746, 2638026, 2650294, 2662548, 2674790, 2687019, 2699235, + 2711438, 2723628, 2735804, 2747967, 2760116, 2772251, 2784372, 2796479, + 2808572, 2820650, 2832714, 2844763, 2856798, 2868818, 2880822, 2892812, + 2904786, 2916744, 2928687, 2940615, 2952526, 2964422, 2976301, 2988164, + 3000011, 3011841, 3023655, 3035451, 3047231, 3058994, 3070739, 3082467, + 3094178, 3105871, 3117547, 3129204, 3140843, 3152465, 3164068, 3175652, + 3187219, 3198766, 3210294, 3221804, 3233295, 3244766, 3256218, 3267650, + 3279063, 3290456, 3301829, 3313183, 3324516, 3335828, 3347121, 3358392, + 3369643, 3380874, 3392083, 3403271, 3414438, 3425584, 3436708, 3447810, + 3458891, 3469950, 3480986, 3492001, 3502993, 3513963, 3524911, 3535835, + 3546737, 3557616, 3568472, 3579304, 3590114, 3600899, 3611661, 3622400, + 3633114, 3643805, 3654471, 3665113, 3675731, 3686324, 3696893, 3707436, + 3717955, 3728449, 3738918, 3749361, 3759779, 3770171, 3780537, 3790878, + 3801193, 3811481, 3821744, 3831980, 3842189, 3852372, 3862528, 3872658, + 3882760, 3892835, 3902883, 3912904, 3922897, 3932862, 3942800, 3952710, + 3962591, 3972445, 3982270, 3992067, 4001835, 4011575, 4021286, 4030968, + 4040621, 4050245, 4059839, 4069404, 4078940, 4088445, 4097922, 4107368, + 4116784, 4126170, 4135525, 4144850, 4154145, 4163409, 4172642, 4181845, + 4191016, 4200156, 4209265, 4218342, 4227388, 4236402, 4245385, 4254335, + 4263254, 4272140, 4280994, 4289816, 4298605, 4307361, 4316085, 4324776, + 4333434, 4342059, 4350650, 4359209, 4367733, 4376225, 4384682, 4393106, + 4401495, 4409851, 4418172, 4426459, 4434712, 4442930, 4451114, 4459262, + 4467376, 4475455, 4483499, 4491507, 4499480, 4507418, 4515320, 4523186, + 4531016, 4538811, 4546569, 4554292, 4561978, 4569627, 4577240, 4584817, + 4592356, 4599859, 4607325, 4614754, 4622146, 4629500, 4636817, 4644097, + 4651338, 4658542, 4665709, 4672837, 4679927, 4686979, 4693992, 4700968, + 4707904, 4714802, 4721662, 4728482, 4735264, 4742006, 4748710, 4755374, + 4761999, 4768584, 4775129, 4781635, 4788101, 4794528, 4800914, 4807260, + 4813566, 4819831, 4826056, 4832241, 4838385, 4844488, 4850550, 4856571, + 4862552, 4868491, 4874389, 4880245, 4886060, 4891834, 4897565, 4903255, + 4908904, 4914510, 4920074, 4925596, 4931076, 4936513, 4941908, 4947261, + 4952570, 4957837, 4963062, 4968243, 4973381, 4978476, 4983528, 4988537, + 4993502, 4998423, 5003301, 5008136, 5012926, 5017673, 5022375, 5027034, + 5031649, 5036219, 5040745, 5045226, 5049663, 5054055, 5058403, 5062706, + 5066963, 5071176, 5075344, 5079467, 5083544, 5087577, 5091563, 5095505, + 5099400, 5103250, 5107055, 5110813, 5114526, 5118192, 5121812, 5125387, + 5128915, 5132396, 5135831, 5139220, 5142562, 5145858, 5149106, 5152308, + 5155463, 5158571, 5161632, 5164646, 5167612, 5170532, 5173403, 5176228, + 5179005, 5181734, 5184415, 5187049, 5189635, 5192173, 5194663, 5197105, + 5199499, 5201845, 5204142, 5206391, 5208591, 5210743, 5212847, 5214902, + 5216908, 5218865, 5220773, 5222633, 5224443, 5226205, 5227917, 5229580, + 5231194, 5232759, 5234274, 5235740, 5237156, 5238522, 5239839, 5241106, + 5242324, 5243491, 5244609, 5245676, 5246694, 5247661, 5248579, 5249446, + 5250263, 5251029, 5251745, 5252411, 5253026, 5253590, 5254104, 5254567, + 5254980, 5255341, 5255652, 5255912, 5256121, 5256279, 5256385, 5256441, + 5256445, 5256398, 5256300, 5256151, 5255950, 5255698, 5255394, 5255039, + 5254632, 5254173, 5253663, 5253101, 5252487, 5251821, 5251104, 5250334, + 5249513, 5248639, 5247714, 5246736, 5245706, 5244624, 5243490, 5242303, + 5241064, 5239773, 5238430, 5237033, 5235585, 5234084, 5232530, 5230924, + 5229265, 5227553, 5225789, 5223972, 5222102, 5220179, 5218204, 5216175, + 5214094, 5211959, 5209772, 5207532, 5205238, 5202892, 5200492, 5198039, + 5195533, 5192974, 5190361, 5187695, 5184976, 5182204, 5179378, 5176499, + 5173567, 5170581, 5167541, 5164448, 5161302, 5158102, 5154848, 5151541, + 5148180, 5144766, 5141298, 5137776, 5134201, 5130572, 5126889, 5123152, + 5119362, 5115518, 5111620, 5107668, 5103663, 5099604, 5095490, 5091323, + 5087102, 5082827, 5078499, 5074116, 5069679, 5065189, 5060644, 5056046, + 5051393, 5046687, 5041926, 5037112, 5032243, 5027321, 5022344, 5017313, + 5012229, 5007090, 5001897, 4996651, 4991350, 4985995, 4980586, 4975123, + 4969606, 4964035, 4958410, 4952730, 4946997, 4941210, 4935368, 4929473, + 4923523, 4917520, 4911462, 4905351, 4899185, 4892965, 4886691, 4880364, + 4873982, 4867546, 4861056, 4854513, 4847915, 4841263, 4834558, 4827798, + 4820985, 4814117, 4807196, 4800221, 4793192, 4786109, 4778972, 4771782, + 4764537, 4757239, 4749887, 4742482, 4735022, 4727509, 4719942, 4712322, + 4704647, 4696919, 4689138, 4681303, 4673414, 4665472, 4657476, 4649427, + 4641324, 4633168, 4624959, 4616696, 4608380, 4600010, 4591587, 4583111, + 4574581, 4565998, 4557362, 4548673, 4539931, 4531136, 4522287, 4513386, + 4504432, 4495424, 4486364, 4477251, 4468085, 4458866, 4449594, 4440270, + 4430893, 4421463, 4411981, 4402446, 4392858, 4383218, 4373526, 4363781, + 4353984, 4344134, 4334232, 4324278, 4314272, 4304213, 4294103, 4283940, + 4273726, 4263459, 4253140, 4242770, 4232348, 4221874, 4211348, 4200771, + 4190142, 4179462, 4168730, 4157946, 4147112, 4136226, 4125288, 4114299, + 4103260, 4092169, 4081027, 4069834, 4058590, 4047295, 4035950, 4024553, + 4013106, 4001608, 3990060, 3978461, 3966812, 3955113, 3943363, 3931563, + 3919712, 3907812, 3895861, 3883861, 3871810, 3859710, 3847560, 3835360, + 3823111, 3810812, 3798464, 3786066, 3773619, 3761122, 3748576, 3735982, + 3723338, 3710645, 3697903, 3685113, 3672273, 3659385, 3646449, 3633463, + 3620430, 3607348, 3594218, 3581039, 3567813, 3554538, 3541216, 3527845, + 3514427, 3500961, 3487448, 3473887, 3460278, 3446623, 3432919, 3419169, + 3405372, 3391527, 3377636, 3363698, 3349713, 3335682, 3321604, 3307479, + 3293308, 3279091, 3264828, 3250519, 3236163, 3221762, 3207315, 3192822, + 3178284, 3163700, 3149070, 3134396, 3119676, 3104911, 3090101, 3075246, + 3060346, 3045402, 3030413, 3015379, 3000301, 2985179, 2970013, 2954802, + 2939548, 2924249, 2908907, 2893521, 2878092, 2862619, 2847103, 2831544, + 2815941, 2800296, 2784607, 2768876, 2753102, 2737286, 2721427, 2705526, + 2689582, 2673597, 2657569, 2641500, 2625389, 2609236, 2593042, 2576806, + 2560529, 2544211, 2527852, 2511452, 2495011, 2478530, 2462007, 2445445, + 2428842, 2412199, 2395516, 2378793, 2362030, 2345227, 2328385, 2311504, + 2294583, 2277622, 2260623, 2243585, 2226508, 2209393, 2192239, 2175046, + 2157815, 2140546, 2123239, 2105895, 2088512, 2071092, 2053634, 2036139, + 2018607, 2001037, 1983431, 1965788, 1948108, 1930392, 1912639, 1894850, + 1877025, 1859164, 1841267, 1823335, 1805366, 1787363, 1769324, 1751250, + 1733141, 1714997, 1696819, 1678606, 1660358, 1642077, 1623761, 1605411, + 1587027, 1568610, 1550159, 1531675, 1513157, 1494607, 1476023, 1457407, + 1438758, 1420077, 1401363, 1382617, 1363839, 1345030, 1326188, 1307315, + 1288411, 1269475, 1250508, 1231510, 1212482, 1193422, 1174333, 1155213, + 1136063, 1116882, 1097672, 1078433, 1059163, 1039865, 1020537, 1001180, + 981794, 962380, 942937, 923466, 903966, 884438, 864883, 845300, 825689, + 806050, 786385, 766692, 746973, 727227, 707454, 687655, 667829, 647978, + 628100, 608197, 588268, 568314, 548335, 528331, 508301, 488247, 468169, + 448066, 427939, 407788, 387614, 367415, 347193, 326948, 306680, 286388, + 266074, 245737, 225378, 204997, 184594, 164168, 143721, 123253, 102763, + 82252, 61720, 41167, 20593, 0, -20614, -41248, -61902, -82576, -103269, + -123982, -144714, -165465, -186234, -207023, -227829, -248654, -269497, + -290358, -311236, -332132, -353045, -373976, -394923, -415887, -436868, + -457864, -478877, -499906, -520951, -542012, -563087, -584178, -605284, + -626405, -647540, -668690, -689854, -711032, -732224, -753430, -774649, + -795881, -817127, -838385, -859656, -880939, -902235, -923543, -944863, + -966194, -987537, -1008891, -1030256, -1051632, -1073019, -1094417, + -1115824, -1137242, -1158670, -1180107, -1201554, -1223010, -1244475, + -1265949, -1287432, -1308924, -1330423, -1351931, -1373446, -1394970, + -1416500, -1438038, -1459583, -1481135, -1502694, -1524259, -1545830, + -1567407, -1588990, -1610579, -1632173, -1653773, -1675377, -1696986, + -1718600, -1740218, -1761841, -1783467, -1805097, -1826731, -1848367, + -1870008, -1891651, -1913296, -1934945, -1956595, -1978248, -1999902, + -2021558, -2043216, -2064875, -2086535, -2108195, -2129857, -2151518, + -2173180, -2194842, -2216504, -2238165, -2259826, -2281485, -2303144, + -2324801, -2346457, -2368111, -2389763, -2411412, -2433060, -2454705, + -2476347, -2497986, -2519622, -2541254, -2562883, -2584508, -2606128, + -2627745, -2649357, -2670964, -2692566, -2714163, -2735755, -2757341, + -2778921, -2800495, -2822063, -2843624, -2865179, -2886727, -2908267, + -2929800, -2951326, -2972844, -2994354, -3015855, -3037349, -3058833, + -3080309, -3101775, -3123233, -3144680, -3166118, -3187546, -3208964, + -3230371, -3251768, -3273154, -3294528, -3315892, -3337244, -3358584, + -3379912, -3401228, -3422532, -3443823, -3465101, -3486366, -3507618, + -3528856, -3550081, -3571291, -3592488, -3613670, -3634837, -3655990, + -3677127, -3698250, -3719356, -3740447, -3761523, -3782581, -3803624, + -3824650, -3845659, -3866651, -3887626, -3908583, -3929523, -3950444, + -3971348, -3992233, -4013099, -4033947, -4054775, -4075585, -4096374, + -4117144, -4137895, -4158624, -4179334, -4200023, -4220691, -4241338, + -4261964, -4282568, -4303151, -4323711, -4344250, -4364766, -4385259, + -4405730, -4426177, -4446602, -4467002, -4487379, -4507732, -4528061, + -4548366, -4568646, -4588901, -4609131, -4629336, -4649515, -4669668, + -4689796, -4709897, -4729972, -4750021, -4770042, -4790037, -4810004, + -4829944, -4849856, -4869740, -4889595, -4909423, -4929222, -4948992, + -4968733, -4988445, -5008127, -5027779, -5047402, -5066994, -5086557, + -5106088, -5125589, -5145058, -5164497, -5183904, -5203279, -5222622, + -5241933, -5261212, -5280458, -5299672, -5318852, -5337999, -5357113, + -5376193, -5395239, -5414251, -5433229, -5452172, -5471081, -5489954, + -5508792, -5527595, -5546362, -5565094, -5583789, -5602448, -5621070, + -5639656, -5658205, -5676717, -5695191, -5713627, -5732026, -5750387, + -5768710, -5786994, -5805239, -5823446, -5841614, -5859742, -5877830, + -5895879, -5913888, -5931857, -5949786, -5967673, -5985520, -6003326, + -6021091, -6038814, -6056496, -6074136, -6091733, -6109289, -6126802, + -6144272, -6161699, -6179083, -6196423, -6213721, -6230974, -6248183, + -6265348, -6282469, -6299545, -6316576, -6333562, -6350503, -6367399, + -6384249, -6401053, -6417811, -6434522, -6451187, -6467806, -6484377, + -6500902, -6517379, -6533808, -6550190, -6566524, -6582809, -6599047, + -6615236, -6631376, -6647467, -6663509, -6679501, -6695444, -6711337, + -6727181, -6742974, -6758716, -6774408, -6790050, -6805640, -6821179, + -6836667, -6852103, -6867487, -6882820, -6898100, -6913328, -6928503, + -6943625, -6958695, -6973711, -6988674, -7003583, -7018439, -7033241, + -7047988, -7062681, -7077320, -7091904, -7106433, -7120906, -7135325, + -7149688, -7163995, -7178246, -7192442, -7206581, -7220663, -7234689, + -7248658, -7262570, -7276424, -7290222, -7303961, -7317643, -7331267, + -7344833, -7358340, -7371789, -7385179, -7398510, -7411782, -7424995, + -7438148, -7451241, -7464275, -7477249, -7490162, -7503015, -7515808, + -7528539, -7541210, -7553820, -7566368, -7578855, -7591280, -7603644, + -7615945, -7628184, -7640361, -7652475, -7664526, -7676515, -7688440, + -7700303, -7712101, -7723836, -7735508, -7747115, -7758658, -7770137, + -7781552, -7792902, -7804187, -7815407, -7826562, -7837651, -7848675, + -7859633, -7870526, -7881352, -7892113, -7902807, -7913434, -7923995, + -7934489, -7944916, -7955275, -7965568, -7975793, -7985950, -7996039, + -8006061, -8016014, -8025899, -8035716, -8045463, -8055143, -8064753, + -8074294, -8083766, -8093168, -8102501, -8111764, -8120957, -8130080, + -8139133, -8148116, -8157028, -8165869, -8174640, -8183339, -8191968, + -8200525, -8209011, -8217425, -8225768, -8234039, -8242237, -8250364, + -8258418, -8266400, -8274309, -8282146, -8289909, -8297600, -8305217, + -8312761, -8320232, -8327629, -8334952, -8342202, -8349377, -8356478, + -8363505, -8370458, -8377336, -8384139, -8390868, -8397521, -8404100, + -8410603, -8417031, -8423383, -8429659, -8435860, -8441985, -8448034, + -8454007, -8459903, -8465723, -8471467, -8477134, -8482724, -8488237, + -8493673, -8499032, -8504313, -8509517, -8514644, -8519693, -8524664, + -8529557, -8534372, -8539109, -8543768, -8548349, -8552851, -8557274, + -8561618, -8565884, -8570071, -8574178, -8578207, -8582156, -8586026, + -8589816, -8593526, -8597157, -8600708, -8604179, -8607570, -8610881, + -8614111, -8617261, -8620331, -8623320, -8626228, -8629056, -8631802, + -8634468, -8637052, -8639555, -8641977, -8644317, -8646576, -8648754, + -8650849, -8652863, -8654795, -8656645, -8658413, -8660099, -8661702, + -8663223, -8664662, -8666018, -8667291, -8668482, -8669590, -8670615, + -8671557, -8672416, -8673192, -8673885, -8674494, -8675020, -8675462, + -8675821, -8676096, -8676288, -8676395, -8676419, -8676359, -8676215, + -8675986, -8675674, -8675277, -8674796, -8674231, -8673581, -8672846, + -8672027, -8671123, -8670135, -8669061, -8667903, -8666660, -8665331, + -8663918, -8662419, -8660836, -8659167, -8657412, -8655572, -8653647, + -8651636, -8649540, -8647358, -8645090, -8642737, -8640297, -8637772, + -8635161, -8632464, -8629681, -8626812, -8623857, -8620815, -8617687, + -8614474, -8611173, -8607787, -8604313, -8600754, -8597108, -8593375, + -8589556, -8585650, -8581658, -8577579, -8573413, -8569160, -8564820, + -8560394, -8555880, -8551280, -8546593, -8541818, -8536957, -8532008, + -8526973, -8521850, -8516640, -8511343, -8505959, -8500488, -8494929, + -8489283, -8483549, -8477728, -8471820, -8465825, -8459742, -8453571, + -8447313, -8440968, -8434535, -8428015, -8421407, -8414712, -8407929, + -8401058, -8394100, -8387054, -8379921, -8372700, -8365391, -8357995, + -8350511, -8342940, -8335281, -8327534, -8319699, -8311777, -8303767, + -8295670, -8287485, -8279212, -8270851, -8262403, -8253867, -8245244, + -8236533, -8227734, -8218847, -8209873, -8200811, -8191662, -8182425, + -8173100, -8163688, -8154188, -8144601, -8134926, -8125164, -8115314, + -8105376, -8095351, -8085239, -8075039, -8064751, -8054377, -8043915, + -8033365, -8022728, -8012004, -8001193, -7990294, -7979308, -7968235, + -7957074, -7945827, -7934492, -7923070, -7911562, -7899966, -7888283, + -7876513, -7864657, -7852713, -7840683, -7828565, -7816361, -7804071, + -7791693, -7779229, -7766678, -7754041, -7741317, -7728507, -7715611, + -7702628, -7689558, -7676403, -7663161, -7649833, -7636419, -7622919, + -7609333, -7595660, -7581902, -7568059, -7554129, -7540113, -7526012, + -7511826, -7497553, -7483196, -7468752, -7454224, -7439610, -7424911, + -7410127, -7395258, -7380303, -7365264, -7350140, -7334931, -7319637, + -7304258, -7288795, -7273248, -7257616, -7241899, -7226098, -7210214, + -7194244, -7178191, -7162054, -7145833, -7129528, -7113140, -7096667, + -7080112, -7063472, -7046750, -7029944, -7013054, -6996082, -6979027, + -6961888, -6944667, -6927363, -6909977, -6892508, -6874956, -6857322, + -6839606, -6821807, -6803927, -6785964, -6767920, -6749794, -6731586, + -6713296, -6694926, -6676473, -6657940, -6639325, -6620630, -6601853, + -6582996, -6564057, -6545039, -6525940, -6506760, -6487500, -6468160, + -6448740, -6429240, -6409661, -6390002, -6370263, -6350444, -6330547, + -6310570, -6290514, -6270380, -6250166, -6229874, -6209503, -6189054, + -6168527, -6147921, -6127237, -6106476, -6085636, -6064720, -6043725, + -6022653, -6001504, -5980278, -5958975, -5937595, -5916139, -5894605, + -5872996, -5851310, -5829548, -5807710, -5785797, -5763807, -5741743, + -5719602, -5697387, -5675096, -5652731, -5630291, -5607776, -5585186, + -5562523, -5539785, -5516973, -5494087, -5471128, -5448095, -5424989, + -5401809, -5378556, -5355231, -5331833, -5308362, -5284818, -5261203, + -5237515, -5213756, -5189925, -5166022, -5142047, -5118002, -5093885, + -5069698, -5045440, -5021111, -4996712, -4972243, -4947703, -4923094, + -4898415, -4873667, -4848849, -4823962, -4799006, -4773982, -4748889, + -4723727, -4698497, -4673200, -4647834, -4622401, -4596900, -4571332, + -4545696, -4519994, -4494226, -4468390, -4442488, -4416521, -4390487, + -4364387, -4338222, -4311992, -4285696, -4259336, -4232910, -4206420, + -4179866, -4153248, -4126565, -4099819, -4073009, -4046136, -4019200, + -3992201, -3965139, -3938015, -3910828, -3883579, -3856268, -3828896, + -3801462, -3773967, -3746411, -3718794, -3691116, -3663378, -3635580, + -3607722, -3579804, -3551826, -3523789, -3495694, -3467539, -3439326, + -3411054, -3382724, -3354336, -3325890, -3297387, -3268826, -3240209, + -3211534, -3182803, -3154016, -3125172, -3096273, -3067318, -3038307, + -3009241, -2980120, -2950945, -2921714, -2892430, -2863092, -2833699, + -2804253, -2774754, -2745202, -2715597, -2685939, -2656229, -2626467, + -2596653, -2566787, -2536870, -2506902, -2476883, -2446813, -2416693, + -2386523, -2356303, -2326033, -2295713, -2265345, -2234928, -2204462, + -2173948, -2143385, -2112775, -2082117, -2051411, -2020659, -1989860, + -1959014, -1928122, -1897183, -1866199, -1835170, -1804095, -1772975, + -1741810, -1710601, -1679347, -1648050, -1616709, -1585324, -1553897, + -1522426, -1490913, -1459357, -1427760, -1396120, -1364439, -1332717, + -1300953, -1269149, -1237305, -1205420, -1173495, -1141531, -1109527, + -1077485, -1045403, -1013283, -981125, -948928, -916694, -884423, + -852115, -819769, -787387, -754969, -722515, -690025, -657500, -624940, + -592344, -559714, -527050, -494352, -461620, -428855, -396057, -363226, + -330362, -297466, -264538, -231579, -198588, -165566, -132513, -99429, + -66316, -33173, 0, 33202, 66433, 99693, 132982, 166298, 199643, 233014, + 266413, 299839, 333292, 366771, 400276, 433806, 467363, 500944, 534549, + 568180, 601834, 635513, 669215, 702940, 736688, 770459, 804252, 838067, + 871904, 905762, 939642, 973542, 1007462, 1041403, 1075364, 1109344, + 1143343, 1177361, 1211398, 1245453, 1279526, 1313617, 1347725, 1381850, + 1415992, 1450150, 1484324, 1518514, 1552719, 1586939, 1621174, 1655424, + 1689688, 1723965, 1758256, 1792560, 1826877, 1861207, 1895549, 1929902, + 1964268, 1998644, 2033031, 2067429, 2101837, 2136255, 2170683, 2205120, + 2239566, 2274020, 2308483, 2342954, 2377432, 2411918, 2446411, 2480910, + 2515416, 2549927, 2584445, 2618967, 2653495, 2688027, 2722564, 2757104, + 2791649, 2826196, 2860747, 2895300, 2929856, 2964413, 2998973, 3033533, + 3068095, 3102657, 3137220, 3171782, 3206344, 3240906, 3275466, 3310025, + 3344583, 3379138, 3413691, 3448242, 3482789, 3517333, 3551873, 3586409, + 3620941, 3655468, 3689989, 3724506, 3759016, 3793521, 3828019, 3862510, + 3896994, 3931471, 3965940, 4000401, 4034853, 4069296, 4103730, 4138155, + 4172570, 4206974, 4241368, 4275751, 4310123, 4344484, 4378832, 4413168, + 4447491, 4481802, 4516099, 4550382, 4584652, 4618907, 4653147, 4687373, + 4721583, 4755777, 4789955, 4824117, 4858262, 4892390, 4926500, 4960593, + 4994667, 5028723, 5062760, 5096778, 5130776, 5164754, 5198713, 5232650, + 5266567, 5300462, 5334336, 5368187, 5402017, 5435823, 5469607, 5503367, + 5537104, 5570816, 5604504, 5638168, 5671806, 5705418, 5739005, 5772566, + 5806100, 5839607, 5873088, 5906540, 5939965, 5973361, 6006729, 6040067, + 6073377, 6106657, 6139906, 6173126, 6206315, 6239472, 6272598, 6305693, + 6338755, 6371785, 6404782, 6437746, 6470677, 6503573, 6536436, 6569264, + 6602057, 6634814, 6667536, 6700223, 6732872, 6765486, 6798062, 6830601, + 6863102, 6895565, 6927990, 6960376, 6992723, 7025030, 7057298, 7089526, + 7121713, 7153859, 7185964, 7218028, 7250050, 7282029, 7313966, 7345861, + 7377711, 7409519, 7441282, 7473001, 7504675, 7536305, 7567889, 7599427, + 7630919, 7662365, 7693765, 7725117, 7756422, 7787679, 7818887, 7850048, + 7881160, 7912222, 7943235, 7974199, 8005112, 8035974, 8066786, 8097547, + 8128256, 8158913, 8189518, 8220070, 8250569, 8281016, 8311408, 8341747, + 8372031, 8402261, 8432436, 8462555, 8492619, 8522627, 8552579, 8582474, + 8612312, 8642092, 8671815, 8701480, 8731087, 8760635, 8790124, 8819553, + 8848923, 8878233, 8907483, 8936671, 8965799, 8994865, 9023870, 9052812, + 9081693, 9110510, 9139265, 9167956, 9196583, 9225146, 9253645, 9282079, + 9310449, 9338752, 9366990, 9395162, 9423268, 9451307, 9479279, 9507184, + 9535021, 9562790, 9590490, 9618122, 9645685, 9673178, 9700602, 9727956, + 9755240, 9782453, 9809595, 9836666, 9863665, 9890592, 9917447, 9944230, + 9970940, 9997576, 10024139, 10050628, 10077043, 10103383, 10129648, + 10155839, 10181954, 10207993, 10233956, 10259843, 10285653, 10311386, + 10337041, 10362619, 10388119, 10413541, 10438884, 10464148, 10489333, + 10514438, 10539463, 10564409, 10589274, 10614058, 10638760, 10663382, + 10687922, 10712379, 10736755, 10761048, 10785258, 10809384, 10833427, + 10857386, 10881261, 10905052, 10928758, 10952378, 10975914, 10999363, + 11022727, 11046004, 11069195, 11092299, 11115316, 11138245, 11161086, + 11183840, 11206505, 11229081, 11251569, 11273967, 11296276, 11318494, + 11340623, 11362661, 11384609, 11406466, 11428231, 11449905, 11471487, + 11492976, 11514374, 11535678, 11556890, 11578008, 11599032, 11619963, + 11640800, 11661542, 11682190, 11702742, 11723199, 11743561, 11763827, + 11783997, 11804070, 11824047, 11843927, 11863709, 11883394, 11902982, + 11922471, 11941862, 11961154, 11980348, 11999442, 12018437, 12037333, + 12056128, 12074824, 12093418, 12111913, 12130306, 12148598, 12166788, + 12184876, 12202863, 12220747, 12238529, 12256208, 12273784, 12291256, + 12308625, 12325890, 12343051, 12360107, 12377059, 12393906, 12410648, + 12427285, 12443816, 12460241, 12476560, 12492772, 12508878, 12524877, + 12540769, 12556554, 12572231, 12587800, 12603262, 12618614, 12633859, + 12648994, 12664021, 12678938, 12693745, 12708443, 12723031, 12737509, + 12751876, 12766133, 12780278, 12794313, 12808236, 12822047, 12835747, + 12849334, 12862810, 12876172, 12889423, 12902560, 12915583, 12928494, + 12941291, 12953974, 12966543, 12978997, 12991337, 13003563, 13015673, + 13027669, 13039549, 13051313, 13062962, 13074494, 13085911, 13097211, + 13108394, 13119461, 13130410, 13141242, 13151957, 13162555, 13173034, + 13183395, 13193638, 13203763, 13213769, 13223656, 13233424, 13243073, + 13252602, 13262012, 13271302, 13280472, 13289522, 13298451, 13307260, + 13315948, 13324515, 13332961, 13341286, 13349489, 13357571, 13365531, + 13373368, 13381084, 13388677, 13396147, 13403495, 13410720, 13417822, + 13424800, 13431655, 13438387, 13444995, 13451478, 13457838, 13464073, + 13470184, 13476171, 13482032, 13487769, 13493381, 13498867, 13504228, + 13509464, 13514573, 13519557, 13524415, 13529147, 13533752, 13538231, + 13542583, 13546809, 13550907, 13554879, 13558723, 13562440, 13566029, + 13569491, 13572825, 13576031, 13579109, 13582059, 13584880, 13587573, + 13590138, 13592574, 13594880, 13597058, 13599107, 13601027, 13602817, + 13604477, 13606008, 13607410, 13608681, 13609822, 13610834, 13611715, + 13612465, 13613086, 13613575, 13613934, 13614163, 13614260, 13614226, + 13614061, 13613765, 13613338, 13612779, 13612088, 13611266, 13610313, + 13609227, 13608009, 13606659, 13605177, 13603563, 13601817, 13599938, + 13597926, 13595782, 13593506, 13591096, 13588553, 13585878, 13583069, + 13580128, 13577053, 13573845, 13570503, 13567028, 13563420, 13559677, + 13555801, 13551792, 13547648, 13543371, 13538960, 13534414, 13529735, + 13524921, 13519973, 13514891, 13509674, 13504323, 13498837, 13493217, + 13487463, 13481573, 13475549, 13469390, 13463096, 13456668, 13450104, + 13443406, 13436572, 13429604, 13422500, 13415261, 13407887, 13400378, + 13392733, 13384954, 13377038, 13368988, 13360802, 13352480, 13344023, + 13335431, 13326703, 13317839, 13308840, 13299705, 13290435, 13281029, + 13271487, 13261809, 13251996, 13242047, 13231962, 13221742, 13211385, + 13200893, 13190265, 13179501, 13168602, 13157566, 13146395, 13135088, + 13123645, 13112066, 13100351, 13088501, 13076514, 13064392, 13052134, + 13039740, 13027210, 13014544, 13001743, 12988806, 12975733, 12962524, + 12949180, 12935699, 12922083, 12908332, 12894444, 12880421, 12866263, + 12851969, 12837539, 12822974, 12808273, 12793436, 12778465, 12763357, + 12748115, 12732737, 12717223, 12701575, 12685791, 12669872, 12653818, + 12637629, 12621304, 12604845, 12588251, 12571522, 12554657, 12537659, + 12520525, 12503256, 12485853, 12468316, 12450644, 12432837, 12414896, + 12396821, 12378611, 12360267, 12341789, 12323177, 12304431, 12285551, + 12266537, 12247389, 12228107, 12208692, 12189144, 12169461, 12149646, + 12129697, 12109615, 12089399, 12069051, 12048570, 12027956, 12007209, + 11986329, 11965316, 11944172, 11922894, 11901485, 11879943, 11858269, + 11836463, 11814525, 11792455, 11770254, 11747921, 11725456, 11702860, + 11680133, 11657275, 11634285, 11611165, 11587914, 11564532, 11541019, + 11517376, 11493603, 11469699, 11445666, 11421502, 11397209, 11372786, + 11348233, 11323551, 11298739, 11273799, 11248729, 11223530, 11198203, + 11172747, 11147163, 11121450, 11095609, 11069640, 11043543, 11017318, + 10990965, 10964486, 10937878, 10911144, 10884283, 10857295, 10830180, + 10802938, 10775571, 10748077, 10720457, 10692711, 10664839, 10636842, + 10608720, 10580472, 10552099, 10523602, 10494979, 10466233, 10437361, + 10408366, 10379247, 10350004, 10320637, 10291147, 10261533, 10231797, + 10201938, 10171956, 10141851, 10111624, 10081275, 10050805, 10020212, + 9989498, 9958662, 9927706, 9896628, 9865430, 9834112, 9802672, 9771113, + 9739434, 9707636, 9675717, 9643680, 9611523, 9579248, 9546854, 9514341, + 9481711, 9448962, 9416096, 9383112, 9350011, 9316792, 9283457, 9250006, + 9216437, 9182753, 9148953, 9115037, 9081005, 9046859, 9012597, 8978221, + 8943730, 8909125, 8874405, 8839572, 8804626, 8769566, 8734393, 8699107, + 8663709, 8628198, 8592576, 8556841, 8520995, 8485038, 8448970, 8412790, + 8376501, 8340101, 8303591, 8266972, 8230243, 8193404, 8156457, 8119402, + 8082237, 8044965, 8007585, 7970097, 7932502, 7894801, 7856992, 7819077, + 7781055, 7742928, 7704695, 7666357, 7627914, 7589366, 7550714, 7511957, + 7473097, 7434133, 7395066, 7355895, 7316622, 7277247, 7237770, 7198190, + 7158509, 7118727, 7078844, 7038861, 6998777, 6958593, 6918310, 6877927, + 6837445, 6796864, 6756185, 6715408, 6674533, 6633560, 6592491, 6551324, + 6510061, 6468702, 6427247, 6385696, 6344050, 6302309, 6260474, 6218544, + 6176520, 6134403, 6092192, 6049889, 6007493, 5965005, 5922424, 5879753, + 5836990, 5794136, 5751191, 5708156, 5665032, 5621818, 5578514, 5535122, + 5491641, 5448072, 5404416, 5360672, 5316841, 5272923, 5228918, 5184828, + 5140652, 5096391, 5052045, 5007614, 4963099, 4918500, 4873818, 4829052, + 4784204, 4739273, 4694260, 4649166, 4603990, 4558734, 4513396, 4467979, + 4422482, 4376906, 4331250, 4285516, 4239703, 4193813, 4147845, 4101800, + 4055678, 4009480, 3963205, 3916856, 3870431, 3823931, 3777356, 3730708, + 3683986, 3637191, 3590323, 3543382, 3496369, 3449285, 3402130, 3354903, + 3307606, 3260239, 3212802, 3165296, 3117721, 3070078, 3022367, 2974588, + 2926741, 2878828, 2830849, 2782803, 2734692, 2686515, 2638274, 2589969, + 2541599, 2493166, 2444670, 2396112, 2347490, 2298808, 2250063, 2201258, + 2152392, 2103466, 2054480, 2005435, 1956331, 1907169, 1857948, 1808670, + 1759335, 1709943, 1660495, 1610990, 1561431, 1511816, 1462147, 1412424, + 1362647, 1312817, 1262934, 1212998, 1163011, 1112972, 1062883, 1012742, + 962552, 912311, 862022, 811684, 761297, 710862, 660380, 609851, 559275, + 508654, 457986, 407273, 356516, 305714, 254869, 203980, 153048, 102074, + 51057, 0, -51098, -102238, -153418, -204637, -255896, -307193, -358529, + -409903, -461314, -512762, -564246, -615766, -667322, -718913, -770538, + -822198, -873891, -925617, -977376, -1029167, -1080990, -1132844, + -1184729, -1236644, -1288589, -1340563, -1392566, -1444597, -1496657, + -1548743, -1600857, -1652997, -1705163, -1757355, -1809571, -1861812, + -1914077, -1966366, -2018677, -2071012, -2123368, -2175746, -2228145, + -2280564, -2333004, -2385463, -2437941, -2490438, -2542953, -2595486, + -2648036, -2700603, -2753186, -2805784, -2858398, -2911026, -2963668, + -3016324, -3068994, -3121676, -3174370, -3227076, -3279793, -3332521, + -3385258, -3438006, -3490763, -3543528, -3596302, -3649083, -3701871, + -3754666, -3807468, -3860274, -3913086, -3965903, -4018724, -4071548, + -4124376, -4177206, -4230038, -4282872, -4335706, -4388542, -4441377, + -4494212, -4547046, -4599878, -4652709, -4705537, -4758362, -4811183, + -4864001, -4916813, -4969621, -5022423, -5075219, -5128009, -5180791, + -5233566, -5286332, -5339090, -5391838, -5444577, -5497306, -5550023, + -5602730, -5655425, -5708107, -5760777, -5813433, -5866075, -5918703, + -5971316, -6023914, -6076495, -6129060, -6181609, -6234139, -6286652, + -6339146, -6391621, -6444076, -6496511, -6548926, -6601319, -6653691, + -6706040, -6758367, -6810670, -6862950, -6915205, -6967435, -7019640, + -7071820, -7123972, -7176098, -7228196, -7280267, -7332308, -7384321, + -7436304, -7488257, -7540180, -7592071, -7643931, -7695758, -7747553, + -7799314, -7851042, -7902735, -7954393, -8006016, -8057603, -8109154, + -8160668, -8212144, -8263582, -8314982, -8366343, -8417664, -8468945, + -8520185, -8571384, -8622542, -8673657, -8724730, -8775759, -8826744, + -8877685, -8928581, -8979432, -9030237, -9080996, -9131707, -9182371, + -9232987, -9283554, -9334073, -9384541, -9434960, -9485328, -9535644, + -9585909, -9636122, -9686282, -9736389, -9786441, -9836440, -9886383, + -9936272, -9986104, -10035880, -10085598, -10135260, -10184863, + -10234408, -10283893, -10333319, -10382685, -10431990, -10481235, + -10530417, -10579537, -10628594, -10677588, -10726519, -10775385, + -10824186, -10872921, -10921591, -10970195, -11018731, -11067200, + -11115601, -11163934, -11212197, -11260391, -11308515, -11356569, + -11404551, -11452461, -11500300, -11548066, -11595758, -11643377, + -11690922, -11738392, -11785786, -11833105, -11880348, -11927514, + -11974602, -12021613, -12068545, -12115399, -12162173, -12208867, + -12255481, -12302013, -12348465, -12394834, -12441121, -12487325, + -12533446, -12579482, -12625434, -12671301, -12717082, -12762778, + -12808387, -12853908, -12899343, -12944689, -12989946, -13035115, + -13080194, -13125182, -13170081, -13214888, -13259603, -13304226, + -13348757, -13393195, -13437539, -13481788, -13525944, -13570004, + -13613968, -13657836, -13701608, -13745282, -13788859, -13832338, + -13875718, -13918999, -13962181, -14005262, -14048242, -14091122, + -14133900, -14176576, -14219149, -14261619, -14303986, -14346249, + -14388407, -14430460, -14472407, -14514249, -14555984, -14597612, + -14639132, -14680545, -14721849, -14763044, -14804130, -14845106, + -14885972, -14926727, -14967370, -15007902, -15048321, -15088627, + -15128821, -15168900, -15208866, -15248716, -15288452, -15328072, + -15367576, -15406963, -15446233, -15485386, -15524421, -15563337, + -15602134, -15640812, -15679370, -15717808, -15756125, -15794321, + -15832395, -15870347, -15908176, -15945882, -15983465, -16020924, + -16058258, -16095467, -16132551, -16169508, -16206340, -16243045, + -16279623, -16316073, -16352394, -16388588, -16424652, -16460587, + -16496392, -16532066, -16567610, -16603023, -16638304, -16673452, + -16708468, -16743351, -16778101, -16812717, -16847198, -16881545, + -16915756, -16949832, -16983771, -17017574, -17051241, -17084769, + -17118160, -17151413, -17184527, -17217502, -17250338, -17283033, + -17315588, -17348002, -17380275, -17412407, -17444396, -17476243, + -17507947, -17539508, -17570925, -17602197, -17633325, -17664309, + -17695146, -17725838, -17756384, -17786783, -17817036, -17847140, + -17877097, -17906906, -17936566, -17966077, -17995438, -18024650, + -18053711, -18082622, -18111381, -18139990, -18168446, -18196750, + -18224902, -18252900, -18280746, -18308437, -18335974, -18363357, + -18390585, -18417657, -18444574, -18471334, -18497939, -18524386, + -18550676, -18576809, -18602783, -18628599, -18654257, -18679755, + -18705094, -18730273, -18755292, -18780151, -18804848, -18829384, + -18853759, -18877971, -18902021, -18925909, -18949633, -18973194, + -18996591, -19019824, -19042893, -19065796, -19088535, -19111108, + -19133515, -19155756, -19177830, -19199737, -19221477, -19243050, + -19264454, -19285691, -19306758, -19327657, -19348386, -19368946, + -19389336, -19409556, -19429605, -19449483, -19469190, -19488726, + -19508089, -19527280, -19546299, -19565145, -19583818, -19602317, + -19620643, -19638794, -19656771, -19674574, -19692201, -19709653, + -19726929, -19744030, -19760954, -19777702, -19794273, -19810667, + -19826883, -19842922, -19858782, -19874465, -19889969, -19905294, + -19920439, -19935406, -19950192, -19964799, -19979225, -19993471, + -20007536, -20021420, -20035122, -20048643, -20061982, -20075139, + -20088113, -20100905, -20113513, -20125938, -20138180, -20150238, + -20162112, -20173802, -20185307, -20196627, -20207763, -20218712, + -20229477, -20240056, -20250448, -20260654, -20270674, -20280507, + -20290153, -20299612, -20308883, -20317967, -20326863, -20335570, + -20344089, -20352420, -20360561, -20368514, -20376277, -20383851, + -20391235, -20398429, -20405432, -20412246, -20418869, -20425301, + -20431542, -20437592, -20443450, -20449117, -20454592, -20459875, + -20464965, -20469863, -20474569, -20479082, -20483402, -20487528, + -20491461, -20495201, -20498747, -20502099, -20505257, -20508220, + -20510989, -20513563, -20515943, -20518128, -20520117, -20521911, + -20523509, -20524912, -20526119, -20527130, -20527945, -20528564, + -20528986, -20529211, -20529240, -20529072, -20528706, -20528144, + -20527384, -20526426, -20525271, -20523918, -20522367, -20520618, + -20518671, -20516526, -20514182, -20511639, -20508898, -20505958, + -20502818, -20499480, -20495943, -20492206, -20488270, -20484134, + -20479798, -20475263, -20470528, -20465593, -20460457, -20455122, + -20449586, -20443849, -20437913, -20431775, -20425437, -20418898, + -20412158, -20405217, -20398075, -20390732, -20383188, -20375442, + -20367495, -20359347, -20350997, -20342445, -20333692, -20324737, + -20315580, -20306221, -20296660, -20286897, -20276932, -20266765, + -20256396, -20245825, -20235051, -20224075, -20212896, -20201515, + -20189932, -20178146, -20166157, -20153966, -20141572, -20128976, + -20116176, -20103174, -20089970, -20076562, -20062951, -20049138, + -20035122, -20020903, -20006481, -19991856, -19977028, -19961997, + -19946764, -19931327, -19915687, -19899844, -19883799, -19867550, + -19851098, -19834444, -19817586, -19800526, -19783262, -19765796, + -19748126, -19730254, -19712179, -19693901, -19675420, -19656736, + -19637850, -19618760, -19599468, -19579974, -19560276, -19540376, + -19520273, -19499968, -19479460, -19458750, -19437837, -19416722, + -19395405, -19373885, -19352163, -19330239, -19308113, -19285785, + -19263255, -19240522, -19217588, -19194453, -19171115, -19147576, + -19123835, -19099893, -19075749, -19051404, -19026858, -19002110, + -18977162, -18952012, -18926661, -18901110, -18875358, -18849405, + -18823252, -18796898, -18770344, -18743590, -18716636, -18689481, + -18662127, -18634573, -18606819, -18578866, -18550713, -18522361, + -18493810, -18465059, -18436110, -18406962, -18377615, -18348070, + -18318326, -18288384, -18258243, -18227905, -18197369, -18166635, + -18135704, -18104575, -18073249, -18041726, -18010005, -17978088, + -17945975, -17913664, -17881158, -17848455, -17815557, -17782462, + -17749172, -17715686, -17682005, -17648129, -17614058, -17579792, + -17545332, -17510677, -17475828, -17440785, -17405548, -17370118, + -17334494, -17298676, -17262666, -17226463, -17190067, -17153479, + -17116699, -17079726, -17042562, -17005206, -16967659, -16929920, + -16891991, -16853871, -16815560, -16777059, -16738368, -16699488, + -16660417, -16621158, -16581709, -16542071, -16502245, -16462230, + -16422027, -16381636, -16341058, -16300292, -16259339, -16218199, + -16176872, -16135359, -16093660, -16051775, -16009705, -15967449, + -15925008, -15882382, -15839571, -15796577, -15753398, -15710036, + -15666490, -15622761, -15578849, -15534755, -15490478, -15446020, + -15401379, -15356558, -15311555, -15266371, -15221007, -15175462, + -15129738, -15083834, -15037751, -14991489, -14945048, -14898428, + -14851631, -14804656, -14757503, -14710174, -14662667, -14614984, + -14567125, -14519090, -14470880, -14422495, -14373935, -14325200, + -14276291, -14227209, -14177953, -14128524, -14078922, -14029148, + -13979201, -13929083, -13878794, -13828334, -13777703, -13726902, + -13675930, -13624790, -13573480, -13522001, -13470354, -13418539, + -13366556, -13314406, -13262089, -13209605, -13156955, -13104140, + -13051159, -12998013, -12944702, -12891227, -12837588, -12783786, + -12729820, -12675692, -12621402, -12566950, -12512336, -12457561, + -12402626, -12347530, -12292275, -12236860, -12181286, -12125553, + -12069663, -12013614, -11957408, -11901046, -11844527, -11787851, + -11731021, -11674035, -11616894, -11559599, -11502150, -11444547, + -11386792, -11328884, -11270824, -11212612, -11154249, -11095735, + -11037071, -10978257, -10919293, -10860181, -10800920, -10741511, + -10681954, -10622251, -10562400, -10502404, -10442261, -10381974, + -10321542, -10260965, -10200245, -10139381, -10078374, -10017225, + -9955934, -9894502, -9832928, -9771215, -9709361, -9647368, -9585235, + -9522965, -9460556, -9398010, -9335327, -9272507, -9209552, -9146461, + -9083235, -9019874, -8956380, -8892752, -8828991, -8765098, -8701073, + -8636916, -8572629, -8508211, -8443664, -8378987, -8314182, -8249248, + -8184186, -8118998, -8053683, -7988241, -7922674, -7856983, -7791166, + -7725226, -7659162, -7592975, -7526667, -7460236, -7393684, -7327011, + -7260219, -7193307, -7126275, -7059126, -6991858, -6924473, -6856972, + -6789354, -6721620, -6653772, -6585809, -6517732, -6449542, -6381239, + -6312823, -6244296, -6175658, -6106910, -6038052, -5969084, -5900007, + -5830823, -5761531, -5692132, -5622626, -5553015, -5483298, -5413477, + -5343552, -5273523, -5203392, -5133158, -5062823, -4992387, -4921850, + -4851214, -4780478, -4709644, -4638712, -4567682, -4496556, -4425333, + -4354015, -4282602, -4211094, -4139493, -4067799, -3996013, -3924134, + -3852165, -3780105, -3707955, -3635715, -3563387, -3490971, -3418467, + -3345877, -3273201, -3200439, -3127592, -3054660, -2981646, -2908548, + -2835368, -2762106, -2688763, -2615340, -2541837, -2468255, -2394595, + -2320857, -2247041, -2173150, -2099182, -2025139, -1951022, -1876831, + -1802566, -1728229, -1653821, -1579341, -1504790, -1430170, -1355480, + -1280722, -1205896, -1131003, -1056043, -981017, -905927, -830771, + -755552, -680270, -604925, -529518, -454051, -378523, -302935, -227288, + -151583, -75820, 0, 75876, 151808, 227795, 303836, 379931, 456078, + 532278, 608529, 684831, 761183, 837585, 914035, 990533, 1067079, + 1143671, 1220309, 1296992, 1373719, 1450491, 1527305, 1604162, 1681060, + 1758000, 1834979, 1911998, 1989056, 2066152, 2143285, 2220455, 2297661, + 2374902, 2452178, 2529487, 2606830, 2684204, 2761611, 2839048, 2916515, + 2994012, 3071538, 3149092, 3226673, 3304280, 3381913, 3459572, 3537255, + 3614961, 3692690, 3770442, 3848215, 3926008, 4003822, 4081655, 4159506, + 4237375, 4315261, 4393164, 4471082, 4549015, 4626961, 4704922, 4782894, + 4860879, 4938875, 5016881, 5094897, 5172921, 5250954, 5328994, 5407041, + 5485094, 5563152, 5641214, 5719280, 5797349, 5875420, 5953492, 6031565, + 6109638, 6187710, 6265781, 6343849, 6421914, 6499975, 6578032, 6656083, + 6734128, 6812166, 6890197, 6968219, 7046232, 7124235, 7202228, 7280209, + 7358177, 7436133, 7514075, 7592003, 7669916, 7747812, 7825692, 7903554, + 7981398, 8059223, 8137028, 8214813, 8292576, 8370317, 8448035, 8525730, + 8603400, 8681046, 8758665, 8836257, 8913822, 8991359, 9068867, 9146345, + 9223793, 9301209, 9378594, 9455945, 9533263, 9610546, 9687795, 9765007, + 9842183, 9919321, 9996421, 10073483, 10150504, 10227485, 10304424, + 10381322, 10458177, 10534988, 10611754, 10688476, 10765152, 10841781, + 10918362, 10994895, 11071380, 11147814, 11224198, 11300531, 11376811, + 11453039, 11529213, 11605332, 11681397, 11757405, 11833357, 11909251, + 11985087, 12060864, 12136581, 12212237, 12287832, 12363365, 12438835, + 12514242, 12589583, 12664860, 12740071, 12815215, 12890291, 12965299, + 13040238, 13115107, 13189905, 13264633, 13339287, 13413869, 13488377, + 13562811, 13637170, 13711452, 13785658, 13859786, 13933835, 14007806, + 14081697, 14155507, 14229235, 14302882, 14376445, 14449925, 14523320, + 14596630, 14669854, 14742992, 14816041, 14889002, 14961875, 15034657, + 15107349, 15179949, 15252457, 15324872, 15397194, 15469421, 15541553, + 15613588, 15685527, 15757369, 15829112, 15900757, 15972301, 16043745, + 16115088, 16186328, 16257466, 16328500, 16399430, 16470254, 16540973, + 16611585, 16682090, 16752486, 16822774, 16892952, 16963019, 17032976, + 17102820, 17172552, 17242171, 17311675, 17381064, 17450338, 17519495, + 17588535, 17657457, 17726260, 17794944, 17863508, 17931951, 18000272, + 18068470, 18136546, 18204498, 18272324, 18340026, 18407601, 18475050, + 18542371, 18609564, 18676627, 18743561, 18810364, 18877035, 18943575, + 19009982, 19076255, 19142394, 19208398, 19274267, 19339998, 19405593, + 19471050, 19536368, 19601547, 19666585, 19731483, 19796239, 19860853, + 19925324, 19989651, 20053834, 20117871, 20181763, 20245508, 20309105, + 20372555, 20435855, 20499007, 20562007, 20624858, 20687556, 20750102, + 20812495, 20874734, 20936819, 20998748, 21060522, 21122139, 21183598, + 21244900, 21306043, 21367026, 21427849, 21488512, 21549013, 21609351, + 21669527, 21729539, 21789386, 21849069, 21908586, 21967937, 22027120, + 22086136, 22144983, 22203661, 22262169, 22320506, 22378672, 22436667, + 22494488, 22552137, 22609611, 22666911, 22724036, 22780984, 22837756, + 22894351, 22950767, 23007005, 23063064, 23118942, 23174640, 23230156, + 23285490, 23340642, 23395610, 23450395, 23504994, 23559409, 23613637, + 23667678, 23721533, 23775199, 23828677, 23881965, 23935064, 23987972, + 24040689, 24093214, 24145546, 24197685, 24249631, 24301382, 24352938, + 24404299, 24455463, 24506430, 24557199, 24607770, 24658143, 24708316, + 24758289, 24808061, 24857631, 24907000, 24956166, 25005129, 25053888, + 25102443, 25150792, 25198936, 25246874, 25294604, 25342128, 25389443, + 25436549, 25483446, 25530133, 25576609, 25622875, 25668928, 25714770, + 25760398, 25805813, 25851014, 25896000, 25940771, 25985326, 26029664, + 26073786, 26117690, 26161375, 26204842, 26248090, 26291117, 26333925, + 26376511, 26418875, 26461017, 26502937, 26544633, 26586105, 26627353, + 26668376, 26709173, 26749745, 26790089, 26830206, 26870096, 26909757, + 26949189, 26988392, 27027365, 27066108, 27104619, 27142899, 27180947, + 27218762, 27256344, 27293692, 27330806, 27367685, 27404329, 27440738, + 27476910, 27512845, 27548542, 27584002, 27619224, 27654206, 27688950, + 27723453, 27757716, 27791738, 27825519, 27859057, 27892354, 27925407, + 27958217, 27990783, 28023105, 28055182, 28087014, 28118600, 28149939, + 28181032, 28211877, 28242475, 28272825, 28302926, 28332777, 28362379, + 28391732, 28420833, 28449684, 28478283, 28506630, 28534725, 28562567, + 28590156, 28617491, 28644572, 28671398, 28697969, 28724285, 28750345, + 28776149, 28801696, 28826985, 28852017, 28876791, 28901307, 28925563, + 28949561, 28973298, 28996775, 29019992, 29042948, 29065643, 29088075, + 29110246, 29132154, 29153798, 29175180, 29196298, 29217151, 29237740, + 29258064, 29278123, 29297916, 29317443, 29336703, 29355697, 29374423, + 29392882, 29411073, 29428995, 29446649, 29464034, 29481149, 29497994, + 29514570, 29530875, 29546909, 29562672, 29578163, 29593382, 29608330, + 29623004, 29637406, 29651535, 29665390, 29678971, 29692278, 29705310, + 29718068, 29730550, 29742757, 29754688, 29766343, 29777721, 29788823, + 29799648, 29810195, 29820465, 29830457, 29840171, 29849606, 29858762, + 29867639, 29876237, 29884555, 29892593, 29900351, 29907829, 29915025, + 29921941, 29928575, 29934928, 29940999, 29946788, 29952294, 29957518, + 29962459, 29967117, 29971491, 29975582, 29979389, 29982912, 29986151, + 29989105, 29991774, 29994159, 29996258, 29998071, 29999599, 30000841, + 30001797, 30002467, 30002850, 30002946, 30002756, 30002278, 30001513, + 30000460, 29999119, 29997491, 29995574, 29993370, 29990876, 29988094, + 29985023, 29981663, 29978014, 29974075, 29969847, 29965329, 29960522, + 29955424, 29950036, 29944358, 29938389, 29932129, 29925579, 29918738, + 29911605, 29904182, 29896467, 29888460, 29880162, 29871572, 29862691, + 29853517, 29844051, 29834293, 29824242, 29813899, 29803264, 29792336, + 29781115, 29769601, 29757794, 29745694, 29733301, 29720615, 29707635, + 29694362, 29680795, 29666935, 29652781, 29638333, 29623592, 29608557, + 29593227, 29577604, 29561687, 29545475, 29528969, 29512170, 29495075, + 29477687, 29460004, 29442027, 29423755, 29405189, 29386329, 29367174, + 29347724, 29327980, 29307941, 29287607, 29266979, 29246057, 29224839, + 29203327, 29181521, 29159419, 29137023, 29114333, 29091347, 29068068, + 29044493, 29020624, 28996461, 28972002, 28947250, 28922203, 28896861, + 28871225, 28845295, 28819070, 28792551, 28765737, 28738630, 28711228, + 28683532, 28655543, 28627259, 28598681, 28569809, 28540644, 28511185, + 28481432, 28451386, 28421046, 28390413, 28359487, 28328267, 28296754, + 28264948, 28232849, 28200458, 28167773, 28134796, 28101527, 28067965, + 28034111, 27999964, 27965526, 27930796, 27895774, 27860460, 27824854, + 27788958, 27752770, 27716291, 27679520, 27642460, 27605108, 27567466, + 27529533, 27491311, 27452798, 27413995, 27374903, 27335521, 27295850, + 27255889, 27215640, 27175102, 27134275, 27093159, 27051756, 27010064, + 26968084, 26925817, 26883262, 26840420, 26797291, 26753875, 26710173, + 26666183, 26621908, 26577347, 26532500, 26487368, 26441950, 26396247, + 26350259, 26303987, 26257431, 26210590, 26163466, 26116058, 26068366, + 26020392, 25972135, 25923595, 25874773, 25825669, 25776283, 25726615, + 25676667, 25626438, 25575928, 25525137, 25474067, 25422717, 25371087, + 25319178, 25266991, 25214525, 25161780, 25108758, 25055458, 25001881, + 24948027, 24893896, 24839488, 24784805, 24729846, 24674612, 24619103, + 24563319, 24507261, 24450928, 24394323, 24337443, 24280291, 24222867, + 24165170, 24107201, 24048961, 23990449, 23931667, 23872615, 23813293, + 23753700, 23693839, 23633709, 23573310, 23512644, 23451709, 23390508, + 23329039, 23267304, 23205303, 23143036, 23080504, 23017708, 22954646, + 22891321, 22827732, 22763880, 22699766, 22635388, 22570750, 22505849, + 22440688, 22375266, 22309584, 22243643, 22177442, 22110982, 22044264, + 21977289, 21910056, 21842566, 21774819, 21706817, 21638559, 21570046, + 21501279, 21432257, 21362982, 21293454, 21223673, 21153640, 21083356, + 21012820, 20942034, 20870997, 20799712, 20728176, 20656393, 20584361, + 20512082, 20439556, 20366783, 20293764, 20220500, 20146991, 20073237, + 19999240, 19924999, 19850516, 19775790, 19700823, 19625614, 19550165, + 19474476, 19398547, 19322380, 19245974, 19169331, 19092450, 19015332, + 18937979, 18860390, 18782566, 18704508, 18626216, 18547691, 18468933, + 18389944, 18310723, 18231271, 18151589, 18071678, 17991538, 17911169, + 17830573, 17749749, 17668699, 17587423, 17505922, 17424196, 17342246, + 17260073, 17177677, 17095059, 17012219, 16929159, 16845878, 16762378, + 16678659, 16594721, 16510566, 16426195, 16341606, 16256803, 16171784, + 16086551, 16001104, 15915445, 15829573, 15743489, 15657195, 15570690, + 15483976, 15397053, 15309921, 15222583, 15135037, 15047285, 14959328, + 14871166, 14782800, 14694231, 14605460, 14516486, 14427311, 14337936, + 14248361, 14158587, 14068614, 13978445, 13888078, 13797515, 13706757, + 13615804, 13524657, 13433317, 13341785, 13250061, 13158146, 13066040, + 12973746, 12881262, 12788591, 12695733, 12602688, 12509457, 12416042, + 12322442, 12228660, 12134694, 12040547, 11946219, 11851710, 11757022, + 11662156, 11567111, 11471890, 11376492, 11280918, 11185170, 11089248, + 10993153, 10896885, 10800446, 10703836, 10607057, 10510108, 10412991, + 10315706, 10218255, 10120638, 10022856, 9924910, 9826800, 9728528, + 9630094, 9531499, 9432744, 9333830, 9234758, 9135528, 9036141, 8936599, + 8836901, 8737050, 8637045, 8536888, 8436579, 8336119, 8235509, 8134751, + 8033844, 7932790, 7831590, 7730244, 7628753, 7527119, 7425342, 7323422, + 7221362, 7119161, 7016821, 6914342, 6811725, 6708972, 6606083, 6503059, + 6399901, 6296610, 6193187, 6089632, 5985947, 5882132, 5778188, 5674117, + 5569919, 5465595, 5361146, 5256572, 5151876, 5047057, 4942117, 4837057, + 4731877, 4626579, 4521163, 4415630, 4309981, 4204218, 4098340, 3992350, + 3886248, 3780034, 3673711, 3567278, 3460737, 3354088, 3247334, 3140473, + 3033509, 2926440, 2819270, 2711997, 2604624, 2497152, 2389580, 2281911, + 2174145, 2066283, 1958327, 1850276, 1742133, 1633897, 1525571, 1417155, + 1308649, 1200056, 1091375, 982609, 873757, 764821, 655803, 546702, + 437519, 328257, 218916, 109496, 0, -109572, -219220, -328943, -438738, + -548606, -658544, -768553, -878631, -988778, -1098991, -1209270, + -1319615, -1430024, -1540495, -1651029, -1761624, -1872279, -1982993, + -2093765, -2204593, -2315478, -2426418, -2537411, -2648458, -2759556, + -2870705, -2981904, -3093152, -3204447, -3315789, -3427177, -3538609, + -3650085, -3761603, -3873163, -3984763, -4096403, -4208081, -4319796, + -4431547, -4543334, -4655155, -4767009, -4878895, -4990813, -5102760, + -5214736, -5326740, -5438770, -5550827, -5662908, -5775013, -5887140, + -5999289, -6111458, -6223647, -6335854, -6448078, -6560319, -6672575, + -6784844, -6897127, -7009422, -7121727, -7234043, -7346367, -7458698, + -7571037, -7683380, -7795729, -7908080, -8020434, -8132789, -8245145, + -8357499, -8469851, -8582200, -8694545, -8806885, -8919218, -9031544, + -9143862, -9256170, -9368467, -9480752, -9593025, -9705283, -9817527, + -9929755, -10041965, -10154157, -10266330, -10378482, -10490613, + -10602721, -10714805, -10826865, -10938898, -11050905, -11162883, + -11274833, -11386752, -11498639, -11610495, -11722316, -11834103, + -11945854, -12057569, -12169245, -12280883, -12392480, -12504036, + -12615549, -12727020, -12838445, -12949825, -13061159, -13172444, + -13283681, -13394867, -13506002, -13617085, -13728115, -13839090, + -13950010, -14060873, -14171679, -14282425, -14393112, -14503737, + -14614301, -14724801, -14835236, -14945607, -15055910, -15166146, + -15276314, -15386411, -15496437, -15606392, -15716273, -15826079, + -15935811, -16045466, -16155043, -16264542, -16373960, -16483298, + -16592554, -16701726, -16810815, -16919818, -17028735, -17137564, + -17246304, -17354955, -17463515, -17571982, -17680357, -17788638, + -17896823, -18004912, -18112904, -18220797, -18328590, -18436282, + -18543873, -18651360, -18758744, -18866022, -18973194, -19080259, + -19187215, -19294062, -19400797, -19507421, -19613933, -19720330, + -19826612, -19932778, -20038827, -20144757, -20250568, -20356258, + -20461826, -20567272, -20672594, -20777791, -20882862, -20987806, + -21092621, -21197307, -21301863, -21406287, -21510579, -21614737, + -21718760, -21822648, -21926398, -22030010, -22133483, -22236816, + -22340008, -22443057, -22545963, -22648724, -22751339, -22853808, + -22956129, -23058301, -23160323, -23262194, -23363913, -23465478, + -23566890, -23668146, -23769245, -23870187, -23970970, -24071594, + -24172057, -24272358, -24372496, -24472470, -24572279, -24671922, + -24771397, -24870705, -24969843, -25068811, -25167607, -25266231, + -25364681, -25462957, -25561057, -25658980, -25756725, -25854291, + -25951678, -26048883, -26145906, -26242747, -26339403, -26435873, + -26532158, -26628255, -26724164, -26819884, -26915413, -27010750, + -27105895, -27200846, -27295603, -27390164, -27484528, -27578695, + -27672662, -27766430, -27859997, -27953362, -28046524, -28139483, + -28232236, -28324783, -28417123, -28509255, -28601178, -28692890, + -28784392, -28875681, -28966758, -29057619, -29148266, -29238697, + -29328910, -29418905, -29508680, -29598236, -29687570, -29776681, + -29865570, -29954234, -30042672, -30130885, -30218870, -30306627, + -30394154, -30481451, -30568517, -30655350, -30741950, -30828316, + -30914447, -31000341, -31085998, -31171417, -31256596, -31341536, + -31426234, -31510690, -31594903, -31678872, -31762595, -31846073, + -31929304, -32012286, -32095020, -32177504, -32259737, -32341718, + -32423447, -32504922, -32586142, -32667106, -32747814, -32828264, + -32908456, -32988388, -33068060, -33147471, -33226619, -33305505, + -33384126, -33462482, -33540572, -33618395, -33695950, -33773237, + -33850254, -33927000, -34003475, -34079677, -34155606, -34231260, + -34306640, -34381743, -34456569, -34531118, -34605387, -34679377, + -34753086, -34826514, -34899659, -34972521, -35045098, -35117391, + -35189398, -35261117, -35332549, -35403693, -35474547, -35545110, + -35615383, -35685363, -35755050, -35824443, -35893542, -35962345, + -36030851, -36099060, -36166971, -36234583, -36301895, -36368907, + -36435617, -36502024, -36568128, -36633928, -36699424, -36764613, + -36829496, -36894071, -36958338, -37022296, -37085945, -37149282, + -37212308, -37275021, -37337422, -37399508, -37461280, -37522736, + -37583875, -37644698, -37705202, -37765388, -37825254, -37884800, + -37944024, -38002927, -38061506, -38119763, -38177695, -38235302, + -38292583, -38349537, -38406164, -38462463, -38518433, -38574074, + -38629384, -38684362, -38739009, -38793323, -38847304, -38900951, + -38954262, -39007238, -39059878, -39112181, -39164145, -39215771, + -39267058, -39318005, -39368611, -39418876, -39468798, -39518378, + -39567614, -39616505, -39665052, -39713253, -39761108, -39808615, + -39855775, -39902587, -39949049, -39995161, -40040923, -40086334, + -40131393, -40176099, -40220452, -40264451, -40308096, -40351386, + -40394319, -40436897, -40479117, -40520979, -40562483, -40603628, + -40644413, -40684838, -40724902, -40764604, -40803944, -40842922, + -40881535, -40919785, -40957670, -40995190, -41032344, -41069131, + -41105551, -41141604, -41177288, -41212603, -41247549, -41282125, + -41316330, -41350164, -41383626, -41416715, -41449432, -41481775, + -41513744, -41545339, -41576558, -41607402, -41637869, -41667960, + -41697673, -41727008, -41755965, -41784542, -41812741, -41840559, + -41867996, -41895053, -41921728, -41948020, -41973930, -41999457, + -42024601, -42049360, -42073735, -42097724, -42121328, -42144545, + -42167377, -42189821, -42211877, -42233545, -42254825, -42275716, + -42296218, -42316330, -42336051, -42355381, -42374321, -42392868, + -42411024, -42428787, -42446157, -42463133, -42479716, -42495904, + -42511698, -42527096, -42542099, -42556706, -42570917, -42584731, + -42598147, -42611166, -42623788, -42636010, -42647834, -42659259, + -42670285, -42680911, -42691136, -42700961, -42710384, -42719407, + -42728028, -42736246, -42744063, -42751476, -42758487, -42765094, + -42771297, -42777097, -42782491, -42787481, -42792066, -42796246, + -42800020, -42803388, -42806350, -42808905, -42811053, -42812794, + -42814127, -42815052, -42815570, -42815679, -42815380, -42814671, + -42813554, -42812027, -42810090, -42807744, -42804987, -42801820, + -42798242, -42794253, -42789853, -42785041, -42779818, -42774183, + -42768136, -42761676, -42754804, -42747520, -42739822, -42731711, + -42723187, -42714249, -42704897, -42695132, -42684952, -42674358, + -42663350, -42651927, -42640089, -42627836, -42615168, -42602085, + -42588586, -42574671, -42560341, -42545595, -42530433, -42514854, + -42498860, -42482448, -42465621, -42448376, -42430715, -42412637, + -42394142, -42375230, -42355900, -42336153, -42315989, -42295407, + -42274408, -42252991, -42231156, -42208904, -42186233, -42163145, + -42139639, -42115714, -42091372, -42066611, -42041432, -42015835, + -41989820, -41963386, -41936534, -41909264, -41881575, -41853468, + -41824942, -41795998, -41766636, -41736855, -41706655, -41676038, + -41645002, -41613547, -41581674, -41549383, -41516673, -41483546, + -41450000, -41416035, -41381653, -41346852, -41311634, -41275997, + -41239943, -41203470, -41166580, -41129272, -41091546, -41053403, + -41014842, -40975864, -40936469, -40896656, -40856426, -40815780, + -40774716, -40733235, -40691338, -40649024, -40606294, -40563148, + -40519585, -40475607, -40431212, -40386402, -40341176, -40295535, + -40249478, -40203007, -40156120, -40108819, -40061103, -40012972, + -39964427, -39915469, -39866096, -39816310, -39766110, -39715497, + -39664471, -39613032, -39561181, -39508917, -39456241, -39403153, + -39349653, -39295741, -39241419, -39186685, -39131541, -39075986, + -39020021, -38963646, -38906861, -38849667, -38792063, -38734051, + -38675630, -38616801, -38557563, -38497918, -38437865, -38377406, + -38316539, -38255266, -38193587, -38131501, -38069010, -38006114, + -37942813, -37879107, -37814997, -37750484, -37685566, -37620246, + -37554522, -37488396, -37421868, -37354938, -37287607, -37219874, + -37151741, -37083208, -37014275, -36944942, -36875211, -36805080, + -36734552, -36663625, -36592301, -36520580, -36448463, -36375949, + -36303039, -36229734, -36156034, -36081940, -36007452, -35932570, + -35857295, -35781627, -35705567, -35629116, -35552273, -35475039, + -35397415, -35319402, -35240999, -35162207, -35083026, -35003458, + -34923503, -34843160, -34762432, -34681317, -34599818, -34517933, + -34435664, -34353012, -34269976, -34186558, -34102757, -34018575, + -33934012, -33849068, -33763745, -33678042, -33591961, -33505501, + -33418664, -33331449, -33243858, -33155892, -33067549, -32978833, + -32889742, -32800278, -32710440, -32620231, -32529650, -32438698, + -32347375, -32255683, -32163621, -32071191, -31978393, -31885228, + -31791696, -31697799, -31603536, -31508908, -31413916, -31318561, + -31222844, -31126764, -31030323, -30933522, -30836360, -30738840, + -30640961, -30542724, -30444130, -30345179, -30245873, -30146212, + -30046196, -29945827, -29845105, -29744031, -29642605, -29540829, + -29438703, -29336228, -29233404, -29130233, -29026714, -28922850, + -28818640, -28714086, -28609187, -28503946, -28398362, -28292437, + -28186171, -28079565, -27972620, -27865337, -27757716, -27649758, + -27541465, -27432836, -27323873, -27214576, -27104947, -26994986, + -26884694, -26774071, -26663120, -26551840, -26440232, -26328297, + -26216037, -26103451, -25990541, -25877308, -25763752, -25649875, + -25535677, -25421159, -25306322, -25191167, -25075694, -24959906, + -24843802, -24727383, -24610651, -24493606, -24376249, -24258581, + -24140604, -24022317, -23903723, -23784821, -23665612, -23546099, + -23426281, -23306160, -23185736, -23065010, -22943985, -22822659, + -22701035, -22579113, -22456894, -22334380, -22211570, -22088467, + -21965072, -21841384, -21717405, -21593137, -21468580, -21343734, + -21218602, -21093185, -20967482, -20841495, -20715226, -20588675, + -20461843, -20334731, -20207341, -20079673, -19951728, -19823508, + -19695013, -19566245, -19437204, -19307891, -19178309, -19048457, + -18918337, -18787949, -18657296, -18526377, -18395195, -18263750, + -18132043, -18000075, -17867848, -17735362, -17602618, -17469619, + -17336364, -17202855, -17069093, -16935079, -16800814, -16666300, + -16531537, -16396526, -16261270, -16125768, -15990022, -15854033, + -15717803, -15581332, -15444621, -15307672, -15170486, -15033064, + -14895407, -14757516, -14619393, -14481039, -14342454, -14203640, + -14064599, -13925330, -13785836, -13646118, -13506177, -13366014, + -13225630, -13085027, -12944205, -12803166, -12661911, -12520442, + -12378759, -12236863, -12094757, -11952441, -11809916, -11667183, + -11524245, -11381101, -11237754, -11094204, -10950453, -10806502, + -10662352, -10518005, -10373461, -10228723, -10083790, -9938665, + -9793349, -9647843, -9502148, -9356266, -9210198, -9063944, -8917507, + -8770888, -8624087, -8477107, -8329949, -8182613, -8035101, -7887414, + -7739554, -7591523, -7443320, -7294948, -7146408, -6997701, -6848828, + -6699792, -6550592, -6401231, -6251710, -6102030, -5952192, -5802198, + -5652049, -5501747, -5351292, -5200686, -5049931, -4899027, -4747977, + -4596781, -4445441, -4293958, -4142334, -3990569, -3838666, -3686625, + -3534448, -3382137, -3229692, -3077115, -2924408, -2771571, -2618607, + -2465516, -2312300, -2158961, -2005499, -1851916, -1698214, -1544394, + -1390456, -1236404, -1082238, -927959, -773568, -619068, -464460, + -309745, -154924, 0, 155027, 310156, 465385, 620712, 776136, 931656, + 1087270, 1242977, 1398775, 1554663, 1710639, 1866703, 2022852, 2179085, + 2335401, 2491799, 2648276, 2804832, 2961464, 3118173, 3274955, 3431810, + 3588736, 3745732, 3902796, 4059926, 4217123, 4374383, 4531705, 4689089, + 4846532, 5004033, 5161590, 5319203, 5476869, 5634588, 5792357, 5950175, + 6108041, 6265954, 6423911, 6581911, 6739954, 6898036, 7056158, 7214316, + 7372511, 7530740, 7689002, 7847296, 8005619, 8163971, 8322349, 8480753, + 8639181, 8797632, 8956103, 9114594, 9273103, 9431628, 9590168, 9748721, + 9907287, 10065862, 10224447, 10383039, 10541637, 10700240, 10858845, + 11017451, 11176057, 11334662, 11493264, 11651860, 11810451, 11969033, + 12127607, 12286169, 12444719, 12603256, 12761777, 12920281, 13078766, + 13237232, 13395676, 13554097, 13712494, 13870864, 14029207, 14187521, + 14345804, 14504055, 14662272, 14820453, 14978598, 15136705, 15294772, + 15452797, 15610780, 15768718, 15926609, 16084454, 16242249, 16399993, + 16557686, 16715324, 16872908, 17030434, 17187902, 17345310, 17502657, + 17659941, 17817160, 17974313, 18131399, 18288415, 18445361, 18602234, + 18759034, 18915758, 19072405, 19228974, 19385462, 19541870, 19698194, + 19854433, 20010586, 20166652, 20322628, 20478514, 20634306, 20790005, + 20945609, 21101115, 21256523, 21411831, 21567037, 21722140, 21877138, + 22032029, 22186813, 22341487, 22496050, 22650501, 22804838, 22959059, + 23113162, 23267147, 23421012, 23574755, 23728375, 23881869, 24035237, + 24188477, 24341587, 24494567, 24647413, 24800125, 24952702, 25105141, + 25257441, 25409601, 25561619, 25713494, 25865223, 26016806, 26168240, + 26319525, 26470659, 26621640, 26772466, 26923137, 27073650, 27224004, + 27374198, 27524230, 27674098, 27823801, 27973337, 28122706, 28271904, + 28420931, 28569786, 28718466, 28866970, 29015296, 29163444, 29311412, + 29459197, 29606799, 29754215, 29901445, 30048487, 30195340, 30342001, + 30488469, 30634743, 30780822, 30926703, 31072385, 31217867, 31363147, + 31508224, 31653096, 31797761, 31942218, 32086466, 32230503, 32374328, + 32517939, 32661334, 32804512, 32947471, 33090211, 33232728, 33375023, + 33517094, 33658938, 33800554, 33941942, 34083099, 34224024, 34364715, + 34505172, 34645391, 34785373, 34925115, 35064616, 35203875, 35342889, + 35481658, 35620180, 35758453, 35896477, 36034249, 36171768, 36309033, + 36446042, 36582793, 36719286, 36855518, 36991489, 37127196, 37262638, + 37397815, 37532723, 37667363, 37801732, 37935829, 38069652, 38203200, + 38336472, 38469466, 38602181, 38734615, 38866767, 38998635, 39130218, + 39261514, 39392522, 39523241, 39653669, 39783805, 39913647, 40043194, + 40172444, 40301396, 40430048, 40558400, 40686449, 40814195, 40941635, + 41068769, 41195595, 41322111, 41448317, 41574210, 41699790, 41825054, + 41950002, 42074633, 42198944, 42322934, 42446603, 42569948, 42692968, + 42815661, 42938028, 43060065, 43181772, 43303147, 43424189, 43544897, + 43665269, 43785303, 43904999, 44024355, 44143370, 44262041, 44380369, + 44498352, 44615987, 44733275, 44850213, 44966800, 45083036, 45198917, + 45314444, 45429615, 45544428, 45658882, 45772977, 45886709, 46000079, + 46113085, 46225726, 46337999, 46449905, 46561441, 46672607, 46783400, + 46893820, 47003866, 47113536, 47222829, 47331743, 47440277, 47548430, + 47656201, 47763589, 47870591, 47977208, 48083437, 48189277, 48294727, + 48399787, 48504453, 48608726, 48712604, 48816086, 48919170, 49021855, + 49124141, 49226025, 49327507, 49428585, 49529259, 49629526, 49729385, + 49828837, 49927878, 50026509, 50124727, 50222531, 50319922, 50416896, + 50513453, 50609592, 50705312, 50800611, 50895488, 50989943, 51083973, + 51177578, 51270756, 51363507, 51455828, 51547720, 51639181, 51730209, + 51820804, 51910965, 52000689, 52089977, 52178827, 52267237, 52355208, + 52442736, 52529823, 52616465, 52702663, 52788415, 52873720, 52958577, + 53042984, 53126942, 53210447, 53293501, 53376100, 53458246, 53539935, + 53621167, 53701942, 53782258, 53862113, 53941508, 54020440, 54098909, + 54176914, 54254453, 54331526, 54408132, 54484269, 54559937, 54635134, + 54709860, 54784113, 54857892, 54931197, 55004027, 55076379, 55148255, + 55219651, 55290568, 55361005, 55430959, 55500432, 55569420, 55637925, + 55705943, 55773476, 55840521, 55907077, 55973144, 56038721, 56103807, + 56168401, 56232501, 56296108, 56359219, 56421835, 56483954, 56545575, + 56606697, 56667320, 56727442, 56787064, 56846182, 56904798, 56962910, + 57020517, 57077618, 57134212, 57190299, 57245877, 57300947, 57355506, + 57409554, 57463090, 57516113, 57568624, 57620619, 57672100, 57723064, + 57773512, 57823442, 57872854, 57921746, 57970118, 58017970, 58065300, + 58112107, 58158391, 58204151, 58249386, 58294096, 58338279, 58381935, + 58425063, 58467663, 58509733, 58551273, 58592282, 58632760, 58672705, + 58712117, 58750995, 58789339, 58827148, 58864420, 58901156, 58937355, + 58973016, 59008138, 59042720, 59076762, 59110264, 59143224, 59175642, + 59207517, 59238849, 59269637, 59299880, 59329577, 59358729, 59387334, + 59415391, 59442901, 59469862, 59496274, 59522137, 59547449, 59572209, + 59596419, 59620076, 59643181, 59665732, 59687729, 59709172, 59730060, + 59750392, 59770168, 59789388, 59808050, 59826154, 59843700, 59860688, + 59877115, 59892983, 59908291, 59923038, 59937223, 59950846, 59963907, + 59976405, 59988340, 59999710, 60010517, 60020758, 60030435, 60039545, + 60048089, 60056067, 60063478, 60070321, 60076596, 60082302, 60087440, + 60092009, 60096007, 60099436, 60102295, 60104582, 60106298, 60107443, + 60108015, 60108015, 60107443, 60106297, 60104577, 60102284, 60099417, + 60095975, 60091958, 60087366, 60082198, 60076454, 60070134, 60063238, + 60055765, 60047714, 60039086, 60029881, 60020097, 60009735, 59998794, + 59987275, 59975176, 59962499, 59949241, 59935404, 59920986, 59905988, + 59890409, 59874250, 59857509, 59840188, 59822284, 59803799, 59784732, + 59765083, 59744852, 59724038, 59702642, 59680662, 59658100, 59634955, + 59611226, 59586914, 59562018, 59536538, 59510475, 59483827, 59456595, + 59428779, 59400379, 59371394, 59341824, 59311670, 59280931, 59249607, + 59217698, 59185204, 59152125, 59118461, 59084212, 59049377, 59013957, + 58977951, 58941361, 58904184, 58866423, 58828075, 58789143, 58749624, + 58709520, 58668831, 58627556, 58585696, 58543250, 58500219, 58456602, + 58412400, 58367613, 58322240, 58276282, 58229739, 58182611, 58134898, + 58086599, 58037716, 57988248, 57938196, 57887558, 57836336, 57784530, + 57732140, 57679165, 57625606, 57571464, 57516737, 57461427, 57405534, + 57349057, 57291997, 57234354, 57176128, 57117319, 57057928, 56997955, + 56937400, 56876262, 56814543, 56752243, 56689361, 56625899, 56561855, + 56497231, 56432027, 56366242, 56299878, 56232934, 56165411, 56097308, + 56028627, 55959368, 55889530, 55819114, 55748121, 55676550, 55604403, + 55531678, 55458377, 55384501, 55310048, 55235020, 55159417, 55083240, + 55006488, 54929162, 54851262, 54772790, 54693744, 54614126, 54533935, + 54453173, 54371840, 54289936, 54207461, 54124417, 54040802, 53956619, + 53871866, 53786546, 53700657, 53614201, 53527178, 53439588, 53351432, + 53262711, 53173425, 53083574, 52993158, 52902180, 52810638, 52718533, + 52625866, 52532638, 52438849, 52344499, 52249589, 52154120, 52058091, + 51961505, 51864360, 51766659, 51668400, 51569586, 51470216, 51370291, + 51269812, 51168779, 51067193, 50965054, 50862364, 50759122, 50655330, + 50550987, 50446096, 50340655, 50234666, 50128130, 50021048, 49913419, + 49805244, 49696525, 49587262, 49477456, 49367107, 49256215, 49144783, + 49032810, 48920297, 48807245, 48693655, 48579527, 48464862, 48349661, + 48233924, 48117653, 48000848, 47883510, 47765639, 47647237, 47528304, + 47408841, 47288849, 47168329, 47047281, 46925706, 46803605, 46680979, + 46557828, 46434154, 46309958, 46185240, 46060000, 45934241, 45807962, + 45681165, 45553851, 45426020, 45297673, 45168812, 45039436, 44909548, + 44779147, 44648235, 44516813, 44384881, 44252441, 44119494, 43986040, + 43852080, 43717616, 43582648, 43447177, 43311204, 43174730, 43037757, + 42900285, 42762315, 42623848, 42484885, 42345427, 42205475, 42065031, + 41924094, 41782667, 41640750, 41498345, 41355451, 41212071, 41068205, + 40923855, 40779021, 40633705, 40487908, 40341630, 40194873, 40047638, + 39899926, 39751738, 39603075, 39453939, 39304330, 39154250, 39003699, + 38852679, 38701191, 38549236, 38396815, 38243930, 38090581, 37936770, + 37782498, 37627766, 37472575, 37316926, 37160821, 37004261, 36847247, + 36689780, 36531861, 36373492, 36214674, 36055408, 35895695, 35735537, + 35574934, 35413889, 35252401, 35090474, 34928107, 34765301, 34602060, + 34438382, 34274271, 34109727, 33944751, 33779345, 33613510, 33447247, + 33280558, 33113443, 32945905, 32777945, 32609563, 32440762, 32271542, + 32101905, 31931853, 31761386, 31590506, 31419214, 31247512, 31075401, + 30902883, 30729958, 30556628, 30382896, 30208761, 30034225, 29859291, + 29683958, 29508229, 29332106, 29155588, 28978679, 28801379, 28623690, + 28445612, 28267149, 28088301, 27909069, 27729455, 27549461, 27369088, + 27188337, 27007210, 26825708, 26643834, 26461587, 26278971, 26095986, + 25912634, 25728916, 25544834, 25360389, 25175584, 24990419, 24804896, + 24619016, 24432782, 24246194, 24059255, 23871965, 23684326, 23496341, + 23308009, 23119334, 22930316, 22740958, 22551260, 22361225, 22170853, + 21980147, 21789108, 21597738, 21406038, 21214010, 21021656, 20828977, + 20635974, 20442651, 20249007, 20055045, 19860766, 19666172, 19471265, + 19276047, 19080518, 18884681, 18688537, 18492088, 18295336, 18098282, + 17900928, 17703276, 17505327, 17307084, 17108547, 16909719, 16710601, + 16511194, 16311502, 16111524, 15911264, 15710723, 15509902, 15308803, + 15107428, 14905780, 14703858, 14501666, 14299205, 14096476, 13893482, + 13690224, 13486704, 13282924, 13078886, 12874591, 12670041, 12465238, + 12260183, 12054880, 11849328, 11643530, 11437489, 11231205, 11024680, + 10817917, 10610917, 10403682, 10196214, 9988514, 9780585, 9572428, + 9364045, 9155438, 8946609, 8737559, 8528291, 8318806, 8109107, 7899194, + 7689070, 7478737, 7268197, 7057451, 6846502, 6635351, 6424000, 6212451, + 6000706, 5788767, 5576636, 5364314, 5151804, 4939107, 4726225, 4513161, + 4299915, 4086491, 3872890, 3659114, 3445164, 3231043, 3016753, 2802296, + 2587673, 2372886, 2157938, 1942831, 1727565, 1512144, 1296569, 1080842, + 864966, 648941, 432771, 216456, 0, -216596, -433331, -650202, -867206, + -1084343, -1301611, -1519006, -1736528, -1954173, -2171941, -2389829, + -2607836, -2825958, -3044195, -3262544, -3481003, -3699570, -3918244, + -4137021, -4355901, -4574881, -4793959, -5013133, -5232401, -5451761, + -5671211, -5890749, -6110373, -6330081, -6549871, -6769740, -6989687, + -7209710, -7429807, -7649975, -7870213, -8090518, -8310889, -8531323, + -8751818, -8972373, -9192985, -9413652, -9634372, -9855144, -10075964, + -10296831, -10517743, -10738697, -10959692, -11180726, -11401796, + -11622901, -11844038, -12065205, -12286400, -12507622, -12728867, + -12950134, -13171421, -13392726, -13614046, -13835380, -14056725, + -14278079, -14499441, -14720808, -14942177, -15163548, -15384917, + -15606283, -15827644, -16048997, -16270340, -16491671, -16712989, + -16934290, -17155574, -17376837, -17598077, -17819294, -18040483, + -18261644, -18482774, -18703871, -18924932, -19145957, -19366942, + -19587885, -19808785, -20029639, -20250446, -20471202, -20691906, + -20912555, -21133148, -21353683, -21574157, -21794568, -22014913, + -22235192, -22455402, -22675540, -22895604, -23115593, -23335503, + -23555334, -23775083, -23994747, -24214325, -24433814, -24653213, + -24872518, -25091729, -25310842, -25529856, -25748768, -25967577, + -26186280, -26404875, -26623360, -26841733, -27059991, -27278133, + -27496156, -27714058, -27931837, -28149491, -28367018, -28584415, + -28801681, -29018813, -29235808, -29452666, -29669384, -29885959, + -30102389, -30318673, -30534808, -30750792, -30966622, -31182298, + -31397816, -31613174, -31828370, -32043403, -32258269, -32472968, + -32687495, -32901851, -33116031, -33330035, -33543859, -33757503, + -33970963, -34184238, -34397325, -34610222, -34822927, -35035438, + -35247754, -35459870, -35671786, -35883500, -36095009, -36306310, + -36517403, -36728284, -36938952, -37149405, -37359640, -37569655, + -37779448, -37989016, -38198359, -38407473, -38616357, -38825008, + -39033425, -39241604, -39449544, -39657243, -39864699, -40071909, + -40278872, -40485585, -40692046, -40898253, -41104204, -41309897, + -41515329, -41720499, -41925405, -42130043, -42334413, -42538512, + -42742337, -42945888, -43149161, -43352154, -43554867, -43757295, + -43959438, -44161293, -44362857, -44564130, -44765109, -44965791, + -45166175, -45366258, -45566039, -45765515, -45964684, -46163544, + -46362093, -46560330, -46758251, -46955855, -47153139, -47350102, + -47546742, -47743056, -47939042, -48134699, -48330023, -48525014, + -48719669, -48913986, -49107963, -49301597, -49494888, -49687832, + -49880427, -50072673, -50264565, -50456104, -50647285, -50838109, + -51028571, -51218671, -51408406, -51597774, -51786773, -51975401, + -52163657, -52351537, -52539041, -52726166, -52912909, -53099270, + -53285245, -53470833, -53656033, -53840841, -54025255, -54209275, + -54392898, -54576121, -54758944, -54941363, -55123377, -55304984, + -55486181, -55666968, -55847341, -56027300, -56206841, -56385963, + -56564664, -56742943, -56920796, -57098222, -57275219, -57451786, + -57627919, -57803618, -57978880, -58153704, -58328087, -58502027, + -58675523, -58848572, -59021173, -59193323, -59365022, -59536266, + -59707054, -59877384, -60047254, -60216662, -60385607, -60554085, + -60722096, -60889638, -61056709, -61223306, -61389428, -61555072, + -61720238, -61884924, -62049126, -62212844, -62376075, -62538819, + -62701072, -62862833, -63024100, -63184871, -63345145, -63504919, + -63664192, -63822962, -63981227, -64138986, -64296235, -64452974, + -64609201, -64764914, -64920111, -65074790, -65228950, -65382589, + -65535704, -65688295, -65840358, -65991894, -66142899, -66293372, + -66443311, -66592715, -66741581, -66889908, -67037695, -67184938, + -67331638, -67477791, -67623396, -67768452, -67912956, -68056907, + -68200304, -68343144, -68485425, -68627147, -68768307, -68908904, + -69048936, -69188401, -69327297, -69465623, -69603378, -69740559, + -69877164, -70013193, -70148643, -70283514, -70417802, -70551507, + -70684626, -70817159, -70949103, -71080458, -71211220, -71341390, + -71470964, -71599942, -71728322, -71856101, -71983280, -72109855, + -72235826, -72361191, -72485948, -72610095, -72733632, -72856556, + -72978867, -73100561, -73221639, -73342097, -73461936, -73581153, + -73699746, -73817715, -73935057, -74051771, -74167856, -74283310, + -74398131, -74512319, -74625871, -74738786, -74851063, -74962700, + -75073695, -75184048, -75293756, -75402819, -75511234, -75619001, + -75726118, -75832583, -75938395, -76043553, -76148055, -76251899, + -76355085, -76457611, -76559476, -76660677, -76761215, -76861087, + -76960291, -77058828, -77156694, -77253890, -77350413, -77446262, + -77541436, -77635933, -77729753, -77822893, -77915353, -78007131, + -78098226, -78188637, -78278362, -78367399, -78455749, -78543408, + -78630377, -78716654, -78802237, -78887126, -78971318, -79054814, + -79137611, -79219708, -79301104, -79381798, -79461789, -79541075, + -79619656, -79697529, -79774694, -79851150, -79926895, -80001929, + -80076249, -80149856, -80222747, -80294922, -80366379, -80437117, + -80507136, -80576434, -80645010, -80712862, -80779990, -80846393, + -80912069, -80977018, -81041237, -81104727, -81167487, -81229514, + -81290808, -81351368, -81411193, -81470282, -81528634, -81586248, + -81643122, -81699256, -81754649, -81809299, -81863207, -81916370, + -81968787, -82020459, -82071383, -82121559, -82170986, -82219663, + -82267589, -82314763, -82361184, -82406851, -82451763, -82495920, + -82539320, -82581963, -82623847, -82664972, -82705337, -82744941, + -82783783, -82821862, -82859178, -82895729, -82931515, -82966535, + -83000788, -83034273, -83066989, -83098936, -83130113, -83160519, + -83190153, -83219014, -83247103, -83274417, -83300956, -83326719, + -83351707, -83375917, -83399349, -83422003, -83443878, -83464972, + -83485286, -83504818, -83523569, -83541536, -83558721, -83575121, + -83590736, -83605566, -83619610, -83632867, -83645337, -83657018, + -83667912, -83678016, -83687330, -83695854, -83703586, -83710528, + -83716677, -83722033, -83726596, -83730365, -83733340, -83735520, + -83736904, -83737492, -83737284, -83736279, -83734476, -83731875, + -83728476, -83724277, -83719280, -83713482, -83706884, -83699484, + -83691284, -83682282, -83672477, -83661870, -83650460, -83638247, + -83625230, -83611408, -83596782, -83581350, -83565114, -83548071, + -83530223, -83511568, -83492106, -83471837, -83450761, -83428877, + -83406184, -83382684, -83358374, -83333256, -83307328, -83280591, + -83253044, -83224687, -83195519, -83165541, -83134752, -83103152, + -83070741, -83037518, -83003483, -82968637, -82932978, -82896507, + -82859224, -82821128, -82782219, -82742497, -82701962, -82660614, + -82618453, -82575478, -82531689, -82487087, -82441670, -82395440, + -82348396, -82300538, -82251865, -82202379, -82152078, -82100962, + -82049033, -81996289, -81942730, -81888357, -81833170, -81777168, + -81720351, -81662721, -81604275, -81545016, -81484942, -81424054, + -81362351, -81299834, -81236503, -81172358, -81107400, -81041627, + -80975040, -80907640, -80839426, -80770399, -80700558, -80629905, + -80558438, -80486158, -80413066, -80339161, -80264444, -80188914, + -80112573, -80035420, -79957455, -79878679, -79799091, -79718693, + -79637484, -79555465, -79472636, -79388996, -79304547, -79219289, + -79133222, -79046345, -78958661, -78870168, -78780867, -78690759, + -78599844, -78508122, -78415593, -78322258, -78228118, -78133172, + -78037421, -77940866, -77843506, -77745342, -77646375, -77546605, + -77446033, -77344658, -77242482, -77139504, -77035726, -76931148, + -76825769, -76719591, -76612615, -76504840, -76396267, -76286897, + -76176730, -76065767, -75954009, -75841455, -75728106, -75613963, + -75499027, -75383298, -75266777, -75149464, -75031359, -74912465, + -74792780, -74672306, -74551043, -74428993, -74306155, -74182530, + -74058120, -73932924, -73806943, -73680179, -73552631, -73424300, + -73295188, -73165295, -73034621, -72903167, -72770935, -72637924, + -72504136, -72369571, -72234231, -72098115, -71961225, -71823562, + -71685125, -71545917, -71405938, -71265189, -71123670, -70981383, + -70838328, -70694506, -70549918, -70404566, -70258449, -70111568, + -69963926, -69815522, -69666357, -69516432, -69365749, -69214309, + -69062111, -68909157, -68755449, -68600986, -68445771, -68289804, + -68133086, -67975617, -67817400, -67658435, -67498723, -67338265, + -67177062, -67015116, -66852426, -66688995, -66524824, -66359913, + -66194263, -66027876, -65860753, -65692895, -65524303, -65354978, + -65184921, -65014134, -64842617, -64670372, -64497399, -64323701, + -64149278, -63974132, -63798263, -63621672, -63444362, -63266333, + -63087587, -62908124, -62727946, -62547055, -62365450, -62183135, + -62000109, -61816375, -61631933, -61446785, -61260932, -61074376, + -60887118, -60699158, -60510499, -60321142, -60131087, -59940337, + -59748893, -59556757, -59363928, -59170410, -58976203, -58781309, + -58585729, -58389464, -58192516, -57994887, -57796578, -57597590, + -57397924, -57197583, -56996567, -56794879, -56592519, -56389489, + -56185791, -55981426, -55776395, -55570701, -55364344, -55157327, + -54949650, -54741315, -54532324, -54322678, -54112380, -53901430, + -53689829, -53477581, -53264686, -53051146, -52836962, -52622136, + -52406670, -52190565, -51973823, -51756446, -51538435, -51319793, + -51100519, -50880617, -50660088, -50438934, -50217156, -49994756, + -49771735, -49548096, -49323841, -49098970, -48873486, -48647390, + -48420685, -48193371, -47965451, -47736927, -47507799, -47278071, + -47047743, -46816819, -46585298, -46353184, -46120477, -45887181, + -45653296, -45418825, -45183769, -44948130, -44711911, -44475112, + -44237736, -43999785, -43761261, -43522165, -43282499, -43042266, + -42801467, -42560103, -42318178, -42075693, -41832650, -41589051, + -41344898, -41100192, -40854936, -40609132, -40362781, -40115886, + -39868449, -39620472, -39371956, -39122903, -38873317, -38623198, + -38372549, -38121372, -37869668, -37617440, -37364691, -37111421, + -36857633, -36603330, -36348512, -36093183, -35837345, -35580998, + -35324147, -35066792, -34808936, -34550580, -34291728, -34032381, + -33772542, -33512212, -33251393, -32990088, -32728299, -32466029, + -32203279, -31940051, -31676348, -31412171, -31147524, -30882408, + -30616826, -30350779, -30084270, -29817301, -29549875, -29281994, + -29013659, -28744873, -28475639, -28205959, -27935834, -27665268, + -27394262, -27122819, -26850941, -26578630, -26305889, -26032720, + -25759125, -25485107, -25210668, -24935810, -24660536, -24384848, + -24108748, -23832238, -23555322, -23278001, -23000278, -22722155, + -22443634, -22164719, -21885410, -21605712, -21325625, -21045153, + -20764298, -20483062, -20201447, -19919457, -19637094, -19354360, + -19071257, -18787788, -18503955, -18219761, -17935209, -17650300, + -17365037, -17079423, -16793461, -16507152, -16220499, -15933505, + -15646172, -15358503, -15070500, -14782165, -14493502, -14204513, + -13915200, -13625566, -13335613, -13045344, -12754761, -12463868, + -12172666, -11881158, -11589347, -11297235, -11004825, -10712119, + -10419121, -10125832, -9832255, -9538393, -9244249, -8949824, -8655122, + -8360146, -8064897, -7769378, -7473593, -7177544, -6881233, -6584663, + -6287836, -5990756, -5693425, -5395846, -5098020, -4799952, -4501644, + -4203097, -3904316, -3605303, -3306059, -3006589, -2706895, -2406979, + -2106844, -1806493, -1505928, -1205153, -904170, -602981, -301590, 0, + 301788, 603770, 905944, 1208307, 1510856, 1813588, 2116501, 2419592, + 2722858, 3026297, 3329905, 3633680, 3937619, 4241719, 4545978, 4850392, + 5154959, 5459677, 5764542, 6069551, 6374702, 6679992, 6985418, 7290977, + 7596667, 7902485, 8208427, 8514492, 8820676, 9126976, 9433390, 9739914, + 10046547, 10353284, 10660124, 10967063, 11274098, 11581227, 11888447, + 12195755, 12503149, 12810624, 13118179, 13425810, 13733515, 14041291, + 14349134, 14657043, 14965013, 15273043, 15581130, 15889270, 16197460, + 16505698, 16813981, 17122306, 17430670, 17739070, 18047504, 18355967, + 18664458, 18972974, 19281511, 19590067, 19898638, 20207223, 20515817, + 20824418, 21133024, 21441630, 21750235, 22058835, 22367428, 22676010, + 22984578, 23293130, 23601663, 23910173, 24218658, 24527115, 24835541, + 25143932, 25452287, 25760601, 26068873, 26377099, 26685276, 26993401, + 27301471, 27609484, 27917436, 28225324, 28533146, 28840898, 29148578, + 29456182, 29763707, 30071152, 30378511, 30685784, 30992966, 31300055, + 31607047, 31913941, 32220732, 32527417, 32833995, 33140461, 33446814, + 33753049, 34059164, 34365156, 34671021, 34976758, 35282363, 35587833, + 35893164, 36198355, 36503401, 36808301, 37113051, 37417647, 37722088, + 38026370, 38330490, 38634445, 38938232, 39241848, 39545290, 39848555, + 40151641, 40454543, 40757260, 41059788, 41362124, 41664265, 41966208, + 42267951, 42569489, 42870821, 43171943, 43472852, 43773545, 44074020, + 44374273, 44674301, 44974101, 45273670, 45573006, 45872105, 46170964, + 46469580, 46767951, 47066073, 47363943, 47661559, 47958917, 48256014, + 48552848, 48849414, 49145712, 49441736, 49737485, 50032956, 50328144, + 50623048, 50917665, 51211991, 51506024, 51799760, 52093196, 52386331, + 52679159, 52971680, 53263888, 53555783, 53847360, 54138617, 54429550, + 54720158, 55010436, 55300382, 55589992, 55879265, 56168196, 56456784, + 56745024, 57032915, 57320452, 57607633, 57894456, 58180917, 58467013, + 58752741, 59038099, 59323083, 59607691, 59891919, 60175764, 60459224, + 60742296, 61024976, 61307262, 61589152, 61870640, 62151726, 62432406, + 62712677, 62992537, 63271981, 63551008, 63829614, 64107797, 64385554, + 64662881, 64939776, 65216235, 65492257, 65767838, 66042974, 66317664, + 66591905, 66865693, 67139025, 67411899, 67684312, 67956260, 68227742, + 68498754, 68769293, 69039356, 69308941, 69578045, 69846664, 70114796, + 70382438, 70649587, 70916241, 71182396, 71448050, 71713199, 71977841, + 72241974, 72505593, 72768697, 73031283, 73293347, 73554887, 73815901, + 74076384, 74336335, 74595750, 74854628, 75112964, 75370756, 75628002, + 75884699, 76140843, 76396432, 76651464, 76905935, 77159842, 77413183, + 77665956, 77918157, 78169783, 78420832, 78671301, 78921188, 79170489, + 79419202, 79667323, 79914851, 80161783, 80408115, 80653846, 80898972, + 81143490, 81387398, 81630694, 81873374, 82115436, 82356877, 82597694, + 82837885, 83077447, 83316377, 83554673, 83792332, 84029351, 84265728, + 84501460, 84736544, 84970978, 85204758, 85437883, 85670350, 85902156, + 86133298, 86363774, 86593581, 86822716, 87051178, 87278963, 87506068, + 87732492, 87958231, 88183284, 88407646, 88631317, 88854292, 89076570, + 89298148, 89519024, 89739194, 89958657, 90177410, 90395450, 90612775, + 90829382, 91045268, 91260432, 91474871, 91688581, 91901562, 92113809, + 92325321, 92536095, 92746129, 92955420, 93163965, 93371763, 93578811, + 93785106, 93990646, 94195428, 94399450, 94602710, 94805205, 95006932, + 95207890, 95408076, 95607487, 95806121, 96003976, 96201049, 96397338, + 96592840, 96787553, 96981476, 97174604, 97366937, 97558471, 97749205, + 97939135, 98128261, 98316578, 98504086, 98690781, 98876662, 99061726, + 99245971, 99429394, 99611993, 99793767, 99974712, 100154826, 100334108, + 100512555, 100690164, 100866934, 101042862, 101217946, 101392183, + 101565573, 101738111, 101909797, 102080628, 102250601, 102419715, + 102587968, 102755357, 102921880, 103087534, 103252319, 103416231, + 103579269, 103741430, 103902713, 104063115, 104222633, 104381267, + 104539014, 104695871, 104851838, 105006911, 105161088, 105314368, + 105466749, 105618228, 105768803, 105918473, 106067235, 106215088, + 106362029, 106508056, 106653168, 106797362, 106940636, 107082989, + 107224419, 107364923, 107504499, 107643146, 107780862, 107917645, + 108053493, 108188403, 108322375, 108455406, 108587494, 108718638, + 108848835, 108978084, 109106383, 109233729, 109360122, 109485559, + 109610039, 109733559, 109856119, 109977715, 110098347, 110218012, + 110336709, 110454435, 110571190, 110686972, 110801778, 110915607, + 111028457, 111140327, 111251215, 111361118, 111470036, 111577967, + 111684909, 111790860, 111895819, 111999784, 112102754, 112204726, + 112305699, 112405672, 112504643, 112602610, 112699572, 112795527, + 112890473, 112984409, 113077334, 113169246, 113260143, 113350023, + 113438886, 113526730, 113613553, 113699353, 113784130, 113867882, + 113950606, 114032303, 114112970, 114192606, 114271209, 114348778, + 114425312, 114500809, 114575267, 114648687, 114721065, 114792400, + 114862692, 114931939, 115000139, 115067291, 115133395, 115198447, + 115262448, 115325396, 115387290, 115448127, 115507908, 115566630, + 115624293, 115680895, 115736436, 115790912, 115844325, 115896672, + 115947951, 115998163, 116047306, 116095377, 116142378, 116188305, + 116233159, 116276937, 116319640, 116361265, 116401811, 116441278, + 116479664, 116516969, 116553191, 116588328, 116622381, 116655348, + 116687228, 116718020, 116747723, 116776335, 116803857, 116830287, + 116855623, 116879865, 116903013, 116925065, 116946019, 116965876, + 116984634, 117002293, 117018851, 117034307, 117048661, 117061912, + 117074059, 117085101, 117095038, 117103867, 117111590, 117118204, + 117123709, 117128104, 117131389, 117133562, 117134623, 117134571, + 117133406, 117131126, 117127731, 117123220, 117117593, 117110849, + 117102986, 117094005, 117083905, 117072685, 117060344, 117046883, + 117032299, 117016593, 116999764, 116981811, 116962735, 116942533, + 116921206, 116898753, 116875174, 116850468, 116824635, 116797673, + 116769583, 116740364, 116710015, 116678537, 116645928, 116612189, + 116577318, 116541315, 116504180, 116465913, 116426513, 116385979, + 116344312, 116301511, 116257575, 116212505, 116166299, 116118958, + 116070482, 116020869, 115970120, 115918234, 115865212, 115811052, + 115755755, 115699321, 115641748, 115583037, 115523188, 115462201, + 115400075, 115336810, 115272406, 115206863, 115140180, 115072358, + 115003397, 114933296, 114862054, 114789674, 114716153, 114641492, + 114565691, 114488749, 114410668, 114331446, 114251085, 114169582, + 114086940, 114003158, 113918235, 113832172, 113744969, 113656626, + 113567143, 113476520, 113384757, 113291854, 113197812, 113102631, + 113006310, 112908850, 112810250, 112710512, 112609635, 112507620, + 112404467, 112300175, 112194745, 112088178, 111980473, 111871631, + 111761652, 111650537, 111538285, 111424898, 111310374, 111194715, + 111077921, 110959992, 110840929, 110720732, 110599401, 110476937, + 110353340, 110228610, 110102748, 109975755, 109847631, 109718376, + 109587990, 109456475, 109323830, 109190056, 109055155, 108919125, + 108781968, 108643684, 108504274, 108363739, 108222078, 108079293, + 107935383, 107790351, 107644196, 107496919, 107348520, 107199000, + 107048361, 106896602, 106743724, 106589728, 106434614, 106278384, + 106121038, 105962577, 105803001, 105642312, 105480509, 105317595, + 105153568, 104988432, 104822185, 104654830, 104486366, 104316796, + 104146118, 103974336, 103801448, 103627457, 103452363, 103276166, + 103098869, 102920472, 102740975, 102560380, 102378688, 102195900, + 102012016, 101827038, 101640967, 101453803, 101265548, 101076203, + 100885769, 100694246, 100501637, 100307941, 100113161, 99917297, + 99720351, 99522323, 99323214, 99123026, 98921761, 98719418, 98516000, + 98311507, 98105941, 97899303, 97691594, 97482816, 97272969, 97062055, + 96850075, 96637031, 96422923, 96207753, 95991523, 95774234, 95555886, + 95336482, 95116023, 94894509, 94671943, 94448327, 94223660, 93997945, + 93771183, 93543376, 93314524, 93084630, 92853695, 92621720, 92388708, + 92154658, 91919574, 91683455, 91446305, 91208124, 90968914, 90728677, + 90487414, 90245127, 90001817, 89757486, 89512135, 89265767, 89018382, + 88769983, 88520571, 88270147, 88018715, 87766274, 87512827, 87258376, + 87002922, 86746467, 86489013, 86230561, 85971114, 85710673, 85449239, + 85186815, 84923403, 84659004, 84393620, 84127252, 83859904, 83591576, + 83322271, 83051990, 82780736, 82508509, 82235313, 81961148, 81686018, + 81409924, 81132867, 80854850, 80575875, 80295943, 80015058, 79733220, + 79450432, 79166695, 78882013, 78596386, 78309817, 78022308, 77733862, + 77444479, 77154163, 76862915, 76570737, 76277632, 75983602, 75688649, + 75392774, 75095981, 74798271, 74499647, 74200111, 73899665, 73598310, + 73296051, 72992887, 72688823, 72383860, 72078000, 71771246, 71463601, + 71155065, 70845642, 70535334, 70224143, 69912072, 69599122, 69285297, + 68970599, 68655029, 68338591, 68021287, 67703119, 67384090, 67064201, + 66743457, 66421858, 66099407, 65776108, 65451961, 65126971, 64801139, + 64474467, 64146959, 63818617, 63489443, 63159440, 62828611, 62496957, + 62164482, 61831189, 61497079, 61162155, 60826420, 60489877, 60152528, + 59814376, 59475424, 59135673, 58795128, 58453789, 58111661, 57768746, + 57425047, 57080565, 56735305, 56389268, 56042458, 55694877, 55346527, + 54997413, 54647536, 54296899, 53945505, 53593357, 53240458, 52886810, + 52532417, 52177280, 51821404, 51464790, 51107442, 50749363, 50390555, + 50031021, 49670765, 49309789, 48948095, 48585688, 48222570, 47858743, + 47494212, 47128978, 46763044, 46396415, 46029092, 45661079, 45292378, + 44922993, 44552927, 44182183, 43810763, 43438671, 43065910, 42692483, + 42318392, 41943642, 41568235, 41192175, 40815463, 40438104, 40060101, + 39681456, 39302173, 38922255, 38541705, 38160527, 37778723, 37396296, + 37013250, 36629589, 36245314, 35860430, 35474940, 35088846, 34702152, + 34314862, 33926978, 33538504, 33149443, 32759798, 32369573, 31978771, + 31587395, 31195449, 30802935, 30409857, 30016219, 29622024, 29227274, + 28831974, 28436127, 28039736, 27642805, 27245336, 26847334, 26448801, + 26049742, 25650158, 25250055, 24849435, 24448302, 24046659, 23644509, + 23241857, 22838705, 22435056, 22030916, 21626286, 21221170, 20815573, + 20409497, 20002945, 19595922, 19188431, 18780475, 18372058, 17963184, + 17553856, 17144077, 16733851, 16323182, 15912074, 15500529, 15088551, + 14676145, 14263313, 13850059, 13436387, 13022301, 12607803, 12192899, + 11777590, 11361882, 10945777, 10529279, 10112392, 9695120, 9277466, + 8859434, 8441028, 8022251, 7603106, 7183599, 6763732, 6343509, 5922934, + 5502010, 5080742, 4659132, 4237186, 3814906, 3392296, 2969360, 2546102, + 2122526, 1698635, 1274433, 849924, 425111, 0, -425407, -851107, + -1277094, -1703366, -2129918, -2556747, -2983849, -3411219, -3838855, + -4266752, -4694906, -5123314, -5551971, -5980874, -6410019, -6839402, + -7269020, -7698867, -8128941, -8559237, -8989752, -9420481, -9851421, + -10282568, -10713918, -11145467, -11577211, -12009145, -12441267, + -12873573, -13306057, -13738717, -14171548, -14604546, -15037708, + -15471029, -15904505, -16338133, -16771909, -17205828, -17639886, + -18074080, -18508405, -18942858, -19377435, -19812131, -20246942, + -20681864, -21116895, -21552028, -21987261, -22422589, -22858008, + -23293515, -23729104, -24164773, -24600517, -25036332, -25472213, + -25908158, -26344162, -26780220, -27216329, -27652484, -28088682, + -28524918, -28961189, -29397490, -29833817, -30270166, -30706533, + -31142914, -31579304, -32015701, -32452098, -32888493, -33324882, + -33761259, -34197622, -34633966, -35070286, -35506579, -35942840, + -36379066, -36815252, -37251394, -37687488, -38123530, -38559516, + -38995441, -39431301, -39867093, -40302812, -40738453, -41174014, + -41609488, -42044874, -42480165, -42915358, -43350450, -43785435, + -44220309, -44655069, -45089710, -45524228, -45958619, -46392879, + -46827003, -47260987, -47694827, -48128519, -48562059, -48995442, + -49428664, -49861722, -50294610, -50727325, -51159862, -51592218, + -52024388, -52456368, -52888153, -53319740, -53751124, -54182301, + -54613267, -55044017, -55474548, -55904855, -56334934, -56764781, + -57194391, -57623760, -58052885, -58481761, -58910383, -59338747, + -59766850, -60194687, -60622254, -61049546, -61476559, -61903290, + -62329733, -62755885, -63181742, -63607299, -64032552, -64457496, + -64882128, -65306444, -65730439, -66154108, -66577448, -67000455, + -67423123, -67845450, -68267431, -68689061, -69110336, -69531253, + -69951806, -70371992, -70791807, -71211245, -71630304, -72048979, + -72467265, -72885158, -73302655, -73719750, -74136441, -74552721, + -74968588, -75384037, -75799064, -76213665, -76627835, -77041570, + -77454866, -77867719, -78280125, -78692079, -79103577, -79514615, + -79925189, -80335295, -80744928, -81154085, -81562760, -81970950, + -82378651, -82785858, -83192568, -83598775, -84004477, -84409668, + -84814345, -85218503, -85622138, -86025246, -86427824, -86829865, + -87231368, -87632326, -88032737, -88432596, -88831899, -89230641, + -89628819, -90026428, -90423464, -90819924, -91215802, -91611096, + -92005800, -92399910, -92793423, -93186334, -93578639, -93970334, + -94361415, -94751878, -95141719, -95530933, -95919516, -96307465, + -96694774, -97081441, -97467461, -97852830, -98237544, -98621598, + -99004989, -99387712, -99769764, -100151141, -100531837, -100911850, + -101291175, -101669808, -102047745, -102424982, -102801515, -103177340, + -103552453, -103926849, -104300525, -104673477, -105045701, -105417193, + -105787948, -106157962, -106527233, -106895754, -107263524, -107630537, + -107996790, -108362278, -108726998, -109090946, -109454117, -109816508, + -110178114, -110538933, -110898959, -111258189, -111616619, -111974245, + -112331063, -112687069, -113042259, -113396629, -113750175, -114102894, + -114454781, -114805833, -115156046, -115505415, -115853937, -116201608, + -116548424, -116894381, -117239475, -117583703, -117927061, -118269544, + -118611149, -118951872, -119291709, -119630657, -119968711, -120305868, + -120642124, -120977475, -121311917, -121645446, -121978059, -122309752, + -122640522, -122970363, -123299273, -123627248, -123954284, -124280377, + -124605524, -124929720, -125252963, -125575247, -125896571, -126216929, + -126536318, -126854735, -127172176, -127488637, -127804114, -128118604, + -128432103, -128744607, -129056113, -129366617, -129676116, -129984605, + -130292082, -130598542, -130903982, -131208398, -131511787, -131814145, + -132115469, -132415755, -132714999, -133013198, -133310348, -133606446, + -133901488, -134195470, -134488390, -134780243, -135071026, -135360736, + -135649369, -135936921, -136223390, -136508771, -136793061, -137076257, + -137358355, -137639352, -137919244, -138198028, -138475700, -138752257, + -139027696, -139302014, -139575206, -139847269, -140118201, -140387997, + -140656655, -140924171, -141190541, -141455763, -141719832, -141982746, + -142244502, -142505096, -142764524, -143022784, -143279873, -143535786, + -143790521, -144044074, -144296443, -144547623, -144797612, -145046407, + -145294004, -145540400, -145785592, -146029577, -146272351, -146513912, + -146754256, -146993381, -147231282, -147467957, -147703403, -147937616, + -148170594, -148402334, -148632832, -148862085, -149090090, -149316845, + -149542346, -149766590, -149989574, -150211295, -150431750, -150650936, + -150868850, -151085490, -151300852, -151514933, -151727730, -151939240, + -152149461, -152358390, -152566023, -152772357, -152977391, -153181120, + -153383543, -153584655, -153784455, -153982940, -154180106, -154375952, + -154570473, -154763668, -154955533, -155146065, -155335263, -155523123, + -155709643, -155894819, -156078649, -156261131, -156442261, -156622037, + -156800457, -156977517, -157153215, -157327548, -157500514, -157672110, + -157842333, -158011181, -158178651, -158344741, -158509448, -158672770, + -158834703, -158995246, -159154396, -159312150, -159468506, -159623461, + -159777013, -159929160, -160079899, -160229227, -160377142, -160523642, + -160668724, -160812386, -160954626, -161095440, -161234827, -161372785, + -161509311, -161644402, -161778057, -161910272, -162041047, -162170378, + -162298263, -162424700, -162549686, -162673220, -162795300, -162915922, + -163035085, -163152787, -163269025, -163383797, -163497102, -163608936, + -163719299, -163828187, -163935598, -164041531, -164145984, -164248954, + -164350439, -164450437, -164548947, -164645966, -164741492, -164835523, + -164928058, -165019093, -165108628, -165196661, -165283188, -165368210, + -165451722, -165533725, -165614215, -165693191, -165770652, -165846594, + -165921017, -165993918, -166065297, -166135150, -166203476, -166270274, + -166335542, -166399277, -166461479, -166522145, -166581274, -166638864, + -166694913, -166749420, -166802384, -166853801, -166903672, -166951994, + -166998765, -167043985, -167087651, -167129762, -167170316, -167209312, + -167246748, -167282623, -167316936, -167349684, -167380867, -167410483, + -167438530, -167465007, -167489913, -167513247, -167535006, -167555189, + -167573796, -167590824, -167606274, -167620142, -167632428, -167643130, + -167652248, -167659780, -167665725, -167670081, -167672848, -167674024, + -167673608, -167671598, -167667994, -167662795, -167655999, -167647605, + -167637612, -167626019, -167612825, -167598029, -167581630, -167563627, + -167544018, -167522803, -167499981, -167475550, -167449511, -167421861, + -167392600, -167361727, -167329241, -167295141, -167259427, -167222097, + -167183150, -167142587, -167100405, -167056604, -167011184, -166964143, + -166915481, -166865197, -166813290, -166759760, -166704606, -166647826, + -166589422, -166529391, -166467733, -166404448, -166339534, -166272992, + -166204821, -166135020, -166063588, -165990526, -165915831, -165839505, + -165761547, -165681955, -165600730, -165517871, -165433377, -165347249, + -165259485, -165170086, -165079051, -164986379, -164892071, -164796126, + -164698543, -164599322, -164498464, -164395967, -164291832, -164186058, + -164078644, -163969592, -163858900, -163746568, -163632597, -163516986, + -163399734, -163280842, -163160310, -163038138, -162914324, -162788871, + -162661776, -162533041, -162402665, -162270648, -162136991, -162001693, + -161864754, -161726174, -161585954, -161444094, -161300593, -161155452, + -161008670, -160860249, -160710188, -160558487, -160405147, -160250167, + -160093549, -159935291, -159775395, -159613861, -159450689, -159285879, + -159119431, -158951347, -158781626, -158610268, -158437275, -158262646, + -158086381, -157908482, -157728948, -157547781, -157364980, -157180547, + -156994480, -156806782, -156617453, -156426492, -156233902, -156039681, + -155843832, -155646353, -155447248, -155246514, -155044154, -154840169, + -154634557, -154427322, -154218462, -154007980, -153795875, -153582148, + -153366801, -153149833, -152931247, -152711042, -152489219, -152265780, + -152040724, -151814054, -151585770, -151355873, -151124363, -150891242, + -150656511, -150420171, -150182222, -149942666, -149701504, -149458736, + -149214365, -148968390, -148720813, -148471635, -148220858, -147968482, + -147714508, -147458938, -147201773, -146943014, -146682662, -146420719, + -146157185, -145892063, -145625353, -145357056, -145087174, -144815709, + -144542661, -144268032, -143991823, -143714036, -143434671, -143153732, + -142871218, -142587132, -142301474, -142014247, -141725451, -141435089, + -141143162, -140849671, -140554618, -140258005, -139959832, -139660103, + -139358818, -139055978, -138751586, -138445644, -138138153, -137829114, + -137518529, -137206401, -136892731, -136577520, -136260770, -135942484, + -135622663, -135301308, -134978423, -134654007, -134328064, -134000596, + -133671603, -133341089, -133009055, -132675502, -132340434, -132003851, + -131665756, -131326151, -130985038, -130642420, -130298297, -129952672, + -129605547, -129256925, -128906807, -128555195, -128202093, -127847501, + -127491422, -127133858, -126774812, -126414285, -126052280, -125688800, + -125323845, -124957420, -124589525, -124220164, -123849339, -123477051, + -123103304, -122728099, -122351440, -121973328, -121593766, -121212757, + -120830302, -120446405, -120061067, -119674292, -119286082, -118896439, + -118505366, -118112865, -117718939, -117323591, -116926824, -116528639, + -116129039, -115728028, -115325607, -114921780, -114516549, -114109917, + -113701887, -113292460, -112881641, -112469432, -112055836, -111640855, + -111224492, -110806750, -110387633, -109967142, -109545280, -109122052, + -108697459, -108271504, -107844190, -107415521, -106985499, -106554127, + -106121409, -105687346, -105251943, -104815203, -104377127, -103937720, + -103496984, -103054923, -102611540, -102166837, -101720818, -101273487, + -100824846, -100374898, -99923646, -99471095, -99017247, -98562105, + -98105672, -97647953, -97188949, -96728665, -96267104, -95804268, + -95340163, -94874789, -94408152, -93940255, -93471100, -93000692, + -92529033, -92056128, -91581979, -91106591, -90629965, -90152107, + -89673020, -89192707, -88711171, -88228417, -87744447, -87259266, + -86772876, -86285282, -85796488, -85306496, -84815310, -84322935, + -83829373, -83334629, -82838707, -82341609, -81843339, -81343902, + -80843302, -80341541, -79838624, -79334554, -78829336, -78322972, + -77815468, -77306827, -76797052, -76286148, -75774119, -75260967, + -74746698, -74231316, -73714823, -73197225, -72678525, -72158727, + -71637835, -71115853, -70592785, -70068635, -69543408, -69017107, + -68489736, -67961300, -67431803, -66901248, -66369640, -65836983, + -65303281, -64768538, -64232759, -63695947, -63158107, -62619244, + -62079361, -61538462, -60996552, -60453635, -59909716, -59364798, + -58818887, -58271985, -57724099, -57175231, -56625387, -56074570, + -55522785, -54970037, -54416330, -53861668, -53306056, -52749498, + -52191999, -51633563, -51074194, -50513898, -49952678, -49390539, + -48827486, -48263523, -47698654, -47132885, -46566220, -45998664, + -45430220, -44860894, -44290691, -43719614, -43147669, -42574860, + -42001192, -41426669, -40851297, -40275080, -39698022, -39120129, + -38541405, -37961855, -37381483, -36800295, -36218295, -35635488, + -35051879, -34467473, -33882274, -33296287, -32709518, -32121970, + -31533649, -30944560, -30354708, -29764097, -29172733, -28580620, + -27987763, -27394168, -26799839, -26204781, -25608999, -25012498, + -24415284, -23817360, -23218733, -22619407, -22019388, -21418679, + -20817287, -20215217, -19612473, -19009060, -18404985, -17800251, + -17194864, -16588829, -15982152, -15374836, -14766889, -14158314, + -13549117, -12939303, -12328877, -11717845, -11106212, -10493982, + -9881162, -9267756, -8653770, -8039209, -7424078, -6808382, -6192128, + -5575319, -4957962, -4340062, -3721624, -3102653, -2483155, -1863136, + -1242600, -621552, 0, 622053, 1244601, 1867638, 2491160, 3115160, + 3739634, 4364575, 4989979, 5615839, 6242150, 6868908, 7496106, 8123739, + 8751801, 9380286, 10009191, 10638508, 11268232, 11898358, 12528880, + 13159793, 13791090, 14422767, 15054818, 15687237, 16320019, 16953158, + 17586648, 18220484, 18854660, 19489170, 20124010, 20759172, 21394652, + 22030444, 22666542, 23302940, 23939634, 24576616, 25213882, 25851425, + 26489240, 27127322, 27765664, 28404260, 29043106, 29682194, 30321521, + 30961078, 31600862, 32240866, 32881084, 33521511, 34162140, 34802966, + 35443983, 36085186, 36726568, 37368123, 38009847, 38651732, 39293773, + 39935964, 40578300, 41220774, 41863381, 42506114, 43148968, 43791937, + 44435015, 45078196, 45721474, 46364843, 47008298, 47651832, 48295439, + 48939114, 49582851, 50226643, 50870484, 51514370, 52158293, 52802248, + 53446228, 54090229, 54734243, 55378265, 56022288, 56666308, 57310317, + 57954310, 58598281, 59242223, 59886131, 60529999, 61173821, 61817590, + 62461300, 63104946, 63748522, 64392021, 65035437, 65678765, 66321997, + 66965129, 67608154, 68251066, 68893858, 69536526, 70179062, 70821461, + 71463716, 72105822, 72747772, 73389560, 74031180, 74672626, 75313892, + 75954971, 76595859, 77236547, 77877031, 78517304, 79157360, 79797193, + 80436797, 81076165, 81715292, 82354171, 82992796, 83631161, 84269260, + 84907086, 85544634, 86181898, 86818870, 87455545, 88091918, 88727980, + 89363727, 89999153, 90634250, 91269014, 91903436, 92537513, 93171237, + 93804601, 94437601, 95070229, 95702480, 96334347, 96965824, 97596906, + 98227584, 98857855, 99487710, 100117145, 100746152, 101374726, + 102002860, 102630549, 103257785, 103884564, 104510878, 105136721, + 105762087, 106386970, 107011364, 107635262, 108258659, 108881547, + 109503922, 110125775, 110747103, 111367897, 111988152, 112607862, + 113227020, 113845620, 114463657, 115081123, 115698013, 116314320, + 116930038, 117545161, 118159682, 118773596, 119386896, 119999577, + 120611630, 121223052, 121833835, 122443972, 123053459, 123662289, + 124270454, 124877950, 125484770, 126090908, 126696358, 127301112, + 127905166, 128508513, 129111147, 129713061, 130314249, 130914706, + 131514424, 132113399, 132711622, 133309089, 133905793, 134501729, + 135096888, 135691267, 136284858, 136877655, 137469652, 138060842, + 138651221, 139240781, 139829516, 140417420, 141004487, 141590712, + 142176086, 142760605, 143344263, 143927052, 144508968, 145090003, + 145670152, 146249409, 146827767, 147405220, 147981762, 148557388, + 149132090, 149705863, 150278700, 150850597, 151421545, 151991540, + 152560575, 153128644, 153695741, 154261859, 154826994, 155391138, + 155954286, 156516431, 157077568, 157637690, 158196792, 158754866, + 159311908, 159867911, 160422869, 160976776, 161529626, 162081413, + 162632131, 163181774, 163730335, 164277809, 164824191, 165369473, + 165913649, 166456715, 166998663, 167539489, 168079185, 168617745, + 169155165, 169691438, 170226557, 170760518, 171293314, 171824938, + 172355386, 172884651, 173412728, 173939609, 174465290, 174989765, + 175513027, 176035072, 176555891, 177075481, 177593835, 178110947, + 178626812, 179141423, 179654774, 180166860, 180677675, 181187214, + 181695469, 182202436, 182708109, 183212481, 183715547, 184217302, + 184717739, 185216853, 185714637, 186211087, 186706196, 187199958, + 187692369, 188183421, 188673110, 189161429, 189648374, 190133938, + 190618115, 191100900, 191582287, 192062271, 192540845, 193018005, + 193493744, 193968057, 194440939, 194912383, 195382383, 195850936, + 196318034, 196783672, 197247845, 197710546, 198171772, 198631515, + 199089770, 199546533, 200001796, 200455555, 200907805, 201358539, + 201807752, 202255439, 202701595, 203146213, 203589288, 204030816, + 204470789, 204909204, 205346055, 205781335, 206215040, 206647165, + 207077703, 207506650, 207934001, 208359749, 208783890, 209206418, + 209627328, 210046614, 210464272, 210880295, 211294680, 211707419, + 212118509, 212527944, 212935718, 213341827, 213746265, 214149027, + 214550107, 214949502, 215347204, 215743210, 216137514, 216530111, + 216920996, 217310163, 217697608, 218083325, 218467310, 218849557, + 219230061, 219608818, 219985821, 220361067, 220734550, 221106265, + 221476206, 221844370, 222210751, 222575344, 222938145, 223299147, + 223658347, 224015739, 224371319, 224725081, 225077022, 225427134, + 225775415, 226121859, 226466462, 226809218, 227150122, 227489171, + 227826359, 228161681, 228495133, 228826709, 229156406, 229484218, + 229810141, 230134170, 230456300, 230776527, 231094846, 231411252, + 231725742, 232038309, 232348950, 232657660, 232964434, 233269268, + 233572158, 233873098, 234172085, 234469113, 234764179, 235057277, + 235348404, 235637555, 235924725, 236209910, 236493106, 236774308, + 237053512, 237330714, 237605909, 237879092, 238150260, 238419408, + 238686532, 238951628, 239214691, 239475718, 239734703, 239991642, + 240246533, 240499369, 240750148, 240998864, 241245515, 241490095, + 241732600, 241973028, 242211372, 242447630, 242681797, 242913869, + 243143842, 243371713, 243597477, 243821130, 244042668, 244262087, + 244479384, 244694555, 244907595, 245118500, 245327268, 245533893, + 245738373, 245940702, 246140879, 246338898, 246534756, 246728449, + 246919973, 247109326, 247296502, 247481499, 247664312, 247844939, + 248023374, 248199616, 248373659, 248545501, 248715138, 248882567, + 249047783, 249210784, 249371565, 249530124, 249686456, 249840559, + 249992429, 250142063, 250289456, 250434607, 250577511, 250718164, + 250856565, 250992708, 251126592, 251258213, 251387567, 251514651, + 251639462, 251761997, 251882253, 252000226, 252115914, 252229312, + 252340418, 252449230, 252555743, 252659954, 252761862, 252861462, + 252958751, 253053727, 253146387, 253236728, 253324746, 253410438, + 253493803, 253574837, 253653536, 253729899, 253803922, 253875603, + 253944938, 254011926, 254076563, 254138846, 254198773, 254256341, + 254311547, 254364389, 254414864, 254462969, 254508702, 254552060, + 254593041, 254631642, 254667860, 254701693, 254733139, 254762195, + 254788858, 254813126, 254834997, 254854468, 254871538, 254886202, + 254898460, 254908309, 254915746, 254920769, 254923376, 254923565, + 254921334, 254916680, 254909600, 254900094, 254888159, 254873792, + 254856991, 254837756, 254816082, 254791969, 254765414, 254736415, + 254704971, 254671079, 254634737, 254595943, 254554697, 254510994, + 254464835, 254416216, 254365137, 254311594, 254255587, 254197114, + 254136173, 254072762, 254006879, 253938524, 253867693, 253794386, + 253718601, 253640336, 253559590, 253476361, 253390647, 253302448, + 253211761, 253118585, 253022919, 252924761, 252824110, 252720964, + 252615322, 252507183, 252396545, 252283407, 252167768, 252049626, + 251928981, 251805830, 251680173, 251552009, 251421336, 251288153, + 251152459, 251014254, 250873535, 250730302, 250584555, 250436290, + 250285509, 250132210, 249976391, 249818053, 249657194, 249493812, + 249327909, 249159481, 248988530, 248815053, 248639050, 248460521, + 248279464, 248095879, 247909765, 247721122, 247529949, 247336245, + 247140010, 246941242, 246739943, 246536110, 246329744, 246120843, + 245909409, 245695439, 245478934, 245259893, 245038316, 244814202, + 244587552, 244358364, 244126639, 243892377, 243655576, 243416237, + 243174359, 242929944, 242682989, 242433495, 242181463, 241926891, + 241669780, 241410130, 241147941, 240883212, 240615944, 240346138, + 240073792, 239798906, 239521483, 239241520, 238959018, 238673979, + 238386401, 238096285, 237803631, 237508439, 237210711, 236910446, + 236607644, 236302305, 235994432, 235684022, 235371078, 235055599, + 234737586, 234417040, 234093960, 233768348, 233440204, 233109529, + 232776323, 232440587, 232102322, 231761528, 231418205, 231072356, + 230723980, 230373078, 230019651, 229663700, 229305226, 228944229, + 228580711, 228214672, 227846113, 227475036, 227101440, 226725328, + 226346701, 225965558, 225581902, 225195733, 224807053, 224415863, + 224022164, 223625956, 223227243, 222826023, 222422300, 222016073, + 221607345, 221196117, 220782389, 220366165, 219947444, 219526228, + 219102519, 218676319, 218247628, 217816448, 217382781, 216946628, + 216507991, 216066872, 215623272, 215177193, 214728636, 214277604, + 213824097, 213368118, 212909669, 212448751, 211985366, 211519515, + 211051202, 210580427, 210107193, 209631502, 209153355, 208672754, + 208189702, 207704201, 207216252, 206725858, 206233021, 205737742, + 205240025, 204739871, 204237282, 203732261, 203224810, 202714931, + 202202626, 201687899, 201170750, 200651183, 200129200, 199604803, + 199077994, 198548777, 198017154, 197483127, 196946698, 196407871, + 195866647, 195323030, 194777022, 194228626, 193677844, 193124679, + 192569133, 192011211, 191450913, 190888244, 190323205, 189755800, + 189186032, 188613903, 188039416, 187462575, 186883382, 186301840, + 185717952, 185131722, 184543151, 183952244, 183359004, 182763433, + 182165534, 181565312, 180962768, 180357907, 179750731, 179141244, + 178529449, 177915349, 177298948, 176680248, 176059254, 175435969, + 174810396, 174182539, 173552400, 172919984, 172285295, 171648335, + 171009108, 170367617, 169723867, 169077861, 168429603, 167779096, + 167126344, 166471351, 165814120, 165154656, 164492961, 163829041, + 163162898, 162494537, 161823961, 161151174, 160476181, 159798985, + 159119590, 158438000, 157754220, 157068253, 156380103, 155689775, + 154997272, 154302599, 153605760, 152906759, 152205600, 151502287, + 150796826, 150089219, 149379472, 148667588, 147953572, 147237429, + 146519162, 145798777, 145076277, 144351667, 143624951, 142896135, + 142165222, 141432218, 140697126, 139959951, 139220698, 138479372, + 137735977, 136990518, 136242999, 135493426, 134741803, 133988134, + 133232426, 132474681, 131714907, 130953106, 130189284, 129423447, + 128655598, 127885743, 127113887, 126340035, 125564192, 124786363, + 124006552, 123224766, 122441009, 121655286, 120867603, 120077964, + 119286376, 118492842, 117697369, 116899961, 116100624, 115299364, + 114496184, 113691092, 112884092, 112075190, 111264391, 110451700, + 109637123, 108820666, 108002333, 107182132, 106360066, 105536142, + 104710365, 103882741, 103053275, 102221974, 101388842, 100553886, + 99717111, 98878523, 98038128, 97195931, 96351939, 95506157, 94658591, + 93809247, 92958130, 92105248, 91250605, 90394207, 89536061, 88676173, + 87814549, 86951194, 86086114, 85219317, 84350807, 83480592, 82608677, + 81735068, 80859771, 79982794, 79104141, 78223820, 77341836, 76458196, + 75572906, 74685972, 73797401, 72907200, 72015374, 71121930, 70226874, + 69330213, 68431954, 67532102, 66630665, 65727649, 64823060, 63916906, + 63009192, 62099925, 61189112, 60276760, 59362875, 58447463, 57530533, + 56612090, 55692141, 54770693, 53847753, 52923327, 51997423, 51070047, + 50141206, 49210907, 48279157, 47345963, 46411332, 45475270, 44537786, + 43598885, 42658575, 41716863, 40773756, 39829261, 38883385, 37936135, + 36987519, 36037543, 35086216, 34133543, 33179532, 32224191, 31267527, + 30309547, 29350258, 28389667, 27427783, 26464612, 25500161, 24534439, + 23567452, 22599208, 21629714, 20658979, 19687008, 18713811, 17739393, + 16763764, 15786930, 14808899, 13829678, 12849276, 11867700, 10884957, + 9901055, 8916002, 7929806, 6942474, 5954014, 4964433, 3973740, 2981943, + 1989048, 995064, 0, -996138, -1993342, -2991603, -3990914, -4991267, + -5992654, -6995066, -7998497, -9002937, -10008380, -11014816, + -12022238, -13030638, -14040007, -15050338, -16061623, -17073853, + -18087020, -19101116, -20116133, -21132063, -22148897, -23166627, + -24185246, -25204744, -26225113, -27246346, -28268434, -29291368, + -30315140, -31339743, -32365166, -33391403, -34418445, -35446283, + -36474908, -37504313, -38534489, -39565428, -40597120, -41629558, + -42662733, -43696636, -44731259, -45766594, -46802631, -47839362, + -48876778, -49914872, -50953633, -51993054, -53033126, -54073841, + -55115188, -56157161, -57199749, -58242945, -59286739, -60331123, + -61376088, -62421625, -63467725, -64514380, -65561581, -66609318, + -67657583, -68706367, -69755662, -70805457, -71855745, -72906517, + -73957762, -75009473, -76061641, -77114256, -78167309, -79220792, + -80274696, -81329010, -82383727, -83438837, -84494331, -85550200, + -86606436, -87663027, -88719967, -89777245, -90834852, -91892780, + -92951018, -94009558, -95068391, -96127507, -97186897, -98246552, + -99306463, -100366620, -101427014, -102487635, -103548476, -104609525, + -105670774, -106732213, -107793833, -108855625, -109917580, -110979687, + -112041938, -113104323, -114166832, -115229457, -116292188, -117355015, + -118417929, -119480920, -120543980, -121607097, -122670264, -123733470, + -124796706, -125859962, -126923229, -127986497, -129049756, -130112998, + -131176212, -132239389, -133302520, -134365594, -135428601, -136491534, + -137554380, -138617132, -139679780, -140742312, -141804721, -142866996, + -143929128, -144991107, -146052922, -147114565, -148176026, -149237294, + -150298361, -151359216, -152419850, -153480252, -154540413, -155600324, + -156659973, -157719353, -158778452, -159837260, -160895769, -161953968, + -163011847, -164069397, -165126607, -166183468, -167239969, -168296102, + -169351855, -170407219, -171462185, -172516741, -173570879, -174624587, + -175677858, -176730679, -177783042, -178834936, -179886352, -180937278, + -181987707, -183037626, -184087028, -185135900, -186184234, -187232019, + -188279245, -189325903, -190371981, -191417471, -192462362, -193506643, + -194550306, -195593340, -196635734, -197677479, -198718564, -199758980, + -200798716, -201837762, -202876109, -203913745, -204950661, -205986847, + -207022293, -208056987, -209090922, -210124085, -211156467, -212188058, + -213218847, -214248825, -215277982, -216306306, -217333788, -218360418, + -219386185, -220411080, -221435092, -222458210, -223480426, -224501727, + -225522105, -226541549, -227560049, -228577594, -229594175, -230609781, + -231624401, -232638027, -233650646, -234662250, -235672827, -236682368, + -237690863, -238698300, -239704670, -240709963, -241714168, -242717276, + -243719275, -244720155, -245719906, -246718519, -247715982, -248712285, + -249707419, -250701372, -251694134, -252685696, -253676047, -254665176, + -255653074, -256639729, -257625133, -258609273, -259592141, -260573726, + -261554017, -262533004, -263510677, -264487026, -265462040, -266435709, + -267408022, -268378970, -269348542, -270316728, -271283517, -272248899, + -273212864, -274175402, -275136501, -276096153, -277054346, -278011071, + -278966316, -279920072, -280872329, -281823075, -282772301, -283719997, + -284666152, -285610755, -286553797, -287495267, -288435156, -289373452, + -290310145, -291245225, -292178682, -293110505, -294040685, -294969210, + -295896071, -296821258, -297744759, -298666565, -299586666, -300505051, + -301421709, -302336632, -303249807, -304161226, -305070878, -305978752, + -306884838, -307789127, -308691607, -309592269, -310491103, -311388097, + -312283242, -313176528, -314067944, -314957481, -315845127, -316730873, + -317614708, -318496623, -319376607, -320254649, -321130740, -322004870, + -322877028, -323747204, -324615388, -325481569, -326345738, -327207885, + -328067998, -328926069, -329782086, -330636040, -331487921, -332337718, + -333185422, -334031021, -334874507, -335715868, -336555095, -337392178, + -338227107, -339059870, -339890460, -340718864, -341545074, -342369079, + -343190869, -344010434, -344827764, -345642849, -346455678, -347266243, + -348074532, -348880536, -349684245, -350485648, -351284736, -352081499, + -352875927, -353668009, -354457737, -355245099, -356030085, -356812687, + -357592894, -358370696, -359146083, -359919045, -360689572, -361457655, + -362223283, -362986447, -363747136, -364505341, -365261052, -366014260, + -366764953, -367513123, -368258760, -369001853, -369742393, -370480370, + -371215775, -371948597, -372678827, -373406455, -374131471, -374853866, + -375573630, -376290752, -377005224, -377717036, -378426177, -379132639, + -379836411, -380537484, -381235849, -381931494, -382624412, -383314592, + -384002025, -384686701, -385368610, -386047743, -386724090, -387397643, + -388068390, -388736323, -389401432, -390063708, -390723140, -391379721, + -392033439, -392684286, -393332252, -393977328, -394619504, -395258771, + -395895120, -396528540, -397159023, -397786559, -398411139, -399032754, + -399651393, -400267049, -400879711, -401489370, -402096017, -402699643, + -403300238, -403897793, -404492299, -405083746, -405672126, -406257430, + -406839647, -407418769, -407994787, -408567691, -409137472, -409704122, + -410267631, -410827990, -411385190, -411939222, -412490077, -413037745, + -413582218, -414123487, -414661543, -415196377, -415727979, -416256341, + -416781455, -417303310, -417821898, -418337210, -418849238, -419357972, + -419863404, -420365525, -420864325, -421359797, -421851931, -422340718, + -422826151, -423308219, -423786915, -424262229, -424734154, -425202679, + -425667798, -426129500, -426587777, -427042622, -427494024, -427941976, + -428386469, -428827494, -429265043, -429699107, -430129679, -430556749, + -430980308, -431400349, -431816864, -432229842, -432639277, -433045160, + -433447483, -433846236, -434241412, -434633003, -435021000, -435405395, + -435786180, -436163346, -436536885, -436906790, -437273051, -437635661, + -437994611, -438349894, -438701501, -439049424, -439393655, -439734187, + -440071010, -440404117, -440733501, -441059152, -441381063, -441699227, + -442013635, -442324279, -442631151, -442934244, -443233549, -443529059, + -443820767, -444108663, -444392742, -444672993, -444949411, -445221987, + -445490714, -445755583, -446016588, -446273721, -446526973, -446776338, + -447021808, -447263375, -447501032, -447734771, -447964585, -448190467, + -448412408, -448630401, -448844440, -449054517, -449260623, -449462753, + -449660898, -449855052, -450045206, -450231355, -450413490, -450591604, + -450765691, -450935742, -451101752, -451263712, -451421615, -451575456, + -451725225, -451870917, -452012525, -452150041, -452283458, -452412770, + -452537969, -452659049, -452776003, -452888824, -452997505, -453102039, + -453202419, -453298639, -453390692, -453478572, -453562270, -453641782, + -453717100, -453788217, -453855127, -453917824, -453976300, -454030550, + -454080567, -454126343, -454167873, -454205151, -454238170, -454266923, + -454291404, -454311607, -454327525, -454339153, -454346483, -454349511, + -454348228, -454342630, -454332709, -454318461, -454299878, -454276955, + -454249685, -454218063, -454182082, -454141737, -454097021, -454047928, + -453994454, -453936590, -453874333, -453807675, -453736612, -453661136, + -453581244, -453496927, -453408182, -453315003, -453217382, -453115316, + -453008798, -452897823, -452782384, -452662478, -452538097, -452409237, + -452275892, -452138057, -451995726, -451848893, -451697554, -451541703, + -451381335, -451216445, -451047026, -450873075, -450694585, -450511552, + -450323970, -450131835, -449935140, -449733882, -449528055, -449317654, + -449102674, -448883110, -448658957, -448430210, -448196864, -447958915, + -447716358, -447469187, -447217399, -446960987, -446699948, -446434277, + -446163969, -445889020, -445609425, -445325179, -445036277, -444742716, + -444444491, -444141597, -443834029, -443521784, -443204857, -442883244, + -442556940, -442225941, -441890243, -441549841, -441204731, -440854909, + -440500372, -440141114, -439777131, -439408420, -439034977, -438656797, + -438273877, -437886212, -437493799, -437096633, -436694711, -436288029, + -435876584, -435460370, -435039386, -434613626, -434183087, -433747765, + -433307658, -432862761, -432413070, -431958582, -431499294, -431035202, + -430566303, -430092593, -429614068, -429130726, -428642563, -428149575, + -427651760, -427149114, -426641634, -426129317, -425612159, -425090157, + -424563309, -424031611, -423495060, -422953654, -422407388, -421856261, + -421300269, -420739409, -420173679, -419603076, -419027596, -418447237, + -417861997, -417271872, -416676861, -416076959, -415472166, -414862477, + -414247891, -413628405, -413004016, -412374722, -411740521, -411101410, + -410457387, -409808449, -409154594, -408495821, -407832125, -407163507, + -406489962, -405811489, -405128087, -404439752, -403746483, -403048277, + -402345133, -401637049, -400924023, -400206053, -399483137, -398755273, + -398022459, -397284694, -396541975, -395794302, -395041672, -394284084, + -393521536, -392754027, -391981555, -391204118, -390421715, -389634345, + -388842006, -388044696, -387242415, -386435161, -385622932, -384805728, + -383983547, -383156388, -382324250, -381487132, -380645032, -379797949, + -378945883, -378088833, -377226797, -376359774, -375487764, -374610766, + -373728778, -372841801, -371949833, -371052873, -370150921, -369243976, + -368332038, -367415105, -366493178, -365566255, -364634336, -363697422, + -362755510, -361808601, -360856694, -359899790, -358937887, -357970985, + -356999085, -356022185, -355040287, -354053388, -353061490, -352064593, + -351062696, -350055799, -349043902, -348027005, -347005109, -345978213, + -344946318, -343909423, -342867530, -341820637, -340768746, -339711857, + -338649970, -337583085, -336511203, -335434325, -334352450, -333265579, + -332173713, -331076853, -329974998, -328868150, -327756309, -326639476, + -325517652, -324390837, -323259033, -322122239, -320980458, -319833689, + -318681934, -317525194, -316363470, -315196762, -314025072, -312848401, + -311666751, -310480121, -309288514, -308091931, -306890373, -305683841, + -304472336, -303255861, -302034415, -300808002, -299576622, -298340277, + -297098968, -295852697, -294601466, -293345276, -292084128, -290818025, + -289546969, -288270960, -286990002, -285704095, -284413241, -283117443, + -281816703, -280511022, -279200402, -277884846, -276564356, -275238933, + -273908580, -272573299, -271233092, -269887962, -268537910, -267182940, + -265823052, -264458251, -263088538, -261713915, -260334386, -258949952, + -257560617, -256166382, -254767251, -253363226, -251954310, -250540505, + -249121814, -247698241, -246269787, -244836456, -243398250, -241955173, + -240507228, -239054417, -237596744, -236134211, -234666822, -233194579, + -231717487, -230235548, -228748765, -227257141, -225760681, -224259387, + -222753263, -221242311, -219726536, -218205941, -216680530, -215150305, + -213615271, -212075431, -210530789, -208981348, -207427112, -205868085, + -204304271, -202735673, -201162296, -199584143, -198001217, -196413524, + -194821067, -193223849, -191621876, -190015151, -188403677, -186787461, + -185166504, -183540813, -181910390, -180275241, -178635369, -176990779, + -175341475, -173687462, -172028743, -170365325, -168697210, -167024404, + -165346912, -163664737, -161977884, -160286359, -158590165, -156889308, + -155183793, -153473623, -151758805, -150039342, -148315240, -146586504, + -144853138, -143115148, -141372539, -139625316, -137873484, -136117048, + -134356012, -132590384, -130820167, -129045367, -127265989, -125482039, + -123693522, -121900444, -120102809, -118300623, -116493892, -114682622, + -112866817, -111046484, -109221628, -107392255, -105558371, -103719981, + -101877091, -100029706, -98177833, -96321478, -94460646, -92595344, + -90725577, -88851351, -86972673, -85089548, -83201982, -81309983, + -79413554, -77512704, -75607439, -73697763, -71783685, -69865209, + -67942343, -66015093, -64083465, -62147465, -60207101, -58262379, + -56313304, -54359885, -52402127, -50440037, -48473622, -46502888, + -44527842, -42548492, -40564843, -38576903, -36584678, -34588176, + -32587403, -30582366, -28573073, -26559529, -24541744, -22519722, + -20493472, -18463001, -16428316, -14389424, -12346332, -10299048, + -8247579, -6191932, -4132115, -2068135, 0, 2072283, 4148707, 6229264, + 8313947, 10402747, 12495658, 14592671, 16693779, 18798974, 20908249, + 23021595, 25139005, 27260471, 29385985, 31515539, 33649126, 35786737, + 37928364, 40074000, 42223636, 44377264, 46534876, 48696464, 50862019, + 53031534, 55205001, 57382410, 59563755, 61749025, 63938214, 66131312, + 68328312, 70529204, 72733981, 74942633, 77155153, 79371531, 81591760, + 83815830, 86043733, 88275460, 90511002, 92750351, 94993498, 97240434, + 99491150, 101745638, 104003888, 106265892, 108531640, 110801124, + 113074335, 115351264, 117631900, 119916237, 122204263, 124495971, + 126791351, 129090394, 131393090, 133699430, 136009405, 138323006, + 140640224, 142961048, 145285470, 147613479, 149945068, 152280225, + 154618942, 156961209, 159307016, 161656355, 164009214, 166365585, + 168725458, 171088822, 173455670, 175825989, 178199772, 180577007, + 182957686, 185341798, 187729333, 190120281, 192514633, 194912378, + 197313507, 199718008, 202125873, 204537091, 206951653, 209369546, + 211790763, 214215292, 216643123, 219074246, 221508651, 223946326, + 226387263, 228831451, 231278878, 233729536, 236183412, 238640498, + 241100782, 243564253, 246030902, 248500717, 250973689, 253449805, + 255929057, 258411432, 260896921, 263385513, 265877196, 268371960, + 270869795, 273370689, 275874631, 278381611, 280891618, 283404640, + 285920667, 288439688, 290961692, 293486667, 296014604, 298545489, + 301079313, 303616065, 306155732, 308698305, 311243771, 313792120, + 316343340, 318897420, 321454348, 324014114, 326576706, 329142112, + 331710321, 334281322, 336855103, 339431653, 342010961, 344593014, + 347177801, 349765310, 352355531, 354948451, 357544059, 360142343, + 362743291, 365346892, 367953133, 370562004, 373173492, 375787586, + 378404273, 381023542, 383645382, 386269779, 388896722, 391526200, + 394158200, 396792710, 399429719, 402069213, 404711182, 407355613, + 410002494, 412651813, 415303557, 417957715, 420614275, 423273223, + 425934549, 428598239, 431264281, 433932664, 436603375, 439276401, + 441951730, 444629350, 447309248, 449991412, 452675830, 455362488, + 458051376, 460742479, 463435786, 466131283, 468828960, 471528802, + 474230797, 476934933, 479641196, 482349576, 485060057, 487772629, + 490487278, 493203991, 495922756, 498643560, 501366390, 504091233, + 506818077, 509546908, 512277714, 515010482, 517745198, 520481851, + 523220427, 525960913, 528703295, 531447562, 534193700, 536941696, + 539691537, 542443209, 545196700, 547951997, 550709087, 553467955, + 556228590, 558990978, 561755105, 564520959, 567288527, 570057794, + 572828748, 575601376, 578375663, 581151598, 583929166, 586708354, + 589489149, 592271537, 595055505, 597841039, 600628127, 603416754, + 606206907, 608998573, 611791738, 614586389, 617382511, 620180092, + 622979118, 625779575, 628581450, 631384729, 634189399, 636995445, + 639802854, 642611613, 645421708, 648233124, 651045849, 653859868, + 656675168, 659491736, 662309556, 665128616, 667948901, 670770399, + 673593094, 676416973, 679242022, 682068228, 684895576, 687724053, + 690553644, 693384336, 696216115, 699048966, 701882876, 704717831, + 707553817, 710390819, 713228824, 716067817, 718907785, 721748713, + 724590588, 727433395, 730277121, 733121750, 735967269, 738813664, + 741660921, 744509025, 747357962, 750207719, 753058280, 755909631, + 758761760, 761614650, 764468288, 767322660, 770177751, 773033547, + 775890034, 778747197, 781605023, 784463496, 787322602, 790182328, + 793042658, 795903579, 798765076, 801627134, 804489739, 807352877, + 810216534, 813080694, 815945344, 818810468, 821676053, 824542084, + 827408547, 830275427, 833142709, 836010379, 838878423, 841746825, + 844615572, 847484649, 850354042, 853223735, 856093714, 858963965, + 861834472, 864705223, 867576201, 870447392, 873318781, 876190355, + 879062098, 881933996, 884806033, 887678196, 890550469, 893422839, + 896295290, 899167807, 902040376, 904912983, 907785612, 910658248, + 913530878, 916403486, 919276057, 922148578, 925021032, 927893406, + 930765684, 933637853, 936509896, 939381799, 942253548, 945125127, + 947996522, 950867719, 953738701, 956609455, 959479966, 962350218, + 965220197, 968089889, 970959277, 973828348, 976697087, 979565478, + 982433508, 985301160, 988168420, 991035274, 993901706, 996767702, + 999633246, 1002498324, 1005362921, 1008227022, 1011090612, 1013953676, + 1016816200, 1019678167, 1022539565, 1025400377, 1028260588, 1031120185, + 1033979151, 1036837472, 1039695133, 1042552119, 1045408415, 1048264007, + 1051118878, 1053973015, 1056826403, 1059679025, 1062530869, 1065381918, + 1068232157, 1071081573, 1073930149, 1076777870, 1079624723, 1082470692, + 1085315761, 1088159917, 1091003143, 1093845426, 1096686750, 1099527100, + 1102366461, 1105204819, 1108042158, 1110878463, 1113713720, 1116547913, + 1119381028, 1122213049, 1125043962, 1127873752, 1130702403, 1133529902, + 1136356232, 1139181379, 1142005328, 1144828063, 1147649571, 1150469837, + 1153288844, 1156106578, 1158923025, 1161738170, 1164551996, 1167364490, + 1170175637, 1172985422, 1175793829, 1178600844, 1181406452, 1184210637, + 1187013386, 1189814683, 1192614513, 1195412862, 1198209714, 1201005055, + 1203798869, 1206591142, 1209381858, 1212171004, 1214958564, 1217744523, + 1220528866, 1223311579, 1226092646, 1228872053, 1231649785, 1234425827, + 1237200164, 1239972782, 1242743665, 1245512798, 1248280168, 1251045758, + 1253809555, 1256571543, 1259331707, 1262090033, 1264846506, 1267601112, + 1270353834, 1273104660, 1275853573, 1278600559, 1281345603, 1284088691, + 1286829807, 1289568938, 1292306067, 1295041182, 1297774266, 1300505305, + 1303234285, 1305961190, 1308686006, 1311408719, 1314129313, 1316847774, + 1319564087, 1322278238, 1324990211, 1327699993, 1330407569, 1333112923, + 1335816042, 1338516911, 1341215515, 1343911839, 1346605870, 1349297591, + 1351986990, 1354674051, 1357358759, 1360041101, 1362721061, 1365398625, + 1368073779, 1370746508, 1373416797, 1376084633, 1378750000, 1381412884, + 1384073270, 1386731145, 1389386494, 1392039302, 1394689554, 1397337237, + 1399982336, 1402624837, 1405264725, 1407901986, 1410536606, 1413168569, + 1415797863, 1418424472, 1421048382, 1423669579, 1426288049, 1428903777, + 1431516749, 1434126950, 1436734368, 1439338986, 1441940792, 1444539770, + 1447135907, 1449729189, 1452319601, 1454907129, 1457491759, 1460073476, + 1462652268, 1465228119, 1467801015, 1470370943, 1472937888, 1475501836, + 1478062774, 1480620687, 1483175561, 1485727381, 1488276136, 1490821809, + 1493364387, 1495903857, 1498440204, 1500973414, 1503503474, 1506030369, + 1508554086, 1511074610, 1513591929, 1516106027, 1518616892, 1521124509, + 1523628865, 1526129946, 1528627738, 1531122227, 1533613400, 1536101243, + 1538585742, 1541066883, 1543544653, 1546019038, 1548490025, 1550957600, + 1553421749, 1555882458, 1558339715, 1560793505, 1563243816, 1565690632, + 1568133942, 1570573731, 1573009986, 1575442693, 1577871840, 1580297412, + 1582719396, 1585137779, 1587552548, 1589963688, 1592371188, 1594775032, + 1597175209, 1599571705, 1601964506, 1604353599, 1606738972, 1609120610, + 1611498500, 1613872631, 1616242987, 1618609557, 1620972326, 1623331282, + 1625686413, 1628037703, 1630385142, 1632728715, 1635068410, 1637404213, + 1639736112, 1642064093, 1644388145, 1646708253, 1649024405, 1651336588, + 1653644789, 1655948995, 1658249194, 1660545373, 1662837519, 1665125619, + 1667409660, 1669689630, 1671965516, 1674237305, 1676504985, 1678768543, + 1681027966, 1683283243, 1685534359, 1687781303, 1690024062, 1692262624, + 1694496976, 1696727106, 1698953001, 1701174649, 1703392037, 1705605153, + 1707813985, 1710018520, 1712218747, 1714414651, 1716606223, 1718793448, + 1720976316, 1723154813, 1725328928, 1727498648, 1729663961, 1731824856, + 1733981320, 1736133340, 1738280906, 1740424004, 1742562624, 1744696752, + 1746826377, 1748951487, 1751072071, 1753188116, 1755299610, 1757406541, + 1759508899, 1761606670, 1763699844, 1765788408, 1767872350, 1769951660, + 1772026325, 1774096334, 1776161675, 1778222336, 1780278306, 1782329574, + 1784376128, 1786417955, 1788455046, 1790487388, 1792514971, 1794537781, + 1796555810, 1798569044, 1800577472, 1802581084, 1804579868, 1806573812, + 1808562907, 1810547139, 1812526499, 1814500974, 1816470555, 1818435230, + 1820394987, 1822349816, 1824299705, 1826244645, 1828184623, 1830119629, + 1832049652, 1833974681, 1835894705, 1837809714, 1839719696, 1841624641, + 1843524538, 1845419376, 1847309145, 1849193834, 1851073432, 1852947929, + 1854817314, 1856681577, 1858540707, 1860394693, 1862243526, 1864087194, + 1865925687, 1867758996, 1869587108, 1871410015, 1873227706, 1875040170, + 1876847398, 1878649379, 1880446103, 1882237559, 1884023738, 1885804630, + 1887580224, 1889350510, 1891115479, 1892875121, 1894629424, 1896378381, + 1898121979, 1899860211, 1901593065, 1903320533, 1905042604, 1906759268, + 1908470516, 1910176338, 1911876725, 1913571666, 1915261153, 1916945175, + 1918623723, 1920296788, 1921964360, 1923626430, 1925282988, 1926934024, + 1928579530, 1930219496, 1931853913, 1933482771, 1935106061, 1936723775, + 1938335902, 1939942434, 1941543362, 1943138676, 1944728368, 1946312428, + 1947890847, 1949463617, 1951030728, 1952592172, 1954147940, 1955698022, + 1957242411, 1958781096, 1960314071, 1961841325, 1963362850, 1964878638, + 1966388680, 1967892967, 1969391490, 1970884242, 1972371214, 1973852396, + 1975327782, 1976797362, 1978261128, 1979719072, 1981171185, 1982617459, + 1984057887, 1985492459, 1986921167, 1988344004, 1989760961, 1991172031, + 1992577204, 1993976474, 1995369832, 1996757271, 1998138781, 1999514356, + 2000883988, 2002247669, 2003605391, 2004957146, 2006302927, 2007642725, + 2008976534, 2010304346, 2011626153, 2012941947, 2014251722, 2015555469, + 2016853181, 2018144851, 2019430472, 2020710035, 2021983535, 2023250962, + 2024512311, 2025767574, 2027016744, 2028259814, 2029496777, 2030727625, + 2031952351, 2033170949, 2034383412, 2035589732, 2036789904, 2037983919, + 2039171771, 2040353454, 2041528960, 2042698283, 2043861416, 2045018353, + 2046169086, 2047313610, 2048451918, 2049584003, 2050709859, 2051829480, + 2052942858, 2054049988, 2055150863, 2056245477, 2057333824, 2058415897, + 2059491691, 2060561199, 2061624414, 2062681332, 2063731946, 2064776249, + 2065814237, 2066845902, 2067871240, 2068890243, 2069902908, 2070909226, + 2071909194, 2072902804, 2073890052, 2074870932, 2075845438, 2076813564, + 2077775305, 2078730656, 2079679611, 2080622164, 2081558311, 2082488045, + 2083411362, 2084328257, 2085238723, 2086142755, 2087040350, 2087931501, + 2088816203, 2089694451, 2090566241, 2091431566, 2092290424, 2093142807, + 2093988712, 2094828133, 2095661066, 2096487506, 2097307449, 2098120889, + 2098927821, 2099728243, 2100522147, 2101309531, 2102090390, 2102864719, + 2103632513, 2104393769, 2105148481, 2105896646, 2106638260, 2107373317, + 2108101815, 2108823748, 2109539112, 2110247904, 2110950119, 2111645754, + 2112334804, 2113017265, 2113693133, 2114362406, 2115025078, 2115681145, + 2116330605, 2116973454, 2117609687, 2118239301, 2118862293, 2119478658, + 2120088394, 2120691497, 2121287963, 2121877789, 2122460972, 2123037508, + 2123607394, 2124170626, 2124727202, 2125277118, 2125820372, 2126356959, + 2126886877, 2127410122, 2127926693, 2128436585, 2128939797, 2129436324, + 2129926164, 2130409315, 2130885774, 2131355537, 2131818602, 2132274967, + 2132724629, 2133167585, 2133603833, 2134033369, 2134456193, 2134872301, + 2135281691, 2135684361, 2136080307, 2136469529, 2136852024, 2137227789, + 2137596822, 2137959122, 2138314686, 2138663512, 2139005598, 2139340943, + 2139669543, 2139991398, 2140306506, 2140614864, 2140916471, 2141211325, + 2141499425, 2141780769, 2142055355, 2142323181, 2142584247, 2142838550, + 2143086090, 2143326864, 2143560871, 2143788111, 2144008581, 2144222280, + 2144429208, 2144629363, 2144822743, 2145009348, 2145189177, 2145362229, + 2145528502, 2145687996, 2145840710, 2145986642, 2146125793, 2146258161, + 2146383745, 2146502545, 2146614560, 2146719790, 2146818233, 2146909890, + 2146994759, 2147072841, 2147144134, 2147208639, 2147266355, 2147317281, + 2147361418, 2147398765, 2147429322, 2147453089, 2147470065, 2147480251, + 2147483646, 2147480251, 2147470065, 2147453089, 2147429322, 2147398765, + 2147361418, 2147317281, 2147266355, 2147208639, 2147144134, 2147072841, + 2146994759, 2146909890, 2146818233, 2146719790, 2146614560, 2146502545, + 2146383745, 2146258161, 2146125793, 2145986642, 2145840710, 2145687996, + 2145528502, 2145362229, 2145189177, 2145009348, 2144822743, 2144629363, + 2144429208, 2144222280, 2144008581, 2143788111, 2143560871, 2143326864, + 2143086090, 2142838550, 2142584247, 2142323181, 2142055355, 2141780769, + 2141499425, 2141211325, 2140916471, 2140614864, 2140306506, 2139991398, + 2139669543, 2139340943, 2139005598, 2138663512, 2138314686, 2137959122, + 2137596822, 2137227789, 2136852024, 2136469529, 2136080307, 2135684361, + 2135281691, 2134872301, 2134456193, 2134033369, 2133603833, 2133167585, + 2132724629, 2132274967, 2131818602, 2131355537, 2130885774, 2130409315, + 2129926164, 2129436324, 2128939797, 2128436585, 2127926693, 2127410122, + 2126886877, 2126356959, 2125820372, 2125277118, 2124727202, 2124170626, + 2123607394, 2123037508, 2122460972, 2121877789, 2121287963, 2120691497, + 2120088394, 2119478658, 2118862293, 2118239301, 2117609687, 2116973454, + 2116330605, 2115681145, 2115025078, 2114362406, 2113693133, 2113017265, + 2112334804, 2111645754, 2110950119, 2110247904, 2109539112, 2108823748, + 2108101815, 2107373317, 2106638260, 2105896646, 2105148481, 2104393769, + 2103632513, 2102864719, 2102090390, 2101309531, 2100522147, 2099728243, + 2098927821, 2098120889, 2097307449, 2096487506, 2095661066, 2094828133, + 2093988712, 2093142807, 2092290424, 2091431566, 2090566241, 2089694451, + 2088816203, 2087931501, 2087040350, 2086142755, 2085238723, 2084328257, + 2083411362, 2082488045, 2081558311, 2080622164, 2079679611, 2078730656, + 2077775305, 2076813564, 2075845438, 2074870932, 2073890052, 2072902804, + 2071909194, 2070909226, 2069902908, 2068890243, 2067871240, 2066845902, + 2065814237, 2064776249, 2063731946, 2062681332, 2061624414, 2060561199, + 2059491691, 2058415897, 2057333824, 2056245477, 2055150863, 2054049988, + 2052942858, 2051829480, 2050709859, 2049584003, 2048451918, 2047313610, + 2046169086, 2045018353, 2043861416, 2042698283, 2041528960, 2040353454, + 2039171771, 2037983919, 2036789904, 2035589732, 2034383412, 2033170949, + 2031952351, 2030727625, 2029496777, 2028259814, 2027016744, 2025767574, + 2024512311, 2023250962, 2021983535, 2020710035, 2019430472, 2018144851, + 2016853181, 2015555469, 2014251722, 2012941947, 2011626153, 2010304346, + 2008976534, 2007642725, 2006302927, 2004957146, 2003605391, 2002247669, + 2000883988, 1999514356, 1998138781, 1996757271, 1995369832, 1993976474, + 1992577204, 1991172031, 1989760961, 1988344004, 1986921167, 1985492459, + 1984057887, 1982617459, 1981171185, 1979719072, 1978261128, 1976797362, + 1975327782, 1973852396, 1972371214, 1970884242, 1969391490, 1967892967, + 1966388680, 1964878638, 1963362850, 1961841325, 1960314071, 1958781096, + 1957242411, 1955698022, 1954147940, 1952592172, 1951030728, 1949463617, + 1947890847, 1946312428, 1944728368, 1943138676, 1941543362, 1939942434, + 1938335902, 1936723775, 1935106061, 1933482771, 1931853913, 1930219496, + 1928579530, 1926934024, 1925282988, 1923626430, 1921964360, 1920296788, + 1918623723, 1916945175, 1915261153, 1913571666, 1911876725, 1910176338, + 1908470516, 1906759268, 1905042604, 1903320533, 1901593065, 1899860211, + 1898121979, 1896378381, 1894629424, 1892875121, 1891115479, 1889350510, + 1887580224, 1885804630, 1884023738, 1882237559, 1880446103, 1878649379, + 1876847398, 1875040170, 1873227706, 1871410015, 1869587108, 1867758996, + 1865925687, 1864087194, 1862243526, 1860394693, 1858540707, 1856681577, + 1854817314, 1852947929, 1851073432, 1849193834, 1847309145, 1845419376, + 1843524538, 1841624641, 1839719696, 1837809714, 1835894705, 1833974681, + 1832049652, 1830119629, 1828184623, 1826244645, 1824299705, 1822349816, + 1820394987, 1818435230, 1816470555, 1814500974, 1812526499, 1810547139, + 1808562907, 1806573812, 1804579868, 1802581084, 1800577472, 1798569044, + 1796555810, 1794537781, 1792514971, 1790487388, 1788455046, 1786417955, + 1784376128, 1782329574, 1780278306, 1778222336, 1776161675, 1774096334, + 1772026325, 1769951660, 1767872350, 1765788408, 1763699844, 1761606670, + 1759508899, 1757406541, 1755299610, 1753188116, 1751072071, 1748951487, + 1746826377, 1744696752, 1742562624, 1740424004, 1738280906, 1736133340, + 1733981320, 1731824856, 1729663961, 1727498648, 1725328928, 1723154813, + 1720976316, 1718793448, 1716606223, 1714414651, 1712218747, 1710018520, + 1707813985, 1705605153, 1703392037, 1701174649, 1698953001, 1696727106, + 1694496976, 1692262624, 1690024062, 1687781303, 1685534359, 1683283243, + 1681027966, 1678768543, 1676504985, 1674237305, 1671965516, 1669689630, + 1667409660, 1665125619, 1662837519, 1660545373, 1658249194, 1655948995, + 1653644789, 1651336588, 1649024405, 1646708253, 1644388145, 1642064093, + 1639736112, 1637404213, 1635068410, 1632728715, 1630385142, 1628037703, + 1625686413, 1623331282, 1620972326, 1618609557, 1616242987, 1613872631, + 1611498500, 1609120610, 1606738972, 1604353599, 1601964506, 1599571705, + 1597175209, 1594775032, 1592371188, 1589963688, 1587552548, 1585137779, + 1582719396, 1580297412, 1577871840, 1575442693, 1573009986, 1570573731, + 1568133942, 1565690632, 1563243816, 1560793505, 1558339715, 1555882458, + 1553421749, 1550957600, 1548490025, 1546019038, 1543544653, 1541066883, + 1538585742, 1536101243, 1533613400, 1531122227, 1528627738, 1526129946, + 1523628865, 1521124509, 1518616892, 1516106027, 1513591929, 1511074610, + 1508554086, 1506030369, 1503503474, 1500973414, 1498440204, 1495903857, + 1493364387, 1490821809, 1488276136, 1485727381, 1483175561, 1480620687, + 1478062774, 1475501836, 1472937888, 1470370943, 1467801015, 1465228119, + 1462652268, 1460073476, 1457491759, 1454907129, 1452319601, 1449729189, + 1447135907, 1444539770, 1441940792, 1439338986, 1436734368, 1434126950, + 1431516749, 1428903777, 1426288049, 1423669579, 1421048382, 1418424472, + 1415797863, 1413168569, 1410536606, 1407901986, 1405264725, 1402624837, + 1399982336, 1397337237, 1394689554, 1392039302, 1389386494, 1386731145, + 1384073270, 1381412884, 1378750000, 1376084633, 1373416797, 1370746508, + 1368073779, 1365398625, 1362721061, 1360041101, 1357358759, 1354674051, + 1351986990, 1349297591, 1346605870, 1343911839, 1341215515, 1338516911, + 1335816042, 1333112923, 1330407569, 1327699993, 1324990211, 1322278238, + 1319564087, 1316847774, 1314129313, 1311408719, 1308686006, 1305961190, + 1303234285, 1300505305, 1297774266, 1295041182, 1292306067, 1289568938, + 1286829807, 1284088691, 1281345603, 1278600559, 1275853573, 1273104660, + 1270353834, 1267601112, 1264846506, 1262090033, 1259331707, 1256571543, + 1253809555, 1251045758, 1248280168, 1245512798, 1242743665, 1239972782, + 1237200164, 1234425827, 1231649785, 1228872053, 1226092646, 1223311579, + 1220528866, 1217744523, 1214958564, 1212171004, 1209381858, 1206591142, + 1203798869, 1201005055, 1198209714, 1195412862, 1192614513, 1189814683, + 1187013386, 1184210637, 1181406452, 1178600844, 1175793829, 1172985422, + 1170175637, 1167364490, 1164551996, 1161738170, 1158923025, 1156106578, + 1153288844, 1150469837, 1147649571, 1144828063, 1142005328, 1139181379, + 1136356232, 1133529902, 1130702403, 1127873752, 1125043962, 1122213049, + 1119381028, 1116547913, 1113713720, 1110878463, 1108042158, 1105204819, + 1102366461, 1099527100, 1096686750, 1093845426, 1091003143, 1088159917, + 1085315761, 1082470692, 1079624723, 1076777870, 1073930149, 1071081573, + 1068232157, 1065381918, 1062530869, 1059679025, 1056826403, 1053973015, + 1051118878, 1048264007, 1045408415, 1042552119, 1039695133, 1036837472, + 1033979151, 1031120185, 1028260588, 1025400377, 1022539565, 1019678167, + 1016816200, 1013953676, 1011090612, 1008227022, 1005362921, 1002498324, + 999633246, 996767702, 993901706, 991035274, 988168420, 985301160, + 982433508, 979565478, 976697087, 973828348, 970959277, 968089889, + 965220197, 962350218, 959479966, 956609455, 953738701, 950867719, + 947996522, 945125127, 942253548, 939381799, 936509896, 933637853, + 930765684, 927893406, 925021032, 922148578, 919276057, 916403486, + 913530878, 910658248, 907785612, 904912983, 902040376, 899167807, + 896295290, 893422839, 890550469, 887678196, 884806033, 881933996, + 879062098, 876190355, 873318781, 870447392, 867576201, 864705223, + 861834472, 858963965, 856093714, 853223735, 850354042, 847484649, + 844615572, 841746825, 838878423, 836010379, 833142709, 830275427, + 827408547, 824542084, 821676053, 818810468, 815945344, 813080694, + 810216534, 807352877, 804489739, 801627134, 798765076, 795903579, + 793042658, 790182328, 787322602, 784463496, 781605023, 778747197, + 775890034, 773033547, 770177751, 767322660, 764468288, 761614650, + 758761760, 755909631, 753058280, 750207719, 747357962, 744509025, + 741660921, 738813664, 735967269, 733121750, 730277121, 727433395, + 724590588, 721748713, 718907785, 716067817, 713228824, 710390819, + 707553817, 704717831, 701882876, 699048966, 696216115, 693384336, + 690553644, 687724053, 684895576, 682068228, 679242022, 676416973, + 673593094, 670770399, 667948901, 665128616, 662309556, 659491736, + 656675168, 653859868, 651045849, 648233124, 645421708, 642611613, + 639802854, 636995445, 634189399, 631384729, 628581450, 625779575, + 622979118, 620180092, 617382511, 614586389, 611791738, 608998573, + 606206907, 603416754, 600628127, 597841039, 595055505, 592271537, + 589489149, 586708354, 583929166, 581151598, 578375663, 575601376, + 572828748, 570057794, 567288527, 564520959, 561755105, 558990978, + 556228590, 553467955, 550709087, 547951997, 545196700, 542443209, + 539691537, 536941696, 534193700, 531447562, 528703295, 525960913, + 523220427, 520481851, 517745198, 515010482, 512277714, 509546908, + 506818077, 504091233, 501366390, 498643560, 495922756, 493203991, + 490487278, 487772629, 485060057, 482349576, 479641196, 476934933, + 474230797, 471528802, 468828960, 466131283, 463435786, 460742479, + 458051376, 455362488, 452675830, 449991412, 447309248, 444629350, + 441951730, 439276401, 436603375, 433932664, 431264281, 428598239, + 425934549, 423273223, 420614275, 417957715, 415303557, 412651813, + 410002494, 407355613, 404711182, 402069213, 399429719, 396792710, + 394158200, 391526200, 388896722, 386269779, 383645382, 381023542, + 378404273, 375787586, 373173492, 370562004, 367953133, 365346892, + 362743291, 360142343, 357544059, 354948451, 352355531, 349765310, + 347177801, 344593014, 342010961, 339431653, 336855103, 334281322, + 331710321, 329142112, 326576706, 324014114, 321454348, 318897420, + 316343340, 313792120, 311243771, 308698305, 306155732, 303616065, + 301079313, 298545489, 296014604, 293486667, 290961692, 288439688, + 285920667, 283404640, 280891618, 278381611, 275874631, 273370689, + 270869795, 268371960, 265877196, 263385513, 260896921, 258411432, + 255929057, 253449805, 250973689, 248500717, 246030902, 243564253, + 241100782, 238640498, 236183412, 233729536, 231278878, 228831451, + 226387263, 223946326, 221508651, 219074246, 216643123, 214215292, + 211790763, 209369546, 206951653, 204537091, 202125873, 199718008, + 197313507, 194912378, 192514633, 190120281, 187729333, 185341798, + 182957686, 180577007, 178199772, 175825989, 173455670, 171088822, + 168725458, 166365585, 164009214, 161656355, 159307016, 156961209, + 154618942, 152280225, 149945068, 147613479, 145285470, 142961048, + 140640224, 138323006, 136009405, 133699430, 131393090, 129090394, + 126791351, 124495971, 122204263, 119916237, 117631900, 115351264, + 113074335, 110801124, 108531640, 106265892, 104003888, 101745638, + 99491150, 97240434, 94993498, 92750351, 90511002, 88275460, 86043733, + 83815830, 81591760, 79371531, 77155153, 74942633, 72733981, 70529204, + 68328312, 66131312, 63938214, 61749025, 59563755, 57382410, 55205001, + 53031534, 50862019, 48696464, 46534876, 44377264, 42223636, 40074000, + 37928364, 35786737, 33649126, 31515539, 29385985, 27260471, 25139005, + 23021595, 20908249, 18798974, 16693779, 14592671, 12495658, 10402747, + 8313947, 6229264, 4148707, 2072283, 0, -2068135, -4132115, -6191932, + -8247579, -10299048, -12346332, -14389424, -16428316, -18463001, + -20493472, -22519722, -24541744, -26559529, -28573073, -30582366, + -32587403, -34588176, -36584678, -38576903, -40564843, -42548492, + -44527842, -46502888, -48473622, -50440037, -52402127, -54359885, + -56313304, -58262379, -60207101, -62147465, -64083465, -66015093, + -67942343, -69865209, -71783685, -73697763, -75607439, -77512704, + -79413554, -81309983, -83201982, -85089548, -86972673, -88851351, + -90725577, -92595344, -94460646, -96321478, -98177833, -100029706, + -101877091, -103719981, -105558371, -107392255, -109221628, -111046484, + -112866817, -114682622, -116493892, -118300623, -120102809, -121900444, + -123693522, -125482039, -127265989, -129045367, -130820167, -132590384, + -134356012, -136117048, -137873484, -139625316, -141372539, -143115148, + -144853138, -146586504, -148315240, -150039342, -151758805, -153473623, + -155183793, -156889308, -158590165, -160286359, -161977884, -163664737, + -165346912, -167024404, -168697210, -170365325, -172028743, -173687462, + -175341475, -176990779, -178635369, -180275241, -181910390, -183540813, + -185166504, -186787461, -188403677, -190015151, -191621876, -193223849, + -194821067, -196413524, -198001217, -199584143, -201162296, -202735673, + -204304271, -205868085, -207427112, -208981348, -210530789, -212075431, + -213615271, -215150305, -216680530, -218205941, -219726536, -221242311, + -222753263, -224259387, -225760681, -227257141, -228748765, -230235548, + -231717487, -233194579, -234666822, -236134211, -237596744, -239054417, + -240507228, -241955173, -243398250, -244836456, -246269787, -247698241, + -249121814, -250540505, -251954310, -253363226, -254767251, -256166382, + -257560617, -258949952, -260334386, -261713915, -263088538, -264458251, + -265823052, -267182940, -268537910, -269887962, -271233092, -272573299, + -273908580, -275238933, -276564356, -277884846, -279200402, -280511022, + -281816703, -283117443, -284413241, -285704095, -286990002, -288270960, + -289546969, -290818025, -292084128, -293345276, -294601466, -295852697, + -297098968, -298340277, -299576622, -300808002, -302034415, -303255861, + -304472336, -305683841, -306890373, -308091931, -309288514, -310480121, + -311666751, -312848401, -314025072, -315196762, -316363470, -317525194, + -318681934, -319833689, -320980458, -322122239, -323259033, -324390837, + -325517652, -326639476, -327756309, -328868150, -329974998, -331076853, + -332173713, -333265579, -334352450, -335434325, -336511203, -337583085, + -338649970, -339711857, -340768746, -341820637, -342867530, -343909423, + -344946318, -345978213, -347005109, -348027005, -349043902, -350055799, + -351062696, -352064593, -353061490, -354053388, -355040287, -356022185, + -356999085, -357970985, -358937887, -359899790, -360856694, -361808601, + -362755510, -363697422, -364634336, -365566255, -366493178, -367415105, + -368332038, -369243976, -370150921, -371052873, -371949833, -372841801, + -373728778, -374610766, -375487764, -376359774, -377226797, -378088833, + -378945883, -379797949, -380645032, -381487132, -382324250, -383156388, + -383983547, -384805728, -385622932, -386435161, -387242415, -388044696, + -388842006, -389634345, -390421715, -391204118, -391981555, -392754027, + -393521536, -394284084, -395041672, -395794302, -396541975, -397284694, + -398022459, -398755273, -399483137, -400206053, -400924023, -401637049, + -402345133, -403048277, -403746483, -404439752, -405128087, -405811489, + -406489962, -407163507, -407832125, -408495821, -409154594, -409808449, + -410457387, -411101410, -411740521, -412374722, -413004016, -413628405, + -414247891, -414862477, -415472166, -416076959, -416676861, -417271872, + -417861997, -418447237, -419027596, -419603076, -420173679, -420739409, + -421300269, -421856261, -422407388, -422953654, -423495060, -424031611, + -424563309, -425090157, -425612159, -426129317, -426641634, -427149114, + -427651760, -428149575, -428642563, -429130726, -429614068, -430092593, + -430566303, -431035202, -431499294, -431958582, -432413070, -432862761, + -433307658, -433747765, -434183087, -434613626, -435039386, -435460370, + -435876584, -436288029, -436694711, -437096633, -437493799, -437886212, + -438273877, -438656797, -439034977, -439408420, -439777131, -440141114, + -440500372, -440854909, -441204731, -441549841, -441890243, -442225941, + -442556940, -442883244, -443204857, -443521784, -443834029, -444141597, + -444444491, -444742716, -445036277, -445325179, -445609425, -445889020, + -446163969, -446434277, -446699948, -446960987, -447217399, -447469187, + -447716358, -447958915, -448196864, -448430210, -448658957, -448883110, + -449102674, -449317654, -449528055, -449733882, -449935140, -450131835, + -450323970, -450511552, -450694585, -450873075, -451047026, -451216445, + -451381335, -451541703, -451697554, -451848893, -451995726, -452138057, + -452275892, -452409237, -452538097, -452662478, -452782384, -452897823, + -453008798, -453115316, -453217382, -453315003, -453408182, -453496927, + -453581244, -453661136, -453736612, -453807675, -453874333, -453936590, + -453994454, -454047928, -454097021, -454141737, -454182082, -454218063, + -454249685, -454276955, -454299878, -454318461, -454332709, -454342630, + -454348228, -454349511, -454346483, -454339153, -454327525, -454311607, + -454291404, -454266923, -454238170, -454205151, -454167873, -454126343, + -454080567, -454030550, -453976300, -453917824, -453855127, -453788217, + -453717100, -453641782, -453562270, -453478572, -453390692, -453298639, + -453202419, -453102039, -452997505, -452888824, -452776003, -452659049, + -452537969, -452412770, -452283458, -452150041, -452012525, -451870917, + -451725225, -451575456, -451421615, -451263712, -451101752, -450935742, + -450765691, -450591604, -450413490, -450231355, -450045206, -449855052, + -449660898, -449462753, -449260623, -449054517, -448844440, -448630401, + -448412408, -448190467, -447964585, -447734771, -447501032, -447263375, + -447021808, -446776338, -446526973, -446273721, -446016588, -445755583, + -445490714, -445221987, -444949411, -444672993, -444392742, -444108663, + -443820767, -443529059, -443233549, -442934244, -442631151, -442324279, + -442013635, -441699227, -441381063, -441059152, -440733501, -440404117, + -440071010, -439734187, -439393655, -439049424, -438701501, -438349894, + -437994611, -437635661, -437273051, -436906790, -436536885, -436163346, + -435786180, -435405395, -435021000, -434633003, -434241412, -433846236, + -433447483, -433045160, -432639277, -432229842, -431816864, -431400349, + -430980308, -430556749, -430129679, -429699107, -429265043, -428827494, + -428386469, -427941976, -427494024, -427042622, -426587777, -426129500, + -425667798, -425202679, -424734154, -424262229, -423786915, -423308219, + -422826151, -422340718, -421851931, -421359797, -420864325, -420365525, + -419863404, -419357972, -418849238, -418337210, -417821898, -417303310, + -416781455, -416256341, -415727979, -415196377, -414661543, -414123487, + -413582218, -413037745, -412490077, -411939222, -411385190, -410827990, + -410267631, -409704122, -409137472, -408567691, -407994787, -407418769, + -406839647, -406257430, -405672126, -405083746, -404492299, -403897793, + -403300238, -402699643, -402096017, -401489370, -400879711, -400267049, + -399651393, -399032754, -398411139, -397786559, -397159023, -396528540, + -395895120, -395258771, -394619504, -393977328, -393332252, -392684286, + -392033439, -391379721, -390723140, -390063708, -389401432, -388736323, + -388068390, -387397643, -386724090, -386047743, -385368610, -384686701, + -384002025, -383314592, -382624412, -381931494, -381235849, -380537484, + -379836411, -379132639, -378426177, -377717036, -377005224, -376290752, + -375573630, -374853866, -374131471, -373406455, -372678827, -371948597, + -371215775, -370480370, -369742393, -369001853, -368258760, -367513123, + -366764953, -366014260, -365261052, -364505341, -363747136, -362986447, + -362223283, -361457655, -360689572, -359919045, -359146083, -358370696, + -357592894, -356812687, -356030085, -355245099, -354457737, -353668009, + -352875927, -352081499, -351284736, -350485648, -349684245, -348880536, + -348074532, -347266243, -346455678, -345642849, -344827764, -344010434, + -343190869, -342369079, -341545074, -340718864, -339890460, -339059870, + -338227107, -337392178, -336555095, -335715868, -334874507, -334031021, + -333185422, -332337718, -331487921, -330636040, -329782086, -328926069, + -328067998, -327207885, -326345738, -325481569, -324615388, -323747204, + -322877028, -322004870, -321130740, -320254649, -319376607, -318496623, + -317614708, -316730873, -315845127, -314957481, -314067944, -313176528, + -312283242, -311388097, -310491103, -309592269, -308691607, -307789127, + -306884838, -305978752, -305070878, -304161226, -303249807, -302336632, + -301421709, -300505051, -299586666, -298666565, -297744759, -296821258, + -295896071, -294969210, -294040685, -293110505, -292178682, -291245225, + -290310145, -289373452, -288435156, -287495267, -286553797, -285610755, + -284666152, -283719997, -282772301, -281823075, -280872329, -279920072, + -278966316, -278011071, -277054346, -276096153, -275136501, -274175402, + -273212864, -272248899, -271283517, -270316728, -269348542, -268378970, + -267408022, -266435709, -265462040, -264487026, -263510677, -262533004, + -261554017, -260573726, -259592141, -258609273, -257625133, -256639729, + -255653074, -254665176, -253676047, -252685696, -251694134, -250701372, + -249707419, -248712285, -247715982, -246718519, -245719906, -244720155, + -243719275, -242717276, -241714168, -240709963, -239704670, -238698300, + -237690863, -236682368, -235672827, -234662250, -233650646, -232638027, + -231624401, -230609781, -229594175, -228577594, -227560049, -226541549, + -225522105, -224501727, -223480426, -222458210, -221435092, -220411080, + -219386185, -218360418, -217333788, -216306306, -215277982, -214248825, + -213218847, -212188058, -211156467, -210124085, -209090922, -208056987, + -207022293, -205986847, -204950661, -203913745, -202876109, -201837762, + -200798716, -199758980, -198718564, -197677479, -196635734, -195593340, + -194550306, -193506643, -192462362, -191417471, -190371981, -189325903, + -188279245, -187232019, -186184234, -185135900, -184087028, -183037626, + -181987707, -180937278, -179886352, -178834936, -177783042, -176730679, + -175677858, -174624587, -173570879, -172516741, -171462185, -170407219, + -169351855, -168296102, -167239969, -166183468, -165126607, -164069397, + -163011847, -161953968, -160895769, -159837260, -158778452, -157719353, + -156659973, -155600324, -154540413, -153480252, -152419850, -151359216, + -150298361, -149237294, -148176026, -147114565, -146052922, -144991107, + -143929128, -142866996, -141804721, -140742312, -139679780, -138617132, + -137554380, -136491534, -135428601, -134365594, -133302520, -132239389, + -131176212, -130112998, -129049756, -127986497, -126923229, -125859962, + -124796706, -123733470, -122670264, -121607097, -120543980, -119480920, + -118417929, -117355015, -116292188, -115229457, -114166832, -113104323, + -112041938, -110979687, -109917580, -108855625, -107793833, -106732213, + -105670774, -104609525, -103548476, -102487635, -101427014, -100366620, + -99306463, -98246552, -97186897, -96127507, -95068391, -94009558, + -92951018, -91892780, -90834852, -89777245, -88719967, -87663027, + -86606436, -85550200, -84494331, -83438837, -82383727, -81329010, + -80274696, -79220792, -78167309, -77114256, -76061641, -75009473, + -73957762, -72906517, -71855745, -70805457, -69755662, -68706367, + -67657583, -66609318, -65561581, -64514380, -63467725, -62421625, + -61376088, -60331123, -59286739, -58242945, -57199749, -56157161, + -55115188, -54073841, -53033126, -51993054, -50953633, -49914872, + -48876778, -47839362, -46802631, -45766594, -44731259, -43696636, + -42662733, -41629558, -40597120, -39565428, -38534489, -37504313, + -36474908, -35446283, -34418445, -33391403, -32365166, -31339743, + -30315140, -29291368, -28268434, -27246346, -26225113, -25204744, + -24185246, -23166627, -22148897, -21132063, -20116133, -19101116, + -18087020, -17073853, -16061623, -15050338, -14040007, -13030638, + -12022238, -11014816, -10008380, -9002937, -7998497, -6995066, + -5992654, -4991267, -3990914, -2991603, -1993342, -996138, 0, 995064, + 1989048, 2981943, 3973740, 4964433, 5954014, 6942474, 7929806, 8916002, + 9901055, 10884957, 11867700, 12849276, 13829678, 14808899, 15786930, + 16763764, 17739393, 18713811, 19687008, 20658979, 21629714, 22599208, + 23567452, 24534439, 25500161, 26464612, 27427783, 28389667, 29350258, + 30309547, 31267527, 32224191, 33179532, 34133543, 35086216, 36037543, + 36987519, 37936135, 38883385, 39829261, 40773756, 41716863, 42658575, + 43598885, 44537786, 45475270, 46411332, 47345963, 48279157, 49210907, + 50141206, 51070047, 51997423, 52923327, 53847753, 54770693, 55692141, + 56612090, 57530533, 58447463, 59362875, 60276760, 61189112, 62099925, + 63009192, 63916906, 64823060, 65727649, 66630665, 67532102, 68431954, + 69330213, 70226874, 71121930, 72015374, 72907200, 73797401, 74685972, + 75572906, 76458196, 77341836, 78223820, 79104141, 79982794, 80859771, + 81735068, 82608677, 83480592, 84350807, 85219317, 86086114, 86951194, + 87814549, 88676173, 89536061, 90394207, 91250605, 92105248, 92958130, + 93809247, 94658591, 95506157, 96351939, 97195931, 98038128, 98878523, + 99717111, 100553886, 101388842, 102221974, 103053275, 103882741, + 104710365, 105536142, 106360066, 107182132, 108002333, 108820666, + 109637123, 110451700, 111264391, 112075190, 112884092, 113691092, + 114496184, 115299364, 116100624, 116899961, 117697369, 118492842, + 119286376, 120077964, 120867603, 121655286, 122441009, 123224766, + 124006552, 124786363, 125564192, 126340035, 127113887, 127885743, + 128655598, 129423447, 130189284, 130953106, 131714907, 132474681, + 133232426, 133988134, 134741803, 135493426, 136242999, 136990518, + 137735977, 138479372, 139220698, 139959951, 140697126, 141432218, + 142165222, 142896135, 143624951, 144351667, 145076277, 145798777, + 146519162, 147237429, 147953572, 148667588, 149379472, 150089219, + 150796826, 151502287, 152205600, 152906759, 153605760, 154302599, + 154997272, 155689775, 156380103, 157068253, 157754220, 158438000, + 159119590, 159798985, 160476181, 161151174, 161823961, 162494537, + 163162898, 163829041, 164492961, 165154656, 165814120, 166471351, + 167126344, 167779096, 168429603, 169077861, 169723867, 170367617, + 171009108, 171648335, 172285295, 172919984, 173552400, 174182539, + 174810396, 175435969, 176059254, 176680248, 177298948, 177915349, + 178529449, 179141244, 179750731, 180357907, 180962768, 181565312, + 182165534, 182763433, 183359004, 183952244, 184543151, 185131722, + 185717952, 186301840, 186883382, 187462575, 188039416, 188613903, + 189186032, 189755800, 190323205, 190888244, 191450913, 192011211, + 192569133, 193124679, 193677844, 194228626, 194777022, 195323030, + 195866647, 196407871, 196946698, 197483127, 198017154, 198548777, + 199077994, 199604803, 200129200, 200651183, 201170750, 201687899, + 202202626, 202714931, 203224810, 203732261, 204237282, 204739871, + 205240025, 205737742, 206233021, 206725858, 207216252, 207704201, + 208189702, 208672754, 209153355, 209631502, 210107193, 210580427, + 211051202, 211519515, 211985366, 212448751, 212909669, 213368118, + 213824097, 214277604, 214728636, 215177193, 215623272, 216066872, + 216507991, 216946628, 217382781, 217816448, 218247628, 218676319, + 219102519, 219526228, 219947444, 220366165, 220782389, 221196117, + 221607345, 222016073, 222422300, 222826023, 223227243, 223625956, + 224022164, 224415863, 224807053, 225195733, 225581902, 225965558, + 226346701, 226725328, 227101440, 227475036, 227846113, 228214672, + 228580711, 228944229, 229305226, 229663700, 230019651, 230373078, + 230723980, 231072356, 231418205, 231761528, 232102322, 232440587, + 232776323, 233109529, 233440204, 233768348, 234093960, 234417040, + 234737586, 235055599, 235371078, 235684022, 235994432, 236302305, + 236607644, 236910446, 237210711, 237508439, 237803631, 238096285, + 238386401, 238673979, 238959018, 239241520, 239521483, 239798906, + 240073792, 240346138, 240615944, 240883212, 241147941, 241410130, + 241669780, 241926891, 242181463, 242433495, 242682989, 242929944, + 243174359, 243416237, 243655576, 243892377, 244126639, 244358364, + 244587552, 244814202, 245038316, 245259893, 245478934, 245695439, + 245909409, 246120843, 246329744, 246536110, 246739943, 246941242, + 247140010, 247336245, 247529949, 247721122, 247909765, 248095879, + 248279464, 248460521, 248639050, 248815053, 248988530, 249159481, + 249327909, 249493812, 249657194, 249818053, 249976391, 250132210, + 250285509, 250436290, 250584555, 250730302, 250873535, 251014254, + 251152459, 251288153, 251421336, 251552009, 251680173, 251805830, + 251928981, 252049626, 252167768, 252283407, 252396545, 252507183, + 252615322, 252720964, 252824110, 252924761, 253022919, 253118585, + 253211761, 253302448, 253390647, 253476361, 253559590, 253640336, + 253718601, 253794386, 253867693, 253938524, 254006879, 254072762, + 254136173, 254197114, 254255587, 254311594, 254365137, 254416216, + 254464835, 254510994, 254554697, 254595943, 254634737, 254671079, + 254704971, 254736415, 254765414, 254791969, 254816082, 254837756, + 254856991, 254873792, 254888159, 254900094, 254909600, 254916680, + 254921334, 254923565, 254923376, 254920769, 254915746, 254908309, + 254898460, 254886202, 254871538, 254854468, 254834997, 254813126, + 254788858, 254762195, 254733139, 254701693, 254667860, 254631642, + 254593041, 254552060, 254508702, 254462969, 254414864, 254364389, + 254311547, 254256341, 254198773, 254138846, 254076563, 254011926, + 253944938, 253875603, 253803922, 253729899, 253653536, 253574837, + 253493803, 253410438, 253324746, 253236728, 253146387, 253053727, + 252958751, 252861462, 252761862, 252659954, 252555743, 252449230, + 252340418, 252229312, 252115914, 252000226, 251882253, 251761997, + 251639462, 251514651, 251387567, 251258213, 251126592, 250992708, + 250856565, 250718164, 250577511, 250434607, 250289456, 250142063, + 249992429, 249840559, 249686456, 249530124, 249371565, 249210784, + 249047783, 248882567, 248715138, 248545501, 248373659, 248199616, + 248023374, 247844939, 247664312, 247481499, 247296502, 247109326, + 246919973, 246728449, 246534756, 246338898, 246140879, 245940702, + 245738373, 245533893, 245327268, 245118500, 244907595, 244694555, + 244479384, 244262087, 244042668, 243821130, 243597477, 243371713, + 243143842, 242913869, 242681797, 242447630, 242211372, 241973028, + 241732600, 241490095, 241245515, 240998864, 240750148, 240499369, + 240246533, 239991642, 239734703, 239475718, 239214691, 238951628, + 238686532, 238419408, 238150260, 237879092, 237605909, 237330714, + 237053512, 236774308, 236493106, 236209910, 235924725, 235637555, + 235348404, 235057277, 234764179, 234469113, 234172085, 233873098, + 233572158, 233269268, 232964434, 232657660, 232348950, 232038309, + 231725742, 231411252, 231094846, 230776527, 230456300, 230134170, + 229810141, 229484218, 229156406, 228826709, 228495133, 228161681, + 227826359, 227489171, 227150122, 226809218, 226466462, 226121859, + 225775415, 225427134, 225077022, 224725081, 224371319, 224015739, + 223658347, 223299147, 222938145, 222575344, 222210751, 221844370, + 221476206, 221106265, 220734550, 220361067, 219985821, 219608818, + 219230061, 218849557, 218467310, 218083325, 217697608, 217310163, + 216920996, 216530111, 216137514, 215743210, 215347204, 214949502, + 214550107, 214149027, 213746265, 213341827, 212935718, 212527944, + 212118509, 211707419, 211294680, 210880295, 210464272, 210046614, + 209627328, 209206418, 208783890, 208359749, 207934001, 207506650, + 207077703, 206647165, 206215040, 205781335, 205346055, 204909204, + 204470789, 204030816, 203589288, 203146213, 202701595, 202255439, + 201807752, 201358539, 200907805, 200455555, 200001796, 199546533, + 199089770, 198631515, 198171772, 197710546, 197247845, 196783672, + 196318034, 195850936, 195382383, 194912383, 194440939, 193968057, + 193493744, 193018005, 192540845, 192062271, 191582287, 191100900, + 190618115, 190133938, 189648374, 189161429, 188673110, 188183421, + 187692369, 187199958, 186706196, 186211087, 185714637, 185216853, + 184717739, 184217302, 183715547, 183212481, 182708109, 182202436, + 181695469, 181187214, 180677675, 180166860, 179654774, 179141423, + 178626812, 178110947, 177593835, 177075481, 176555891, 176035072, + 175513027, 174989765, 174465290, 173939609, 173412728, 172884651, + 172355386, 171824938, 171293314, 170760518, 170226557, 169691438, + 169155165, 168617745, 168079185, 167539489, 166998663, 166456715, + 165913649, 165369473, 164824191, 164277809, 163730335, 163181774, + 162632131, 162081413, 161529626, 160976776, 160422869, 159867911, + 159311908, 158754866, 158196792, 157637690, 157077568, 156516431, + 155954286, 155391138, 154826994, 154261859, 153695741, 153128644, + 152560575, 151991540, 151421545, 150850597, 150278700, 149705863, + 149132090, 148557388, 147981762, 147405220, 146827767, 146249409, + 145670152, 145090003, 144508968, 143927052, 143344263, 142760605, + 142176086, 141590712, 141004487, 140417420, 139829516, 139240781, + 138651221, 138060842, 137469652, 136877655, 136284858, 135691267, + 135096888, 134501729, 133905793, 133309089, 132711622, 132113399, + 131514424, 130914706, 130314249, 129713061, 129111147, 128508513, + 127905166, 127301112, 126696358, 126090908, 125484770, 124877950, + 124270454, 123662289, 123053459, 122443972, 121833835, 121223052, + 120611630, 119999577, 119386896, 118773596, 118159682, 117545161, + 116930038, 116314320, 115698013, 115081123, 114463657, 113845620, + 113227020, 112607862, 111988152, 111367897, 110747103, 110125775, + 109503922, 108881547, 108258659, 107635262, 107011364, 106386970, + 105762087, 105136721, 104510878, 103884564, 103257785, 102630549, + 102002860, 101374726, 100746152, 100117145, 99487710, 98857855, + 98227584, 97596906, 96965824, 96334347, 95702480, 95070229, 94437601, + 93804601, 93171237, 92537513, 91903436, 91269014, 90634250, 89999153, + 89363727, 88727980, 88091918, 87455545, 86818870, 86181898, 85544634, + 84907086, 84269260, 83631161, 82992796, 82354171, 81715292, 81076165, + 80436797, 79797193, 79157360, 78517304, 77877031, 77236547, 76595859, + 75954971, 75313892, 74672626, 74031180, 73389560, 72747772, 72105822, + 71463716, 70821461, 70179062, 69536526, 68893858, 68251066, 67608154, + 66965129, 66321997, 65678765, 65035437, 64392021, 63748522, 63104946, + 62461300, 61817590, 61173821, 60529999, 59886131, 59242223, 58598281, + 57954310, 57310317, 56666308, 56022288, 55378265, 54734243, 54090229, + 53446228, 52802248, 52158293, 51514370, 50870484, 50226643, 49582851, + 48939114, 48295439, 47651832, 47008298, 46364843, 45721474, 45078196, + 44435015, 43791937, 43148968, 42506114, 41863381, 41220774, 40578300, + 39935964, 39293773, 38651732, 38009847, 37368123, 36726568, 36085186, + 35443983, 34802966, 34162140, 33521511, 32881084, 32240866, 31600862, + 30961078, 30321521, 29682194, 29043106, 28404260, 27765664, 27127322, + 26489240, 25851425, 25213882, 24576616, 23939634, 23302940, 22666542, + 22030444, 21394652, 20759172, 20124010, 19489170, 18854660, 18220484, + 17586648, 16953158, 16320019, 15687237, 15054818, 14422767, 13791090, + 13159793, 12528880, 11898358, 11268232, 10638508, 10009191, 9380286, + 8751801, 8123739, 7496106, 6868908, 6242150, 5615839, 4989979, 4364575, + 3739634, 3115160, 2491160, 1867638, 1244601, 622053, 0, -621552, + -1242600, -1863136, -2483155, -3102653, -3721624, -4340062, -4957962, + -5575319, -6192128, -6808382, -7424078, -8039209, -8653770, -9267756, + -9881162, -10493982, -11106212, -11717845, -12328877, -12939303, + -13549117, -14158314, -14766889, -15374836, -15982152, -16588829, + -17194864, -17800251, -18404985, -19009060, -19612473, -20215217, + -20817287, -21418679, -22019388, -22619407, -23218733, -23817360, + -24415284, -25012498, -25608999, -26204781, -26799839, -27394168, + -27987763, -28580620, -29172733, -29764097, -30354708, -30944560, + -31533649, -32121970, -32709518, -33296287, -33882274, -34467473, + -35051879, -35635488, -36218295, -36800295, -37381483, -37961855, + -38541405, -39120129, -39698022, -40275080, -40851297, -41426669, + -42001192, -42574860, -43147669, -43719614, -44290691, -44860894, + -45430220, -45998664, -46566220, -47132885, -47698654, -48263523, + -48827486, -49390539, -49952678, -50513898, -51074194, -51633563, + -52191999, -52749498, -53306056, -53861668, -54416330, -54970037, + -55522785, -56074570, -56625387, -57175231, -57724099, -58271985, + -58818887, -59364798, -59909716, -60453635, -60996552, -61538462, + -62079361, -62619244, -63158107, -63695947, -64232759, -64768538, + -65303281, -65836983, -66369640, -66901248, -67431803, -67961300, + -68489736, -69017107, -69543408, -70068635, -70592785, -71115853, + -71637835, -72158727, -72678525, -73197225, -73714823, -74231316, + -74746698, -75260967, -75774119, -76286148, -76797052, -77306827, + -77815468, -78322972, -78829336, -79334554, -79838624, -80341541, + -80843302, -81343902, -81843339, -82341609, -82838707, -83334629, + -83829373, -84322935, -84815310, -85306496, -85796488, -86285282, + -86772876, -87259266, -87744447, -88228417, -88711171, -89192707, + -89673020, -90152107, -90629965, -91106591, -91581979, -92056128, + -92529033, -93000692, -93471100, -93940255, -94408152, -94874789, + -95340163, -95804268, -96267104, -96728665, -97188949, -97647953, + -98105672, -98562105, -99017247, -99471095, -99923646, -100374898, + -100824846, -101273487, -101720818, -102166837, -102611540, -103054923, + -103496984, -103937720, -104377127, -104815203, -105251943, -105687346, + -106121409, -106554127, -106985499, -107415521, -107844190, -108271504, + -108697459, -109122052, -109545280, -109967142, -110387633, -110806750, + -111224492, -111640855, -112055836, -112469432, -112881641, -113292460, + -113701887, -114109917, -114516549, -114921780, -115325607, -115728028, + -116129039, -116528639, -116926824, -117323591, -117718939, -118112865, + -118505366, -118896439, -119286082, -119674292, -120061067, -120446405, + -120830302, -121212757, -121593766, -121973328, -122351440, -122728099, + -123103304, -123477051, -123849339, -124220164, -124589525, -124957420, + -125323845, -125688800, -126052280, -126414285, -126774812, -127133858, + -127491422, -127847501, -128202093, -128555195, -128906807, -129256925, + -129605547, -129952672, -130298297, -130642420, -130985038, -131326151, + -131665756, -132003851, -132340434, -132675502, -133009055, -133341089, + -133671603, -134000596, -134328064, -134654007, -134978423, -135301308, + -135622663, -135942484, -136260770, -136577520, -136892731, -137206401, + -137518529, -137829114, -138138153, -138445644, -138751586, -139055978, + -139358818, -139660103, -139959832, -140258005, -140554618, -140849671, + -141143162, -141435089, -141725451, -142014247, -142301474, -142587132, + -142871218, -143153732, -143434671, -143714036, -143991823, -144268032, + -144542661, -144815709, -145087174, -145357056, -145625353, -145892063, + -146157185, -146420719, -146682662, -146943014, -147201773, -147458938, + -147714508, -147968482, -148220858, -148471635, -148720813, -148968390, + -149214365, -149458736, -149701504, -149942666, -150182222, -150420171, + -150656511, -150891242, -151124363, -151355873, -151585770, -151814054, + -152040724, -152265780, -152489219, -152711042, -152931247, -153149833, + -153366801, -153582148, -153795875, -154007980, -154218462, -154427322, + -154634557, -154840169, -155044154, -155246514, -155447248, -155646353, + -155843832, -156039681, -156233902, -156426492, -156617453, -156806782, + -156994480, -157180547, -157364980, -157547781, -157728948, -157908482, + -158086381, -158262646, -158437275, -158610268, -158781626, -158951347, + -159119431, -159285879, -159450689, -159613861, -159775395, -159935291, + -160093549, -160250167, -160405147, -160558487, -160710188, -160860249, + -161008670, -161155452, -161300593, -161444094, -161585954, -161726174, + -161864754, -162001693, -162136991, -162270648, -162402665, -162533041, + -162661776, -162788871, -162914324, -163038138, -163160310, -163280842, + -163399734, -163516986, -163632597, -163746568, -163858900, -163969592, + -164078644, -164186058, -164291832, -164395967, -164498464, -164599322, + -164698543, -164796126, -164892071, -164986379, -165079051, -165170086, + -165259485, -165347249, -165433377, -165517871, -165600730, -165681955, + -165761547, -165839505, -165915831, -165990526, -166063588, -166135020, + -166204821, -166272992, -166339534, -166404448, -166467733, -166529391, + -166589422, -166647826, -166704606, -166759760, -166813290, -166865197, + -166915481, -166964143, -167011184, -167056604, -167100405, -167142587, + -167183150, -167222097, -167259427, -167295141, -167329241, -167361727, + -167392600, -167421861, -167449511, -167475550, -167499981, -167522803, + -167544018, -167563627, -167581630, -167598029, -167612825, -167626019, + -167637612, -167647605, -167655999, -167662795, -167667994, -167671598, + -167673608, -167674024, -167672848, -167670081, -167665725, -167659780, + -167652248, -167643130, -167632428, -167620142, -167606274, -167590824, + -167573796, -167555189, -167535006, -167513247, -167489913, -167465007, + -167438530, -167410483, -167380867, -167349684, -167316936, -167282623, + -167246748, -167209312, -167170316, -167129762, -167087651, -167043985, + -166998765, -166951994, -166903672, -166853801, -166802384, -166749420, + -166694913, -166638864, -166581274, -166522145, -166461479, -166399277, + -166335542, -166270274, -166203476, -166135150, -166065297, -165993918, + -165921017, -165846594, -165770652, -165693191, -165614215, -165533725, + -165451722, -165368210, -165283188, -165196661, -165108628, -165019093, + -164928058, -164835523, -164741492, -164645966, -164548947, -164450437, + -164350439, -164248954, -164145984, -164041531, -163935598, -163828187, + -163719299, -163608936, -163497102, -163383797, -163269025, -163152787, + -163035085, -162915922, -162795300, -162673220, -162549686, -162424700, + -162298263, -162170378, -162041047, -161910272, -161778057, -161644402, + -161509311, -161372785, -161234827, -161095440, -160954626, -160812386, + -160668724, -160523642, -160377142, -160229227, -160079899, -159929160, + -159777013, -159623461, -159468506, -159312150, -159154396, -158995246, + -158834703, -158672770, -158509448, -158344741, -158178651, -158011181, + -157842333, -157672110, -157500514, -157327548, -157153215, -156977517, + -156800457, -156622037, -156442261, -156261131, -156078649, -155894819, + -155709643, -155523123, -155335263, -155146065, -154955533, -154763668, + -154570473, -154375952, -154180106, -153982940, -153784455, -153584655, + -153383543, -153181120, -152977391, -152772357, -152566023, -152358390, + -152149461, -151939240, -151727730, -151514933, -151300852, -151085490, + -150868850, -150650936, -150431750, -150211295, -149989574, -149766590, + -149542346, -149316845, -149090090, -148862085, -148632832, -148402334, + -148170594, -147937616, -147703403, -147467957, -147231282, -146993381, + -146754256, -146513912, -146272351, -146029577, -145785592, -145540400, + -145294004, -145046407, -144797612, -144547623, -144296443, -144044074, + -143790521, -143535786, -143279873, -143022784, -142764524, -142505096, + -142244502, -141982746, -141719832, -141455763, -141190541, -140924171, + -140656655, -140387997, -140118201, -139847269, -139575206, -139302014, + -139027696, -138752257, -138475700, -138198028, -137919244, -137639352, + -137358355, -137076257, -136793061, -136508771, -136223390, -135936921, + -135649369, -135360736, -135071026, -134780243, -134488390, -134195470, + -133901488, -133606446, -133310348, -133013198, -132714999, -132415755, + -132115469, -131814145, -131511787, -131208398, -130903982, -130598542, + -130292082, -129984605, -129676116, -129366617, -129056113, -128744607, + -128432103, -128118604, -127804114, -127488637, -127172176, -126854735, + -126536318, -126216929, -125896571, -125575247, -125252963, -124929720, + -124605524, -124280377, -123954284, -123627248, -123299273, -122970363, + -122640522, -122309752, -121978059, -121645446, -121311917, -120977475, + -120642124, -120305868, -119968711, -119630657, -119291709, -118951872, + -118611149, -118269544, -117927061, -117583703, -117239475, -116894381, + -116548424, -116201608, -115853937, -115505415, -115156046, -114805833, + -114454781, -114102894, -113750175, -113396629, -113042259, -112687069, + -112331063, -111974245, -111616619, -111258189, -110898959, -110538933, + -110178114, -109816508, -109454117, -109090946, -108726998, -108362278, + -107996790, -107630537, -107263524, -106895754, -106527233, -106157962, + -105787948, -105417193, -105045701, -104673477, -104300525, -103926849, + -103552453, -103177340, -102801515, -102424982, -102047745, -101669808, + -101291175, -100911850, -100531837, -100151141, -99769764, -99387712, + -99004989, -98621598, -98237544, -97852830, -97467461, -97081441, + -96694774, -96307465, -95919516, -95530933, -95141719, -94751878, + -94361415, -93970334, -93578639, -93186334, -92793423, -92399910, + -92005800, -91611096, -91215802, -90819924, -90423464, -90026428, + -89628819, -89230641, -88831899, -88432596, -88032737, -87632326, + -87231368, -86829865, -86427824, -86025246, -85622138, -85218503, + -84814345, -84409668, -84004477, -83598775, -83192568, -82785858, + -82378651, -81970950, -81562760, -81154085, -80744928, -80335295, + -79925189, -79514615, -79103577, -78692079, -78280125, -77867719, + -77454866, -77041570, -76627835, -76213665, -75799064, -75384037, + -74968588, -74552721, -74136441, -73719750, -73302655, -72885158, + -72467265, -72048979, -71630304, -71211245, -70791807, -70371992, + -69951806, -69531253, -69110336, -68689061, -68267431, -67845450, + -67423123, -67000455, -66577448, -66154108, -65730439, -65306444, + -64882128, -64457496, -64032552, -63607299, -63181742, -62755885, + -62329733, -61903290, -61476559, -61049546, -60622254, -60194687, + -59766850, -59338747, -58910383, -58481761, -58052885, -57623760, + -57194391, -56764781, -56334934, -55904855, -55474548, -55044017, + -54613267, -54182301, -53751124, -53319740, -52888153, -52456368, + -52024388, -51592218, -51159862, -50727325, -50294610, -49861722, + -49428664, -48995442, -48562059, -48128519, -47694827, -47260987, + -46827003, -46392879, -45958619, -45524228, -45089710, -44655069, + -44220309, -43785435, -43350450, -42915358, -42480165, -42044874, + -41609488, -41174014, -40738453, -40302812, -39867093, -39431301, + -38995441, -38559516, -38123530, -37687488, -37251394, -36815252, + -36379066, -35942840, -35506579, -35070286, -34633966, -34197622, + -33761259, -33324882, -32888493, -32452098, -32015701, -31579304, + -31142914, -30706533, -30270166, -29833817, -29397490, -28961189, + -28524918, -28088682, -27652484, -27216329, -26780220, -26344162, + -25908158, -25472213, -25036332, -24600517, -24164773, -23729104, + -23293515, -22858008, -22422589, -21987261, -21552028, -21116895, + -20681864, -20246942, -19812131, -19377435, -18942858, -18508405, + -18074080, -17639886, -17205828, -16771909, -16338133, -15904505, + -15471029, -15037708, -14604546, -14171548, -13738717, -13306057, + -12873573, -12441267, -12009145, -11577211, -11145467, -10713918, + -10282568, -9851421, -9420481, -8989752, -8559237, -8128941, -7698867, + -7269020, -6839402, -6410019, -5980874, -5551971, -5123314, -4694906, + -4266752, -3838855, -3411219, -2983849, -2556747, -2129918, -1703366, + -1277094, -851107, -425407, 0, 425111, 849924, 1274433, 1698635, + 2122526, 2546102, 2969360, 3392296, 3814906, 4237186, 4659132, 5080742, + 5502010, 5922934, 6343509, 6763732, 7183599, 7603106, 8022251, 8441028, + 8859434, 9277466, 9695120, 10112392, 10529279, 10945777, 11361882, + 11777590, 12192899, 12607803, 13022301, 13436387, 13850059, 14263313, + 14676145, 15088551, 15500529, 15912074, 16323182, 16733851, 17144077, + 17553856, 17963184, 18372058, 18780475, 19188431, 19595922, 20002945, + 20409497, 20815573, 21221170, 21626286, 22030916, 22435056, 22838705, + 23241857, 23644509, 24046659, 24448302, 24849435, 25250055, 25650158, + 26049742, 26448801, 26847334, 27245336, 27642805, 28039736, 28436127, + 28831974, 29227274, 29622024, 30016219, 30409857, 30802935, 31195449, + 31587395, 31978771, 32369573, 32759798, 33149443, 33538504, 33926978, + 34314862, 34702152, 35088846, 35474940, 35860430, 36245314, 36629589, + 37013250, 37396296, 37778723, 38160527, 38541705, 38922255, 39302173, + 39681456, 40060101, 40438104, 40815463, 41192175, 41568235, 41943642, + 42318392, 42692483, 43065910, 43438671, 43810763, 44182183, 44552927, + 44922993, 45292378, 45661079, 46029092, 46396415, 46763044, 47128978, + 47494212, 47858743, 48222570, 48585688, 48948095, 49309789, 49670765, + 50031021, 50390555, 50749363, 51107442, 51464790, 51821404, 52177280, + 52532417, 52886810, 53240458, 53593357, 53945505, 54296899, 54647536, + 54997413, 55346527, 55694877, 56042458, 56389268, 56735305, 57080565, + 57425047, 57768746, 58111661, 58453789, 58795128, 59135673, 59475424, + 59814376, 60152528, 60489877, 60826420, 61162155, 61497079, 61831189, + 62164482, 62496957, 62828611, 63159440, 63489443, 63818617, 64146959, + 64474467, 64801139, 65126971, 65451961, 65776108, 66099407, 66421858, + 66743457, 67064201, 67384090, 67703119, 68021287, 68338591, 68655029, + 68970599, 69285297, 69599122, 69912072, 70224143, 70535334, 70845642, + 71155065, 71463601, 71771246, 72078000, 72383860, 72688823, 72992887, + 73296051, 73598310, 73899665, 74200111, 74499647, 74798271, 75095981, + 75392774, 75688649, 75983602, 76277632, 76570737, 76862915, 77154163, + 77444479, 77733862, 78022308, 78309817, 78596386, 78882013, 79166695, + 79450432, 79733220, 80015058, 80295943, 80575875, 80854850, 81132867, + 81409924, 81686018, 81961148, 82235313, 82508509, 82780736, 83051990, + 83322271, 83591576, 83859904, 84127252, 84393620, 84659004, 84923403, + 85186815, 85449239, 85710673, 85971114, 86230561, 86489013, 86746467, + 87002922, 87258376, 87512827, 87766274, 88018715, 88270147, 88520571, + 88769983, 89018382, 89265767, 89512135, 89757486, 90001817, 90245127, + 90487414, 90728677, 90968914, 91208124, 91446305, 91683455, 91919574, + 92154658, 92388708, 92621720, 92853695, 93084630, 93314524, 93543376, + 93771183, 93997945, 94223660, 94448327, 94671943, 94894509, 95116023, + 95336482, 95555886, 95774234, 95991523, 96207753, 96422923, 96637031, + 96850075, 97062055, 97272969, 97482816, 97691594, 97899303, 98105941, + 98311507, 98516000, 98719418, 98921761, 99123026, 99323214, 99522323, + 99720351, 99917297, 100113161, 100307941, 100501637, 100694246, + 100885769, 101076203, 101265548, 101453803, 101640967, 101827038, + 102012016, 102195900, 102378688, 102560380, 102740975, 102920472, + 103098869, 103276166, 103452363, 103627457, 103801448, 103974336, + 104146118, 104316796, 104486366, 104654830, 104822185, 104988432, + 105153568, 105317595, 105480509, 105642312, 105803001, 105962577, + 106121038, 106278384, 106434614, 106589728, 106743724, 106896602, + 107048361, 107199000, 107348520, 107496919, 107644196, 107790351, + 107935383, 108079293, 108222078, 108363739, 108504274, 108643684, + 108781968, 108919125, 109055155, 109190056, 109323830, 109456475, + 109587990, 109718376, 109847631, 109975755, 110102748, 110228610, + 110353340, 110476937, 110599401, 110720732, 110840929, 110959992, + 111077921, 111194715, 111310374, 111424898, 111538285, 111650537, + 111761652, 111871631, 111980473, 112088178, 112194745, 112300175, + 112404467, 112507620, 112609635, 112710512, 112810250, 112908850, + 113006310, 113102631, 113197812, 113291854, 113384757, 113476520, + 113567143, 113656626, 113744969, 113832172, 113918235, 114003158, + 114086940, 114169582, 114251085, 114331446, 114410668, 114488749, + 114565691, 114641492, 114716153, 114789674, 114862054, 114933296, + 115003397, 115072358, 115140180, 115206863, 115272406, 115336810, + 115400075, 115462201, 115523188, 115583037, 115641748, 115699321, + 115755755, 115811052, 115865212, 115918234, 115970120, 116020869, + 116070482, 116118958, 116166299, 116212505, 116257575, 116301511, + 116344312, 116385979, 116426513, 116465913, 116504180, 116541315, + 116577318, 116612189, 116645928, 116678537, 116710015, 116740364, + 116769583, 116797673, 116824635, 116850468, 116875174, 116898753, + 116921206, 116942533, 116962735, 116981811, 116999764, 117016593, + 117032299, 117046883, 117060344, 117072685, 117083905, 117094005, + 117102986, 117110849, 117117593, 117123220, 117127731, 117131126, + 117133406, 117134571, 117134623, 117133562, 117131389, 117128104, + 117123709, 117118204, 117111590, 117103867, 117095038, 117085101, + 117074059, 117061912, 117048661, 117034307, 117018851, 117002293, + 116984634, 116965876, 116946019, 116925065, 116903013, 116879865, + 116855623, 116830287, 116803857, 116776335, 116747723, 116718020, + 116687228, 116655348, 116622381, 116588328, 116553191, 116516969, + 116479664, 116441278, 116401811, 116361265, 116319640, 116276937, + 116233159, 116188305, 116142378, 116095377, 116047306, 115998163, + 115947951, 115896672, 115844325, 115790912, 115736436, 115680895, + 115624293, 115566630, 115507908, 115448127, 115387290, 115325396, + 115262448, 115198447, 115133395, 115067291, 115000139, 114931939, + 114862692, 114792400, 114721065, 114648687, 114575267, 114500809, + 114425312, 114348778, 114271209, 114192606, 114112970, 114032303, + 113950606, 113867882, 113784130, 113699353, 113613553, 113526730, + 113438886, 113350023, 113260143, 113169246, 113077334, 112984409, + 112890473, 112795527, 112699572, 112602610, 112504643, 112405672, + 112305699, 112204726, 112102754, 111999784, 111895819, 111790860, + 111684909, 111577967, 111470036, 111361118, 111251215, 111140327, + 111028457, 110915607, 110801778, 110686972, 110571190, 110454435, + 110336709, 110218012, 110098347, 109977715, 109856119, 109733559, + 109610039, 109485559, 109360122, 109233729, 109106383, 108978084, + 108848835, 108718638, 108587494, 108455406, 108322375, 108188403, + 108053493, 107917645, 107780862, 107643146, 107504499, 107364923, + 107224419, 107082989, 106940636, 106797362, 106653168, 106508056, + 106362029, 106215088, 106067235, 105918473, 105768803, 105618228, + 105466749, 105314368, 105161088, 105006911, 104851838, 104695871, + 104539014, 104381267, 104222633, 104063115, 103902713, 103741430, + 103579269, 103416231, 103252319, 103087534, 102921880, 102755357, + 102587968, 102419715, 102250601, 102080628, 101909797, 101738111, + 101565573, 101392183, 101217946, 101042862, 100866934, 100690164, + 100512555, 100334108, 100154826, 99974712, 99793767, 99611993, + 99429394, 99245971, 99061726, 98876662, 98690781, 98504086, 98316578, + 98128261, 97939135, 97749205, 97558471, 97366937, 97174604, 96981476, + 96787553, 96592840, 96397338, 96201049, 96003976, 95806121, 95607487, + 95408076, 95207890, 95006932, 94805205, 94602710, 94399450, 94195428, + 93990646, 93785106, 93578811, 93371763, 93163965, 92955420, 92746129, + 92536095, 92325321, 92113809, 91901562, 91688581, 91474871, 91260432, + 91045268, 90829382, 90612775, 90395450, 90177410, 89958657, 89739194, + 89519024, 89298148, 89076570, 88854292, 88631317, 88407646, 88183284, + 87958231, 87732492, 87506068, 87278963, 87051178, 86822716, 86593581, + 86363774, 86133298, 85902156, 85670350, 85437883, 85204758, 84970978, + 84736544, 84501460, 84265728, 84029351, 83792332, 83554673, 83316377, + 83077447, 82837885, 82597694, 82356877, 82115436, 81873374, 81630694, + 81387398, 81143490, 80898972, 80653846, 80408115, 80161783, 79914851, + 79667323, 79419202, 79170489, 78921188, 78671301, 78420832, 78169783, + 77918157, 77665956, 77413183, 77159842, 76905935, 76651464, 76396432, + 76140843, 75884699, 75628002, 75370756, 75112964, 74854628, 74595750, + 74336335, 74076384, 73815901, 73554887, 73293347, 73031283, 72768697, + 72505593, 72241974, 71977841, 71713199, 71448050, 71182396, 70916241, + 70649587, 70382438, 70114796, 69846664, 69578045, 69308941, 69039356, + 68769293, 68498754, 68227742, 67956260, 67684312, 67411899, 67139025, + 66865693, 66591905, 66317664, 66042974, 65767838, 65492257, 65216235, + 64939776, 64662881, 64385554, 64107797, 63829614, 63551008, 63271981, + 62992537, 62712677, 62432406, 62151726, 61870640, 61589152, 61307262, + 61024976, 60742296, 60459224, 60175764, 59891919, 59607691, 59323083, + 59038099, 58752741, 58467013, 58180917, 57894456, 57607633, 57320452, + 57032915, 56745024, 56456784, 56168196, 55879265, 55589992, 55300382, + 55010436, 54720158, 54429550, 54138617, 53847360, 53555783, 53263888, + 52971680, 52679159, 52386331, 52093196, 51799760, 51506024, 51211991, + 50917665, 50623048, 50328144, 50032956, 49737485, 49441736, 49145712, + 48849414, 48552848, 48256014, 47958917, 47661559, 47363943, 47066073, + 46767951, 46469580, 46170964, 45872105, 45573006, 45273670, 44974101, + 44674301, 44374273, 44074020, 43773545, 43472852, 43171943, 42870821, + 42569489, 42267951, 41966208, 41664265, 41362124, 41059788, 40757260, + 40454543, 40151641, 39848555, 39545290, 39241848, 38938232, 38634445, + 38330490, 38026370, 37722088, 37417647, 37113051, 36808301, 36503401, + 36198355, 35893164, 35587833, 35282363, 34976758, 34671021, 34365156, + 34059164, 33753049, 33446814, 33140461, 32833995, 32527417, 32220732, + 31913941, 31607047, 31300055, 30992966, 30685784, 30378511, 30071152, + 29763707, 29456182, 29148578, 28840898, 28533146, 28225324, 27917436, + 27609484, 27301471, 26993401, 26685276, 26377099, 26068873, 25760601, + 25452287, 25143932, 24835541, 24527115, 24218658, 23910173, 23601663, + 23293130, 22984578, 22676010, 22367428, 22058835, 21750235, 21441630, + 21133024, 20824418, 20515817, 20207223, 19898638, 19590067, 19281511, + 18972974, 18664458, 18355967, 18047504, 17739070, 17430670, 17122306, + 16813981, 16505698, 16197460, 15889270, 15581130, 15273043, 14965013, + 14657043, 14349134, 14041291, 13733515, 13425810, 13118179, 12810624, + 12503149, 12195755, 11888447, 11581227, 11274098, 10967063, 10660124, + 10353284, 10046547, 9739914, 9433390, 9126976, 8820676, 8514492, + 8208427, 7902485, 7596667, 7290977, 6985418, 6679992, 6374702, 6069551, + 5764542, 5459677, 5154959, 4850392, 4545978, 4241719, 3937619, 3633680, + 3329905, 3026297, 2722858, 2419592, 2116501, 1813588, 1510856, 1208307, + 905944, 603770, 301788, 0, -301590, -602981, -904170, -1205153, + -1505928, -1806493, -2106844, -2406979, -2706895, -3006589, -3306059, + -3605303, -3904316, -4203097, -4501644, -4799952, -5098020, -5395846, + -5693425, -5990756, -6287836, -6584663, -6881233, -7177544, -7473593, + -7769378, -8064897, -8360146, -8655122, -8949824, -9244249, -9538393, + -9832255, -10125832, -10419121, -10712119, -11004825, -11297235, + -11589347, -11881158, -12172666, -12463868, -12754761, -13045344, + -13335613, -13625566, -13915200, -14204513, -14493502, -14782165, + -15070500, -15358503, -15646172, -15933505, -16220499, -16507152, + -16793461, -17079423, -17365037, -17650300, -17935209, -18219761, + -18503955, -18787788, -19071257, -19354360, -19637094, -19919457, + -20201447, -20483062, -20764298, -21045153, -21325625, -21605712, + -21885410, -22164719, -22443634, -22722155, -23000278, -23278001, + -23555322, -23832238, -24108748, -24384848, -24660536, -24935810, + -25210668, -25485107, -25759125, -26032720, -26305889, -26578630, + -26850941, -27122819, -27394262, -27665268, -27935834, -28205959, + -28475639, -28744873, -29013659, -29281994, -29549875, -29817301, + -30084270, -30350779, -30616826, -30882408, -31147524, -31412171, + -31676348, -31940051, -32203279, -32466029, -32728299, -32990088, + -33251393, -33512212, -33772542, -34032381, -34291728, -34550580, + -34808936, -35066792, -35324147, -35580998, -35837345, -36093183, + -36348512, -36603330, -36857633, -37111421, -37364691, -37617440, + -37869668, -38121372, -38372549, -38623198, -38873317, -39122903, + -39371956, -39620472, -39868449, -40115886, -40362781, -40609132, + -40854936, -41100192, -41344898, -41589051, -41832650, -42075693, + -42318178, -42560103, -42801467, -43042266, -43282499, -43522165, + -43761261, -43999785, -44237736, -44475112, -44711911, -44948130, + -45183769, -45418825, -45653296, -45887181, -46120477, -46353184, + -46585298, -46816819, -47047743, -47278071, -47507799, -47736927, + -47965451, -48193371, -48420685, -48647390, -48873486, -49098970, + -49323841, -49548096, -49771735, -49994756, -50217156, -50438934, + -50660088, -50880617, -51100519, -51319793, -51538435, -51756446, + -51973823, -52190565, -52406670, -52622136, -52836962, -53051146, + -53264686, -53477581, -53689829, -53901430, -54112380, -54322678, + -54532324, -54741315, -54949650, -55157327, -55364344, -55570701, + -55776395, -55981426, -56185791, -56389489, -56592519, -56794879, + -56996567, -57197583, -57397924, -57597590, -57796578, -57994887, + -58192516, -58389464, -58585729, -58781309, -58976203, -59170410, + -59363928, -59556757, -59748893, -59940337, -60131087, -60321142, + -60510499, -60699158, -60887118, -61074376, -61260932, -61446785, + -61631933, -61816375, -62000109, -62183135, -62365450, -62547055, + -62727946, -62908124, -63087587, -63266333, -63444362, -63621672, + -63798263, -63974132, -64149278, -64323701, -64497399, -64670372, + -64842617, -65014134, -65184921, -65354978, -65524303, -65692895, + -65860753, -66027876, -66194263, -66359913, -66524824, -66688995, + -66852426, -67015116, -67177062, -67338265, -67498723, -67658435, + -67817400, -67975617, -68133086, -68289804, -68445771, -68600986, + -68755449, -68909157, -69062111, -69214309, -69365749, -69516432, + -69666357, -69815522, -69963926, -70111568, -70258449, -70404566, + -70549918, -70694506, -70838328, -70981383, -71123670, -71265189, + -71405938, -71545917, -71685125, -71823562, -71961225, -72098115, + -72234231, -72369571, -72504136, -72637924, -72770935, -72903167, + -73034621, -73165295, -73295188, -73424300, -73552631, -73680179, + -73806943, -73932924, -74058120, -74182530, -74306155, -74428993, + -74551043, -74672306, -74792780, -74912465, -75031359, -75149464, + -75266777, -75383298, -75499027, -75613963, -75728106, -75841455, + -75954009, -76065767, -76176730, -76286897, -76396267, -76504840, + -76612615, -76719591, -76825769, -76931148, -77035726, -77139504, + -77242482, -77344658, -77446033, -77546605, -77646375, -77745342, + -77843506, -77940866, -78037421, -78133172, -78228118, -78322258, + -78415593, -78508122, -78599844, -78690759, -78780867, -78870168, + -78958661, -79046345, -79133222, -79219289, -79304547, -79388996, + -79472636, -79555465, -79637484, -79718693, -79799091, -79878679, + -79957455, -80035420, -80112573, -80188914, -80264444, -80339161, + -80413066, -80486158, -80558438, -80629905, -80700558, -80770399, + -80839426, -80907640, -80975040, -81041627, -81107400, -81172358, + -81236503, -81299834, -81362351, -81424054, -81484942, -81545016, + -81604275, -81662721, -81720351, -81777168, -81833170, -81888357, + -81942730, -81996289, -82049033, -82100962, -82152078, -82202379, + -82251865, -82300538, -82348396, -82395440, -82441670, -82487087, + -82531689, -82575478, -82618453, -82660614, -82701962, -82742497, + -82782219, -82821128, -82859224, -82896507, -82932978, -82968637, + -83003483, -83037518, -83070741, -83103152, -83134752, -83165541, + -83195519, -83224687, -83253044, -83280591, -83307328, -83333256, + -83358374, -83382684, -83406184, -83428877, -83450761, -83471837, + -83492106, -83511568, -83530223, -83548071, -83565114, -83581350, + -83596782, -83611408, -83625230, -83638247, -83650460, -83661870, + -83672477, -83682282, -83691284, -83699484, -83706884, -83713482, + -83719280, -83724277, -83728476, -83731875, -83734476, -83736279, + -83737284, -83737492, -83736904, -83735520, -83733340, -83730365, + -83726596, -83722033, -83716677, -83710528, -83703586, -83695854, + -83687330, -83678016, -83667912, -83657018, -83645337, -83632867, + -83619610, -83605566, -83590736, -83575121, -83558721, -83541536, + -83523569, -83504818, -83485286, -83464972, -83443878, -83422003, + -83399349, -83375917, -83351707, -83326719, -83300956, -83274417, + -83247103, -83219014, -83190153, -83160519, -83130113, -83098936, + -83066989, -83034273, -83000788, -82966535, -82931515, -82895729, + -82859178, -82821862, -82783783, -82744941, -82705337, -82664972, + -82623847, -82581963, -82539320, -82495920, -82451763, -82406851, + -82361184, -82314763, -82267589, -82219663, -82170986, -82121559, + -82071383, -82020459, -81968787, -81916370, -81863207, -81809299, + -81754649, -81699256, -81643122, -81586248, -81528634, -81470282, + -81411193, -81351368, -81290808, -81229514, -81167487, -81104727, + -81041237, -80977018, -80912069, -80846393, -80779990, -80712862, + -80645010, -80576434, -80507136, -80437117, -80366379, -80294922, + -80222747, -80149856, -80076249, -80001929, -79926895, -79851150, + -79774694, -79697529, -79619656, -79541075, -79461789, -79381798, + -79301104, -79219708, -79137611, -79054814, -78971318, -78887126, + -78802237, -78716654, -78630377, -78543408, -78455749, -78367399, + -78278362, -78188637, -78098226, -78007131, -77915353, -77822893, + -77729753, -77635933, -77541436, -77446262, -77350413, -77253890, + -77156694, -77058828, -76960291, -76861087, -76761215, -76660677, + -76559476, -76457611, -76355085, -76251899, -76148055, -76043553, + -75938395, -75832583, -75726118, -75619001, -75511234, -75402819, + -75293756, -75184048, -75073695, -74962700, -74851063, -74738786, + -74625871, -74512319, -74398131, -74283310, -74167856, -74051771, + -73935057, -73817715, -73699746, -73581153, -73461936, -73342097, + -73221639, -73100561, -72978867, -72856556, -72733632, -72610095, + -72485948, -72361191, -72235826, -72109855, -71983280, -71856101, + -71728322, -71599942, -71470964, -71341390, -71211220, -71080458, + -70949103, -70817159, -70684626, -70551507, -70417802, -70283514, + -70148643, -70013193, -69877164, -69740559, -69603378, -69465623, + -69327297, -69188401, -69048936, -68908904, -68768307, -68627147, + -68485425, -68343144, -68200304, -68056907, -67912956, -67768452, + -67623396, -67477791, -67331638, -67184938, -67037695, -66889908, + -66741581, -66592715, -66443311, -66293372, -66142899, -65991894, + -65840358, -65688295, -65535704, -65382589, -65228950, -65074790, + -64920111, -64764914, -64609201, -64452974, -64296235, -64138986, + -63981227, -63822962, -63664192, -63504919, -63345145, -63184871, + -63024100, -62862833, -62701072, -62538819, -62376075, -62212844, + -62049126, -61884924, -61720238, -61555072, -61389428, -61223306, + -61056709, -60889638, -60722096, -60554085, -60385607, -60216662, + -60047254, -59877384, -59707054, -59536266, -59365022, -59193323, + -59021173, -58848572, -58675523, -58502027, -58328087, -58153704, + -57978880, -57803618, -57627919, -57451786, -57275219, -57098222, + -56920796, -56742943, -56564664, -56385963, -56206841, -56027300, + -55847341, -55666968, -55486181, -55304984, -55123377, -54941363, + -54758944, -54576121, -54392898, -54209275, -54025255, -53840841, + -53656033, -53470833, -53285245, -53099270, -52912909, -52726166, + -52539041, -52351537, -52163657, -51975401, -51786773, -51597774, + -51408406, -51218671, -51028571, -50838109, -50647285, -50456104, + -50264565, -50072673, -49880427, -49687832, -49494888, -49301597, + -49107963, -48913986, -48719669, -48525014, -48330023, -48134699, + -47939042, -47743056, -47546742, -47350102, -47153139, -46955855, + -46758251, -46560330, -46362093, -46163544, -45964684, -45765515, + -45566039, -45366258, -45166175, -44965791, -44765109, -44564130, + -44362857, -44161293, -43959438, -43757295, -43554867, -43352154, + -43149161, -42945888, -42742337, -42538512, -42334413, -42130043, + -41925405, -41720499, -41515329, -41309897, -41104204, -40898253, + -40692046, -40485585, -40278872, -40071909, -39864699, -39657243, + -39449544, -39241604, -39033425, -38825008, -38616357, -38407473, + -38198359, -37989016, -37779448, -37569655, -37359640, -37149405, + -36938952, -36728284, -36517403, -36306310, -36095009, -35883500, + -35671786, -35459870, -35247754, -35035438, -34822927, -34610222, + -34397325, -34184238, -33970963, -33757503, -33543859, -33330035, + -33116031, -32901851, -32687495, -32472968, -32258269, -32043403, + -31828370, -31613174, -31397816, -31182298, -30966622, -30750792, + -30534808, -30318673, -30102389, -29885959, -29669384, -29452666, + -29235808, -29018813, -28801681, -28584415, -28367018, -28149491, + -27931837, -27714058, -27496156, -27278133, -27059991, -26841733, + -26623360, -26404875, -26186280, -25967577, -25748768, -25529856, + -25310842, -25091729, -24872518, -24653213, -24433814, -24214325, + -23994747, -23775083, -23555334, -23335503, -23115593, -22895604, + -22675540, -22455402, -22235192, -22014913, -21794568, -21574157, + -21353683, -21133148, -20912555, -20691906, -20471202, -20250446, + -20029639, -19808785, -19587885, -19366942, -19145957, -18924932, + -18703871, -18482774, -18261644, -18040483, -17819294, -17598077, + -17376837, -17155574, -16934290, -16712989, -16491671, -16270340, + -16048997, -15827644, -15606283, -15384917, -15163548, -14942177, + -14720808, -14499441, -14278079, -14056725, -13835380, -13614046, + -13392726, -13171421, -12950134, -12728867, -12507622, -12286400, + -12065205, -11844038, -11622901, -11401796, -11180726, -10959692, + -10738697, -10517743, -10296831, -10075964, -9855144, -9634372, + -9413652, -9192985, -8972373, -8751818, -8531323, -8310889, -8090518, + -7870213, -7649975, -7429807, -7209710, -6989687, -6769740, -6549871, + -6330081, -6110373, -5890749, -5671211, -5451761, -5232401, -5013133, + -4793959, -4574881, -4355901, -4137021, -3918244, -3699570, -3481003, + -3262544, -3044195, -2825958, -2607836, -2389829, -2171941, -1954173, + -1736528, -1519006, -1301611, -1084343, -867206, -650202, -433331, + -216596, 0, 216456, 432771, 648941, 864966, 1080842, 1296569, 1512144, + 1727565, 1942831, 2157938, 2372886, 2587673, 2802296, 3016753, 3231043, + 3445164, 3659114, 3872890, 4086491, 4299915, 4513161, 4726225, 4939107, + 5151804, 5364314, 5576636, 5788767, 6000706, 6212451, 6424000, 6635351, + 6846502, 7057451, 7268197, 7478737, 7689070, 7899194, 8109107, 8318806, + 8528291, 8737559, 8946609, 9155438, 9364045, 9572428, 9780585, 9988514, + 10196214, 10403682, 10610917, 10817917, 11024680, 11231205, 11437489, + 11643530, 11849328, 12054880, 12260183, 12465238, 12670041, 12874591, + 13078886, 13282924, 13486704, 13690224, 13893482, 14096476, 14299205, + 14501666, 14703858, 14905780, 15107428, 15308803, 15509902, 15710723, + 15911264, 16111524, 16311502, 16511194, 16710601, 16909719, 17108547, + 17307084, 17505327, 17703276, 17900928, 18098282, 18295336, 18492088, + 18688537, 18884681, 19080518, 19276047, 19471265, 19666172, 19860766, + 20055045, 20249007, 20442651, 20635974, 20828977, 21021656, 21214010, + 21406038, 21597738, 21789108, 21980147, 22170853, 22361225, 22551260, + 22740958, 22930316, 23119334, 23308009, 23496341, 23684326, 23871965, + 24059255, 24246194, 24432782, 24619016, 24804896, 24990419, 25175584, + 25360389, 25544834, 25728916, 25912634, 26095986, 26278971, 26461587, + 26643834, 26825708, 27007210, 27188337, 27369088, 27549461, 27729455, + 27909069, 28088301, 28267149, 28445612, 28623690, 28801379, 28978679, + 29155588, 29332106, 29508229, 29683958, 29859291, 30034225, 30208761, + 30382896, 30556628, 30729958, 30902883, 31075401, 31247512, 31419214, + 31590506, 31761386, 31931853, 32101905, 32271542, 32440762, 32609563, + 32777945, 32945905, 33113443, 33280558, 33447247, 33613510, 33779345, + 33944751, 34109727, 34274271, 34438382, 34602060, 34765301, 34928107, + 35090474, 35252401, 35413889, 35574934, 35735537, 35895695, 36055408, + 36214674, 36373492, 36531861, 36689780, 36847247, 37004261, 37160821, + 37316926, 37472575, 37627766, 37782498, 37936770, 38090581, 38243930, + 38396815, 38549236, 38701191, 38852679, 39003699, 39154250, 39304330, + 39453939, 39603075, 39751738, 39899926, 40047638, 40194873, 40341630, + 40487908, 40633705, 40779021, 40923855, 41068205, 41212071, 41355451, + 41498345, 41640750, 41782667, 41924094, 42065031, 42205475, 42345427, + 42484885, 42623848, 42762315, 42900285, 43037757, 43174730, 43311204, + 43447177, 43582648, 43717616, 43852080, 43986040, 44119494, 44252441, + 44384881, 44516813, 44648235, 44779147, 44909548, 45039436, 45168812, + 45297673, 45426020, 45553851, 45681165, 45807962, 45934241, 46060000, + 46185240, 46309958, 46434154, 46557828, 46680979, 46803605, 46925706, + 47047281, 47168329, 47288849, 47408841, 47528304, 47647237, 47765639, + 47883510, 48000848, 48117653, 48233924, 48349661, 48464862, 48579527, + 48693655, 48807245, 48920297, 49032810, 49144783, 49256215, 49367107, + 49477456, 49587262, 49696525, 49805244, 49913419, 50021048, 50128130, + 50234666, 50340655, 50446096, 50550987, 50655330, 50759122, 50862364, + 50965054, 51067193, 51168779, 51269812, 51370291, 51470216, 51569586, + 51668400, 51766659, 51864360, 51961505, 52058091, 52154120, 52249589, + 52344499, 52438849, 52532638, 52625866, 52718533, 52810638, 52902180, + 52993158, 53083574, 53173425, 53262711, 53351432, 53439588, 53527178, + 53614201, 53700657, 53786546, 53871866, 53956619, 54040802, 54124417, + 54207461, 54289936, 54371840, 54453173, 54533935, 54614126, 54693744, + 54772790, 54851262, 54929162, 55006488, 55083240, 55159417, 55235020, + 55310048, 55384501, 55458377, 55531678, 55604403, 55676550, 55748121, + 55819114, 55889530, 55959368, 56028627, 56097308, 56165411, 56232934, + 56299878, 56366242, 56432027, 56497231, 56561855, 56625899, 56689361, + 56752243, 56814543, 56876262, 56937400, 56997955, 57057928, 57117319, + 57176128, 57234354, 57291997, 57349057, 57405534, 57461427, 57516737, + 57571464, 57625606, 57679165, 57732140, 57784530, 57836336, 57887558, + 57938196, 57988248, 58037716, 58086599, 58134898, 58182611, 58229739, + 58276282, 58322240, 58367613, 58412400, 58456602, 58500219, 58543250, + 58585696, 58627556, 58668831, 58709520, 58749624, 58789143, 58828075, + 58866423, 58904184, 58941361, 58977951, 59013957, 59049377, 59084212, + 59118461, 59152125, 59185204, 59217698, 59249607, 59280931, 59311670, + 59341824, 59371394, 59400379, 59428779, 59456595, 59483827, 59510475, + 59536538, 59562018, 59586914, 59611226, 59634955, 59658100, 59680662, + 59702642, 59724038, 59744852, 59765083, 59784732, 59803799, 59822284, + 59840188, 59857509, 59874250, 59890409, 59905988, 59920986, 59935404, + 59949241, 59962499, 59975176, 59987275, 59998794, 60009735, 60020097, + 60029881, 60039086, 60047714, 60055765, 60063238, 60070134, 60076454, + 60082198, 60087366, 60091958, 60095975, 60099417, 60102284, 60104577, + 60106297, 60107443, 60108015, 60108015, 60107443, 60106298, 60104582, + 60102295, 60099436, 60096007, 60092009, 60087440, 60082302, 60076596, + 60070321, 60063478, 60056067, 60048089, 60039545, 60030435, 60020758, + 60010517, 59999710, 59988340, 59976405, 59963907, 59950846, 59937223, + 59923038, 59908291, 59892983, 59877115, 59860688, 59843700, 59826154, + 59808050, 59789388, 59770168, 59750392, 59730060, 59709172, 59687729, + 59665732, 59643181, 59620076, 59596419, 59572209, 59547449, 59522137, + 59496274, 59469862, 59442901, 59415391, 59387334, 59358729, 59329577, + 59299880, 59269637, 59238849, 59207517, 59175642, 59143224, 59110264, + 59076762, 59042720, 59008138, 58973016, 58937355, 58901156, 58864420, + 58827148, 58789339, 58750995, 58712117, 58672705, 58632760, 58592282, + 58551273, 58509733, 58467663, 58425063, 58381935, 58338279, 58294096, + 58249386, 58204151, 58158391, 58112107, 58065300, 58017970, 57970118, + 57921746, 57872854, 57823442, 57773512, 57723064, 57672100, 57620619, + 57568624, 57516113, 57463090, 57409554, 57355506, 57300947, 57245877, + 57190299, 57134212, 57077618, 57020517, 56962910, 56904798, 56846182, + 56787064, 56727442, 56667320, 56606697, 56545575, 56483954, 56421835, + 56359219, 56296108, 56232501, 56168401, 56103807, 56038721, 55973144, + 55907077, 55840521, 55773476, 55705943, 55637925, 55569420, 55500432, + 55430959, 55361005, 55290568, 55219651, 55148255, 55076379, 55004027, + 54931197, 54857892, 54784113, 54709860, 54635134, 54559937, 54484269, + 54408132, 54331526, 54254453, 54176914, 54098909, 54020440, 53941508, + 53862113, 53782258, 53701942, 53621167, 53539935, 53458246, 53376100, + 53293501, 53210447, 53126942, 53042984, 52958577, 52873720, 52788415, + 52702663, 52616465, 52529823, 52442736, 52355208, 52267237, 52178827, + 52089977, 52000689, 51910965, 51820804, 51730209, 51639181, 51547720, + 51455828, 51363507, 51270756, 51177578, 51083973, 50989943, 50895488, + 50800611, 50705312, 50609592, 50513453, 50416896, 50319922, 50222531, + 50124727, 50026509, 49927878, 49828837, 49729385, 49629526, 49529259, + 49428585, 49327507, 49226025, 49124141, 49021855, 48919170, 48816086, + 48712604, 48608726, 48504453, 48399787, 48294727, 48189277, 48083437, + 47977208, 47870591, 47763589, 47656201, 47548430, 47440277, 47331743, + 47222829, 47113536, 47003866, 46893820, 46783400, 46672607, 46561441, + 46449905, 46337999, 46225726, 46113085, 46000079, 45886709, 45772977, + 45658882, 45544428, 45429615, 45314444, 45198917, 45083036, 44966800, + 44850213, 44733275, 44615987, 44498352, 44380369, 44262041, 44143370, + 44024355, 43904999, 43785303, 43665269, 43544897, 43424189, 43303147, + 43181772, 43060065, 42938028, 42815661, 42692968, 42569948, 42446603, + 42322934, 42198944, 42074633, 41950002, 41825054, 41699790, 41574210, + 41448317, 41322111, 41195595, 41068769, 40941635, 40814195, 40686449, + 40558400, 40430048, 40301396, 40172444, 40043194, 39913647, 39783805, + 39653669, 39523241, 39392522, 39261514, 39130218, 38998635, 38866767, + 38734615, 38602181, 38469466, 38336472, 38203200, 38069652, 37935829, + 37801732, 37667363, 37532723, 37397815, 37262638, 37127196, 36991489, + 36855518, 36719286, 36582793, 36446042, 36309033, 36171768, 36034249, + 35896477, 35758453, 35620180, 35481658, 35342889, 35203875, 35064616, + 34925115, 34785373, 34645391, 34505172, 34364715, 34224024, 34083099, + 33941942, 33800554, 33658938, 33517094, 33375023, 33232728, 33090211, + 32947471, 32804512, 32661334, 32517939, 32374328, 32230503, 32086466, + 31942218, 31797761, 31653096, 31508224, 31363147, 31217867, 31072385, + 30926703, 30780822, 30634743, 30488469, 30342001, 30195340, 30048487, + 29901445, 29754215, 29606799, 29459197, 29311412, 29163444, 29015296, + 28866970, 28718466, 28569786, 28420931, 28271904, 28122706, 27973337, + 27823801, 27674098, 27524230, 27374198, 27224004, 27073650, 26923137, + 26772466, 26621640, 26470659, 26319525, 26168240, 26016806, 25865223, + 25713494, 25561619, 25409601, 25257441, 25105141, 24952702, 24800125, + 24647413, 24494567, 24341587, 24188477, 24035237, 23881869, 23728375, + 23574755, 23421012, 23267147, 23113162, 22959059, 22804838, 22650501, + 22496050, 22341487, 22186813, 22032029, 21877138, 21722140, 21567037, + 21411831, 21256523, 21101115, 20945609, 20790005, 20634306, 20478514, + 20322628, 20166652, 20010586, 19854433, 19698194, 19541870, 19385462, + 19228974, 19072405, 18915758, 18759034, 18602234, 18445361, 18288415, + 18131399, 17974313, 17817160, 17659941, 17502657, 17345310, 17187902, + 17030434, 16872908, 16715324, 16557686, 16399993, 16242249, 16084454, + 15926609, 15768718, 15610780, 15452797, 15294772, 15136705, 14978598, + 14820453, 14662272, 14504055, 14345804, 14187521, 14029207, 13870864, + 13712494, 13554097, 13395676, 13237232, 13078766, 12920281, 12761777, + 12603256, 12444719, 12286169, 12127607, 11969033, 11810451, 11651860, + 11493264, 11334662, 11176057, 11017451, 10858845, 10700240, 10541637, + 10383039, 10224447, 10065862, 9907287, 9748721, 9590168, 9431628, + 9273103, 9114594, 8956103, 8797632, 8639181, 8480753, 8322349, 8163971, + 8005619, 7847296, 7689002, 7530740, 7372511, 7214316, 7056158, 6898036, + 6739954, 6581911, 6423911, 6265954, 6108041, 5950175, 5792357, 5634588, + 5476869, 5319203, 5161590, 5004033, 4846532, 4689089, 4531705, 4374383, + 4217123, 4059926, 3902796, 3745732, 3588736, 3431810, 3274955, 3118173, + 2961464, 2804832, 2648276, 2491799, 2335401, 2179085, 2022852, 1866703, + 1710639, 1554663, 1398775, 1242977, 1087270, 931656, 776136, 620712, + 465385, 310156, 155027, 0, -154924, -309745, -464460, -619068, -773568, + -927959, -1082238, -1236404, -1390456, -1544394, -1698214, -1851916, + -2005499, -2158961, -2312300, -2465516, -2618607, -2771571, -2924408, + -3077115, -3229692, -3382137, -3534448, -3686625, -3838666, -3990569, + -4142334, -4293958, -4445441, -4596781, -4747977, -4899027, -5049931, + -5200686, -5351292, -5501747, -5652049, -5802198, -5952192, -6102030, + -6251710, -6401231, -6550592, -6699792, -6848828, -6997701, -7146408, + -7294948, -7443320, -7591523, -7739554, -7887414, -8035101, -8182613, + -8329949, -8477107, -8624087, -8770888, -8917507, -9063944, -9210198, + -9356266, -9502148, -9647843, -9793349, -9938665, -10083790, -10228723, + -10373461, -10518005, -10662352, -10806502, -10950453, -11094204, + -11237754, -11381101, -11524245, -11667183, -11809916, -11952441, + -12094757, -12236863, -12378759, -12520442, -12661911, -12803166, + -12944205, -13085027, -13225630, -13366014, -13506177, -13646118, + -13785836, -13925330, -14064599, -14203640, -14342454, -14481039, + -14619393, -14757516, -14895407, -15033064, -15170486, -15307672, + -15444621, -15581332, -15717803, -15854033, -15990022, -16125768, + -16261270, -16396526, -16531537, -16666300, -16800814, -16935079, + -17069093, -17202855, -17336364, -17469619, -17602618, -17735362, + -17867848, -18000075, -18132043, -18263750, -18395195, -18526377, + -18657296, -18787949, -18918337, -19048457, -19178309, -19307891, + -19437204, -19566245, -19695013, -19823508, -19951728, -20079673, + -20207341, -20334731, -20461843, -20588675, -20715226, -20841495, + -20967482, -21093185, -21218602, -21343734, -21468580, -21593137, + -21717405, -21841384, -21965072, -22088467, -22211570, -22334380, + -22456894, -22579113, -22701035, -22822659, -22943985, -23065010, + -23185736, -23306160, -23426281, -23546099, -23665612, -23784821, + -23903723, -24022317, -24140604, -24258581, -24376249, -24493606, + -24610651, -24727383, -24843802, -24959906, -25075694, -25191167, + -25306322, -25421159, -25535677, -25649875, -25763752, -25877308, + -25990541, -26103451, -26216037, -26328297, -26440232, -26551840, + -26663120, -26774071, -26884694, -26994986, -27104947, -27214576, + -27323873, -27432836, -27541465, -27649758, -27757716, -27865337, + -27972620, -28079565, -28186171, -28292437, -28398362, -28503946, + -28609187, -28714086, -28818640, -28922850, -29026714, -29130233, + -29233404, -29336228, -29438703, -29540829, -29642605, -29744031, + -29845105, -29945827, -30046196, -30146212, -30245873, -30345179, + -30444130, -30542724, -30640961, -30738840, -30836360, -30933522, + -31030323, -31126764, -31222844, -31318561, -31413916, -31508908, + -31603536, -31697799, -31791696, -31885228, -31978393, -32071191, + -32163621, -32255683, -32347375, -32438698, -32529650, -32620231, + -32710440, -32800278, -32889742, -32978833, -33067549, -33155892, + -33243858, -33331449, -33418664, -33505501, -33591961, -33678042, + -33763745, -33849068, -33934012, -34018575, -34102757, -34186558, + -34269976, -34353012, -34435664, -34517933, -34599818, -34681317, + -34762432, -34843160, -34923503, -35003458, -35083026, -35162207, + -35240999, -35319402, -35397415, -35475039, -35552273, -35629116, + -35705567, -35781627, -35857295, -35932570, -36007452, -36081940, + -36156034, -36229734, -36303039, -36375949, -36448463, -36520580, + -36592301, -36663625, -36734552, -36805080, -36875211, -36944942, + -37014275, -37083208, -37151741, -37219874, -37287607, -37354938, + -37421868, -37488396, -37554522, -37620246, -37685566, -37750484, + -37814997, -37879107, -37942813, -38006114, -38069010, -38131501, + -38193587, -38255266, -38316539, -38377406, -38437865, -38497918, + -38557563, -38616801, -38675630, -38734051, -38792063, -38849667, + -38906861, -38963646, -39020021, -39075986, -39131541, -39186685, + -39241419, -39295741, -39349653, -39403153, -39456241, -39508917, + -39561181, -39613032, -39664471, -39715497, -39766110, -39816310, + -39866096, -39915469, -39964427, -40012972, -40061103, -40108819, + -40156120, -40203007, -40249478, -40295535, -40341176, -40386402, + -40431212, -40475607, -40519585, -40563148, -40606294, -40649024, + -40691338, -40733235, -40774716, -40815780, -40856426, -40896656, + -40936469, -40975864, -41014842, -41053403, -41091546, -41129272, + -41166580, -41203470, -41239943, -41275997, -41311634, -41346852, + -41381653, -41416035, -41450000, -41483546, -41516673, -41549383, + -41581674, -41613547, -41645002, -41676038, -41706655, -41736855, + -41766636, -41795998, -41824942, -41853468, -41881575, -41909264, + -41936534, -41963386, -41989820, -42015835, -42041432, -42066611, + -42091372, -42115714, -42139639, -42163145, -42186233, -42208904, + -42231156, -42252991, -42274408, -42295407, -42315989, -42336153, + -42355900, -42375230, -42394142, -42412637, -42430715, -42448376, + -42465621, -42482448, -42498860, -42514854, -42530433, -42545595, + -42560341, -42574671, -42588586, -42602085, -42615168, -42627836, + -42640089, -42651927, -42663350, -42674358, -42684952, -42695132, + -42704897, -42714249, -42723187, -42731711, -42739822, -42747520, + -42754804, -42761676, -42768136, -42774183, -42779818, -42785041, + -42789853, -42794253, -42798242, -42801820, -42804987, -42807744, + -42810090, -42812027, -42813554, -42814671, -42815380, -42815679, + -42815570, -42815052, -42814127, -42812794, -42811053, -42808905, + -42806350, -42803388, -42800020, -42796246, -42792066, -42787481, + -42782491, -42777097, -42771297, -42765094, -42758487, -42751476, + -42744063, -42736246, -42728028, -42719407, -42710384, -42700961, + -42691136, -42680911, -42670285, -42659259, -42647834, -42636010, + -42623788, -42611166, -42598147, -42584731, -42570917, -42556706, + -42542099, -42527096, -42511698, -42495904, -42479716, -42463133, + -42446157, -42428787, -42411024, -42392868, -42374321, -42355381, + -42336051, -42316330, -42296218, -42275716, -42254825, -42233545, + -42211877, -42189821, -42167377, -42144545, -42121328, -42097724, + -42073735, -42049360, -42024601, -41999457, -41973930, -41948020, + -41921728, -41895053, -41867996, -41840559, -41812741, -41784542, + -41755965, -41727008, -41697673, -41667960, -41637869, -41607402, + -41576558, -41545339, -41513744, -41481775, -41449432, -41416715, + -41383626, -41350164, -41316330, -41282125, -41247549, -41212603, + -41177288, -41141604, -41105551, -41069131, -41032344, -40995190, + -40957670, -40919785, -40881535, -40842922, -40803944, -40764604, + -40724902, -40684838, -40644413, -40603628, -40562483, -40520979, + -40479117, -40436897, -40394319, -40351386, -40308096, -40264451, + -40220452, -40176099, -40131393, -40086334, -40040923, -39995161, + -39949049, -39902587, -39855775, -39808615, -39761108, -39713253, + -39665052, -39616505, -39567614, -39518378, -39468798, -39418876, + -39368611, -39318005, -39267058, -39215771, -39164145, -39112181, + -39059878, -39007238, -38954262, -38900951, -38847304, -38793323, + -38739009, -38684362, -38629384, -38574074, -38518433, -38462463, + -38406164, -38349537, -38292583, -38235302, -38177695, -38119763, + -38061506, -38002927, -37944024, -37884800, -37825254, -37765388, + -37705202, -37644698, -37583875, -37522736, -37461280, -37399508, + -37337422, -37275021, -37212308, -37149282, -37085945, -37022296, + -36958338, -36894071, -36829496, -36764613, -36699424, -36633928, + -36568128, -36502024, -36435617, -36368907, -36301895, -36234583, + -36166971, -36099060, -36030851, -35962345, -35893542, -35824443, + -35755050, -35685363, -35615383, -35545110, -35474547, -35403693, + -35332549, -35261117, -35189398, -35117391, -35045098, -34972521, + -34899659, -34826514, -34753086, -34679377, -34605387, -34531118, + -34456569, -34381743, -34306640, -34231260, -34155606, -34079677, + -34003475, -33927000, -33850254, -33773237, -33695950, -33618395, + -33540572, -33462482, -33384126, -33305505, -33226619, -33147471, + -33068060, -32988388, -32908456, -32828264, -32747814, -32667106, + -32586142, -32504922, -32423447, -32341718, -32259737, -32177504, + -32095020, -32012286, -31929304, -31846073, -31762595, -31678872, + -31594903, -31510690, -31426234, -31341536, -31256596, -31171417, + -31085998, -31000341, -30914447, -30828316, -30741950, -30655350, + -30568517, -30481451, -30394154, -30306627, -30218870, -30130885, + -30042672, -29954234, -29865570, -29776681, -29687570, -29598236, + -29508680, -29418905, -29328910, -29238697, -29148266, -29057619, + -28966758, -28875681, -28784392, -28692890, -28601178, -28509255, + -28417123, -28324783, -28232236, -28139483, -28046524, -27953362, + -27859997, -27766430, -27672662, -27578695, -27484528, -27390164, + -27295603, -27200846, -27105895, -27010750, -26915413, -26819884, + -26724164, -26628255, -26532158, -26435873, -26339403, -26242747, + -26145906, -26048883, -25951678, -25854291, -25756725, -25658980, + -25561057, -25462957, -25364681, -25266231, -25167607, -25068811, + -24969843, -24870705, -24771397, -24671922, -24572279, -24472470, + -24372496, -24272358, -24172057, -24071594, -23970970, -23870187, + -23769245, -23668146, -23566890, -23465478, -23363913, -23262194, + -23160323, -23058301, -22956129, -22853808, -22751339, -22648724, + -22545963, -22443057, -22340008, -22236816, -22133483, -22030010, + -21926398, -21822648, -21718760, -21614737, -21510579, -21406287, + -21301863, -21197307, -21092621, -20987806, -20882862, -20777791, + -20672594, -20567272, -20461826, -20356258, -20250568, -20144757, + -20038827, -19932778, -19826612, -19720330, -19613933, -19507421, + -19400797, -19294062, -19187215, -19080259, -18973194, -18866022, + -18758744, -18651360, -18543873, -18436282, -18328590, -18220797, + -18112904, -18004912, -17896823, -17788638, -17680357, -17571982, + -17463515, -17354955, -17246304, -17137564, -17028735, -16919818, + -16810815, -16701726, -16592554, -16483298, -16373960, -16264542, + -16155043, -16045466, -15935811, -15826079, -15716273, -15606392, + -15496437, -15386411, -15276314, -15166146, -15055910, -14945607, + -14835236, -14724801, -14614301, -14503737, -14393112, -14282425, + -14171679, -14060873, -13950010, -13839090, -13728115, -13617085, + -13506002, -13394867, -13283681, -13172444, -13061159, -12949825, + -12838445, -12727020, -12615549, -12504036, -12392480, -12280883, + -12169245, -12057569, -11945854, -11834103, -11722316, -11610495, + -11498639, -11386752, -11274833, -11162883, -11050905, -10938898, + -10826865, -10714805, -10602721, -10490613, -10378482, -10266330, + -10154157, -10041965, -9929755, -9817527, -9705283, -9593025, -9480752, + -9368467, -9256170, -9143862, -9031544, -8919218, -8806885, -8694545, + -8582200, -8469851, -8357499, -8245145, -8132789, -8020434, -7908080, + -7795729, -7683380, -7571037, -7458698, -7346367, -7234043, -7121727, + -7009422, -6897127, -6784844, -6672575, -6560319, -6448078, -6335854, + -6223647, -6111458, -5999289, -5887140, -5775013, -5662908, -5550827, + -5438770, -5326740, -5214736, -5102760, -4990813, -4878895, -4767009, + -4655155, -4543334, -4431547, -4319796, -4208081, -4096403, -3984763, + -3873163, -3761603, -3650085, -3538609, -3427177, -3315789, -3204447, + -3093152, -2981904, -2870705, -2759556, -2648458, -2537411, -2426418, + -2315478, -2204593, -2093765, -1982993, -1872279, -1761624, -1651029, + -1540495, -1430024, -1319615, -1209270, -1098991, -988778, -878631, + -768553, -658544, -548606, -438738, -328943, -219220, -109572, 0, + 109496, 218916, 328257, 437519, 546702, 655803, 764821, 873757, 982609, + 1091375, 1200056, 1308649, 1417155, 1525571, 1633897, 1742133, 1850276, + 1958327, 2066283, 2174145, 2281911, 2389580, 2497152, 2604624, 2711997, + 2819270, 2926440, 3033509, 3140473, 3247334, 3354088, 3460737, 3567278, + 3673711, 3780034, 3886248, 3992350, 4098340, 4204218, 4309981, 4415630, + 4521163, 4626579, 4731877, 4837057, 4942117, 5047057, 5151876, 5256572, + 5361146, 5465595, 5569919, 5674117, 5778188, 5882132, 5985947, 6089632, + 6193187, 6296610, 6399901, 6503059, 6606083, 6708972, 6811725, 6914342, + 7016821, 7119161, 7221362, 7323422, 7425342, 7527119, 7628753, 7730244, + 7831590, 7932790, 8033844, 8134751, 8235509, 8336119, 8436579, 8536888, + 8637045, 8737050, 8836901, 8936599, 9036141, 9135528, 9234758, 9333830, + 9432744, 9531499, 9630094, 9728528, 9826800, 9924910, 10022856, + 10120638, 10218255, 10315706, 10412991, 10510108, 10607057, 10703836, + 10800446, 10896885, 10993153, 11089248, 11185170, 11280918, 11376492, + 11471890, 11567111, 11662156, 11757022, 11851710, 11946219, 12040547, + 12134694, 12228660, 12322442, 12416042, 12509457, 12602688, 12695733, + 12788591, 12881262, 12973746, 13066040, 13158146, 13250061, 13341785, + 13433317, 13524657, 13615804, 13706757, 13797515, 13888078, 13978445, + 14068614, 14158587, 14248361, 14337936, 14427311, 14516486, 14605460, + 14694231, 14782800, 14871166, 14959328, 15047285, 15135037, 15222583, + 15309921, 15397053, 15483976, 15570690, 15657195, 15743489, 15829573, + 15915445, 16001104, 16086551, 16171784, 16256803, 16341606, 16426195, + 16510566, 16594721, 16678659, 16762378, 16845878, 16929159, 17012219, + 17095059, 17177677, 17260073, 17342246, 17424196, 17505922, 17587423, + 17668699, 17749749, 17830573, 17911169, 17991538, 18071678, 18151589, + 18231271, 18310723, 18389944, 18468933, 18547691, 18626216, 18704508, + 18782566, 18860390, 18937979, 19015332, 19092450, 19169331, 19245974, + 19322380, 19398547, 19474476, 19550165, 19625614, 19700823, 19775790, + 19850516, 19924999, 19999240, 20073237, 20146991, 20220500, 20293764, + 20366783, 20439556, 20512082, 20584361, 20656393, 20728176, 20799712, + 20870997, 20942034, 21012820, 21083356, 21153640, 21223673, 21293454, + 21362982, 21432257, 21501279, 21570046, 21638559, 21706817, 21774819, + 21842566, 21910056, 21977289, 22044264, 22110982, 22177442, 22243643, + 22309584, 22375266, 22440688, 22505849, 22570750, 22635388, 22699766, + 22763880, 22827732, 22891321, 22954646, 23017708, 23080504, 23143036, + 23205303, 23267304, 23329039, 23390508, 23451709, 23512644, 23573310, + 23633709, 23693839, 23753700, 23813293, 23872615, 23931667, 23990449, + 24048961, 24107201, 24165170, 24222867, 24280291, 24337443, 24394323, + 24450928, 24507261, 24563319, 24619103, 24674612, 24729846, 24784805, + 24839488, 24893896, 24948027, 25001881, 25055458, 25108758, 25161780, + 25214525, 25266991, 25319178, 25371087, 25422717, 25474067, 25525137, + 25575928, 25626438, 25676667, 25726615, 25776283, 25825669, 25874773, + 25923595, 25972135, 26020392, 26068366, 26116058, 26163466, 26210590, + 26257431, 26303987, 26350259, 26396247, 26441950, 26487368, 26532500, + 26577347, 26621908, 26666183, 26710173, 26753875, 26797291, 26840420, + 26883262, 26925817, 26968084, 27010064, 27051756, 27093159, 27134275, + 27175102, 27215640, 27255889, 27295850, 27335521, 27374903, 27413995, + 27452798, 27491311, 27529533, 27567466, 27605108, 27642460, 27679520, + 27716291, 27752770, 27788958, 27824854, 27860460, 27895774, 27930796, + 27965526, 27999964, 28034111, 28067965, 28101527, 28134796, 28167773, + 28200458, 28232849, 28264948, 28296754, 28328267, 28359487, 28390413, + 28421046, 28451386, 28481432, 28511185, 28540644, 28569809, 28598681, + 28627259, 28655543, 28683532, 28711228, 28738630, 28765737, 28792551, + 28819070, 28845295, 28871225, 28896861, 28922203, 28947250, 28972002, + 28996461, 29020624, 29044493, 29068068, 29091347, 29114333, 29137023, + 29159419, 29181521, 29203327, 29224839, 29246057, 29266979, 29287607, + 29307941, 29327980, 29347724, 29367174, 29386329, 29405189, 29423755, + 29442027, 29460004, 29477687, 29495075, 29512170, 29528969, 29545475, + 29561687, 29577604, 29593227, 29608557, 29623592, 29638333, 29652781, + 29666935, 29680795, 29694362, 29707635, 29720615, 29733301, 29745694, + 29757794, 29769601, 29781115, 29792336, 29803264, 29813899, 29824242, + 29834293, 29844051, 29853517, 29862691, 29871572, 29880162, 29888460, + 29896467, 29904182, 29911605, 29918738, 29925579, 29932129, 29938389, + 29944358, 29950036, 29955424, 29960522, 29965329, 29969847, 29974075, + 29978014, 29981663, 29985023, 29988094, 29990876, 29993370, 29995574, + 29997491, 29999119, 30000460, 30001513, 30002278, 30002756, 30002946, + 30002850, 30002467, 30001797, 30000841, 29999599, 29998071, 29996258, + 29994159, 29991774, 29989105, 29986151, 29982912, 29979389, 29975582, + 29971491, 29967117, 29962459, 29957518, 29952294, 29946788, 29940999, + 29934928, 29928575, 29921941, 29915025, 29907829, 29900351, 29892593, + 29884555, 29876237, 29867639, 29858762, 29849606, 29840171, 29830457, + 29820465, 29810195, 29799648, 29788823, 29777721, 29766343, 29754688, + 29742757, 29730550, 29718068, 29705310, 29692278, 29678971, 29665390, + 29651535, 29637406, 29623004, 29608330, 29593382, 29578163, 29562672, + 29546909, 29530875, 29514570, 29497994, 29481149, 29464034, 29446649, + 29428995, 29411073, 29392882, 29374423, 29355697, 29336703, 29317443, + 29297916, 29278123, 29258064, 29237740, 29217151, 29196298, 29175180, + 29153798, 29132154, 29110246, 29088075, 29065643, 29042948, 29019992, + 28996775, 28973298, 28949561, 28925563, 28901307, 28876791, 28852017, + 28826985, 28801696, 28776149, 28750345, 28724285, 28697969, 28671398, + 28644572, 28617491, 28590156, 28562567, 28534725, 28506630, 28478283, + 28449684, 28420833, 28391732, 28362379, 28332777, 28302926, 28272825, + 28242475, 28211877, 28181032, 28149939, 28118600, 28087014, 28055182, + 28023105, 27990783, 27958217, 27925407, 27892354, 27859057, 27825519, + 27791738, 27757716, 27723453, 27688950, 27654206, 27619224, 27584002, + 27548542, 27512845, 27476910, 27440738, 27404329, 27367685, 27330806, + 27293692, 27256344, 27218762, 27180947, 27142899, 27104619, 27066108, + 27027365, 26988392, 26949189, 26909757, 26870096, 26830206, 26790089, + 26749745, 26709173, 26668376, 26627353, 26586105, 26544633, 26502937, + 26461017, 26418875, 26376511, 26333925, 26291117, 26248090, 26204842, + 26161375, 26117690, 26073786, 26029664, 25985326, 25940771, 25896000, + 25851014, 25805813, 25760398, 25714770, 25668928, 25622875, 25576609, + 25530133, 25483446, 25436549, 25389443, 25342128, 25294604, 25246874, + 25198936, 25150792, 25102443, 25053888, 25005129, 24956166, 24907000, + 24857631, 24808061, 24758289, 24708316, 24658143, 24607770, 24557199, + 24506430, 24455463, 24404299, 24352938, 24301382, 24249631, 24197685, + 24145546, 24093214, 24040689, 23987972, 23935064, 23881965, 23828677, + 23775199, 23721533, 23667678, 23613637, 23559409, 23504994, 23450395, + 23395610, 23340642, 23285490, 23230156, 23174640, 23118942, 23063064, + 23007005, 22950767, 22894351, 22837756, 22780984, 22724036, 22666911, + 22609611, 22552137, 22494488, 22436667, 22378672, 22320506, 22262169, + 22203661, 22144983, 22086136, 22027120, 21967937, 21908586, 21849069, + 21789386, 21729539, 21669527, 21609351, 21549013, 21488512, 21427849, + 21367026, 21306043, 21244900, 21183598, 21122139, 21060522, 20998748, + 20936819, 20874734, 20812495, 20750102, 20687556, 20624858, 20562007, + 20499007, 20435855, 20372555, 20309105, 20245508, 20181763, 20117871, + 20053834, 19989651, 19925324, 19860853, 19796239, 19731483, 19666585, + 19601547, 19536368, 19471050, 19405593, 19339998, 19274267, 19208398, + 19142394, 19076255, 19009982, 18943575, 18877035, 18810364, 18743561, + 18676627, 18609564, 18542371, 18475050, 18407601, 18340026, 18272324, + 18204498, 18136546, 18068470, 18000272, 17931951, 17863508, 17794944, + 17726260, 17657457, 17588535, 17519495, 17450338, 17381064, 17311675, + 17242171, 17172552, 17102820, 17032976, 16963019, 16892952, 16822774, + 16752486, 16682090, 16611585, 16540973, 16470254, 16399430, 16328500, + 16257466, 16186328, 16115088, 16043745, 15972301, 15900757, 15829112, + 15757369, 15685527, 15613588, 15541553, 15469421, 15397194, 15324872, + 15252457, 15179949, 15107349, 15034657, 14961875, 14889002, 14816041, + 14742992, 14669854, 14596630, 14523320, 14449925, 14376445, 14302882, + 14229235, 14155507, 14081697, 14007806, 13933835, 13859786, 13785658, + 13711452, 13637170, 13562811, 13488377, 13413869, 13339287, 13264633, + 13189905, 13115107, 13040238, 12965299, 12890291, 12815215, 12740071, + 12664860, 12589583, 12514242, 12438835, 12363365, 12287832, 12212237, + 12136581, 12060864, 11985087, 11909251, 11833357, 11757405, 11681397, + 11605332, 11529213, 11453039, 11376811, 11300531, 11224198, 11147814, + 11071380, 10994895, 10918362, 10841781, 10765152, 10688476, 10611754, + 10534988, 10458177, 10381322, 10304424, 10227485, 10150504, 10073483, + 9996421, 9919321, 9842183, 9765007, 9687795, 9610546, 9533263, 9455945, + 9378594, 9301209, 9223793, 9146345, 9068867, 8991359, 8913822, 8836257, + 8758665, 8681046, 8603400, 8525730, 8448035, 8370317, 8292576, 8214813, + 8137028, 8059223, 7981398, 7903554, 7825692, 7747812, 7669916, 7592003, + 7514075, 7436133, 7358177, 7280209, 7202228, 7124235, 7046232, 6968219, + 6890197, 6812166, 6734128, 6656083, 6578032, 6499975, 6421914, 6343849, + 6265781, 6187710, 6109638, 6031565, 5953492, 5875420, 5797349, 5719280, + 5641214, 5563152, 5485094, 5407041, 5328994, 5250954, 5172921, 5094897, + 5016881, 4938875, 4860879, 4782894, 4704922, 4626961, 4549015, 4471082, + 4393164, 4315261, 4237375, 4159506, 4081655, 4003822, 3926008, 3848215, + 3770442, 3692690, 3614961, 3537255, 3459572, 3381913, 3304280, 3226673, + 3149092, 3071538, 2994012, 2916515, 2839048, 2761611, 2684204, 2606830, + 2529487, 2452178, 2374902, 2297661, 2220455, 2143285, 2066152, 1989056, + 1911998, 1834979, 1758000, 1681060, 1604162, 1527305, 1450491, 1373719, + 1296992, 1220309, 1143671, 1067079, 990533, 914035, 837585, 761183, + 684831, 608529, 532278, 456078, 379931, 303836, 227795, 151808, 75876, + 0, -75820, -151583, -227288, -302935, -378523, -454051, -529518, + -604925, -680270, -755552, -830771, -905927, -981017, -1056043, + -1131003, -1205896, -1280722, -1355480, -1430170, -1504790, -1579341, + -1653821, -1728229, -1802566, -1876831, -1951022, -2025139, -2099182, + -2173150, -2247041, -2320857, -2394595, -2468255, -2541837, -2615340, + -2688763, -2762106, -2835368, -2908548, -2981646, -3054660, -3127592, + -3200439, -3273201, -3345877, -3418467, -3490971, -3563387, -3635715, + -3707955, -3780105, -3852165, -3924134, -3996013, -4067799, -4139493, + -4211094, -4282602, -4354015, -4425333, -4496556, -4567682, -4638712, + -4709644, -4780478, -4851214, -4921850, -4992387, -5062823, -5133158, + -5203392, -5273523, -5343552, -5413477, -5483298, -5553015, -5622626, + -5692132, -5761531, -5830823, -5900007, -5969084, -6038052, -6106910, + -6175658, -6244296, -6312823, -6381239, -6449542, -6517732, -6585809, + -6653772, -6721620, -6789354, -6856972, -6924473, -6991858, -7059126, + -7126275, -7193307, -7260219, -7327011, -7393684, -7460236, -7526667, + -7592975, -7659162, -7725226, -7791166, -7856983, -7922674, -7988241, + -8053683, -8118998, -8184186, -8249248, -8314182, -8378987, -8443664, + -8508211, -8572629, -8636916, -8701073, -8765098, -8828991, -8892752, + -8956380, -9019874, -9083235, -9146461, -9209552, -9272507, -9335327, + -9398010, -9460556, -9522965, -9585235, -9647368, -9709361, -9771215, + -9832928, -9894502, -9955934, -10017225, -10078374, -10139381, + -10200245, -10260965, -10321542, -10381974, -10442261, -10502404, + -10562400, -10622251, -10681954, -10741511, -10800920, -10860181, + -10919293, -10978257, -11037071, -11095735, -11154249, -11212612, + -11270824, -11328884, -11386792, -11444547, -11502150, -11559599, + -11616894, -11674035, -11731021, -11787851, -11844527, -11901046, + -11957408, -12013614, -12069663, -12125553, -12181286, -12236860, + -12292275, -12347530, -12402626, -12457561, -12512336, -12566950, + -12621402, -12675692, -12729820, -12783786, -12837588, -12891227, + -12944702, -12998013, -13051159, -13104140, -13156955, -13209605, + -13262089, -13314406, -13366556, -13418539, -13470354, -13522001, + -13573480, -13624790, -13675930, -13726902, -13777703, -13828334, + -13878794, -13929083, -13979201, -14029148, -14078922, -14128524, + -14177953, -14227209, -14276291, -14325200, -14373935, -14422495, + -14470880, -14519090, -14567125, -14614984, -14662667, -14710174, + -14757503, -14804656, -14851631, -14898428, -14945048, -14991489, + -15037751, -15083834, -15129738, -15175462, -15221007, -15266371, + -15311555, -15356558, -15401379, -15446020, -15490478, -15534755, + -15578849, -15622761, -15666490, -15710036, -15753398, -15796577, + -15839571, -15882382, -15925008, -15967449, -16009705, -16051775, + -16093660, -16135359, -16176872, -16218199, -16259339, -16300292, + -16341058, -16381636, -16422027, -16462230, -16502245, -16542071, + -16581709, -16621158, -16660417, -16699488, -16738368, -16777059, + -16815560, -16853871, -16891991, -16929920, -16967659, -17005206, + -17042562, -17079726, -17116699, -17153479, -17190067, -17226463, + -17262666, -17298676, -17334494, -17370118, -17405548, -17440785, + -17475828, -17510677, -17545332, -17579792, -17614058, -17648129, + -17682005, -17715686, -17749172, -17782462, -17815557, -17848455, + -17881158, -17913664, -17945975, -17978088, -18010005, -18041726, + -18073249, -18104575, -18135704, -18166635, -18197369, -18227905, + -18258243, -18288384, -18318326, -18348070, -18377615, -18406962, + -18436110, -18465059, -18493810, -18522361, -18550713, -18578866, + -18606819, -18634573, -18662127, -18689481, -18716636, -18743590, + -18770344, -18796898, -18823252, -18849405, -18875358, -18901110, + -18926661, -18952012, -18977162, -19002110, -19026858, -19051404, + -19075749, -19099893, -19123835, -19147576, -19171115, -19194453, + -19217588, -19240522, -19263255, -19285785, -19308113, -19330239, + -19352163, -19373885, -19395405, -19416722, -19437837, -19458750, + -19479460, -19499968, -19520273, -19540376, -19560276, -19579974, + -19599468, -19618760, -19637850, -19656736, -19675420, -19693901, + -19712179, -19730254, -19748126, -19765796, -19783262, -19800526, + -19817586, -19834444, -19851098, -19867550, -19883799, -19899844, + -19915687, -19931327, -19946764, -19961997, -19977028, -19991856, + -20006481, -20020903, -20035122, -20049138, -20062951, -20076562, + -20089970, -20103174, -20116176, -20128976, -20141572, -20153966, + -20166157, -20178146, -20189932, -20201515, -20212896, -20224075, + -20235051, -20245825, -20256396, -20266765, -20276932, -20286897, + -20296660, -20306221, -20315580, -20324737, -20333692, -20342445, + -20350997, -20359347, -20367495, -20375442, -20383188, -20390732, + -20398075, -20405217, -20412158, -20418898, -20425437, -20431775, + -20437913, -20443849, -20449586, -20455122, -20460457, -20465593, + -20470528, -20475263, -20479798, -20484134, -20488270, -20492206, + -20495943, -20499480, -20502818, -20505958, -20508898, -20511639, + -20514182, -20516526, -20518671, -20520618, -20522367, -20523918, + -20525271, -20526426, -20527384, -20528144, -20528706, -20529072, + -20529240, -20529211, -20528986, -20528564, -20527945, -20527130, + -20526119, -20524912, -20523509, -20521911, -20520117, -20518128, + -20515943, -20513563, -20510989, -20508220, -20505257, -20502099, + -20498747, -20495201, -20491461, -20487528, -20483402, -20479082, + -20474569, -20469863, -20464965, -20459875, -20454592, -20449117, + -20443450, -20437592, -20431542, -20425301, -20418869, -20412246, + -20405432, -20398429, -20391235, -20383851, -20376277, -20368514, + -20360561, -20352420, -20344089, -20335570, -20326863, -20317967, + -20308883, -20299612, -20290153, -20280507, -20270674, -20260654, + -20250448, -20240056, -20229477, -20218712, -20207763, -20196627, + -20185307, -20173802, -20162112, -20150238, -20138180, -20125938, + -20113513, -20100905, -20088113, -20075139, -20061982, -20048643, + -20035122, -20021420, -20007536, -19993471, -19979225, -19964799, + -19950192, -19935406, -19920439, -19905294, -19889969, -19874465, + -19858782, -19842922, -19826883, -19810667, -19794273, -19777702, + -19760954, -19744030, -19726929, -19709653, -19692201, -19674574, + -19656771, -19638794, -19620643, -19602317, -19583818, -19565145, + -19546299, -19527280, -19508089, -19488726, -19469190, -19449483, + -19429605, -19409556, -19389336, -19368946, -19348386, -19327657, + -19306758, -19285691, -19264454, -19243050, -19221477, -19199737, + -19177830, -19155756, -19133515, -19111108, -19088535, -19065796, + -19042893, -19019824, -18996591, -18973194, -18949633, -18925909, + -18902021, -18877971, -18853759, -18829384, -18804848, -18780151, + -18755292, -18730273, -18705094, -18679755, -18654257, -18628599, + -18602783, -18576809, -18550676, -18524386, -18497939, -18471334, + -18444574, -18417657, -18390585, -18363357, -18335974, -18308437, + -18280746, -18252900, -18224902, -18196750, -18168446, -18139990, + -18111381, -18082622, -18053711, -18024650, -17995438, -17966077, + -17936566, -17906906, -17877097, -17847140, -17817036, -17786783, + -17756384, -17725838, -17695146, -17664309, -17633325, -17602197, + -17570925, -17539508, -17507947, -17476243, -17444396, -17412407, + -17380275, -17348002, -17315588, -17283033, -17250338, -17217502, + -17184527, -17151413, -17118160, -17084769, -17051241, -17017574, + -16983771, -16949832, -16915756, -16881545, -16847198, -16812717, + -16778101, -16743351, -16708468, -16673452, -16638304, -16603023, + -16567610, -16532066, -16496392, -16460587, -16424652, -16388588, + -16352394, -16316073, -16279623, -16243045, -16206340, -16169508, + -16132551, -16095467, -16058258, -16020924, -15983465, -15945882, + -15908176, -15870347, -15832395, -15794321, -15756125, -15717808, + -15679370, -15640812, -15602134, -15563337, -15524421, -15485386, + -15446233, -15406963, -15367576, -15328072, -15288452, -15248716, + -15208866, -15168900, -15128821, -15088627, -15048321, -15007902, + -14967370, -14926727, -14885972, -14845106, -14804130, -14763044, + -14721849, -14680545, -14639132, -14597612, -14555984, -14514249, + -14472407, -14430460, -14388407, -14346249, -14303986, -14261619, + -14219149, -14176576, -14133900, -14091122, -14048242, -14005262, + -13962181, -13918999, -13875718, -13832338, -13788859, -13745282, + -13701608, -13657836, -13613968, -13570004, -13525944, -13481788, + -13437539, -13393195, -13348757, -13304226, -13259603, -13214888, + -13170081, -13125182, -13080194, -13035115, -12989946, -12944689, + -12899343, -12853908, -12808387, -12762778, -12717082, -12671301, + -12625434, -12579482, -12533446, -12487325, -12441121, -12394834, + -12348465, -12302013, -12255481, -12208867, -12162173, -12115399, + -12068545, -12021613, -11974602, -11927514, -11880348, -11833105, + -11785786, -11738392, -11690922, -11643377, -11595758, -11548066, + -11500300, -11452461, -11404551, -11356569, -11308515, -11260391, + -11212197, -11163934, -11115601, -11067200, -11018731, -10970195, + -10921591, -10872921, -10824186, -10775385, -10726519, -10677588, + -10628594, -10579537, -10530417, -10481235, -10431990, -10382685, + -10333319, -10283893, -10234408, -10184863, -10135260, -10085598, + -10035880, -9986104, -9936272, -9886383, -9836440, -9786441, -9736389, + -9686282, -9636122, -9585909, -9535644, -9485328, -9434960, -9384541, + -9334073, -9283554, -9232987, -9182371, -9131707, -9080996, -9030237, + -8979432, -8928581, -8877685, -8826744, -8775759, -8724730, -8673657, + -8622542, -8571384, -8520185, -8468945, -8417664, -8366343, -8314982, + -8263582, -8212144, -8160668, -8109154, -8057603, -8006016, -7954393, + -7902735, -7851042, -7799314, -7747553, -7695758, -7643931, -7592071, + -7540180, -7488257, -7436304, -7384321, -7332308, -7280267, -7228196, + -7176098, -7123972, -7071820, -7019640, -6967435, -6915205, -6862950, + -6810670, -6758367, -6706040, -6653691, -6601319, -6548926, -6496511, + -6444076, -6391621, -6339146, -6286652, -6234139, -6181609, -6129060, + -6076495, -6023914, -5971316, -5918703, -5866075, -5813433, -5760777, + -5708107, -5655425, -5602730, -5550023, -5497306, -5444577, -5391838, + -5339090, -5286332, -5233566, -5180791, -5128009, -5075219, -5022423, + -4969621, -4916813, -4864001, -4811183, -4758362, -4705537, -4652709, + -4599878, -4547046, -4494212, -4441377, -4388542, -4335706, -4282872, + -4230038, -4177206, -4124376, -4071548, -4018724, -3965903, -3913086, + -3860274, -3807468, -3754666, -3701871, -3649083, -3596302, -3543528, + -3490763, -3438006, -3385258, -3332521, -3279793, -3227076, -3174370, + -3121676, -3068994, -3016324, -2963668, -2911026, -2858398, -2805784, + -2753186, -2700603, -2648036, -2595486, -2542953, -2490438, -2437941, + -2385463, -2333004, -2280564, -2228145, -2175746, -2123368, -2071012, + -2018677, -1966366, -1914077, -1861812, -1809571, -1757355, -1705163, + -1652997, -1600857, -1548743, -1496657, -1444597, -1392566, -1340563, + -1288589, -1236644, -1184729, -1132844, -1080990, -1029167, -977376, + -925617, -873891, -822198, -770538, -718913, -667322, -615766, -564246, + -512762, -461314, -409903, -358529, -307193, -255896, -204637, -153418, + -102238, -51098, 0, 51057, 102074, 153048, 203980, 254869, 305714, + 356516, 407273, 457986, 508654, 559275, 609851, 660380, 710862, 761297, + 811684, 862022, 912311, 962552, 1012742, 1062883, 1112972, 1163011, + 1212998, 1262934, 1312817, 1362647, 1412424, 1462147, 1511816, 1561431, + 1610990, 1660495, 1709943, 1759335, 1808670, 1857948, 1907169, 1956331, + 2005435, 2054480, 2103466, 2152392, 2201258, 2250063, 2298808, 2347490, + 2396112, 2444670, 2493166, 2541599, 2589969, 2638274, 2686515, 2734692, + 2782803, 2830849, 2878828, 2926741, 2974588, 3022367, 3070078, 3117721, + 3165296, 3212802, 3260239, 3307606, 3354903, 3402130, 3449285, 3496369, + 3543382, 3590323, 3637191, 3683986, 3730708, 3777356, 3823931, 3870431, + 3916856, 3963205, 4009480, 4055678, 4101800, 4147845, 4193813, 4239703, + 4285516, 4331250, 4376906, 4422482, 4467979, 4513396, 4558734, 4603990, + 4649166, 4694260, 4739273, 4784204, 4829052, 4873818, 4918500, 4963099, + 5007614, 5052045, 5096391, 5140652, 5184828, 5228918, 5272923, 5316841, + 5360672, 5404416, 5448072, 5491641, 5535122, 5578514, 5621818, 5665032, + 5708156, 5751191, 5794136, 5836990, 5879753, 5922424, 5965005, 6007493, + 6049889, 6092192, 6134403, 6176520, 6218544, 6260474, 6302309, 6344050, + 6385696, 6427247, 6468702, 6510061, 6551324, 6592491, 6633560, 6674533, + 6715408, 6756185, 6796864, 6837445, 6877927, 6918310, 6958593, 6998777, + 7038861, 7078844, 7118727, 7158509, 7198190, 7237770, 7277247, 7316622, + 7355895, 7395066, 7434133, 7473097, 7511957, 7550714, 7589366, 7627914, + 7666357, 7704695, 7742928, 7781055, 7819077, 7856992, 7894801, 7932502, + 7970097, 8007585, 8044965, 8082237, 8119402, 8156457, 8193404, 8230243, + 8266972, 8303591, 8340101, 8376501, 8412790, 8448970, 8485038, 8520995, + 8556841, 8592576, 8628198, 8663709, 8699107, 8734393, 8769566, 8804626, + 8839572, 8874405, 8909125, 8943730, 8978221, 9012597, 9046859, 9081005, + 9115037, 9148953, 9182753, 9216437, 9250006, 9283457, 9316792, 9350011, + 9383112, 9416096, 9448962, 9481711, 9514341, 9546854, 9579248, 9611523, + 9643680, 9675717, 9707636, 9739434, 9771113, 9802672, 9834112, 9865430, + 9896628, 9927706, 9958662, 9989498, 10020212, 10050805, 10081275, + 10111624, 10141851, 10171956, 10201938, 10231797, 10261533, 10291147, + 10320637, 10350004, 10379247, 10408366, 10437361, 10466233, 10494979, + 10523602, 10552099, 10580472, 10608720, 10636842, 10664839, 10692711, + 10720457, 10748077, 10775571, 10802938, 10830180, 10857295, 10884283, + 10911144, 10937878, 10964486, 10990965, 11017318, 11043543, 11069640, + 11095609, 11121450, 11147163, 11172747, 11198203, 11223530, 11248729, + 11273799, 11298739, 11323551, 11348233, 11372786, 11397209, 11421502, + 11445666, 11469699, 11493603, 11517376, 11541019, 11564532, 11587914, + 11611165, 11634285, 11657275, 11680133, 11702860, 11725456, 11747921, + 11770254, 11792455, 11814525, 11836463, 11858269, 11879943, 11901485, + 11922894, 11944172, 11965316, 11986329, 12007209, 12027956, 12048570, + 12069051, 12089399, 12109615, 12129697, 12149646, 12169461, 12189144, + 12208692, 12228107, 12247389, 12266537, 12285551, 12304431, 12323177, + 12341789, 12360267, 12378611, 12396821, 12414896, 12432837, 12450644, + 12468316, 12485853, 12503256, 12520525, 12537659, 12554657, 12571522, + 12588251, 12604845, 12621304, 12637629, 12653818, 12669872, 12685791, + 12701575, 12717223, 12732737, 12748115, 12763357, 12778465, 12793436, + 12808273, 12822974, 12837539, 12851969, 12866263, 12880421, 12894444, + 12908332, 12922083, 12935699, 12949180, 12962524, 12975733, 12988806, + 13001743, 13014544, 13027210, 13039740, 13052134, 13064392, 13076514, + 13088501, 13100351, 13112066, 13123645, 13135088, 13146395, 13157566, + 13168602, 13179501, 13190265, 13200893, 13211385, 13221742, 13231962, + 13242047, 13251996, 13261809, 13271487, 13281029, 13290435, 13299705, + 13308840, 13317839, 13326703, 13335431, 13344023, 13352480, 13360802, + 13368988, 13377038, 13384954, 13392733, 13400378, 13407887, 13415261, + 13422500, 13429604, 13436572, 13443406, 13450104, 13456668, 13463096, + 13469390, 13475549, 13481573, 13487463, 13493217, 13498837, 13504323, + 13509674, 13514891, 13519973, 13524921, 13529735, 13534414, 13538960, + 13543371, 13547648, 13551792, 13555801, 13559677, 13563420, 13567028, + 13570503, 13573845, 13577053, 13580128, 13583069, 13585878, 13588553, + 13591096, 13593506, 13595782, 13597926, 13599938, 13601817, 13603563, + 13605177, 13606659, 13608009, 13609227, 13610313, 13611266, 13612088, + 13612779, 13613338, 13613765, 13614061, 13614226, 13614260, 13614163, + 13613934, 13613575, 13613086, 13612465, 13611715, 13610834, 13609822, + 13608681, 13607410, 13606008, 13604477, 13602817, 13601027, 13599107, + 13597058, 13594880, 13592574, 13590138, 13587573, 13584880, 13582059, + 13579109, 13576031, 13572825, 13569491, 13566029, 13562440, 13558723, + 13554879, 13550907, 13546809, 13542583, 13538231, 13533752, 13529147, + 13524415, 13519557, 13514573, 13509464, 13504228, 13498867, 13493381, + 13487769, 13482032, 13476171, 13470184, 13464073, 13457838, 13451478, + 13444995, 13438387, 13431655, 13424800, 13417822, 13410720, 13403495, + 13396147, 13388677, 13381084, 13373368, 13365531, 13357571, 13349489, + 13341286, 13332961, 13324515, 13315948, 13307260, 13298451, 13289522, + 13280472, 13271302, 13262012, 13252602, 13243073, 13233424, 13223656, + 13213769, 13203763, 13193638, 13183395, 13173034, 13162555, 13151957, + 13141242, 13130410, 13119461, 13108394, 13097211, 13085911, 13074494, + 13062962, 13051313, 13039549, 13027669, 13015673, 13003563, 12991337, + 12978997, 12966543, 12953974, 12941291, 12928494, 12915583, 12902560, + 12889423, 12876172, 12862810, 12849334, 12835747, 12822047, 12808236, + 12794313, 12780278, 12766133, 12751876, 12737509, 12723031, 12708443, + 12693745, 12678938, 12664021, 12648994, 12633859, 12618614, 12603262, + 12587800, 12572231, 12556554, 12540769, 12524877, 12508878, 12492772, + 12476560, 12460241, 12443816, 12427285, 12410648, 12393906, 12377059, + 12360107, 12343051, 12325890, 12308625, 12291256, 12273784, 12256208, + 12238529, 12220747, 12202863, 12184876, 12166788, 12148598, 12130306, + 12111913, 12093418, 12074824, 12056128, 12037333, 12018437, 11999442, + 11980348, 11961154, 11941862, 11922471, 11902982, 11883394, 11863709, + 11843927, 11824047, 11804070, 11783997, 11763827, 11743561, 11723199, + 11702742, 11682190, 11661542, 11640800, 11619963, 11599032, 11578008, + 11556890, 11535678, 11514374, 11492976, 11471487, 11449905, 11428231, + 11406466, 11384609, 11362661, 11340623, 11318494, 11296276, 11273967, + 11251569, 11229081, 11206505, 11183840, 11161086, 11138245, 11115316, + 11092299, 11069195, 11046004, 11022727, 10999363, 10975914, 10952378, + 10928758, 10905052, 10881261, 10857386, 10833427, 10809384, 10785258, + 10761048, 10736755, 10712379, 10687922, 10663382, 10638760, 10614058, + 10589274, 10564409, 10539463, 10514438, 10489333, 10464148, 10438884, + 10413541, 10388119, 10362619, 10337041, 10311386, 10285653, 10259843, + 10233956, 10207993, 10181954, 10155839, 10129648, 10103383, 10077043, + 10050628, 10024139, 9997576, 9970940, 9944230, 9917447, 9890592, + 9863665, 9836666, 9809595, 9782453, 9755240, 9727956, 9700602, 9673178, + 9645685, 9618122, 9590490, 9562790, 9535021, 9507184, 9479279, 9451307, + 9423268, 9395162, 9366990, 9338752, 9310449, 9282079, 9253645, 9225146, + 9196583, 9167956, 9139265, 9110510, 9081693, 9052812, 9023870, 8994865, + 8965799, 8936671, 8907483, 8878233, 8848923, 8819553, 8790124, 8760635, + 8731087, 8701480, 8671815, 8642092, 8612312, 8582474, 8552579, 8522627, + 8492619, 8462555, 8432436, 8402261, 8372031, 8341747, 8311408, 8281016, + 8250569, 8220070, 8189518, 8158913, 8128256, 8097547, 8066786, 8035974, + 8005112, 7974199, 7943235, 7912222, 7881160, 7850048, 7818887, 7787679, + 7756422, 7725117, 7693765, 7662365, 7630919, 7599427, 7567889, 7536305, + 7504675, 7473001, 7441282, 7409519, 7377711, 7345861, 7313966, 7282029, + 7250050, 7218028, 7185964, 7153859, 7121713, 7089526, 7057298, 7025030, + 6992723, 6960376, 6927990, 6895565, 6863102, 6830601, 6798062, 6765486, + 6732872, 6700223, 6667536, 6634814, 6602057, 6569264, 6536436, 6503573, + 6470677, 6437746, 6404782, 6371785, 6338755, 6305693, 6272598, 6239472, + 6206315, 6173126, 6139906, 6106657, 6073377, 6040067, 6006729, 5973361, + 5939965, 5906540, 5873088, 5839607, 5806100, 5772566, 5739005, 5705418, + 5671806, 5638168, 5604504, 5570816, 5537104, 5503367, 5469607, 5435823, + 5402017, 5368187, 5334336, 5300462, 5266567, 5232650, 5198713, 5164754, + 5130776, 5096778, 5062760, 5028723, 4994667, 4960593, 4926500, 4892390, + 4858262, 4824117, 4789955, 4755777, 4721583, 4687373, 4653147, 4618907, + 4584652, 4550382, 4516099, 4481802, 4447491, 4413168, 4378832, 4344484, + 4310123, 4275751, 4241368, 4206974, 4172570, 4138155, 4103730, 4069296, + 4034853, 4000401, 3965940, 3931471, 3896994, 3862510, 3828019, 3793521, + 3759016, 3724506, 3689989, 3655468, 3620941, 3586409, 3551873, 3517333, + 3482789, 3448242, 3413691, 3379138, 3344583, 3310025, 3275466, 3240906, + 3206344, 3171782, 3137220, 3102657, 3068095, 3033533, 2998973, 2964413, + 2929856, 2895300, 2860747, 2826196, 2791649, 2757104, 2722564, 2688027, + 2653495, 2618967, 2584445, 2549927, 2515416, 2480910, 2446411, 2411918, + 2377432, 2342954, 2308483, 2274020, 2239566, 2205120, 2170683, 2136255, + 2101837, 2067429, 2033031, 1998644, 1964268, 1929902, 1895549, 1861207, + 1826877, 1792560, 1758256, 1723965, 1689688, 1655424, 1621174, 1586939, + 1552719, 1518514, 1484324, 1450150, 1415992, 1381850, 1347725, 1313617, + 1279526, 1245453, 1211398, 1177361, 1143343, 1109344, 1075364, 1041403, + 1007462, 973542, 939642, 905762, 871904, 838067, 804252, 770459, + 736688, 702940, 669215, 635513, 601834, 568180, 534549, 500944, 467363, + 433806, 400276, 366771, 333292, 299839, 266413, 233014, 199643, 166298, + 132982, 99693, 66433, 33202, 0, -33173, -66316, -99429, -132513, + -165566, -198588, -231579, -264538, -297466, -330362, -363226, -396057, + -428855, -461620, -494352, -527050, -559714, -592344, -624940, -657500, + -690025, -722515, -754969, -787387, -819769, -852115, -884423, -916694, + -948928, -981125, -1013283, -1045403, -1077485, -1109527, -1141531, + -1173495, -1205420, -1237305, -1269149, -1300953, -1332717, -1364439, + -1396120, -1427760, -1459357, -1490913, -1522426, -1553897, -1585324, + -1616709, -1648050, -1679347, -1710601, -1741810, -1772975, -1804095, + -1835170, -1866199, -1897183, -1928122, -1959014, -1989860, -2020659, + -2051411, -2082117, -2112775, -2143385, -2173948, -2204462, -2234928, + -2265345, -2295713, -2326033, -2356303, -2386523, -2416693, -2446813, + -2476883, -2506902, -2536870, -2566787, -2596653, -2626467, -2656229, + -2685939, -2715597, -2745202, -2774754, -2804253, -2833699, -2863092, + -2892430, -2921714, -2950945, -2980120, -3009241, -3038307, -3067318, + -3096273, -3125172, -3154016, -3182803, -3211534, -3240209, -3268826, + -3297387, -3325890, -3354336, -3382724, -3411054, -3439326, -3467539, + -3495694, -3523789, -3551826, -3579804, -3607722, -3635580, -3663378, + -3691116, -3718794, -3746411, -3773967, -3801462, -3828896, -3856268, + -3883579, -3910828, -3938015, -3965139, -3992201, -4019200, -4046136, + -4073009, -4099819, -4126565, -4153248, -4179866, -4206420, -4232910, + -4259336, -4285696, -4311992, -4338222, -4364387, -4390487, -4416521, + -4442488, -4468390, -4494226, -4519994, -4545696, -4571332, -4596900, + -4622401, -4647834, -4673200, -4698497, -4723727, -4748889, -4773982, + -4799006, -4823962, -4848849, -4873667, -4898415, -4923094, -4947703, + -4972243, -4996712, -5021111, -5045440, -5069698, -5093885, -5118002, + -5142047, -5166022, -5189925, -5213756, -5237515, -5261203, -5284818, + -5308362, -5331833, -5355231, -5378556, -5401809, -5424989, -5448095, + -5471128, -5494087, -5516973, -5539785, -5562523, -5585186, -5607776, + -5630291, -5652731, -5675096, -5697387, -5719602, -5741743, -5763807, + -5785797, -5807710, -5829548, -5851310, -5872996, -5894605, -5916139, + -5937595, -5958975, -5980278, -6001504, -6022653, -6043725, -6064720, + -6085636, -6106476, -6127237, -6147921, -6168527, -6189054, -6209503, + -6229874, -6250166, -6270380, -6290514, -6310570, -6330547, -6350444, + -6370263, -6390002, -6409661, -6429240, -6448740, -6468160, -6487500, + -6506760, -6525940, -6545039, -6564057, -6582996, -6601853, -6620630, + -6639325, -6657940, -6676473, -6694926, -6713296, -6731586, -6749794, + -6767920, -6785964, -6803927, -6821807, -6839606, -6857322, -6874956, + -6892508, -6909977, -6927363, -6944667, -6961888, -6979027, -6996082, + -7013054, -7029944, -7046750, -7063472, -7080112, -7096667, -7113140, + -7129528, -7145833, -7162054, -7178191, -7194244, -7210214, -7226098, + -7241899, -7257616, -7273248, -7288795, -7304258, -7319637, -7334931, + -7350140, -7365264, -7380303, -7395258, -7410127, -7424911, -7439610, + -7454224, -7468752, -7483196, -7497553, -7511826, -7526012, -7540113, + -7554129, -7568059, -7581902, -7595660, -7609333, -7622919, -7636419, + -7649833, -7663161, -7676403, -7689558, -7702628, -7715611, -7728507, + -7741317, -7754041, -7766678, -7779229, -7791693, -7804071, -7816361, + -7828565, -7840683, -7852713, -7864657, -7876513, -7888283, -7899966, + -7911562, -7923070, -7934492, -7945827, -7957074, -7968235, -7979308, + -7990294, -8001193, -8012004, -8022728, -8033365, -8043915, -8054377, + -8064751, -8075039, -8085239, -8095351, -8105376, -8115314, -8125164, + -8134926, -8144601, -8154188, -8163688, -8173100, -8182425, -8191662, + -8200811, -8209873, -8218847, -8227734, -8236533, -8245244, -8253867, + -8262403, -8270851, -8279212, -8287485, -8295670, -8303767, -8311777, + -8319699, -8327534, -8335281, -8342940, -8350511, -8357995, -8365391, + -8372700, -8379921, -8387054, -8394100, -8401058, -8407929, -8414712, + -8421407, -8428015, -8434535, -8440968, -8447313, -8453571, -8459742, + -8465825, -8471820, -8477728, -8483549, -8489283, -8494929, -8500488, + -8505959, -8511343, -8516640, -8521850, -8526973, -8532008, -8536957, + -8541818, -8546593, -8551280, -8555880, -8560394, -8564820, -8569160, + -8573413, -8577579, -8581658, -8585650, -8589556, -8593375, -8597108, + -8600754, -8604313, -8607787, -8611173, -8614474, -8617687, -8620815, + -8623857, -8626812, -8629681, -8632464, -8635161, -8637772, -8640297, + -8642737, -8645090, -8647358, -8649540, -8651636, -8653647, -8655572, + -8657412, -8659167, -8660836, -8662419, -8663918, -8665331, -8666660, + -8667903, -8669061, -8670135, -8671123, -8672027, -8672846, -8673581, + -8674231, -8674796, -8675277, -8675674, -8675986, -8676215, -8676359, + -8676419, -8676395, -8676288, -8676096, -8675821, -8675462, -8675020, + -8674494, -8673885, -8673192, -8672416, -8671557, -8670615, -8669590, + -8668482, -8667291, -8666018, -8664662, -8663223, -8661702, -8660099, + -8658413, -8656645, -8654795, -8652863, -8650849, -8648754, -8646576, + -8644317, -8641977, -8639555, -8637052, -8634468, -8631802, -8629056, + -8626228, -8623320, -8620331, -8617261, -8614111, -8610881, -8607570, + -8604179, -8600708, -8597157, -8593526, -8589816, -8586026, -8582156, + -8578207, -8574178, -8570071, -8565884, -8561618, -8557274, -8552851, + -8548349, -8543768, -8539109, -8534372, -8529557, -8524664, -8519693, + -8514644, -8509517, -8504313, -8499032, -8493673, -8488237, -8482724, + -8477134, -8471467, -8465723, -8459903, -8454007, -8448034, -8441985, + -8435860, -8429659, -8423383, -8417031, -8410603, -8404100, -8397521, + -8390868, -8384139, -8377336, -8370458, -8363505, -8356478, -8349377, + -8342202, -8334952, -8327629, -8320232, -8312761, -8305217, -8297600, + -8289909, -8282146, -8274309, -8266400, -8258418, -8250364, -8242237, + -8234039, -8225768, -8217425, -8209011, -8200525, -8191968, -8183339, + -8174640, -8165869, -8157028, -8148116, -8139133, -8130080, -8120957, + -8111764, -8102501, -8093168, -8083766, -8074294, -8064753, -8055143, + -8045463, -8035716, -8025899, -8016014, -8006061, -7996039, -7985950, + -7975793, -7965568, -7955275, -7944916, -7934489, -7923995, -7913434, + -7902807, -7892113, -7881352, -7870526, -7859633, -7848675, -7837651, + -7826562, -7815407, -7804187, -7792902, -7781552, -7770137, -7758658, + -7747115, -7735508, -7723836, -7712101, -7700303, -7688440, -7676515, + -7664526, -7652475, -7640361, -7628184, -7615945, -7603644, -7591280, + -7578855, -7566368, -7553820, -7541210, -7528539, -7515808, -7503015, + -7490162, -7477249, -7464275, -7451241, -7438148, -7424995, -7411782, + -7398510, -7385179, -7371789, -7358340, -7344833, -7331267, -7317643, + -7303961, -7290222, -7276424, -7262570, -7248658, -7234689, -7220663, + -7206581, -7192442, -7178246, -7163995, -7149688, -7135325, -7120906, + -7106433, -7091904, -7077320, -7062681, -7047988, -7033241, -7018439, + -7003583, -6988674, -6973711, -6958695, -6943625, -6928503, -6913328, + -6898100, -6882820, -6867487, -6852103, -6836667, -6821179, -6805640, + -6790050, -6774408, -6758716, -6742974, -6727181, -6711337, -6695444, + -6679501, -6663509, -6647467, -6631376, -6615236, -6599047, -6582809, + -6566524, -6550190, -6533808, -6517379, -6500902, -6484377, -6467806, + -6451187, -6434522, -6417811, -6401053, -6384249, -6367399, -6350503, + -6333562, -6316576, -6299545, -6282469, -6265348, -6248183, -6230974, + -6213721, -6196423, -6179083, -6161699, -6144272, -6126802, -6109289, + -6091733, -6074136, -6056496, -6038814, -6021091, -6003326, -5985520, + -5967673, -5949786, -5931857, -5913888, -5895879, -5877830, -5859742, + -5841614, -5823446, -5805239, -5786994, -5768710, -5750387, -5732026, + -5713627, -5695191, -5676717, -5658205, -5639656, -5621070, -5602448, + -5583789, -5565094, -5546362, -5527595, -5508792, -5489954, -5471081, + -5452172, -5433229, -5414251, -5395239, -5376193, -5357113, -5337999, + -5318852, -5299672, -5280458, -5261212, -5241933, -5222622, -5203279, + -5183904, -5164497, -5145058, -5125589, -5106088, -5086557, -5066994, + -5047402, -5027779, -5008127, -4988445, -4968733, -4948992, -4929222, + -4909423, -4889595, -4869740, -4849856, -4829944, -4810004, -4790037, + -4770042, -4750021, -4729972, -4709897, -4689796, -4669668, -4649515, + -4629336, -4609131, -4588901, -4568646, -4548366, -4528061, -4507732, + -4487379, -4467002, -4446602, -4426177, -4405730, -4385259, -4364766, + -4344250, -4323711, -4303151, -4282568, -4261964, -4241338, -4220691, + -4200023, -4179334, -4158624, -4137895, -4117144, -4096374, -4075585, + -4054775, -4033947, -4013099, -3992233, -3971348, -3950444, -3929523, + -3908583, -3887626, -3866651, -3845659, -3824650, -3803624, -3782581, + -3761523, -3740447, -3719356, -3698250, -3677127, -3655990, -3634837, + -3613670, -3592488, -3571291, -3550081, -3528856, -3507618, -3486366, + -3465101, -3443823, -3422532, -3401228, -3379912, -3358584, -3337244, + -3315892, -3294528, -3273154, -3251768, -3230371, -3208964, -3187546, + -3166118, -3144680, -3123233, -3101775, -3080309, -3058833, -3037349, + -3015855, -2994354, -2972844, -2951326, -2929800, -2908267, -2886727, + -2865179, -2843624, -2822063, -2800495, -2778921, -2757341, -2735755, + -2714163, -2692566, -2670964, -2649357, -2627745, -2606128, -2584508, + -2562883, -2541254, -2519622, -2497986, -2476347, -2454705, -2433060, + -2411412, -2389763, -2368111, -2346457, -2324801, -2303144, -2281485, + -2259826, -2238165, -2216504, -2194842, -2173180, -2151518, -2129857, + -2108195, -2086535, -2064875, -2043216, -2021558, -1999902, -1978248, + -1956595, -1934945, -1913296, -1891651, -1870008, -1848367, -1826731, + -1805097, -1783467, -1761841, -1740218, -1718600, -1696986, -1675377, + -1653773, -1632173, -1610579, -1588990, -1567407, -1545830, -1524259, + -1502694, -1481135, -1459583, -1438038, -1416500, -1394970, -1373446, + -1351931, -1330423, -1308924, -1287432, -1265949, -1244475, -1223010, + -1201554, -1180107, -1158670, -1137242, -1115824, -1094417, -1073019, + -1051632, -1030256, -1008891, -987537, -966194, -944863, -923543, + -902235, -880939, -859656, -838385, -817127, -795881, -774649, -753430, + -732224, -711032, -689854, -668690, -647540, -626405, -605284, -584178, + -563087, -542012, -520951, -499906, -478877, -457864, -436868, -415887, + -394923, -373976, -353045, -332132, -311236, -290358, -269497, -248654, + -227829, -207023, -186234, -165465, -144714, -123982, -103269, -82576, + -61902, -41248, -20614, 0, 20593, 41167, 61720, 82252, 102763, 123253, + 143721, 164168, 184594, 204997, 225378, 245737, 266074, 286388, 306680, + 326948, 347193, 367415, 387614, 407788, 427939, 448066, 468169, 488247, + 508301, 528331, 548335, 568314, 588268, 608197, 628100, 647978, 667829, + 687655, 707454, 727227, 746973, 766692, 786385, 806050, 825689, 845300, + 864883, 884438, 903966, 923466, 942937, 962380, 981794, 1001180, + 1020537, 1039865, 1059163, 1078433, 1097672, 1116882, 1136063, 1155213, + 1174333, 1193422, 1212482, 1231510, 1250508, 1269475, 1288411, 1307315, + 1326188, 1345030, 1363839, 1382617, 1401363, 1420077, 1438758, 1457407, + 1476023, 1494607, 1513157, 1531675, 1550159, 1568610, 1587027, 1605411, + 1623761, 1642077, 1660358, 1678606, 1696819, 1714997, 1733141, 1751250, + 1769324, 1787363, 1805366, 1823335, 1841267, 1859164, 1877025, 1894850, + 1912639, 1930392, 1948108, 1965788, 1983431, 2001037, 2018607, 2036139, + 2053634, 2071092, 2088512, 2105895, 2123239, 2140546, 2157815, 2175046, + 2192239, 2209393, 2226508, 2243585, 2260623, 2277622, 2294583, 2311504, + 2328385, 2345227, 2362030, 2378793, 2395516, 2412199, 2428842, 2445445, + 2462007, 2478530, 2495011, 2511452, 2527852, 2544211, 2560529, 2576806, + 2593042, 2609236, 2625389, 2641500, 2657569, 2673597, 2689582, 2705526, + 2721427, 2737286, 2753102, 2768876, 2784607, 2800296, 2815941, 2831544, + 2847103, 2862619, 2878092, 2893521, 2908907, 2924249, 2939548, 2954802, + 2970013, 2985179, 3000301, 3015379, 3030413, 3045402, 3060346, 3075246, + 3090101, 3104911, 3119676, 3134396, 3149070, 3163700, 3178284, 3192822, + 3207315, 3221762, 3236163, 3250519, 3264828, 3279091, 3293308, 3307479, + 3321604, 3335682, 3349713, 3363698, 3377636, 3391527, 3405372, 3419169, + 3432919, 3446623, 3460278, 3473887, 3487448, 3500961, 3514427, 3527845, + 3541216, 3554538, 3567813, 3581039, 3594218, 3607348, 3620430, 3633463, + 3646449, 3659385, 3672273, 3685113, 3697903, 3710645, 3723338, 3735982, + 3748576, 3761122, 3773619, 3786066, 3798464, 3810812, 3823111, 3835360, + 3847560, 3859710, 3871810, 3883861, 3895861, 3907812, 3919712, 3931563, + 3943363, 3955113, 3966812, 3978461, 3990060, 4001608, 4013106, 4024553, + 4035950, 4047295, 4058590, 4069834, 4081027, 4092169, 4103260, 4114299, + 4125288, 4136226, 4147112, 4157946, 4168730, 4179462, 4190142, 4200771, + 4211348, 4221874, 4232348, 4242770, 4253140, 4263459, 4273726, 4283940, + 4294103, 4304213, 4314272, 4324278, 4334232, 4344134, 4353984, 4363781, + 4373526, 4383218, 4392858, 4402446, 4411981, 4421463, 4430893, 4440270, + 4449594, 4458866, 4468085, 4477251, 4486364, 4495424, 4504432, 4513386, + 4522287, 4531136, 4539931, 4548673, 4557362, 4565998, 4574581, 4583111, + 4591587, 4600010, 4608380, 4616696, 4624959, 4633168, 4641324, 4649427, + 4657476, 4665472, 4673414, 4681303, 4689138, 4696919, 4704647, 4712322, + 4719942, 4727509, 4735022, 4742482, 4749887, 4757239, 4764537, 4771782, + 4778972, 4786109, 4793192, 4800221, 4807196, 4814117, 4820985, 4827798, + 4834558, 4841263, 4847915, 4854513, 4861056, 4867546, 4873982, 4880364, + 4886691, 4892965, 4899185, 4905351, 4911462, 4917520, 4923523, 4929473, + 4935368, 4941210, 4946997, 4952730, 4958410, 4964035, 4969606, 4975123, + 4980586, 4985995, 4991350, 4996651, 5001897, 5007090, 5012229, 5017313, + 5022344, 5027321, 5032243, 5037112, 5041926, 5046687, 5051393, 5056046, + 5060644, 5065189, 5069679, 5074116, 5078499, 5082827, 5087102, 5091323, + 5095490, 5099604, 5103663, 5107668, 5111620, 5115518, 5119362, 5123152, + 5126889, 5130572, 5134201, 5137776, 5141298, 5144766, 5148180, 5151541, + 5154848, 5158102, 5161302, 5164448, 5167541, 5170581, 5173567, 5176499, + 5179378, 5182204, 5184976, 5187695, 5190361, 5192974, 5195533, 5198039, + 5200492, 5202892, 5205238, 5207532, 5209772, 5211959, 5214094, 5216175, + 5218204, 5220179, 5222102, 5223972, 5225789, 5227553, 5229265, 5230924, + 5232530, 5234084, 5235585, 5237033, 5238430, 5239773, 5241064, 5242303, + 5243490, 5244624, 5245706, 5246736, 5247714, 5248639, 5249513, 5250334, + 5251104, 5251821, 5252487, 5253101, 5253663, 5254173, 5254632, 5255039, + 5255394, 5255698, 5255950, 5256151, 5256300, 5256398, 5256445, 5256441, + 5256385, 5256279, 5256121, 5255912, 5255652, 5255341, 5254980, 5254567, + 5254104, 5253590, 5253026, 5252411, 5251745, 5251029, 5250263, 5249446, + 5248579, 5247661, 5246694, 5245676, 5244609, 5243491, 5242324, 5241106, + 5239839, 5238522, 5237156, 5235740, 5234274, 5232759, 5231194, 5229580, + 5227917, 5226205, 5224443, 5222633, 5220773, 5218865, 5216908, 5214902, + 5212847, 5210743, 5208591, 5206391, 5204142, 5201845, 5199499, 5197105, + 5194663, 5192173, 5189635, 5187049, 5184415, 5181734, 5179005, 5176228, + 5173403, 5170532, 5167612, 5164646, 5161632, 5158571, 5155463, 5152308, + 5149106, 5145858, 5142562, 5139220, 5135831, 5132396, 5128915, 5125387, + 5121812, 5118192, 5114526, 5110813, 5107055, 5103250, 5099400, 5095505, + 5091563, 5087577, 5083544, 5079467, 5075344, 5071176, 5066963, 5062706, + 5058403, 5054055, 5049663, 5045226, 5040745, 5036219, 5031649, 5027034, + 5022375, 5017673, 5012926, 5008136, 5003301, 4998423, 4993502, 4988537, + 4983528, 4978476, 4973381, 4968243, 4963062, 4957837, 4952570, 4947261, + 4941908, 4936513, 4931076, 4925596, 4920074, 4914510, 4908904, 4903255, + 4897565, 4891834, 4886060, 4880245, 4874389, 4868491, 4862552, 4856571, + 4850550, 4844488, 4838385, 4832241, 4826056, 4819831, 4813566, 4807260, + 4800914, 4794528, 4788101, 4781635, 4775129, 4768584, 4761999, 4755374, + 4748710, 4742006, 4735264, 4728482, 4721662, 4714802, 4707904, 4700968, + 4693992, 4686979, 4679927, 4672837, 4665709, 4658542, 4651338, 4644097, + 4636817, 4629500, 4622146, 4614754, 4607325, 4599859, 4592356, 4584817, + 4577240, 4569627, 4561978, 4554292, 4546569, 4538811, 4531016, 4523186, + 4515320, 4507418, 4499480, 4491507, 4483499, 4475455, 4467376, 4459262, + 4451114, 4442930, 4434712, 4426459, 4418172, 4409851, 4401495, 4393106, + 4384682, 4376225, 4367733, 4359209, 4350650, 4342059, 4333434, 4324776, + 4316085, 4307361, 4298605, 4289816, 4280994, 4272140, 4263254, 4254335, + 4245385, 4236402, 4227388, 4218342, 4209265, 4200156, 4191016, 4181845, + 4172642, 4163409, 4154145, 4144850, 4135525, 4126170, 4116784, 4107368, + 4097922, 4088445, 4078940, 4069404, 4059839, 4050245, 4040621, 4030968, + 4021286, 4011575, 4001835, 3992067, 3982270, 3972445, 3962591, 3952710, + 3942800, 3932862, 3922897, 3912904, 3902883, 3892835, 3882760, 3872658, + 3862528, 3852372, 3842189, 3831980, 3821744, 3811481, 3801193, 3790878, + 3780537, 3770171, 3759779, 3749361, 3738918, 3728449, 3717955, 3707436, + 3696893, 3686324, 3675731, 3665113, 3654471, 3643805, 3633114, 3622400, + 3611661, 3600899, 3590114, 3579304, 3568472, 3557616, 3546737, 3535835, + 3524911, 3513963, 3502993, 3492001, 3480986, 3469950, 3458891, 3447810, + 3436708, 3425584, 3414438, 3403271, 3392083, 3380874, 3369643, 3358392, + 3347121, 3335828, 3324516, 3313183, 3301829, 3290456, 3279063, 3267650, + 3256218, 3244766, 3233295, 3221804, 3210294, 3198766, 3187219, 3175652, + 3164068, 3152465, 3140843, 3129204, 3117547, 3105871, 3094178, 3082467, + 3070739, 3058994, 3047231, 3035451, 3023655, 3011841, 3000011, 2988164, + 2976301, 2964422, 2952526, 2940615, 2928687, 2916744, 2904786, 2892812, + 2880822, 2868818, 2856798, 2844763, 2832714, 2820650, 2808572, 2796479, + 2784372, 2772251, 2760116, 2747967, 2735804, 2723628, 2711438, 2699235, + 2687019, 2674790, 2662548, 2650294, 2638026, 2625746, 2613454, 2601150, + 2588834, 2576505, 2564165, 2551813, 2539450, 2527075, 2514689, 2502292, + 2489884, 2477465, 2465035, 2452595, 2440144, 2427683, 2415212, 2402730, + 2390239, 2377738, 2365227, 2352707, 2340177, 2327639, 2315091, 2302534, + 2289968, 2277394, 2264811, 2252219, 2239619, 2227011, 2214395, 2201771, + 2189140, 2176500, 2163853, 2151199, 2138538, 2125869, 2113194, 2100511, + 2087822, 2075126, 2062424, 2049716, 2037001, 2024281, 2011554, 1998822, + 1986084, 1973340, 1960591, 1947837, 1935078, 1922314, 1909545, 1896771, + 1883993, 1871210, 1858422, 1845631, 1832836, 1820036, 1807233, 1794426, + 1781616, 1768802, 1755985, 1743165, 1730341, 1717515, 1704686, 1691855, + 1679021, 1666184, 1653346, 1640505, 1627662, 1614818, 1601971, 1589124, + 1576274, 1563424, 1550572, 1537719, 1524865, 1512010, 1499155, 1486299, + 1473442, 1460586, 1447729, 1434872, 1422015, 1409158, 1396302, 1383446, + 1370591, 1357736, 1344882, 1332029, 1319178, 1306327, 1293478, 1280631, + 1267784, 1254940, 1242098, 1229257, 1216419, 1203583, 1190749, 1177917, + 1165088, 1152262, 1139439, 1126619, 1113802, 1100988, 1088177, 1075370, + 1062567, 1049767, 1036971, 1024179, 1011391, 998607, 985827, 973052, + 960282, 947516, 934755, 921999, 909248, 896502, 883762, 871027, 858297, + 845573, 832855, 820143, 807437, 794737, 782043, 769355, 756674, 744000, + 731332, 718672, 706018, 693371, 680732, 668099, 655475, 642857, 630248, + 617646, 605052, 592466, 579888, 567319, 554758, 542205, 529661, 517126, + 504599, 492082, 479573, 467074, 454584, 442103, 429632, 417171, 404719, + 392277, 379845, 367423, 355011, 342610, 330219, 317838, 305469, 293110, + 280761, 268424, 256098, 243783, 231479, 219187, 206906, 194637, 182379, + 170134, 157900, 145679, 133469, 121272, 109087, 96915, 84755, 72608, + 60474, 48353, 36245, 24150, 12068, 0, -12055, -24096, -36124, -48138, + -60138, -72124, -84097, -96055, -107998, -119928, -131843, -143743, + -155629, -167499, -179355, -191196, -203022, -214833, -226628, -238408, + -250173, -261921, -273655, -285372, -297073, -308759, -320428, -332082, + -343719, -355339, -366943, -378531, -390102, -401656, -413193, -424713, + -436216, -447702, -459171, -470623, -482057, -493473, -504872, -516253, + -527616, -538962, -550289, -561599, -572890, -584163, -595417, -606653, + -617871, -629069, -640250, -651411, -662553, -673677, -684781, -695866, + -706932, -717979, -729006, -740013, -751001, -761969, -772918, -783846, + -794755, -805643, -816512, -827360, -838188, -848995, -859782, -870548, + -881294, -892019, -902723, -913407, -924069, -934710, -945330, -955929, + -966507, -977063, -987597, -998111, -1008602, -1019072, -1029520, + -1039946, -1050350, -1060732, -1071092, -1081430, -1091746, -1102039, + -1112310, -1122558, -1132784, -1142987, -1153167, -1163325, -1173459, + -1183571, -1193660, -1203725, -1213768, -1223787, -1233783, -1243755, + -1253704, -1263629, -1273531, -1283409, -1293263, -1303094, -1312900, + -1322683, -1332442, -1342176, -1351886, -1361572, -1371234, -1380871, + -1390484, -1400072, -1409636, -1419175, -1428690, -1438179, -1447644, + -1457083, -1466498, -1475888, -1485252, -1494592, -1503906, -1513194, + -1522458, -1531696, -1540908, -1550095, -1559256, -1568392, -1577501, + -1586585, -1595643, -1604675, -1613681, -1622661, -1631615, -1640543, + -1649444, -1658320, -1667168, -1675991, -1684786, -1693556, -1702298, + -1711015, -1719704, -1728367, -1737002, -1745611, -1754193, -1762748, + -1771276, -1779777, -1788251, -1796697, -1805116, -1813508, -1821873, + -1830210, -1838519, -1846802, -1855056, -1863283, -1871482, -1879654, + -1887798, -1895914, -1904002, -1912062, -1920094, -1928098, -1936074, + -1944022, -1951942, -1959834, -1967697, -1975532, -1983339, -1991117, + -1998867, -2006588, -2014281, -2021945, -2029581, -2037188, -2044766, + -2052316, -2059836, -2067328, -2074791, -2082226, -2089631, -2097007, + -2104354, -2111672, -2118961, -2126221, -2133451, -2140653, -2147825, + -2154968, -2162081, -2169165, -2176220, -2183245, -2190241, -2197207, + -2204143, -2211050, -2217927, -2224775, -2231593, -2238381, -2245139, + -2251868, -2258567, -2265236, -2271875, -2278484, -2285063, -2291612, + -2298131, -2304619, -2311078, -2317507, -2323906, -2330274, -2336612, + -2342920, -2349197, -2355445, -2361662, -2367848, -2374005, -2380130, + -2386226, -2392291, -2398325, -2404329, -2410303, -2416245, -2422158, + -2428039, -2433890, -2439711, -2445500, -2451259, -2456987, -2462685, + -2468352, -2473987, -2479593, -2485167, -2490710, -2496223, -2501704, + -2507155, -2512575, -2517964, -2523322, -2528648, -2533944, -2539209, + -2544443, -2549646, -2554818, -2559958, -2565068, -2570146, -2575193, + -2580209, -2585194, -2590148, -2595071, -2599962, -2604822, -2609651, + -2614449, -2619215, -2623951, -2628654, -2633327, -2637968, -2642578, + -2647157, -2651704, -2656220, -2660705, -2665158, -2669580, -2673971, + -2678330, -2682658, -2686954, -2691220, -2695453, -2699655, -2703826, + -2707966, -2712073, -2716150, -2720195, -2724209, -2728191, -2732142, + -2736061, -2739949, -2743805, -2747630, -2751423, -2755185, -2758916, + -2762615, -2766282, -2769918, -2773523, -2777096, -2780638, -2784148, + -2787627, -2791074, -2794490, -2797874, -2801227, -2804549, -2807839, + -2811097, -2814325, -2817520, -2820684, -2823817, -2826919, -2829989, + -2833027, -2836034, -2839010, -2841955, -2844868, -2847749, -2850599, + -2853418, -2856206, -2858962, -2861687, -2864380, -2867042, -2869673, + -2872273, -2874841, -2877378, -2879884, -2882358, -2884801, -2887213, + -2889594, -2891944, -2894262, -2896549, -2898805, -2901030, -2903223, + -2905386, -2907517, -2909618, -2911687, -2913725, -2915732, -2917708, + -2919653, -2921567, -2923451, -2925303, -2927124, -2928914, -2930673, + -2932402, -2934099, -2935766, -2937402, -2939007, -2940581, -2942124, + -2943637, -2945119, -2946570, -2947990, -2949380, -2950739, -2952068, + -2953366, -2954633, -2955870, -2957076, -2958252, -2959397, -2960511, + -2961596, -2962650, -2963673, -2964666, -2965629, -2966561, -2967463, + -2968335, -2969177, -2969988, -2970769, -2971520, -2972241, -2972932, + -2973593, -2974224, -2974824, -2975395, -2975936, -2976446, -2976927, + -2977378, -2977799, -2978191, -2978552, -2978884, -2979186, -2979459, + -2979702, -2979915, -2980098, -2980252, -2980377, -2980472, -2980537, + -2980574, -2980580, -2980558, -2980506, -2980425, -2980314, -2980175, + -2980006, -2979808, -2979581, -2979325, -2979039, -2978725, -2978382, + -2978010, -2977609, -2977179, -2976721, -2976234, -2975717, -2975173, + -2974599, -2973997, -2973367, -2972708, -2972020, -2971304, -2970560, + -2969787, -2968986, -2968156, -2967298, -2966413, -2965499, -2964556, + -2963586, -2962588, -2961562, -2960507, -2959425, -2958315, -2957177, + -2956012, -2954819, -2953598, -2952349, -2951073, -2949769, -2948438, + -2947079, -2945693, -2944280, -2942839, -2941371, -2939875, -2938353, + -2936803, -2935227, -2933623, -2931992, -2930335, -2928650, -2926939, + -2925201, -2923436, -2921644, -2919826, -2917981, -2916110, -2914212, + -2912288, -2910337, -2908360, -2906356, -2904327, -2902271, -2900189, + -2898081, -2895947, -2893787, -2891601, -2889390, -2887152, -2884889, + -2882599, -2880285, -2877944, -2875578, -2873187, -2870770, -2868328, + -2865860, -2863367, -2860849, -2858306, -2855737, -2853144, -2850525, + -2847882, -2845214, -2842521, -2839803, -2837060, -2834293, -2831501, + -2828684, -2825843, -2822978, -2820088, -2817174, -2814235, -2811273, + -2808286, -2805275, -2802240, -2799181, -2796099, -2792992, -2789862, + -2786708, -2783530, -2780328, -2777103, -2773855, -2770583, -2767288, + -2763969, -2760627, -2757262, -2753874, -2750463, -2747029, -2743572, + -2740092, -2736589, -2733063, -2729515, -2725944, -2722350, -2718734, + -2715096, -2711435, -2707752, -2704047, -2700319, -2696570, -2692798, + -2689004, -2685188, -2681351, -2677492, -2673610, -2669708, -2665783, + -2661838, -2657870, -2653881, -2649871, -2645840, -2641787, -2637714, + -2633619, -2629503, -2625366, -2621209, -2617030, -2612831, -2608611, + -2604371, -2600110, -2595828, -2591526, -2587204, -2582861, -2578499, + -2574116, -2569713, -2565290, -2560847, -2556384, -2551902, -2547399, + -2542877, -2538336, -2533775, -2529194, -2524594, -2519975, -2515337, + -2510679, -2506002, -2501307, -2496592, -2491858, -2487106, -2482335, + -2477545, -2472736, -2467909, -2463064, -2458200, -2453318, -2448417, + -2443499, -2438562, -2433607, -2428635, -2423644, -2418635, -2413609, + -2408565, -2403504, -2398425, -2393328, -2388214, -2383083, -2377934, + -2372769, -2367586, -2362386, -2357169, -2351936, -2346685, -2341418, + -2336134, -2330834, -2325517, -2320183, -2314833, -2309467, -2304085, + -2298686, -2293272, -2287841, -2282395, -2276932, -2271454, -2265960, + -2260451, -2254926, -2249385, -2243829, -2238258, -2232671, -2227070, + -2221453, -2215821, -2210174, -2204512, -2198836, -2193145, -2187439, + -2181718, -2175983, -2170234, -2164470, -2158692, -2152899, -2147093, + -2141272, -2135438, -2129589, -2123727, -2117851, -2111961, -2106058, + -2100141, -2094211, -2088267, -2082310, -2076340, -2070357, -2064360, + -2058351, -2052328, -2046293, -2040245, -2034185, -2028111, -2022026, + -2015927, -2009817, -2003694, -1997559, -1991411, -1985252, -1979081, + -1972897, -1966702, -1960495, -1954276, -1948046, -1941804, -1935551, + -1929286, -1923010, -1916723, -1910425, -1904115, -1897795, -1891464, + -1885121, -1878768, -1872405, -1866030, -1859646, -1853250, -1846845, + -1840429, -1834002, -1827566, -1821119, -1814663, -1808197, -1801720, + -1795234, -1788739, -1782233, -1775719, -1769194, -1762661, -1756118, + -1749565, -1743004, -1736434, -1729854, -1723266, -1716669, -1710063, + -1703448, -1696825, -1690193, -1683553, -1676904, -1670247, -1663582, + -1656909, -1650228, -1643538, -1636841, -1630136, -1623423, -1616703, + -1609974, -1603239, -1596496, -1589745, -1582987, -1576222, -1569450, + -1562671, -1555885, -1549092, -1542292, -1535485, -1528672, -1521852, + -1515025, -1508192, -1501353, -1494507, -1487655, -1480797, -1473933, + -1467063, -1460187, -1453306, -1446418, -1439525, -1432626, -1425722, + -1418812, -1411897, -1404976, -1398050, -1391119, -1384183, -1377243, + -1370297, -1363346, -1356390, -1349430, -1342465, -1335496, -1328522, + -1321544, -1314562, -1307575, -1300584, -1293589, -1286590, -1279587, + -1272580, -1265570, -1258555, -1251537, -1244516, -1237491, -1230463, + -1223431, -1216396, -1209358, -1202317, -1195272, -1188225, -1181175, + -1174122, -1167066, -1160008, -1152947, -1145884, -1138818, -1131750, + -1124679, -1117606, -1110531, -1103455, -1096376, -1089295, -1082212, + -1075128, -1068042, -1060954, -1053864, -1046774, -1039681, -1032588, + -1025493, -1018397, -1011300, -1004202, -997103, -990003, -982902, + -975801, -968698, -961596, -954492, -947389, -940284, -933180, -926075, + -918970, -911865, -904760, -897655, -890550, -883446, -876341, -869237, + -862134, -855031, -847928, -840826, -833725, -826624, -819524, -812426, + -805328, -798231, -791135, -784041, -776947, -769856, -762765, -755676, + -748588, -741502, -734418, -727336, -720255, -713176, -706099, -699024, + -691952, -684881, -677813, -670746, -663683, -656621, -649563, -642506, + -635453, -628402, -621354, -614308, -607266, -600227, -593190, -586157, + -579127, -572100, -565076, -558056, -551040, -544026, -537017, -530011, + -523008, -516010, -509015, -502024, -495038, -488055, -481076, -474102, + -467132, -460166, -453204, -446247, -439294, -432346, -425403, -418464, + -411530, -404600, -397676, -390757, -383842, -376933, -370029, -363130, + -356236, -349347, -342464, -335587, -328715, -321848, -314987, -308132, + -301283, -294439, -287601, -280770, -273944, -267124, -260310, -253503, + -246702, -239907, -233119, -226337, -219561, -212792, -206030, -199274, + -192525, -185783, -179048, -172319, -165598, -158884, -152176, -145476, + -138783, -132098, -125419, -118748, -112085, -105429, -98781, -92140, + -85507, -78881, -72263, -65654, -59052, -52458, -45872, -39294, -32724, + -26163, -19609, -13064, -6528, 0, 6519, 13031, 19533, 26027, 32513, + 38989, 45457, 51916, 58366, 64808, 71240, 77663, 84077, 90482, 96877, + 103264, 109641, 116008, 122367, 128715, 135054, 141384, 147704, 154014, + 160315, 166606, 172886, 179157, 185419, 191670, 197911, 204141, 210362, + 216573, 222773, 228963, 235143, 241312, 247471, 253619, 259757, 265884, + 272001, 278107, 284202, 290286, 296360, 302422, 308474, 314515, 320544, + 326563, 332571, 338567, 344552, 350526, 356489, 362440, 368380, 374308, + 380225, 386131, 392024, 397907, 403777, 409636, 415483, 421318, 427142, + 432954, 438753, 444541, 450317, 456080, 461832, 467571, 473298, 479013, + 484716, 490406, 496084, 501750, 507403, 513044, 518672, 524288, 529891, + 535481, 541059, 546624, 552176, 557715, 563242, 568756, 574257, 579744, + 585219, 590681, 596130, 601565, 606988, 612397, 617793, 623176, 628545, + 633902, 639244, 644574, 649890, 655192, 660481, 665756, 671018, 676266, + 681501, 686721, 691928, 697122, 702301, 707467, 712618, 717756, 722880, + 727990, 733086, 738168, 743236, 748289, 753329, 758354, 763365, 768362, + 773345, 778313, 783267, 788207, 793132, 798043, 802939, 807821, 812688, + 817541, 822379, 827202, 832011, 836806, 841585, 846350, 851100, 855835, + 860555, 865261, 869952, 874627, 879288, 883934, 888565, 893181, 897782, + 902368, 906938, 911494, 916034, 920559, 925069, 929564, 934044, 938508, + 942957, 947391, 951809, 956212, 960599, 964971, 969328, 973669, 977995, + 982305, 986599, 990878, 995142, 999389, 1003622, 1007838, 1012039, + 1016224, 1020393, 1024547, 1028685, 1032807, 1036913, 1041003, 1045078, + 1049136, 1053179, 1057206, 1061217, 1065212, 1069191, 1073154, 1077101, + 1081032, 1084947, 1088845, 1092728, 1096595, 1100445, 1104279, 1108098, + 1111900, 1115685, 1119455, 1123208, 1126945, 1130666, 1134371, 1138059, + 1141731, 1145387, 1149026, 1152649, 1156255, 1159845, 1163419, 1166977, + 1170517, 1174042, 1177550, 1181041, 1184516, 1187975, 1191417, 1194842, + 1198251, 1201644, 1205020, 1208379, 1211721, 1215047, 1218357, 1221650, + 1224926, 1228185, 1231428, 1234654, 1237864, 1241057, 1244233, 1247392, + 1250535, 1253661, 1256770, 1259862, 1262938, 1265997, 1269039, 1272064, + 1275073, 1278064, 1281039, 1283997, 1286938, 1289863, 1292770, 1295661, + 1298535, 1301392, 1304232, 1307055, 1309862, 1312651, 1315424, 1318179, + 1320918, 1323640, 1326345, 1329033, 1331704, 1334358, 1336995, 1339616, + 1342219, 1344805, 1347375, 1349927, 1352463, 1354981, 1357483, 1359968, + 1362435, 1364886, 1367320, 1369736, 1372136, 1374519, 1376884, 1379233, + 1381565, 1383880, 1386178, 1388459, 1390722, 1392969, 1395199, 1397412, + 1399608, 1401787, 1403949, 1406094, 1408222, 1410333, 1412427, 1414504, + 1416564, 1418607, 1420633, 1422642, 1424634, 1426609, 1428567, 1430508, + 1432433, 1434340, 1436230, 1438104, 1439960, 1441800, 1443622, 1445428, + 1447217, 1448988, 1450743, 1452481, 1454202, 1455906, 1457593, 1459264, + 1460917, 1462554, 1464173, 1465776, 1467362, 1468931, 1470483, 1472019, + 1473537, 1475039, 1476524, 1477992, 1479443, 1480878, 1482295, 1483696, + 1485080, 1486448, 1487798, 1489132, 1490449, 1491750, 1493033, 1494300, + 1495551, 1496784, 1498001, 1499201, 1500385, 1501552, 1502702, 1503836, + 1504953, 1506053, 1507137, 1508204, 1509255, 1510289, 1511306, 1512307, + 1513292, 1514260, 1515211, 1516146, 1517065, 1517967, 1518852, 1519721, + 1520574, 1521411, 1522230, 1523034, 1523821, 1524592, 1525347, 1526085, + 1526807, 1527512, 1528202, 1528875, 1529531, 1530172, 1530796, 1531405, + 1531997, 1532572, 1533132, 1533676, 1534203, 1534714, 1535209, 1535689, + 1536152, 1536599, 1537030, 1537445, 1537844, 1538227, 1538594, 1538945, + 1539281, 1539600, 1539904, 1540191, 1540463, 1540719, 1540959, 1541184, + 1541393, 1541586, 1541763, 1541924, 1542070, 1542200, 1542315, 1542414, + 1542497, 1542565, 1542617, 1542654, 1542675, 1542681, 1542671, 1542646, + 1542605, 1542549, 1542477, 1542390, 1542288, 1542171, 1542038, 1541890, + 1541726, 1541548, 1541354, 1541145, 1540921, 1540682, 1540427, 1540158, + 1539873, 1539574, 1539259, 1538929, 1538585, 1538225, 1537851, 1537461, + 1537057, 1536638, 1536204, 1535755, 1535292, 1534814, 1534321, 1533813, + 1533291, 1532754, 1532202, 1531636, 1531055, 1530460, 1529850, 1529225, + 1528587, 1527933, 1527266, 1526584, 1525887, 1525177, 1524451, 1523712, + 1522959, 1522191, 1521409, 1520613, 1519802, 1518978, 1518139, 1517287, + 1516420, 1515540, 1514645, 1513737, 1512814, 1511878, 1510928, 1509964, + 1508986, 1507995, 1506989, 1505970, 1504938, 1503891, 1502831, 1501758, + 1500671, 1499570, 1498456, 1497328, 1496187, 1495033, 1493865, 1492684, + 1491490, 1490282, 1489061, 1487827, 1486579, 1485319, 1484045, 1482758, + 1481458, 1480145, 1478819, 1477480, 1476129, 1474764, 1473386, 1471996, + 1470593, 1469177, 1467748, 1466306, 1464852, 1463385, 1461906, 1460414, + 1458909, 1457392, 1455862, 1454320, 1452766, 1451199, 1449620, 1448028, + 1446425, 1444809, 1443180, 1441540, 1439887, 1438223, 1436546, 1434857, + 1433156, 1431443, 1429719, 1427982, 1426233, 1424473, 1422701, 1420917, + 1419121, 1417314, 1415495, 1413664, 1411822, 1409968, 1408103, 1406226, + 1404338, 1402438, 1400527, 1398604, 1396671, 1394726, 1392770, 1390802, + 1388823, 1386834, 1384833, 1382821, 1380798, 1378764, 1376719, 1374664, + 1372597, 1370520, 1368431, 1366332, 1364223, 1362102, 1359971, 1357829, + 1355677, 1353514, 1351341, 1349157, 1346963, 1344758, 1342544, 1340318, + 1338083, 1335837, 1333581, 1331315, 1329038, 1326752, 1324456, 1322149, + 1319833, 1317506, 1315170, 1312824, 1310468, 1308102, 1305727, 1303342, + 1300947, 1298542, 1296128, 1293704, 1291271, 1288829, 1286377, 1283915, + 1281444, 1278964, 1276475, 1273976, 1271468, 1268951, 1266425, 1263889, + 1261345, 1258792, 1256229, 1253658, 1251078, 1248489, 1245891, 1243284, + 1240669, 1238045, 1235412, 1232771, 1230121, 1227463, 1224796, 1222121, + 1219437, 1216745, 1214044, 1211335, 1208618, 1205893, 1203159, 1200418, + 1197668, 1194910, 1192145, 1189371, 1186589, 1183800, 1181002, 1178197, + 1175384, 1172563, 1169735, 1166898, 1164055, 1161203, 1158344, 1155478, + 1152604, 1149723, 1146834, 1143938, 1141035, 1138125, 1135207, 1132282, + 1129350, 1126411, 1123465, 1120511, 1117551, 1114584, 1111610, 1108629, + 1105642, 1102647, 1099646, 1096639, 1093624, 1090603, 1087576, 1084541, + 1081501, 1078454, 1075400, 1072341, 1069274, 1066202, 1063123, 1060039, + 1056948, 1053851, 1050747, 1047638, 1044523, 1041402, 1038275, 1035142, + 1032003, 1028859, 1025708, 1022552, 1019391, 1016224, 1013051, 1009872, + 1006689, 1003499, 1000304, 997104, 993899, 990688, 987472, 984251, + 981025, 977793, 974556, 971315, 968068, 964816, 961560, 958299, 955032, + 951761, 948485, 945205, 941920, 938630, 935335, 932036, 928733, 925425, + 922112, 918795, 915474, 912148, 908819, 905485, 902146, 898804, 895458, + 892107, 888752, 885394, 882031, 878665, 875295, 871921, 868543, 865161, + 861776, 858387, 854994, 851598, 848198, 844795, 841388, 837978, 834565, + 831148, 827728, 824304, 820878, 817448, 814015, 810579, 807140, 803698, + 800253, 796805, 793354, 789900, 786444, 782984, 779522, 776058, 772590, + 769120, 765648, 762172, 758695, 755215, 751732, 748247, 744760, 741271, + 737779, 734285, 730789, 727290, 723790, 720287, 716783, 713276, 709768, + 706258, 702746, 699232, 695716, 692198, 688679, 685158, 681636, 678111, + 674586, 671059, 667530, 664000, 660468, 656936, 653401, 649866, 646329, + 642791, 639252, 635712, 632171, 628629, 625085, 621541, 617996, 614450, + 610903, 607355, 603807, 600257, 596707, 593157, 589605, 586054, 582501, + 578948, 575395, 571841, 568287, 564732, 561177, 557622, 554067, 550511, + 546955, 543399, 539843, 536287, 532731, 529175, 525618, 522062, 518507, + 514951, 511395, 507840, 504285, 500730, 497176, 493622, 490068, 486515, + 482962, 479410, 475859, 472308, 468757, 465208, 461659, 458110, 454563, + 451016, 447470, 443926, 440382, 436839, 433296, 429755, 426216, 422677, + 419139, 415602, 412067, 408533, 405000, 401469, 397938, 394410, 390882, + 387356, 383832, 380309, 376787, 373268, 369749, 366233, 362718, 359205, + 355693, 352184, 348676, 345170, 341666, 338164, 334664, 331166, 327670, + 324176, 320684, 317194, 313706, 310221, 306738, 303257, 299778, 296302, + 292828, 289356, 285887, 282420, 278956, 275494, 272035, 268578, 265124, + 261673, 258224, 254779, 251335, 247895, 244457, 241023, 237591, 234162, + 230736, 227313, 223893, 220476, 217062, 213651, 210243, 206839, 203437, + 200039, 196644, 193252, 189864, 186479, 183097, 179719, 176344, 172973, + 169605, 166241, 162880, 159522, 156169, 152819, 149473, 146130, 142791, + 139456, 136125, 132797, 129473, 126153, 122838, 119526, 116218, 112913, + 109613, 106317, 103026, 99738, 96454, 93174, 89899, 86628, 83361, + 80098, 76840, 73586, 70336, 67091, 63850, 60614, 57382, 54154, 50931, + 47713, 44499, 41290, 38085, 34885, 31690, 28499, 25313, 22132, 18956, + 15784, 12618, 9456, 6299, 3147, 0, -3142, -6279, -9411, -12538, -15660, + -18777, -21889, -24996, -28098, -31194, -34285, -37371, -40452, -43527, + -46598, -49662, -52722, -55776, -58825, -61868, -64906, -67938, -70965, + -73986, -77002, -80012, -83017, -86016, -89009, -91997, -94979, -97955, + -100926, -103891, -106850, -109803, -112751, -115692, -118628, -121558, + -124482, -127400, -130312, -133219, -136119, -139013, -141901, -144783, + -147659, -150529, -153393, -156251, -159102, -161948, -164787, -167620, + -170447, -173267, -176081, -178889, -181691, -184486, -187275, -190058, + -192834, -195604, -198367, -201124, -203874, -206618, -209355, -212086, + -214811, -217528, -220240, -222944, -225642, -228333, -231018, -233696, + -236368, -239032, -241690, -244341, -246986, -249623, -252254, -254878, + -257495, -260106, -262709, -265306, -267895, -270478, -273054, -275623, + -278185, -280740, -283288, -285829, -288363, -290890, -293410, -295922, + -298428, -300927, -303418, -305903, -308380, -310850, -313313, -315768, + -318217, -320658, -323092, -325519, -327939, -330351, -332756, -335153, + -337544, -339927, -342302, -344671, -347032, -349385, -351731, -354070, + -356401, -358725, -361041, -363350, -365652, -367946, -370232, -372511, + -374783, -377047, -379303, -381552, -383793, -386027, -388253, -390471, + -392682, -394885, -397081, -399268, -401449, -403621, -405786, -407943, + -410093, -412234, -414368, -416495, -418613, -420724, -422827, -424922, + -427010, -429089, -431161, -433225, -435281, -437330, -439370, -441403, + -443427, -445444, -447453, -449454, -451448, -453433, -455410, -457380, + -459342, -461295, -463241, -465179, -467108, -469030, -470944, -472850, + -474747, -476637, -478519, -480393, -482259, -484116, -485966, -487808, + -489641, -491467, -493284, -495094, -496895, -498689, -500474, -502251, + -504020, -505781, -507533, -509278, -511015, -512743, -514463, -516175, + -517879, -519575, -521263, -522943, -524614, -526277, -527932, -529579, + -531218, -532848, -534471, -536085, -537691, -539288, -540878, -542459, + -544032, -545597, -547154, -548702, -550243, -551775, -553298, -554814, + -556321, -557820, -559311, -560794, -562268, -563734, -565192, -566641, + -568083, -569516, -570941, -572357, -573766, -575166, -576557, -577941, + -579316, -580683, -582042, -583392, -584734, -586068, -587394, -588711, + -590020, -591321, -592613, -593898, -595174, -596441, -597701, -598952, + -600195, -601429, -602655, -603873, -605083, -606285, -607478, -608663, + -609839, -611008, -612168, -613320, -614463, -615599, -616726, -617844, + -618955, -620057, -621151, -622237, -623314, -624384, -625445, -626497, + -627542, -628578, -629606, -630626, -631637, -632641, -633636, -634623, + -635601, -636572, -637534, -638488, -639434, -640371, -641301, -642222, + -643135, -644039, -644936, -645824, -646705, -647577, -648440, -649296, + -650144, -650983, -651814, -652637, -653452, -654259, -655057, -655848, + -656630, -657404, -658171, -658929, -659678, -660420, -661154, -661880, + -662597, -663307, -664008, -664701, -665386, -666064, -666733, -667394, + -668047, -668692, -669329, -669958, -670579, -671192, -671797, -672394, + -672983, -673564, -674137, -674702, -675259, -675808, -676349, -676883, + -677408, -677926, -678435, -678937, -679430, -679916, -680394, -680864, + -681327, -681781, -682228, -682666, -683097, -683520, -683935, -684343, + -684742, -685134, -685518, -685895, -686263, -686624, -686977, -687322, + -687660, -687990, -688312, -688626, -688933, -689232, -689523, -689807, + -690083, -690352, -690613, -690866, -691111, -691349, -691580, -691803, + -692018, -692226, -692426, -692619, -692804, -692981, -693151, -693314, + -693469, -693617, -693757, -693890, -694015, -694133, -694243, -694346, + -694442, -694530, -694611, -694685, -694751, -694810, -694861, -694906, + -694942, -694972, -694994, -695010, -695017, -695018, -695011, -694997, + -694976, -694948, -694913, -694870, -694820, -694764, -694700, -694628, + -694550, -694465, -694373, -694273, -694167, -694053, -693932, -693805, + -693670, -693529, -693380, -693225, -693062, -692893, -692717, -692533, + -692343, -692146, -691943, -691732, -691515, -691290, -691059, -690821, + -690577, -690325, -690067, -689802, -689530, -689252, -688967, -688675, + -688377, -688072, -687760, -687442, -687117, -686785, -686447, -686103, + -685752, -685394, -685030, -684659, -684282, -683898, -683508, -683111, + -682708, -682299, -681883, -681461, -681033, -680598, -680157, -679709, + -679255, -678795, -678329, -677856, -677377, -676892, -676401, -675904, + -675400, -674890, -674374, -673852, -673324, -672790, -672250, -671703, + -671151, -670592, -670028, -669457, -668881, -668299, -667710, -667116, + -666516, -665910, -665298, -664680, -664057, -663427, -662792, -662151, + -661504, -660851, -660193, -659529, -658859, -658184, -657503, -656816, + -656124, -655426, -654722, -654013, -653298, -652578, -651852, -651120, + -650383, -649641, -648893, -648140, -647381, -646617, -645848, -645073, + -644293, -643507, -642716, -641920, -641118, -640312, -639500, -638682, + -637860, -637032, -636200, -635362, -634519, -633670, -632817, -631959, + -631095, -630226, -629353, -628474, -627591, -626702, -625809, -624910, + -624007, -623099, -622185, -621267, -620344, -619417, -618484, -617547, + -616605, -615658, -614706, -613750, -612789, -611823, -610853, -609878, + -608899, -607914, -606926, -605932, -604934, -603932, -602925, -601913, + -600898, -599877, -598852, -597823, -596790, -595752, -594709, -593663, + -592612, -591556, -590497, -589433, -588365, -587293, -586216, -585135, + -584050, -582961, -581868, -580771, -579670, -578564, -577455, -576341, + -575224, -574102, -572977, -571848, -570714, -569577, -568436, -567291, + -566142, -564989, -563833, -562672, -561508, -560340, -559169, -557993, + -556814, -555631, -554445, -553255, -552061, -550864, -549663, -548459, + -547251, -546039, -544824, -543606, -542384, -541158, -539930, -538697, + -537462, -536223, -534980, -533735, -532486, -531234, -529978, -528719, + -527457, -526192, -524924, -523652, -522377, -521099, -519818, -518534, + -517247, -515957, -514664, -513367, -512068, -510766, -509461, -508153, + -506842, -505528, -504211, -502891, -501569, -500243, -498915, -497584, + -496251, -494914, -493575, -492233, -490889, -489542, -488192, -486839, + -485484, -484127, -482766, -481404, -480038, -478671, -477300, -475928, + -474553, -473175, -471795, -470413, -469028, -467641, -466251, -464860, + -463466, -462069, -460671, -459270, -457867, -456462, -455055, -453645, + -452234, -450820, -449404, -447986, -446566, -445144, -443720, -442294, + -440866, -439436, -438004, -436570, -435135, -433697, -432258, -430816, + -429373, -427928, -426482, -425033, -423583, -422131, -420677, -419222, + -417765, -416306, -414846, -413384, -411921, -410456, -408989, -407521, + -406051, -404580, -403107, -401633, -400158, -398681, -397203, -395723, + -394242, -392759, -391275, -389790, -388304, -386816, -385327, -383837, + -382346, -380853, -379360, -377865, -376369, -374872, -373373, -371874, + -370374, -368872, -367370, -365866, -364362, -362856, -361350, -359843, + -358334, -356825, -355315, -353804, -352293, -350780, -349267, -347753, + -346238, -344722, -343206, -341689, -340171, -338652, -337133, -335614, + -334093, -332572, -331051, -329528, -328006, -326483, -324959, -323435, + -321910, -320385, -318859, -317333, -315806, -314280, -312752, -311225, + -309697, -308169, -306640, -305111, -303582, -302053, -300523, -298993, + -297463, -295933, -294403, -292872, -291342, -289811, -288280, -286749, + -285218, -283688, -282157, -280625, -279094, -277564, -276033, -274502, + -272971, -271440, -269910, -268379, -266849, -265319, -263789, -262259, + -260729, -259200, -257671, -256142, -254614, -253085, -251557, -250030, + -248503, -246976, -245449, -243923, -242397, -240872, -239347, -237823, + -236299, -234776, -233253, -231730, -230208, -228687, -227166, -225646, + -224127, -222608, -221090, -219572, -218055, -216539, -215023, -213508, + -211994, -210481, -208968, -207456, -205945, -204435, -202926, -201417, + -199910, -198403, -196897, -195392, -193888, -192384, -190882, -189381, + -187880, -186381, -184883, -183385, -181889, -180394, -178900, -177407, + -175915, -174424, -172934, -171445, -169958, -168472, -166986, -165503, + -164020, -162538, -161058, -159579, -158101, -156625, -155150, -153676, + -152203, -150732, -149262, -147794, -146327, -144861, -143397, -141934, + -140473, -139013, -137554, -136097, -134642, -133188, -131735, -130284, + -128835, -127387, -125940, -124496, -123053, -121611, -120171, -118733, + -117296, -115861, -114428, -112997, -111567, -110138, -108712, -107287, + -105864, -104443, -103024, -101606, -100190, -98776, -97364, -95954, + -94545, -93139, -91734, -90331, -88930, -87531, -86134, -84739, -83346, + -81955, -80565, -79178, -77793, -76410, -75028, -73649, -72272, -70897, + -69524, -68153, -66784, -65417, -64053, -62690, -61330, -59971, -58615, + -57261, -55910, -54560, -53213, -51868, -50525, -49184, -47846, -46510, + -45176, -43844, -42515, -41188, -39863, -38541, -37221, -35903, -34588, + -33275, -31964, -30656, -29350, -28047, -26746, -25447, -24151, -22857, + -21566, -20277, -18991, -17707, -16426, -15147, -13870, -12597, -11325, + -10057, -8790, -7527, -6266, -5007, -3752, -2498, -1248, 0 +}; diff --git a/kernel/framework/audio/grc3code.inc b/kernel/framework/audio/grc3code.inc new file mode 100644 index 0000000..a44d037 --- /dev/null +++ b/kernel/framework/audio/grc3code.inc @@ -0,0 +1,384 @@ +/* + * Purpose: Low level macros for GRC3 + * + * GRC library version 3.1 + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +__inline__ signed short +clamp16 (int sample) +{ + if (sample > 32767) + return 32767; + else if (sample < -32768) + return -32768; + else + return sample; +} + +__inline__ signed char +clamp8 (int sample) +{ + if (sample > 127) + return 127; + else if (sample < -128) + return -128; + else + return sample; +} + + +#define IN8(a) ((a^0x80)<<15) +#define OUT8(d,a) d=((clamp8(a>>15))^0x80) + +#define IN16(a) (a<<7) +#define OUT16(d,a) d=clamp16(a>>7) + +#define INv16(a) (_swap16(a)<<7) +#define OUTv16(d,a) d=_swap16(clamp16(a>>7)) + +#define IN32(a) (a) +#define OUT32(d,a) d=(a) + +#define INv32(a) _swap32(a) +#define OUTv32(d,a) d=_swap32(a) + +#define DOCLAMP(a) (a) /* do not clip overflows */ + +#undef QSUFFIX + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_L + +#define QSUFFIX(a) a##L + +#if 0 +#define SUFFIX(a) a##L +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##L8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##L16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Lv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##L32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Lv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_M + +#define QSUFFIX(a) a##M + +#if 0 +#define SUFFIX(a) a##M +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##M8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##M16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Mv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##M32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Mv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_H + +#define QSUFFIX(a) a##H + +#if 0 +#define SUFFIX(a) a##H +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##H8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##H16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Hv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##H32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Hv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_H + +#define QSUFFIX(a) a##HX + +#if 0 +#define SUFFIX(a) a##HX +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##HX8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##HX16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##HXv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##HX32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##HXv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_P + +#define QSUFFIX(a) a##P + +#if 0 +#define SUFFIX(a) a##P +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##P8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##P16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Pv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##P32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##Pv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ + +#ifdef GRC3_COMPILE_P + +#define QSUFFIX(a) a##PX + +#if 0 +#define SUFFIX(a) a##PX +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" +#endif + +#define SUFFIX(a) a##PX8_8 +#define TYPEIN uint8_t +#define TYPEOUT uint8_t +#define IN IN8 +#define OUT OUT8 +#include "grc3inc.inc" + +#define SUFFIX(a) a##PX16_16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN IN16 +#define OUT OUT16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##PXv16_v16 +#define TYPEIN int16_t +#define TYPEOUT int16_t +#define IN INv16 +#define OUT OUTv16 +#include "grc3inc.inc" + +#define SUFFIX(a) a##PX32_32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN IN32 +#define OUT OUT32 +#include "grc3inc.inc" + +#define SUFFIX(a) a##PXv32_v32 +#define TYPEIN int32_t +#define TYPEOUT int32_t +#define IN INv32 +#define OUT OUTv32 +#include "grc3inc.inc" + +#undef QSUFFIX + +#endif + +/***********************************************************************/ diff --git a/kernel/framework/audio/grc3inc.inc b/kernel/framework/audio/grc3inc.inc new file mode 100644 index 0000000..98c9205 --- /dev/null +++ b/kernel/framework/audio/grc3inc.inc @@ -0,0 +1,165 @@ +/* + * Purpose: Resampling routines for GRC3 + * + * GRC library version 3.1 + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +static __inline__ int32_t SUFFIX (grc3_upsample_) (grc3state_t * grc, + TYPEIN * src, + TYPEOUT * dst, uint32_t sz, + uint32_t bufsz, + int32_t inc, + int32_t offset) +{ + GRCvreg uint32_t ptr = grc->ptr; + uint32_t srcrate = grc->srcrate; + uint32_t dstrate = grc->dstrate; + GRCvreg int32_t *history = grc->historyptr; + uint32_t filtfactor = grc->filtfactor; + uint32_t dstsz = 0; + + grc->insz = sz; + + src += offset; + dst += offset; + + while (sz > 0) + { + while (ptr < dstrate) + { + if (dstsz >= bufsz) + goto endloop; + OUT (dst[0], + DOCLAMP (QSUFFIX (_conv31_) + (history, _grc_sat6 (ptr, filtfactor)))); + ptr += srcrate; +#ifndef INCOUT + dst += inc; +#else + INCOUT +#endif + dstsz++; + } + + history++; + if (history >= (grc->history + GRC3_MAXHISTORY * 2)) + history -= GRC3_MAXHISTORY; + + history[0] = history[-GRC3_MAXHISTORY] = IN (((*src))); + + ptr -= dstrate; + + sz--; +#ifndef INCIN + src += inc; +#else + INCIN +#endif + } +endloop: + + grc->ptr = ptr; + grc->historyptr = history; + grc->outsz = dstsz; + grc->insz -= sz; + + return (int32_t) dstsz; +} + +__inline__ int32_t SUFFIX (grc3_dnsample_) (grc3state_t * grc, TYPEIN * src, + TYPEOUT * dst, uint32_t sz, + uint32_t bufsz, int32_t inc, + int32_t offset) +{ + GRCvreg uint32_t ptr = grc->ptr; + uint32_t srcrate = grc->srcrate; + uint32_t dstrate = grc->dstrate; + uint32_t sat = grc->sat; + GRCvreg int32_t *history = grc->historyptr; + uint32_t filtfactor = grc->filtfactor; + uint32_t dstsz = 0; + + grc->insz = sz; + + src += offset; + dst += offset; + + while (sz > 0) + { + while (ptr >= srcrate) + { + if (dstsz >= bufsz) + goto endloop; + ptr -= srcrate; + OUT (dst[0], + DOCLAMP (QSUFFIX (_conv31d_) + (history, _grc_sat6 (ptr, filtfactor), + grc->ptr_incv))); +#ifndef INCOUT + dst += inc; +#else + INCOUT +#endif + dstsz++; + } + + history++; + if (history >= (grc->history + GRC3_MAXHISTORY * 2)) + history -= GRC3_MAXHISTORY; + + /* TODO: for better quality multiplier is worth moving to output cascade */ + history[0] = history[-GRC3_MAXHISTORY] = + _grc_sat31 (IN (((*src))), sat); + + ptr += dstrate; + + sz--; +#ifndef INCIN + src += inc; +#else + INCIN +#endif + } +endloop: + + grc->ptr = ptr; + grc->historyptr = history; + grc->outsz = dstsz; + grc->insz -= sz; + + return (int32_t) dstsz; +} + +static __inline__ int32_t SUFFIX (grc3_resample_) (grc3state_t * grc, + void *src, void *dst, + uint32_t sz, + uint32_t bufsz, + int32_t inc, + int32_t offset) +{ + if (grc->srcrate <= grc->dstrate) + return SUFFIX (grc3_upsample_) (grc, (TYPEIN *) src, (TYPEOUT *) dst, sz, + bufsz, inc, offset); + else + return SUFFIX (grc3_dnsample_) (grc, (TYPEIN *) src, (TYPEOUT *) dst, sz, + bufsz, inc, offset); +} + +#undef TYPEIN +#undef TYPEOUT +#undef INCIN +#undef INCOUT +#undef SUFFIX +#undef IN +#undef OUT diff --git a/kernel/framework/audio/oss_audio_core.c b/kernel/framework/audio/oss_audio_core.c new file mode 100644 index 0000000..4eeba4a --- /dev/null +++ b/kernel/framework/audio/oss_audio_core.c @@ -0,0 +1,6639 @@ +/* + * Purpose: Audio core functionality of OSS + */ + +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +#undef NO_COOKED_MODE +#define AUDIO_C + +#define GRC 3 + +/* Some debugging macros (for future use) */ +#define UP_STATUS(x) +#define DOWN_STATUS(x) + +#include <oss_config.h> + +extern int src_quality; +extern int vmix_disabled; +extern int excl_policy; + +oss_mutex_t audio_global_mutex; + +/* + * Resizeable audio device tables + */ +static oss_memblk_t *audio_global_memblk=NULL; +int oss_max_audio_devfiles=4; +int oss_max_audio_engines=8; +#define AUDIO_MALLOC(osdev, size) oss_memblk_malloc(&audio_global_memblk, size) +#define AUDIO_FREE(osdev, addr) oss_memblk_free(&audio_global_memblk, addr) +#define AUDIO_ENGINE_INCREMENT (oss_max_audio_engines/2) +#define AUDIO_DEVFILE_INCREMENT (oss_max_audio_devfiles/2) + +/* + * List of audio devices in the system + */ +adev_t **audio_engines = NULL; +int num_audio_engines = 0; + +adev_t **audio_devfiles = NULL; +int num_audio_devfiles = 0; +extern int flat_device_model; + +#if 0 +/* + * Device lists (input, output, duplex) for /dev/dsp. + */ + +oss_devlist_t dspinlist = { 0 }; +oss_devlist_t dspoutlist = { 0 }; +oss_devlist_t dspinoutlist = { 0 }; +oss_devlist_t dspoutlist2 = { 0 }; /* 2nd priority output devices */ +#endif + +/* + * Applications known to require special handling (mmap, etc.). These + * applications are listed here because they use the OSS API incorrectly and + * some workarounds by OSS are required to make them to work. + */ +typedef struct +{ + char *name; + int open_flags; +} oss_specialapp_t; + +oss_specialapp_t special_apps[] = { + {"quake", OF_MMAP}, + {"quake2", OF_MMAP}, + {"q3demo.x86", OF_MMAP}, + {"wolfsp.x86", OF_MMAP}, + {"wolfmp.x86", OF_MMAP}, + {"quake3", OF_MMAP}, + {"wolf3d", OF_MMAP}, + {"rtcw", OF_MMAP}, + {"artsd", OF_BLOCK | OF_NOCONV}, + {"realplay.bin", OF_SMALLFRAGS}, + {"hxplay.bin", OF_SMALLFRAGS}, +#if 1 + {"auserver", OF_NOCONV}, /* Win4lin */ +#endif + {"quake3.x86", OF_MMAP}, + {"wolf.x86", OF_MMAP}, + {"et.x86", OF_MMAP}, + {"doom.x86", OF_MMAP}, + // {"mozilla-bin", OF_MEDIUMBUF}, /* For the flash plugin */ + {NULL, 0} +}; + +#ifdef APPLIST_SUPPORT +/* + * Lookup tables for applications. Use these lists to assign + * fixed target devices for given applications. + */ + +app_routing_t oss_applist[APPLIST_SIZE]; +int oss_applist_size = 0; + +static int +app_lookup (int mode, const char *appname, int *open_flags) +{ + int i, dev; + + if (appname == NULL) + return -2; + + for (i = 0; i < oss_applist_size; i++) + { + if (oss_applist[i].mode == mode) + if (strncmp (appname, oss_applist[i].name, 32) == 0) + { + dev = oss_applist[i].dev; + + if (dev < -1 || dev >= num_audio_devfiles) + return -1; + *open_flags |= oss_applist[i].open_flags; + return dev; + } + } + + return -2; +} +#endif + +/*ARGSUSED*/ +static int +get_open_flags (int mode, int open_flags, struct fileinfo *file) +{ + char *name; + int i; + + if ((name = GET_PROCESS_NAME (file)) != NULL) + { +#ifdef APPLIST_SUPPORT + if (app_lookup (mode, name, &open_flags) >= -1) + return open_flags; +#endif + + for (i = 0; special_apps[i].name != NULL; i++) + if (strcmp (special_apps[i].name, name) == 0) + { + open_flags |= special_apps[i].open_flags; + return open_flags; + } + } + + return open_flags; +} + +#define BIGWRITE_SIZE 1024 + +#define NEUTRAL8 0x80 +#define NEUTRAL16 0x00 +#define OSS_PLUGIN_VERSION (0x100|oss_sample_bits) + +int always_cooked = 0; +static unsigned long sync_seed = 0; + +#define COOKED_BLOCK_SIZE 4096 + +extern oss_uint64_t oss_tmp_timer; + +/* + * Structure used by oss_audio_register_client() + */ +typedef struct +{ + oss_audio_startup_func func; + void *devc; + oss_device_t *osdev; +} audio_startup_t; + +#define MAX_STARTUPS 5 +static audio_startup_t audio_startups[MAX_STARTUPS]; +static int num_audio_startups = 0; + +int +dmap_get_qlen (dmap_p dmap) +{ + int len; + + if (dmap->dma_mode == PCM_ENABLE_OUTPUT) + { + if (dmap->fragment_size == 0) + { + cmn_err (CE_WARN, "dmap (out) fragment_size=0, dev=%s\n", + dmap->adev->name); + return 0; + } + + len = + (int) ((dmap->user_counter - + dmap->byte_counter) / dmap->fragment_size); + if (len < 0) + len = 0; + return len; + } + + if (dmap->dma_mode == PCM_ENABLE_INPUT) + { + if (dmap->fragment_size == 0) + { + cmn_err (CE_WARN, "dmap (in) fragment_size=0, dev=%s\n", + dmap->adev->name); + return 0; + } + + len = + (int) ((dmap->byte_counter - + dmap->user_counter) / dmap->fragment_size); + if (len < 0) + len = 0; + return len; + } + + return 0; +} + +int +dmap_get_qhead (dmap_p dmap) +{ + unsigned int ptr; + + if (dmap->fragment_size == 0) + return 0; + + if (dmap->dma_mode == PCM_ENABLE_OUTPUT) + { + ptr = (int) (dmap->byte_counter % dmap->bytes_in_use); + return ptr / dmap->fragment_size; + } + + if (dmap->dma_mode == PCM_ENABLE_INPUT) + { + ptr = (int) (dmap->user_counter % dmap->bytes_in_use); + return ptr / dmap->fragment_size; + } + + return 0; +} + +int +dmap_get_qtail (dmap_p dmap) +{ + unsigned int ptr; + + if (dmap->fragment_size == 0) + return 0; + + if (dmap->dma_mode == PCM_ENABLE_INPUT) + { + ptr = (int) (dmap->byte_counter % dmap->bytes_in_use); + return ptr / dmap->fragment_size; + } + + if (dmap->dma_mode == PCM_ENABLE_OUTPUT) + { + ptr = (int) (dmap->user_counter % dmap->bytes_in_use); + return ptr / dmap->fragment_size; + } + + return 0; +} + +int +oss_audio_set_format (int dev, int fmt, int format_mask) +{ + adev_p adev; + int ret, newfmt; + unsigned char neutral_byte; + audio_format_info_p fmt_info; + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (!adev->enabled) + return OSS_ENXIO; + + if (fmt == 0) + return adev->user_parms.fmt; + + if (fmt == AFMT_AC3) + { + /* + * AC3 cannot tolerate any format/rate conversions so disable them. + */ + adev->cooked_enable = 0; + + /* + * Report EIO error if the application tries to do something stupid. + * Otherwise buggy applications may produce loud helicopter sound. + */ + + if (adev->flags & ADEV_VMIX) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1018, + "AFMT_AC3 used with virtual mixing device."), + 0); + /* + * Errordesc: + * Devices that support virtual or hardware mixing are + * probably not capable to play AC3 streams properly. + * + * Virtual mixing is enabled on the audio device. The virtual + * mixer driver will do voolume control that corrupts the AC3 + * bitstream. Applications using AC3 should + * open the audio device with O_EXCL to make sure that virtual + * mixing is properly bypassed. + */ + return OSS_EIO; + } + + if (adev->flags & ADEV_HWMIX) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1019, + "AFMT_AC3 used with hardware mixing device."), + 0); + /* + * Errordesc: + * Devices that support virtual or hardware mixing are + * probably not capable to play AC3 streams properly. + * + * This error may be caused by user who selected a wrong audio + * device. + */ + return OSS_EIO; + } + + if (adev->dmask & DMASK_OUT) + if (adev->dmap_out->flags & DMAP_COOKED) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1020, + "AFMT_AC3 used with format conversions enabled."), + 0); + /* + * Errordesc: + * AC3 audio format (AFMT_AC3) bitstreams don't tolerate any + * kind of sample rate or format conversions. However it looks + * like conversions would be needed. The reason may be that the + * application had earlier requested some sample rate that is + * not supported by the device. + * + * Applications using AC3 should call SNDCTL_DSP_COOKEDMODE to + * disable format conversions. + */ + return OSS_EIO; + } + } + + ret = adev->d->adrv_set_format (dev, fmt); + + adev->user_parms.fmt = ret; + adev->hw_parms.fmt = ret; + + if ((fmt_info = oss_find_format (ret)) == NULL) + neutral_byte = 0; + else + { + neutral_byte = fmt_info->neutral_byte; + } + + if (adev->dmask & DMASK_OUT) + adev->dmap_out->neutral_byte = neutral_byte; + if (adev->dmask & DMASK_IN) + adev->dmap_in->neutral_byte = neutral_byte; + + /* Disable format conversions if mmap() */ + if ((adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) || + (adev->dmap_in->mapping_flags & DMA_MAP_MAPPED) || + (adev->open_flags & OF_MMAP)) + return ret; + +#ifdef NO_COOKED_MODE + return ret; +#else + + if (ret == fmt) + return ret; + + if (!adev->cooked_enable) + return ret; + +/* + * We need to perform format conversions because the device + * doesn't support the requested format. + */ + + /* Convertable format? */ + if (!(fmt & CONVERTABLE_FORMATS)) + { + return ret; + } + + adev->user_parms.fmt = fmt; + if (adev->dmask & DMASK_OUT) + { + adev->dmap_out->flags |= DMAP_COOKED; + } + + if (adev->dmask & DMASK_IN) + { + adev->dmap_in->flags |= DMAP_COOKED; + } + + /* If the device is in 16 bit format then just return */ + if (ret & (AFMT_S16_LE | AFMT_S16_BE)) + return fmt; + + /* Try to find a suitable format */ + + if (fmt == AFMT_MU_LAW && ret == AFMT_U8) /* mu-Law <-> 8 bit linear */ + return fmt; + + if (format_mask & AFMT_S16_LE) + { + newfmt = AFMT_S16_LE; + goto got_it; + } + + if (format_mask & AFMT_S16_BE) + { + newfmt = AFMT_S16_BE; + goto got_it; + } + + return fmt; /* Nothing better than the one suggested by the device */ +got_it: + + ret = adev->d->adrv_set_format (dev, newfmt); + + adev->hw_parms.fmt = ret; + + return fmt; +#endif +} + +int +oss_audio_set_channels (int dev, int ch) +{ + adev_p adev; + int ret; + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (!adev->enabled) + return OSS_ENXIO; + + if (ch == 0) + return adev->user_parms.channels; + + ret = adev->d->adrv_set_channels (dev, ch); + + if (ret < 1) + { + cmn_err (CE_WARN, + "Audio engine %d: Internal error in channel setup, err=%d, ch=%d\n", + dev, ret, ch); + return OSS_EIO; + } + + if (ch > 2 && ch > ret) /* Requested multi channel mode not possible */ + ch = ret; + + adev->user_parms.channels = ret; + adev->hw_parms.channels = ret; + + /* Disable format conversions if mmap() */ + if ((adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) || + (adev->dmap_in->mapping_flags & DMA_MAP_MAPPED) || + (adev->open_flags & OF_MMAP)) + return ret; + + if (ret > 1 && (adev->flags & ADEV_NONINTERLEAVED)) + { + if (adev->dmask & DMASK_OUT) + adev->dmap_out->flags |= DMAP_COOKED; + + if (adev->dmask & DMASK_IN) + adev->dmap_in->flags |= DMAP_COOKED; + } + + +#ifdef NO_COOKED_MODE + return ret; +#else + + if (!adev->cooked_enable) + return ret; + + if (ret == ch) + return ret; + + /* For the time being only stereo <->mono is possible */ + if (ch != ret) + if (!((ch == 1 && ret == 2) || (ch == 2 && ret == 1))) + return ret; + +/* + * Needs to perform format conversions + */ + + adev->user_parms.channels = ch; + if (adev->dmask & DMASK_OUT) + { + adev->dmap_out->flags |= DMAP_COOKED; + } + + if (adev->dmask & DMASK_IN) + { + adev->dmap_in->flags |= DMAP_COOKED; + } + + return ch; +#endif +} + +int +oss_audio_set_rate (int dev, int rate) +{ + adev_p adev; + int ret; + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (!adev->enabled) + return OSS_ENXIO; + + if (rate == 0) + return adev->user_parms.rate; + + ret = adev->d->adrv_set_rate (dev, rate); + if (ret < 0) + return ret; + + adev->user_parms.rate = ret; + adev->hw_parms.rate = ret; + + /* Disable format conversions if mmap() */ + if ((adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) || + (adev->dmap_in->mapping_flags & DMA_MAP_MAPPED) || + (adev->flags & ADEV_NOSRC) || (adev->open_flags & OF_MMAP)) + return ret; + + if (!adev->cooked_enable) + return ret; + +#if defined(NO_COOKED_MODE) || GRC == 0 + return ret; +#else + + if (ret == rate) /* No SRC needed */ + return ret; + +/* + * Needs to perform format conversions + */ + + adev->user_parms.rate = rate; + if (adev->dmask & DMASK_OUT) + { + adev->dmap_out->flags |= DMAP_COOKED; + } + + if (adev->dmask & DMASK_IN) + { + adev->dmap_in->flags |= DMAP_COOKED; + } + + return rate; +#endif +} + +static void +reset_dmap (dmap_p dmap) +{ +#ifdef DO_TIMINGS + oss_do_timing ("Reset dmap"); +#endif + dmap->dma_mode = 0; + dmap->flags &= (DMAP_FRAGFIXED | DMAP_COOKED); + dmap->byte_counter = dmap->user_counter = 0; + dmap->fragment_counter = 0; + dmap->interrupt_count = 0; + dmap->expand_factor = UNIT_EXPAND; /* 1:1 */ + dmap->play_underruns = dmap->rec_overruns = 0; + dmap->num_errors = 0; + dmap->leftover_bytes = 0; + dmap->leftover_buf = NULL; +} + +int +oss_alloc_dmabuf (int dev, dmap_p dmap, int direction) +{ + adev_t *adev = dmap->adev; + + if (adev == NULL) + { + cmn_err (CE_WARN, "oss_alloc_dmabuf: adev==NULL\n"); + return OSS_EIO; + } + + return __oss_alloc_dmabuf (dev, dmap, adev->dmabuf_alloc_flags, + adev->dmabuf_maxaddr, direction); +} + +static int +default_alloc_buffer (int dev, dmap_t * dmap, int direction) +{ + int err; + + if (dmap->dmabuf != NULL) + return 0; + + if ((err = oss_alloc_dmabuf (dev, dmap, direction)) < 0) + return err; + + return 0; +} + +/*ARGSUSED*/ +static int +default_free_buffer (int dev, dmap_t * dmap, int direction) +{ + if (dmap->dmabuf == NULL) + return 0; + + oss_free_dmabuf (dev, dmap); + + dmap->dmabuf = NULL; + dmap->dmabuf_phys = 0; + return 0; +} + +static int +init_dmap (adev_p adev, dmap_p dmap, int direction) +{ + int retval; + int l, static_len; + char *p; + oss_native_word flags; + + if (dmap->osdev == NULL) + { + cmn_err (CE_WARN, "dmap->osdev==NULL\n"); + return OSS_EIO; + } + + if (dmap->dmabuf == NULL) + { + if (adev->d->adrv_alloc_buffer != NULL) + { + retval = + adev->d->adrv_alloc_buffer (adev->engine_num, dmap, direction); + } + else + { + retval = default_alloc_buffer (adev->engine_num, dmap, direction); + } + if (retval < 0) + { + cmn_err (CE_WARN, + "Failed to allocate DMA buffer for audio engine %d/%s\n", + adev->engine_num, adev->name); + return retval; + } + + if (dmap->dmabuf_phys == 0) /* Cannot do mmap */ + adev->flags |= ADEV_NOMMAP; + } + +#ifdef linux + if (dmap->dmabuf_phys == 0) + adev->flags |= ADEV_NOMMAP; +#endif + dmap->flags &= ~DMAP_FRAGFIXED; + + l = sizeof (dmap_t); + static_len = (oss_native_word) & dmap->flags - (oss_native_word) dmap; + + p = (char *) &dmap->flags; + l -= static_len; + if (p != NULL) + memset (p, 0, l); /* Clear all */ + + if (!dmap->buffer_protected && dmap->dmabuf != NULL) + memset (dmap->dmabuf, dmap->neutral_byte, dmap->buffsize); + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + reset_dmap (dmap); + dmap->bytes_in_use = dmap->buffsize; + dmap->frame_size = 1; + dmap->user_frame_size = 1; + dmap->flags = 0; + dmap->audio_callback = NULL; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return 0; +} + +void +audio_reset_adev (adev_p adev) +{ + oss_native_word flags, dflags; +#ifdef DO_TIMINGS + oss_do_timing ("Reset input & output\n"); +#endif + sync_seed++; + if (!adev->enabled) + return; + + dflags = 0; + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + adev->go = 1; + adev->enable_bits = adev->open_mode; + if (adev->open_mode & OPEN_WRITE) + { + dmap_p dmap = adev->dmap_out; + dmap->flags &= ~DMAP_PREPARED; + memset (dmap->dmabuf, 0, dmap->buffsize); + } + + if (adev->d->adrv_halt_input && adev->d->adrv_halt_output) + { + if (adev->open_mode & OPEN_READ) + { + dmap_p dmap = adev->dmap_in; + MUTEX_ENTER (dmap->mutex, dflags); + dmap->flags &= ~DMAP_PREPARED; + if ((dmap->dma_mode == PCM_ENABLE_INPUT) + && (dmap->flags & DMAP_STARTED)) + { +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_RESET_INPUT); +#endif + MUTEX_EXIT (dmap->mutex, dflags); + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + adev->d->adrv_halt_input (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + MUTEX_ENTER (dmap->mutex, dflags); + reset_dmap (dmap); + } + MUTEX_EXIT (dmap->mutex, dflags); + } + if (adev->open_mode & OPEN_WRITE) + { + dmap_p dmap = adev->dmap_out; + MUTEX_ENTER (dmap->mutex, dflags); + if ((dmap->dma_mode == PCM_ENABLE_OUTPUT) && + (dmap->flags & DMAP_STARTED)) + { +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_RESET_OUTPUT); +#endif + MUTEX_EXIT (dmap->mutex, dflags); + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + adev->d->adrv_halt_output (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + MUTEX_ENTER (dmap->mutex, dflags); + reset_dmap (dmap); + } + MUTEX_EXIT (dmap->mutex, dflags); + } + + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + return; + } + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_RESET_OUTPUT); + ossd_event (adev->engine_num, OSSD_EV_RESET_INPUT); +#endif + adev->d->adrv_halt_io (adev->engine_num); + + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + reset_dmap (adev->dmap_out); + reset_dmap (adev->dmap_in); + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); +} + +static void +audio_reset_input (adev_p adev) +{ + dmap_p dmap = adev->dmap_in; + oss_native_word flags, dflags; + + dflags = 0; + if (!(adev->open_mode & OPEN_READ)) + return; + + if (dmap->dma_mode != PCM_ENABLE_INPUT) + return; + + if (!(dmap->flags & DMAP_STARTED)) + return; + +#ifdef DO_TIMINGS + oss_do_timing ("Reset input\n"); +#endif + dmap->flags &= ~DMAP_PREPARED; + + if (adev->d->adrv_halt_input) + { +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_RESET_INPUT); +#endif + adev->d->adrv_halt_input (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + reset_dmap (dmap); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return; + } + + adev->d->adrv_halt_io (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + MUTEX_ENTER (dmap->mutex, dflags); + reset_dmap (dmap); + MUTEX_EXIT (dmap->mutex, dflags); + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); +} + +static void +audio_reset_output (adev_p adev) +{ + dmap_p dmap = adev->dmap_out; + oss_native_word flags, dflags; + dflags = 0; + + sync_seed++; + + if (!(adev->open_mode & OPEN_WRITE)) + return; + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT) + return; + + if (!(dmap->flags & DMAP_STARTED)) + return; + + dmap->flags &= ~DMAP_PREPARED; +#ifdef DO_TIMINGS + oss_do_timing ("Reset output\n"); +#endif + + if (adev->d->adrv_halt_output) + { +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_RESET_OUTPUT); +#endif + adev->d->adrv_halt_output (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + reset_dmap (dmap); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return; + } + + adev->d->adrv_halt_io (adev->engine_num); + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + MUTEX_ENTER (dmap->mutex, dflags); + reset_dmap (dmap); + MUTEX_EXIT (dmap->mutex, dflags); + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); +} + +static int launch_output (adev_p adev, dmap_p dmap); +static int launch_input (adev_p adev, dmap_p dmap); + +static void +oss_audio_post (adev_p adev) +{ + int i, n, p; + oss_uint64_t limit; + dmap_p dmap = adev->dmap_out; + + if (!(adev->open_mode & OPEN_WRITE)) + return; + if (dmap->user_counter == 0) + return; + + if (dmap->flags & DMAP_STARTED) + return; + +#ifdef DO_TIMINGS + oss_do_timing ("Post output\n"); +#endif + + /* Clean the unused buffer space (in slow way) */ + limit = dmap->byte_counter + dmap->bytes_in_use; + if (limit > dmap->user_counter + dmap->bytes_in_use) + limit = dmap->user_counter + dmap->bytes_in_use; + n = (int) (limit - dmap->user_counter) + 1; + p = (int) (dmap->user_counter % dmap->bytes_in_use); /*Â Current ptr */ + for (i = 0; i < n; i++) + { + dmap->dmabuf[p] = dmap->neutral_byte; + p = (p + 1) % dmap->bytes_in_use; + } + + launch_output (adev, dmap); +} + +static void +oss_audio_sync (adev_p adev) +{ + dmap_p dmap = adev->dmap_out; + oss_uint64_t uc, limit; + oss_native_word flags; + unsigned int status; + + int n = 0, loops = 0, tmout = OSS_HZ, i; + int prev_underruns; + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT) + return; + if (adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) + return; + + if (!(dmap->flags & DMAP_STARTED)) + oss_audio_post (adev); + + if (!(dmap->flags & DMAP_STARTED)) + return; + + /* Don't wait if output is untriggered */ + if (adev->go == 0 || !(adev->enable_bits & PCM_ENABLE_OUTPUT)) + return; + +#ifdef DO_TIMINGS + oss_do_timing ("Sync output\n"); +#endif + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->flags |= DMAP_POST; + + uc = dmap->user_counter; + prev_underruns = dmap->play_underruns; + dmap->play_underruns = 0; + + while (dmap->play_underruns == 0 && loops++ < dmap->nfrags + && dmap->byte_counter < uc) + { + int p; + adev->dmap_out->error = 0; + /* Clean the unused buffer space (in a slow but precise way) */ + limit = dmap->byte_counter + dmap->bytes_in_use; + if (limit > dmap->user_counter + dmap->bytes_in_use) + limit = dmap->user_counter + dmap->bytes_in_use; + + p = (int) (dmap->user_counter % dmap->bytes_in_use); /*Â Current ptr */ + n = (int) (limit - dmap->user_counter) + 1; + for (i = 0; i < n; i++) + { + dmap->dmabuf[p] = dmap->neutral_byte; + p = (p + 1) % dmap->bytes_in_use; + } + + tmout = (dmap->fragment_size * OSS_HZ) / dmap->data_rate; + tmout += OSS_HZ / 10; + + if (!oss_sleep (adev->out_wq, &dmap->mutex, tmout, &flags, &status)) + { +#ifndef __FreeBSD__ + cmn_err (CE_WARN, "Output timed out (sync) on audio engine %d\n", + adev->engine_num); +#endif + adev->timeout_count++; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + FMA_EREPORT(adev->osdev, DDI_FM_DEVICE_STALL, NULL, NULL, NULL); + FMA_IMPACT(adev->osdev, DDI_SERVICE_LOST); + return; + } + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + n = 0; + if (adev->d->adrv_local_qlen) /* Drain the internal queue too */ + while (n++ <= + adev->d->adrv_local_qlen (adev->engine_num) / dmap->fragment_size) + { + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + audio_engines[adev->engine_num]->dmap_out->error = 0; + tmout = (dmap->fragment_size * OSS_HZ) / dmap->data_rate; + tmout += OSS_HZ / 10; + oss_sleep (adev->out_wq, &dmap->mutex, tmout, &flags, &status); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + } + dmap->play_underruns = prev_underruns; +} + +static int prepare_output (adev_p adev, dmap_p dmap); +static int prepare_input (adev_p adev, dmap_p dmap); + +void +oss_audio_set_error (int dev, int mode, int err, int parm) +{ + int i, n; + + dmap_t *dmap; + +#ifdef DO_TIMINGS + { + if (mode == E_REC) + oss_timing_printf ("Audio rec error code %05d/%d, engine=%d", err, parm, + mode); + else + oss_timing_printf ("Audio play error code %05d/%d, engine=%d", err, parm, + mode); + } +#endif + +#if 0 + if (mode == E_REC) + cmn_err (CE_CONT, "Audio rec error code %05d/%d, engine=%d\n", err, parm, + mode); + else + cmn_err (CE_CONT, "Audio play error code %05d/%d, engine=%d\n", err, parm, + mode); +#endif + + switch (mode) + { + case E_PLAY: + dmap = audio_engines[dev]->dmap_out; + break; + case E_REC: + dmap = audio_engines[dev]->dmap_in; + break; + + default: + dmap = audio_engines[dev]->dmap_out; /* Actually this would be an error */ + } + + n = dmap->num_errors++; + if (n > MAX_AUDIO_ERRORS) + n = MAX_AUDIO_ERRORS; + + if (n > 0) + { + +/* + * Move previous errors (if any) upwards in the list. + */ + for (i = n; i > 0; i--) + { + dmap->errors[i] = dmap->errors[i - 1]; + dmap->error_parms[i] = dmap->error_parms[i - 1]; + } + } + + dmap->errors[0] = err; + dmap->error_parms[0] = parm; + +} + +/*ARGSUSED*/ +static void +report_errors (char *s, const char *hdr, adev_t * adev, dmap_t * dmap, + int bufsize) +{ + int i, l, j; + + if (bufsize < 30) /* No space left */ + return; + + strcpy (s, hdr); + s += l = strlen (s); + bufsize -= l; + + for (i = 0; i < dmap->num_errors && i < MAX_AUDIO_ERRORS; i++) + { + int dupe = 0; + + if (bufsize < 30) + return; + for (j = 0; !dupe && j < i; j++) + if (dmap->errors[i] == dmap->errors[j]) + dupe = 1; + + if (dupe) + continue; + + sprintf (s, " %05d:%d", dmap->errors[i], dmap->error_parms[i]); + s += l = strlen (s); + bufsize -= l; + } +} + +static void +store_history (int dev) +{ + int p; + char *tmp, *s; + + adev_p adev = audio_engines[dev]; + + if (adev->pid == 0) /* Virtual mixer */ + return; + + if (*adev->cmd && strcmp (adev->cmd, "sndconf") == 0) + return; + + p = oss_history_p; + oss_history_p = (oss_history_p + 1) % OSS_HISTORY_SIZE; + + tmp = oss_history[p]; + memset (tmp, 0, OSS_HISTORY_STRSIZE); + s = tmp; + + sprintf (s, "%s.%02d: ", adev->devnode, adev->engine_num); + s += strlen (s); + + if (adev->pid != -1) + { + sprintf (s, "pid %d ", adev->pid); + s += strlen (s); + } + + if (*adev->cmd != 0) + { + sprintf (s, "cmd '%s' ", adev->cmd); + s += strlen (s); + } + else + { + strcpy (s, "cmd: Unknown "); + s += strlen (s); + } + + if (adev->open_mode & OPEN_READ) + { + sprintf (s, "IN "); + s += strlen (s); + } + + if (adev->open_mode & OPEN_WRITE) + { + sprintf (s, "OUT "); + s += strlen (s); + } + + if (adev->timeout_count > 0) + { + sprintf (s, "%d timeouts ", adev->timeout_count); + s += strlen (s); + } + + if (adev->dmap_out->play_underruns > 0) + { + sprintf (s, "%d underruns ", adev->dmap_out->play_underruns); + s += strlen (s); + } + + if (adev->dmap_in->rec_overruns > 0) + { + sprintf (s, "%d overruns ", adev->dmap_in->rec_overruns); + s += strlen (s); + } + + if (adev->dmap_out->num_errors > 0) + { + report_errors (s, "Play events:", adev, adev->dmap_out, + OSS_HISTORY_STRSIZE - strlen (tmp) - 1); + s += strlen (s); + *s++ = ' '; + } + + if (adev->dmap_in->num_errors > 0) + { + report_errors (s, "Rec events:", adev, adev->dmap_in, + OSS_HISTORY_STRSIZE - strlen (tmp) - 1); + s += strlen (s); + *s++ = ' '; + } +} + +char * +audio_show_latency (int dev) +{ + static char str[32]; + adev_p adev = audio_engines[dev]; + dmap_p dmap; + int dr, fs; + + *str = 0; + + if (dev < 0 || dev >= num_audio_engines) + return "Bad device"; + + if (adev->open_mode == 0) + return "Not opened"; + + if (adev->open_mode == OPEN_READ) + dmap = adev->dmap_in; + else + dmap = adev->dmap_out; + + if (dmap == NULL) + return "Unknown"; + + if (!(dmap->flags & DMAP_STARTED)) + return "Not started"; + + dr = dmap->data_rate; + fs = dmap->fragment_size; + + if (dr <= 0) + sprintf (str, "%d", dmap->fragment_size); + else + { + int r = (fs * 10000) / dr; + + sprintf (str, "%d/%d (%d.%d msec)", dmap->fragment_size, dr, r / 10, + r % 10); + } + + + return str; +} + +void +oss_audio_release (int dev, struct fileinfo *file) +{ + adev_p adev; + int mode; + oss_native_word flags; + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return; + if (file) + mode = file->mode & O_ACCMODE; + else + mode = OPEN_READ | OPEN_WRITE; +#ifdef DO_TIMINGS + oss_timing_printf ("=-=-=- Closing audio engine %d -=-=-=", dev); +#endif + + adev = audio_engines[dev]; + + if (adev->unloaded || !adev->enabled) + { + cmn_err (CE_CONT, "Audio device %s not available - close aborted\n", + adev->name); + return; + } + + oss_audio_post (adev); + oss_audio_sync (adev); + +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_CLOSE); +#endif + adev->d->adrv_halt_io (dev); + adev->d->adrv_close (dev, mode); + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + if (adev->dmask & DMASK_OUT) + { + adev->dmap_out->audio_callback = NULL; + if (!adev->dmap_out->buffer_protected) + if (adev->dmap_out->dmabuf != NULL) + memset (adev->dmap_out->dmabuf, adev->dmap_out->neutral_byte, + adev->dmap_out->buffsize); + } + + if (adev->dmask & DMASK_IN) + { + adev->dmap_in->audio_callback = NULL; + } + + store_history (dev); + + memset (audio_engines[dev]->cmd, 0, sizeof (audio_engines[dev]->cmd)); + memset (audio_engines[dev]->label, 0, sizeof (audio_engines[dev]->label)); + memset (audio_engines[dev]->song_name, 0, + sizeof (audio_engines[dev]->song_name)); + audio_engines[dev]->pid = -1; + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + + /* + * Free the DMA buffer(s) + */ + if (adev->dmask & DMASK_OUT) + if (adev->dmap_out->dmabuf != NULL) + { + if (adev->d->adrv_free_buffer != NULL) + { + adev->d->adrv_free_buffer (dev, adev->dmap_out, OPEN_WRITE); + } + else + default_free_buffer (dev, adev->dmap_out, OPEN_WRITE); + adev->dmap_out->dmabuf = NULL; + } + + if (adev->dmask & DMASK_IN) + if (adev->dmap_in != adev->dmap_out && adev->dmap_in->dmabuf != NULL) + { + if (adev->d->adrv_free_buffer != NULL) + { + adev->d->adrv_free_buffer (dev, adev->dmap_in, OPEN_READ); + } + else + default_free_buffer (dev, adev->dmap_in, OPEN_READ); + adev->dmap_in->dmabuf = NULL; + } + + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + adev->open_mode = 0; + adev->flags &= ~ADEV_OPENED; + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); +} + +static void audio_outputintr (int dev, int intr_flags); +static void audio_inputintr (int dev, int intr_flags); + +/*ARGSUSED*/ +int +oss_audio_open_engine (int dev, int no_worries, struct fileinfo *file, + int recursive, int open_flags, int *newdev) +{ +/* + * Open audio engine + */ + adev_p adev; + int retval = 0, fmt; + int mode; + int saved_cooked; + int channels, rate; + oss_native_word flags; + extern int cooked_enable; /* Config option */ + + DOWN_STATUS (0xff); + + if (file) + { + mode = file->mode & O_ACCMODE; + } + else + mode = OPEN_READ | OPEN_WRITE; + + sync_seed++; + + DDB (cmn_err + (CE_CONT, "oss_audio_open_engine(%d, mode=0x%x)\n", dev, mode)); + +#ifdef DO_TIMINGS + oss_timing_printf ("-----> oss_audio_open_engine(%d, mode=0x%x)", dev, mode); +#endif + + if (dev < 0 || dev >= num_audio_engines || audio_engines == NULL) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (adev->unloaded) + return OSS_ENODEV; + if (!adev->enabled) + return OSS_ENXIO; + + if (adev->osdev == NULL) + { + cmn_err (CE_WARN, "adev->osdev==NULL\n"); + return OSS_EIO; + } + + open_flags = get_open_flags (mode, open_flags, file); + + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + if (adev->open_mode != 0) + { + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + return OSS_EBUSY; + } + adev->open_mode = mode; + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + + adev->cooked_enable = cooked_enable; /* This must be done before drv->open() */ +#ifdef DO_TIMINGS + if (adev->cooked_enable) + oss_do_timing ("Initial cooked mode ON"); + else + oss_do_timing ("Initial cooked mode OFF"); +#endif + + adev->src_quality = src_quality; + if ((retval = adev->d->adrv_open (dev, mode, open_flags)) < 0) + { + adev->open_mode = 0; + + return retval; + } + + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + adev->outputintr = audio_outputintr; + adev->inputintr = audio_inputintr; + adev->forced_nonblock = 0; + adev->setfragment_warned = 0; + adev->getispace_error_count = 0; + adev->sync_next = NULL; + adev->sync_group = 0; + adev->sync_flags = 0; + adev->open_flags = open_flags; + adev->flags |= ADEV_OPENED; + adev->timeout_count = 0; + adev->policy = -1; + adev->song_name[0] = 0; + adev->label[0] = 0; + + if (open_flags & (OF_NOCONV | OF_MMAP)) + { + adev->cooked_enable = 0; +#ifdef DO_TIMINGS + oss_do_timing ("Forcing cooked mode OFF"); +#endif + } + + memset (audio_engines[dev]->cmd, 0, sizeof (audio_engines[dev]->cmd)); + + if (recursive) + { + strcpy (audio_engines[dev]->cmd, "OSS internal"); + audio_engines[dev]->pid = 0; + } + else + { + char *cmd; + + if ((cmd = GET_PROCESS_NAME (file)) != NULL) + { + strncpy (audio_engines[dev]->cmd, cmd, 16); + strncpy (audio_engines[dev]->label, cmd, 16); + audio_engines[dev]->cmd[15] = '\0'; + audio_engines[dev]->label[15] = '\0'; + } + audio_engines[dev]->pid = GET_PROCESS_PID (file); + } + + adev->dmask = 0; +/* + * Find out which dmap structures are required. + */ + + if (mode == OPEN_WRITE) + adev->dmask = DMASK_OUT; + else if (mode == OPEN_READ) + adev->dmask = DMASK_IN; + else + { + if (mode != (OPEN_WRITE | OPEN_READ)) + cmn_err (CE_NOTE, "Unrecognized open mode %x\n", mode); + adev->dmask = DMASK_OUT; + + if ((adev->flags & ADEV_DUPLEX) && adev->dmap_out != adev->dmap_in) + adev->dmask = DMASK_OUT | DMASK_IN; + } + +#if 0 +/* + * Handling of non-blocking doesn't belong here. It will be handled + * by read/write. + */ + if (file != NULL && !(open_flags & OF_BLOCK)) + if (ISSET_FILE_FLAG (file, O_NONBLOCK) || adev->forced_nonblock) + { +#ifdef DO_TIMINGS + oss_do_timing ("*** Non-blocking open ***"); +#endif + adev->nonblock = 1; + } +#endif + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + + if (adev->dmask & DMASK_OUT) + { + + /* + * Use small DMA buffer if requested and if the device supports it. + */ + if (SMALL_DMABUF_SIZE >= (adev->min_block * 2) && + (open_flags & OF_SMALLBUF)) + adev->dmap_out->flags |= DMAP_SMALLBUF; + else + if (MEDIUM_DMABUF_SIZE >= (adev->min_block * 2) && + (open_flags & OF_MEDIUMBUF)) + adev->dmap_out->flags |= DMAP_MEDIUMBUF; + else + adev->dmap_out->flags &= ~(DMAP_SMALLBUF | DMAP_MEDIUMBUF); + + if ((retval = init_dmap (adev, adev->dmap_out, OPEN_WRITE)) < 0) + { + oss_audio_release (dev, file); + return retval; + } + } + + if (adev->dmask & DMASK_IN) + { + /* + * Use small DMA buffer if requested and if the device supports it. + */ + if (SMALL_DMABUF_SIZE >= (adev->min_block * 2) && + (open_flags & OF_SMALLBUF)) + adev->dmap_in->flags |= DMAP_SMALLBUF; + else + adev->dmap_in->flags &= ~DMAP_SMALLBUF; + + if ((retval = init_dmap (adev, adev->dmap_in, OPEN_READ)) < 0) + { + oss_audio_release (dev, file); + return retval; + } + } + + adev->dmap_out->num_errors = 0; + adev->dmap_in->num_errors = 0; + + if ((mode & OPEN_WRITE) && !(adev->flags & ADEV_NOOUTPUT)) + { + oss_reset_wait_queue (adev->out_wq); + } + if ((mode & OPEN_READ) && !(adev->flags & ADEV_NOINPUT)) + { + oss_reset_wait_queue (adev->in_wq); + } + + adev->xformat_mask = 0; + + switch (adev->dmask) + { + case DMASK_OUT: + adev->xformat_mask = adev->oformat_mask; + break; + + case DMASK_IN: + adev->xformat_mask = adev->iformat_mask; + break; + + case DMASK_OUT | DMASK_IN: + adev->xformat_mask = adev->oformat_mask & adev->iformat_mask; + break; + + default: + cmn_err (CE_WARN, "Internal error A during open\n"); + } + + fmt = DSP_DEFAULT_FMT; + rate = DSP_DEFAULT_SPEED; + + if (adev->flags & ADEV_FIXEDRATE && adev->fixed_rate != 0) + rate = adev->fixed_rate; + + if (adev->flags & ADEV_16BITONLY) + fmt = AFMT_S16_LE; + + adev->go = 1; + adev->enable_bits = adev->open_mode; + + channels = 1; + if (adev->flags & ADEV_STEREOONLY) + channels = 2; + + saved_cooked = adev->cooked_enable; + adev->cooked_enable = 0; + oss_audio_set_format (dev, fmt, adev->xformat_mask); + oss_audio_set_channels (dev, channels); + oss_audio_set_rate (dev, rate); + adev->cooked_enable = saved_cooked; + +/* Clear the Cooked mode to permit mmap() */ + if (adev->dmask & DMASK_OUT) + adev->dmap_out->flags &= ~DMAP_COOKED; + if (adev->dmask & DMASK_IN) + adev->dmap_in->flags &= ~DMAP_COOKED; + +#ifdef DO_TIMINGS + { + char *p_name; + pid_t proc_pid; + oss_timing_printf ("=-=-=- Audio device %d (%s) opened, mode %x -=-=-=", + adev->engine_num, adev->name, mode); + + if ((proc_pid = GET_PROCESS_PID (file)) != -1) + oss_timing_printf ("Opened by PID: %d", proc_pid); + + if ((p_name = GET_PROCESS_NAME (file)) != NULL) + oss_timing_printf ("Opening process name: %s", p_name); + } +#endif + +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_OPEN); +#endif + + return adev->engine_num; +} + +#ifdef VDEV_SUPPORT +int +oss_audio_open_devfile (int dev, int dev_class, struct fileinfo *file, + int recursive, int open_flags, int *newdev) +{ +/* + * Open audio device file (by calling oss_audio_open_engine). + */ + int err, d, n; + int open_excl = 0; + adev_p adev; + int mode = OPEN_READ | OPEN_WRITE; + +#ifdef DO_TIMINGS + oss_timing_printf ("-----> oss_audio_open_devfile(%d, mode=0x%x)", dev, mode); +#endif + + if (file) + { + mode = file->mode & O_ACCMODE; + open_flags = get_open_flags (mode, open_flags, file); + if (file->acc_flags & O_EXCL) + { + if (excl_policy == 0) open_excl = 1; +#ifdef GET_PROCESS_UID + else if ((excl_policy == 1) && (GET_PROCESS_UID () == 0)) open_excl = 1; +#endif + } + } + + DDB (cmn_err + (CE_CONT, "oss_audio_open_devfile(%d, mode=0x%x, excl=%d)\n", dev, + mode, open_excl)); + + if (dev < 0 || dev >= num_audio_devfiles) + { + return OSS_ENODEV; + } + adev = audio_devfiles[dev]; + dev = adev->engine_num; + + n=0; + while (adev->d->adrv_redirect != NULL) + { + int next_dev = dev; + + if (n++ > num_audio_engines) + { + cmn_err(CE_CONT, "Recursive audio device redirection\n"); + return OSS_ELOOP; + } + + next_dev = adev->d->adrv_redirect (dev, mode, open_flags); +#ifdef DO_TIMINGS + oss_timing_printf ("Engine redirect %d -> %d\n", dev, next_dev); +#endif + + if (next_dev == dev) /* No change */ + break; + + if (next_dev < 0 || next_dev >= num_audio_engines) + return OSS_ENXIO; + + dev = next_dev; + adev = audio_engines[dev]; + } + +/* + * Check Exclusive mode open - do not do any kind of device + * sharing. For the time being this mode is not supported with devices + * that do hardware mixing. + */ + if (open_excl && !(adev->flags & ADEV_HWMIX)) + { + DDB (cmn_err + (CE_CONT, "Exclusive open, engine=%d\n", adev->engine_num)); + if ((dev = oss_audio_open_engine (adev->engine_num, dev_class, file, + recursive, open_flags, newdev)) < 0) + { + return dev; + } + + goto done; + } + +#ifdef CONFIG_OSS_VMIX +/* + * Get a vmix engine if the device has vmix support enabled. + */ + if (!vmix_disabled) + if (adev->vmix_mixer != NULL) // Virtual mixer attached + { + int vmix_dev; + + /* + * Create a new vmix client instance. + */ + + if ((vmix_dev=vmix_create_client(adev->vmix_mixer))>=0) + { +#ifdef DO_TIMINGS + oss_timing_printf ("Vmix redirect %d -> %d\n", dev, vmix_dev); +#endif + if ((dev = oss_audio_open_engine (vmix_dev, dev_class, file, + recursive, open_flags, newdev)) < 0) + { + //cmn_err(CE_WARN, "Failed to open vmix engine %d, err=%d\n", vmix_dev, dev); + return dev; + } +#ifdef DO_TIMINGS + oss_timing_printf ("Vmix engine opened %d -> %d\n", vmix_dev, dev); +#endif + + goto done; + } + } +#endif + +#if 0 +/* + * Follow redirection chain for the device. + * + * (TODO: This feature was for earlier versions of vmix/softoss and not in use for the time being. However + * it is possible that some other driver finds use for it in the future). + */ + + if (!open_excl) + { + if (mode == OPEN_WRITE) + { + redirect = adev->redirect_out; + } + else if (mode == OPEN_READ) + { + redirect = adev->redirect_in; + } + else + { + /* + * Read-write open. Check that redirection for both directions are + * identical. + */ + if (adev->redirect_out == adev->redirect_in) + redirect = adev->redirect_out; + } + } + DDB (cmn_err + (CE_CONT, "Redirect=%d (%d, %d)\n", redirect, adev->redirect_out, + adev->redirect_in)); + + if (redirect >= 0 && redirect < num_audio_engines) + { + adev = audio_engines[redirect]; + DDB (cmn_err + (CE_CONT, "Redirect devfile %d -> engine=%d\n", dev, + adev->engine_num)); + dev = redirect; + } +#endif + + while (adev != NULL) + { + DDB (cmn_err (CE_CONT, "Trying engine=%d\n", adev->engine_num)); + if (!adev->enabled) + return OSS_EAGAIN; + + if (adev->unloaded) + return OSS_EAGAIN; + + *newdev = adev->engine_num; + if ((err = + oss_audio_open_engine (adev->engine_num, dev_class, file, + recursive, open_flags, newdev)) < 0) + { + /* + * Check if the device was busy and if it has a + * shadow device. + */ + if (err != OSS_EBUSY || adev->next_out == NULL) + return err; + adev = adev->next_out; + } + else + { + dev = adev->engine_num; + DDB (cmn_err (CE_CONT, "Engine %d opened\n", adev->engine_num)); + goto done; + } + } + + return OSS_EBUSY; + +done: +/* + * Try to find which minor number matches this /dev/dsp# device. + */ + + if ((d = oss_find_minor (OSS_DEV_DSP_ENGINE, dev)) < 0) + { + oss_audio_release (dev, file); + return d; + } + + *newdev = d; + return dev; +} +#endif + +static struct +{ + int sz, nfrags; +} policies[] = +{ + { + 8, 2}, /* 0 */ + { + 16, 2}, /* 1 */ + { + 128, 2}, /* 2 */ + { + 256, 4}, /* 3 */ + { + 512, 4}, /* 4 */ + { + 1024, 0}, /* 5 */ + { + 2048, 0}, /* 6 */ + { + 4096, 0}, /* 7 */ + { + 16384, 0}, /* 8 */ + { + 32768, 0}, /* 9 */ + { + 256 *1024, 0}, /* 10 */ +}; + +static void +setup_fragments (adev_p adev, dmap_p dmap, int direction) +{ + int sz, maxfrags = 100000; + int min; + extern int max_intrate; + + if (adev->max_intrate == 0 || adev->max_intrate > max_intrate) + adev->max_intrate = max_intrate; + + if (dmap->flags & DMAP_FRAGFIXED) + return; + dmap->flags |= DMAP_FRAGFIXED; + +#ifdef DO_TIMINGS + oss_timing_printf ("setup_fragments(%d, dir=%d)", adev->engine_num, direction); +#endif + + sz = 1024; + + dmap->low_water_rq = 0; + dmap->low_water = -1; + + if (dmap->fragsize_rq != 0) /* SNDCTL_DSP_SETFRAGMENT was called */ + { + int v; + v = dmap->fragsize_rq & 0xffff; + + sz = (1 << v); + + if (dmap->expand_factor != UNIT_EXPAND) + { + int sz2; + + sz2 = (sz * dmap->expand_factor) / UNIT_EXPAND; + + if (sz < sz2) + { + while (sz < sz2) + sz *= 2; + } + else if (sz > sz2) + { + while (sz > sz2) + sz /= 2; + } + + } + + if (sz < 8) + sz = 8; + if (sz > dmap->buffsize / 2) + sz = dmap->buffsize / 2; + + maxfrags = (dmap->fragsize_rq >> 16) & 0x7fff; + + if (maxfrags == 0) + maxfrags = 0x7fff; + else if (maxfrags < 2) + maxfrags = 2; + + if (maxfrags < adev->min_fragments) + maxfrags = adev->min_fragments; + else if (adev->max_fragments >= 2 && maxfrags > adev->max_fragments) + maxfrags = adev->max_fragments; + +#if 1 + /* + * Workaround for realplay + */ + if (adev->open_flags & OF_SMALLFRAGS) + while (sz > dmap->buffsize / 8) + { + maxfrags *= 2; + sz /= 2; + } +#endif + } + + if (adev->policy >= 0 && adev->policy <= 10) + { + sz = policies[adev->policy].sz; + maxfrags = policies[adev->policy].nfrags; + if (maxfrags == 0) /* Unlimited */ + maxfrags = 0xffff; + } + +#if 1 + /* Use short fragments if ossd has registered this device */ + if (adev->ossd_registered) + sz = 256; +#endif + + /* Sanity check */ + if (adev->min_block && adev->max_block) + if (adev->min_block > adev->max_block) + adev->min_block = adev->max_block = 0; + + if (adev->max_block > 0 && sz > adev->max_block) + sz = adev->max_block; + if (adev->min_block > 0 && sz < adev->min_block) + sz = adev->min_block; + + if (sz < 8) + sz = 8; + + /* Ensure that the interrupt rate is within the limits */ + + min = 0; + + if (adev->max_intrate > 0) + { + int data_rate; + + data_rate = dmap->data_rate; + if (data_rate < 8000) + data_rate = adev->hw_parms.rate * 4; + + min = data_rate / adev->max_intrate; + + if (min > dmap->buffsize / 2) + min = dmap->buffsize / 2; +#ifdef DO_TIMINGS + oss_timing_printf ("Max intrate %d -> min buffer %d", adev->max_intrate, + min); +#endif + } + +#if 1 + if (dmap->flags & DMAP_COOKED) + if (min < 256) + min = 256; +#endif + + if (adev->max_block && min > adev->max_block) + min = adev->max_block; + + if (sz < min) + { + while (sz < min) + sz *= 2; + if (adev->max_block > 0 && sz > adev->max_block) + sz = adev->max_block; + } + + dmap->fragment_size = sz; + dmap->nfrags = dmap->buffsize / sz; + + if (dmap == adev->dmap_out) + { + if (direction == OPEN_WRITE) + { + if (dmap->nfrags > maxfrags) + dmap->nfrags = maxfrags; + } + } + + if (adev->d->adrv_setup_fragments) + { + adev->d->adrv_setup_fragments (adev->engine_num, dmap, direction); + } + + dmap->bytes_in_use = dmap->nfrags * dmap->fragment_size; + + if (dmap->nfrags < 2) + { + dmap->nfrags = 2; + dmap->fragment_size = dmap->bytes_in_use / 2; + } + + while (dmap->nfrags < adev->min_fragments) + { + dmap->nfrags *= 2; + dmap->fragment_size /= 2; + } + + if (adev->max_fragments >= 2) + while (dmap->nfrags > adev->max_fragments) + { + dmap->nfrags /= 2; + dmap->fragment_size *= 2; + } + while (dmap->nfrags < adev->min_fragments) + { + dmap->nfrags *= 2; + dmap->fragment_size /= 2; + } + + dmap->bytes_in_use = dmap->nfrags * dmap->fragment_size; + + dmap->bytes_in_use = dmap->nfrags * dmap->fragment_size; + dmap->low_water_rq = dmap->fragment_size; + +#if 1 + if (dmap->nfrags < 4) +#endif + if (dmap->low_water_rq < dmap->bytes_in_use / 4) + dmap->low_water_rq = dmap->bytes_in_use / 4; + +#ifdef DO_TIMINGS + oss_timing_printf ("fragsz=%d, nfrags=%d", dmap->fragment_size, dmap->nfrags); +#endif +} + +static int +getblksize (adev_p adev) +{ + int size = 4096; + dmap_p dmap; + oss_native_word flags, dflags; + dflags = 0; + + MUTEX_ENTER_IRQDISABLE (adev->mutex, flags); + if (adev->dmask & DMASK_IN) + { + dmap = adev->dmap_in; + + if (!(dmap->flags & DMAP_FRAGFIXED)) + { + MUTEX_ENTER (dmap->mutex, dflags); + setup_fragments (adev, dmap, OPEN_READ); + size = dmap->fragment_size; + MUTEX_EXIT (dmap->mutex, dflags); + } + } + + if (adev->dmask & DMASK_OUT) + { + dmap = adev->dmap_out; + + if (!(dmap->flags & DMAP_FRAGFIXED)) + { + MUTEX_ENTER (dmap->mutex, dflags); + setup_fragments (adev, dmap, OPEN_WRITE); + size = dmap->fragment_size; + MUTEX_EXIT (dmap->mutex, dflags); + } + } + MUTEX_EXIT_IRQRESTORE (adev->mutex, flags); + + return size; +} + +/*ARGSUSED*/ +static oss_uint64_t +get_output_pointer (adev_p adev, dmap_p dmap, int do_adjust) +{ + oss_uint64_t ptr; + + if (adev->d->adrv_get_output_pointer == NULL) + { + return dmap->fragment_counter * dmap->fragment_size; + } + + UP_STATUS (STS_PTR); + ptr = + adev->d->adrv_get_output_pointer (adev->engine_num, dmap, + PCM_ENABLE_OUTPUT) & ~7; + DOWN_STATUS (STS_PTR); + + return ptr; +} + +static oss_uint64_t +get_input_pointer (adev_p adev, dmap_p dmap, int do_adjust) +{ + oss_uint64_t ptr; + + if (adev->d->adrv_get_input_pointer == NULL) + return dmap->fragment_counter * dmap->fragment_size; + + ptr = + adev->d->adrv_get_input_pointer (adev->engine_num, dmap, + PCM_ENABLE_INPUT) & ~7; + if (ptr < dmap->byte_counter) + ptr += dmap->bytes_in_use; + ptr %= dmap->bytes_in_use; + + if (do_adjust) + { + oss_uint64_t tmp = dmap->byte_counter; + + tmp = (tmp / dmap->bytes_in_use) * dmap->bytes_in_use; + dmap->byte_counter = tmp + ptr; + } + + return ptr; +} + +static int +get_optr (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + count_info *info = (count_info *) arg; + oss_native_word flags; + oss_uint64_t bytes; + + memset ((char *) info, 0, sizeof (count_info)); + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT || !(dmap->flags & DMAP_STARTED)) + return 0; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + + info->ptr = get_output_pointer (adev, dmap, 1); + info->blocks = dmap->interrupt_count; + dmap->interrupt_count = 0; + + bytes = (dmap->byte_counter / dmap->bytes_in_use) * dmap->bytes_in_use; + bytes += info->ptr; + if (bytes < dmap->byte_counter) + bytes += dmap->bytes_in_use; + info->bytes = (unsigned int) bytes; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + /* Adjust for format conversions */ + info->ptr = (info->ptr * UNIT_EXPAND) / dmap->expand_factor; + info->bytes = (info->bytes / dmap->expand_factor) * UNIT_EXPAND; + info->bytes &= 0x3fffffff; + +#ifdef DO_TIMINGS + oss_timing_printf ("GETOPTR(%d,%d,%d)", info->bytes, info->ptr, info->blocks); +#endif + return 0; +} + +static int +get_iptr (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + count_info *info = (count_info *) arg; + oss_native_word flags; + oss_uint64_t bytes; + + memset ((char *) info, 0, sizeof (count_info)); + + if (dmap->dma_mode != PCM_ENABLE_INPUT || !(dmap->flags & DMAP_STARTED)) + return 0; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + info->ptr = get_input_pointer (adev, dmap, 1); + info->blocks = dmap->interrupt_count; + dmap->interrupt_count = 0; + + bytes = (dmap->byte_counter / dmap->bytes_in_use) * dmap->bytes_in_use; + bytes += info->ptr; + if (bytes < dmap->byte_counter) + bytes += dmap->bytes_in_use; + info->bytes = (unsigned int) bytes; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + /* Adjust for format conversions */ + info->ptr = (info->ptr * UNIT_EXPAND) / dmap->expand_factor; + info->bytes = (info->bytes / dmap->expand_factor) * UNIT_EXPAND; + info->bytes &= 0x3fffffff; + +#ifdef DO_TIMINGS + oss_timing_printf ("GETIPTR(%d,%d,%d)", info->bytes, info->ptr, info->blocks); +#endif + return 0; +} + +#ifndef OSS_NO_LONG_LONG +static int +get_long_optr (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + oss_count_t *ptr = (oss_count_t *) arg; + oss_native_word flags; + oss_uint64_t pos, bytes; + + memset ((char *) ptr, 0, sizeof (*ptr)); + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT || !(dmap->flags & DMAP_STARTED)) + return 0; + + ptr->fifo_samples = 0; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + if (dmap->frame_size < 1) + dmap->frame_size = 1; + if (dmap->user_frame_size < 1) + dmap->user_frame_size = 1; + pos = get_output_pointer (adev, dmap, 1); + bytes = (dmap->byte_counter / dmap->bytes_in_use) * dmap->bytes_in_use; + bytes += pos; + ptr->samples = (unsigned int) (bytes / dmap->frame_size); + + /* Adjust for format conversions */ + ptr->samples = (ptr->samples * UNIT_EXPAND) / dmap->expand_factor; + + if (adev->d->adrv_local_qlen) + { + ptr->fifo_samples = + adev->d->adrv_local_qlen (adev->engine_num) / dmap->frame_size; + ptr->fifo_samples = + (ptr->fifo_samples * UNIT_EXPAND) / dmap->expand_factor; + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return 0; +} + +static int +get_long_iptr (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + oss_count_t *ptr = (oss_count_t *) arg; + oss_native_word flags; + oss_uint64_t pos, bytes; + + memset ((char *) ptr, 0, sizeof (*ptr)); + + if (dmap->dma_mode != PCM_ENABLE_INPUT || !(dmap->flags & DMAP_STARTED)) + return 0; + + ptr->fifo_samples = 0; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + if (dmap->frame_size < 1) + dmap->frame_size = 1; + if (dmap->user_frame_size < 1) + dmap->user_frame_size = 1; + pos = get_input_pointer (adev, dmap, 1); + bytes = (dmap->byte_counter / dmap->bytes_in_use) * dmap->bytes_in_use; + bytes += pos; + ptr->samples = (unsigned int) (bytes / dmap->frame_size); + + /* Adjust for format conversions */ + ptr->samples = (ptr->samples / dmap->expand_factor) * UNIT_EXPAND; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return 0; +} +#endif + +static int +get_odelay (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + oss_int64_t val, pos; + oss_native_word flags; + if (dmap->dma_mode != PCM_ENABLE_OUTPUT || + (dmap->mapping_flags & DMA_MAP_MAPPED)) + return *arg = (0); + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + pos = get_output_pointer (adev, dmap, 1); + val = (dmap->byte_counter / dmap->bytes_in_use) * dmap->bytes_in_use; + val += pos; + val = dmap->user_counter - val; + if (val < 0) + val = 0; + if (val > dmap->bytes_in_use) + val = dmap->bytes_in_use; + + if (adev->d->adrv_local_qlen) + { + val += adev->d->adrv_local_qlen (adev->engine_num); + } + + val += dmap->leftover_bytes; + val = (val * UNIT_EXPAND) / dmap->expand_factor; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); +#ifdef DO_TIMINGS + oss_timing_printf ("GETODELAY(%d, %d)", adev->engine_num, val); +#endif + return *arg = (val); +} + +static int audio_space_in_queue (adev_p adev, dmap_p dmap, int count); + +static int +get_ospace (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + audio_buf_info *info = (audio_buf_info *) arg; + oss_native_word flags; + + memset ((char *) info, 0, sizeof (audio_buf_info)); + + if (!(dmap->flags & DMAP_PREPARED)) + { + setup_fragments (adev, dmap, OPEN_WRITE); + prepare_output (adev, dmap); + } + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + info->fragstotal = dmap->nfrags; + + info->fragsize = (dmap->fragment_size * UNIT_EXPAND) / dmap->expand_factor; + + /* Make sure we report full samples */ + info->fragsize = + ((info->fragsize + dmap->user_frame_size - + 1) / dmap->user_frame_size) * dmap->user_frame_size; + + if (!(adev->open_mode & OPEN_WRITE)) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, + "SNDCTL_DSP_GETOSPACE cannot be called in read-only mode.\n"); +#ifdef DO_TIMINGS + oss_do_timing ("GETOSPACE: Bad access mode - return EACCES"); +#endif + return OSS_EACCES; + } + + if (dmap->mapping_flags & DMA_MAP_MAPPED) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, + "SNDCTL_DSP_GETOSPACE cannot be called in mmap mode.\n"); +#ifdef DO_TIMINGS + oss_do_timing ("GETOSPACE: mmap access mode - return EPERM"); +#endif + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1000, "GETOSPACE called in mmap mode"), 0); + /* Errordesc: + * Do not call SNDCTL_DSP_GETOSPACE in mmap mode. Use SNDCTL_DSP_GETOPTR + * instead. SNDCTL_DSP_GETOSPACE is defined only for applications that + * use the normal write() method. + * Applications that use mmap can call SNDCTL_DSP_GETOSPACE before calling + * mmap to get the actual buffer size. + */ + return OSS_EPERM; + } + + if (!(dmap->flags & DMAP_STARTED)) + { + int bytes; + bytes = (int) ((long long) dmap->bytes_in_use - dmap->user_counter); +#ifdef DO_TIMINGS + { + oss_do_timing ("GETOSPACE: Not started - ignore device count"); + oss_timing_printf ("bytes_in_use=%d", dmap->bytes_in_use); + oss_timing_printf ("user_counter=%lld", dmap->user_counter); + oss_timing_printf ("raw bytes=%d", bytes); + } +#endif + bytes = (bytes / dmap->expand_factor) * UNIT_EXPAND; /* Round downwards */ + bytes = (bytes / dmap->user_frame_size) * dmap->user_frame_size; /* Truncate to frame size */ + info->bytes = bytes; + info->fragments = info->fragstotal = dmap->nfrags; + if (info->bytes > info->fragsize * info->fragstotal) + info->bytes = info->fragsize * info->fragstotal; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return 0; + } + + info->bytes = audio_space_in_queue (adev, dmap, 0); +#ifdef DO_TIMINGS + oss_timing_printf ("audio_space_in_queue returned %d", info->bytes); +#endif + + if (info->bytes < dmap->low_water) + info->bytes = 0; + + if (adev->dmap_out->flags & DMAP_COOKED) + { + + if (dmap->tmpbuf_ptr > 0) + info->bytes -= dmap->tmpbuf_ptr; + } + + if ((adev->dmap_out->flags & DMAP_COOKED) && info->bytes < + dmap->fragment_size / 2) + { +#ifdef DO_TIMINGS + oss_do_timing ("GETOSPACE: Buffer full"); +#endif + info->bytes = 0; + } + + if (info->bytes < 0) + info->bytes = 0; + + info->bytes = (info->bytes * UNIT_EXPAND) / dmap->expand_factor; + info->bytes = (info->bytes / dmap->user_frame_size) * dmap->user_frame_size; /* Truncate to frame size */ + if (dmap->flags & DMAP_COOKED) + { + /* + * Reserve some space for format conversions. Sample rate conversions + * may not always be able to take the "last" sample with fractional conversion + * ratios. + */ + if (info->bytes >= dmap->frame_size) + info->bytes -= dmap->frame_size; /* Substract one sample. */ + } + info->fragments = info->bytes / info->fragsize; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + if (info->bytes > info->fragsize * info->fragstotal) + info->bytes = info->fragsize * info->fragstotal; + + return 0; +} + +static int +get_ispace (adev_p adev, dmap_p dmap, ioctl_arg arg) +{ + audio_buf_info *info = (audio_buf_info *) arg; + oss_native_word flags; + + memset ((char *) info, 0, sizeof (audio_buf_info)); + + setup_fragments (adev, dmap, OPEN_READ); + prepare_input (adev, dmap); + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + info->fragstotal = dmap->nfrags; + info->fragsize = (dmap->fragment_size * UNIT_EXPAND) / dmap->expand_factor; + + /* Make sure we report full samples */ + info->fragsize = + ((info->fragsize + dmap->user_frame_size - + 1) / dmap->user_frame_size) * dmap->user_frame_size; + + if (!(adev->open_mode & OPEN_READ)) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, + "SNDCTL_DSP_GETISPACE cannot be called in write-only mode.\n"); + return OSS_EACCES; + } + + if (dmap->mapping_flags & DMA_MAP_MAPPED) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, + "SNDCTL_DSP_GETISPACE cannot be called in mmap mode.\n"); + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1003, "GETISPACE called in mmap mode"), 0); + /* Errordesc: + * Do not call SNDCTL_DSP_GETISPACE in mmap mode. + * SNDCTL_DSP_GETISPACE is defined only for applications that + * use the normal write() method. + * Applications that use mmap can call SNDCTL_DSP_GETISPACE before calling + * mmap to get the actual buffer size. + */ + return OSS_EPERM; + } + + if (!(dmap->flags & DMAP_STARTED)) + { +/* + * A stupid application has called GETISPACE before recording has started. + * The right behaviour would definitely be returning bytes=0. However + * reporting one ready fragment will keep poor programmers happy. + * After all this is a minor error because no properly written application + * should ever call GETISPACE before starting recording. + */ + info->bytes = info->fragsize; + info->fragments = 1; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if (info->bytes > info->fragsize * info->fragstotal) + info->bytes = info->fragsize * info->fragstotal; + if (adev->getispace_error_count++ == 1) /* Second time this happens */ + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1004, + "GETISPACE called before recording has been started"), + 0); + /* + * Errordesc: + * There is no recoded data available before recording has been started. + * This would result in situation where the application waits infinitely + * for recorded data that never arrives. As a workaround + * SNDCTL_DSP_GETISPACE will fake that one fragment is already available + * to read. This in turn makes the application to block incorrectly. + * + * Applications must start recording before calling SNDCTL_DSP_GETISPACE + * if they are trying to avoid blocking. This can be done by calling + * SNDCTL_DSP_SETTRIGGER. + * + * However applications going to use mmap can/should call + * SNDCTL_DSP_GETISPACE in the beginning to find out how large buffer to + * map. In such case this event is a false alarm. + */ + } + return 0; + } + + info->bytes = (unsigned int) (dmap->byte_counter - dmap->user_counter); + + if (dmap->flags & DMAP_COOKED) + { + /* Count the already converted bytes in the tmp buffer */ + int nn = dmap->tmpbuf_len - dmap->tmpbuf_ptr; + + if (nn > 0) + info->bytes += nn; + } + + if (info->bytes > dmap->bytes_in_use) + info->bytes = dmap->bytes_in_use; + + info->bytes = (info->bytes * UNIT_EXPAND) / dmap->expand_factor; + info->bytes = (info->bytes / dmap->user_frame_size) * dmap->user_frame_size; + info->fragments = info->bytes / info->fragsize; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + if (info->bytes > info->fragsize * info->fragstotal) + info->bytes = info->fragsize * info->fragstotal; + +#ifdef DO_TIMINGS + oss_timing_printf ("GETISPACE(%d,%d,%d,%d)", info->bytes, info->fragments, + info->fragsize, info->fragstotal); +#endif + return 0; +} + +#define xrand(seed) (seed=1664525*seed+1013904223) + +static void +setfragment_error (int dev) +{ + if (audio_engines[dev]->setfragment_warned) + return; + + oss_audio_set_error (dev, E_PLAY, + OSSERR (1011, + "SNDCTL_DSP_SETFRAGMENT was called too late."), + 0); + /* + * Errordesc: The SNDCTL_DSP_SETFRAGMENT call is only valid immediately after + * opening the device. It can only be called once without reopening + * the audio device. + * + * Calling read/write or certain ioctl calls will lock the fragment size/count + * to some values which makes changing it impossible. + */ + +#ifdef DO_TIMINGS + oss_do_timing ("Setfragment called twice"); +#endif + + audio_engines[dev]->setfragment_warned = 1; +} + +static int +handle_syncgroup (adev_p adev, oss_syncgroup * group) +{ + int id, sync_dev; + adev_p sync_adev; + + if (adev->sync_group != 0) + { + return OSS_EBUSY; + } + + if (group->id == 0) + { + if (adev->engine_num > SYNC_DEVICE_MASK) + { + cmn_err (CE_WARN, "Bad device number %d\n", adev->engine_num); + return OSS_EIO; + } + + id = xrand (sync_seed) & ~SYNC_DEVICE_MASK; /* Clear the engine number field */ + id |= adev->engine_num; + + group->id = id; + sync_dev = adev->engine_num; + adev->sync_next = NULL; + } + else + { + id = group->id; + sync_dev = id & SYNC_DEVICE_MASK; + } + + if (sync_dev < 0 || sync_dev >= num_audio_engines) + { + group->id = 0; + return OSS_EINVAL; + } + + sync_adev = audio_engines[sync_dev]; + + if (sync_dev == adev->engine_num) + adev->sync_flags |= SYNC_MASTER; + else + { + if (!(sync_adev->sync_flags & SYNC_MASTER)) + { + return OSS_EINVAL; + } + + if (sync_adev->sync_group != id) + { + return OSS_EINVAL; + } + + adev->sync_flags |= SYNC_SLAVE; + } + + group->mode &= (PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT); + group->mode &= adev->open_mode; + if (group->mode == 0) + { + adev->sync_flags = 0; + return OSS_EINVAL; + } + + adev->sync_mode = group->mode; + adev->sync_group = id; + if (adev->d->adrv_sync_control != NULL) + adev->d->adrv_sync_control (adev->engine_num, SYNC_ATTACH, + adev->sync_mode); + + if (adev != sync_adev) + { + adev->sync_next = sync_adev->sync_next; + sync_adev->sync_next = adev; + } + + adev->go = 0; + + return 0; +} + +static int +handle_syncstart (int orig_dev, int group) +{ + int master_dev, arg; + adev_p adev, next; + + master_dev = group & SYNC_DEVICE_MASK; + if (master_dev < 0 || master_dev >= num_audio_engines) + return OSS_EINVAL; + + adev = audio_engines[master_dev]; + + if (!(adev->sync_flags & SYNC_MASTER) || + master_dev != orig_dev) + { + /* + * Potential attack. SYNCSTART was called on wrong file descriptor. + */ + return OSS_EPERM; + } + + if (adev->sync_group != group) + return OSS_EINVAL; + +/* + * Pass 1: Inform all devices about the actual start command to come soon. + */ + + while (adev != NULL) + { + + if (adev->sync_group == group) + { + adev->go = 0; + + if (adev->d->adrv_sync_control) + { + if (adev->sync_mode & PCM_ENABLE_INPUT) + { + if (!(adev->dmap_in->flags & DMAP_PREPARED)) + { + adev->dmap_in->dma_mode = PCM_ENABLE_INPUT; + prepare_input (adev, adev->dmap_in); + } + launch_input (adev, adev->dmap_in); + } + if (adev->sync_mode & PCM_ENABLE_OUTPUT) + { + dmap_p dmap = adev->dmap_out; + int err; + + if (adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) + dmap->dma_mode = PCM_ENABLE_OUTPUT; + if ((err = prepare_output (adev, adev->dmap_out)) < 0) + return err; + launch_output (adev, adev->dmap_out); + } + adev->d->adrv_sync_control (adev->engine_num, SYNC_PREPARE, + adev->sync_mode); + } + else + { + arg = 0; + oss_audio_ioctl (adev->engine_num, NULL, SNDCTL_DSP_SETTRIGGER, + (ioctl_arg) & arg); + } + } + else + { + cmn_err (CE_NOTE, "Broken sync chain\n"); + } + + adev = adev->sync_next; + } + +/* + * Pass 2: Deliver the actual start commands. + */ + + adev = audio_engines[master_dev]; + + while (adev != NULL) + { + + if (adev->sync_group == group) + { + adev->go = 1; + + if (adev->d->adrv_sync_control) + adev->d->adrv_sync_control (adev->engine_num, SYNC_TRIGGER, + adev->sync_mode); + else + { + arg = adev->sync_mode; + oss_audio_ioctl (adev->engine_num, NULL, SNDCTL_DSP_SETTRIGGER, + (ioctl_arg) & arg); + } + } + else + { + /* Skip this one */ + adev = adev->sync_next; + continue; + } + + next = adev->sync_next; + adev->sync_next = NULL; + adev->sync_flags = 0; + adev->sync_group = 0; + + adev = next; + } + return 0; +} + +#ifdef DO_TIMINGS +static char * +find_ioctl_name (unsigned int cmd, ioctl_arg val) +{ + static char tmp[32]; + + typedef struct + { + unsigned int code; + char *name; + int flags; +#define IOF_DEC 0x00000001 +#define IOF_HEX 0x00000002 + } ioctl_def_t; + + static ioctl_def_t call_names[] = { + {SNDCTL_DSP_HALT, "SNDCTL_DSP_HALT"}, + {SNDCTL_DSP_SYNC, "SNDCTL_DSP_SYNC"}, + {SNDCTL_DSP_SPEED, "SNDCTL_DSP_SPEED", IOF_DEC}, + {SNDCTL_DSP_STEREO, "SNDCTL_DSP_STEREO", IOF_DEC}, + {SNDCTL_DSP_GETBLKSIZE, "SNDCTL_DSP_GETBLKSIZE"}, + {SNDCTL_DSP_CHANNELS, "SNDCTL_DSP_CHANNELS", IOF_DEC}, + {SNDCTL_DSP_POST, "SNDCTL_DSP_POST"}, + {SNDCTL_DSP_SUBDIVIDE, "SNDCTL_DSP_SUBDIVIDE"}, + {SNDCTL_DSP_SETFRAGMENT, "SNDCTL_DSP_SETFRAGMENT", IOF_HEX}, + {SNDCTL_DSP_GETFMTS, "SNDCTL_DSP_GETFMTS"}, + {SNDCTL_DSP_SETFMT, "SNDCTL_DSP_SETFMT", IOF_HEX}, + {SNDCTL_DSP_GETOSPACE, "SNDCTL_DSP_GETOSPACE"}, + {SNDCTL_DSP_GETISPACE, "SNDCTL_DSP_GETISPACE"}, + {SNDCTL_DSP_GETCAPS, "SNDCTL_DSP_GETCAPS"}, + {SNDCTL_DSP_GETTRIGGER, "SNDCTL_DSP_GETTRIGGER"}, + {SNDCTL_DSP_SETTRIGGER, "SNDCTL_DSP_SETTRIGGER", IOF_HEX}, + {SNDCTL_DSP_GETIPTR, "SNDCTL_DSP_GETIPTR"}, + {SNDCTL_DSP_GETOPTR, "SNDCTL_DSP_GETOPTR"}, + {SNDCTL_DSP_SETSYNCRO, "SNDCTL_DSP_SETSYNCRO", IOF_HEX}, + {SNDCTL_DSP_SETDUPLEX, "SNDCTL_DSP_SETDUPLEX"}, + {SNDCTL_DSP_GETODELAY, "SNDCTL_DSP_GETODELAY"}, + {SNDCTL_DSP_GETPLAYVOL, "SNDCTL_DSP_GETPLAYVOL"}, + {SNDCTL_DSP_SETPLAYVOL, "SNDCTL_DSP_SETPLAYVOL", IOF_HEX}, + {SNDCTL_DSP_GETRECVOL, "SNDCTL_DSP_GETRECVOL"}, + {SNDCTL_DSP_SETRECVOL, "SNDCTL_DSP_SETRECVOL", IOF_HEX}, + {SNDCTL_DSP_GETERROR, "SNDCTL_DSP_GETERROR"}, + {SNDCTL_DSP_READCTL, "SNDCTL_DSP_READCTL"}, + {SNDCTL_DSP_WRITECTL, "SNDCTL_DSP_WRITECTL"}, + {SNDCTL_DSP_SYNCGROUP, "SNDCTL_DSP_SYNCGROUP"}, + {SNDCTL_DSP_SYNCSTART, "SNDCTL_DSP_SYNCSTART"}, + {SNDCTL_DSP_COOKEDMODE, "SNDCTL_DSP_COOKEDMODE", IOF_DEC}, + {SNDCTL_DSP_SILENCE, "SNDCTL_DSP_SILENCE"}, + {SNDCTL_DSP_SKIP, "SNDCTL_DSP_SKIP"}, + {SNDCTL_DSP_GETCHANNELMASK, "SNDCTL_DSP_GETCHANNELMASK"}, + {SNDCTL_DSP_BIND_CHANNEL, "SNDCTL_DSP_BIND_CHANNEL"}, + {SNDCTL_DSP_HALT_INPUT, "SNDCTL_DSP_HALT_INPUT"}, + {SNDCTL_DSP_HALT_OUTPUT, "SNDCTL_DSP_HALT_OUTPUT"}, + {SNDCTL_DSP_LOW_WATER, "SNDCTL_DSP_LOW_WATER"}, +#ifndef OSS_NO_LONG_LONG + {SNDCTL_DSP_CURRENT_IPTR, "SNDCTL_DSP_CURRENT_IPTR"}, + {SNDCTL_DSP_CURRENT_OPTR, "SNDCTL_DSP_CURRENT_OPTR"}, +#endif + {SNDCTL_DSP_GET_RECSRC, "SNDCTL_DSP_GET_RECSRC"}, + {SNDCTL_DSP_SET_RECSRC, "SNDCTL_DSP_SET_RECSRC"}, + {SNDCTL_DSP_GET_RECSRC_NAMES, "SNDCTL_DSP_GET_RECSRC_NAMES"}, + {SNDCTL_DSP_GET_PLAYTGT, "SNDCTL_DSP_GET_PLAYTGT"}, + {SNDCTL_DSP_SET_PLAYTGT, "SNDCTL_DSP_SET_PLAYTGT"}, + {SNDCTL_DSP_GET_PLAYTGT_NAMES, "SNDCTL_DSP_GET_PLAYTGT_NAMES"}, + {0, NULL} + }; + + int i; + for (i = 0; call_names[i].code != 0; i++) + if (call_names[i].code == cmd) + { + int flags = call_names[i].flags; + + if (flags & IOF_DEC) + { + sprintf (tmp, "%s, *%d", call_names[i].name, *val); + return tmp; + } + + if (flags & IOF_HEX) + { + sprintf (tmp, "%s, *0x%08x", call_names[i].name, *val); + return tmp; + } + + return call_names[i].name; + } + + sprintf (tmp, "Unknown %08x", cmd); + return tmp; +} +#endif + +/*ARGSUSED*/ +int +oss_encode_enum (oss_mixer_enuminfo * ei, const char *s, int version) +{ + int n = 1, l; + int i; + + memset (ei, 0, sizeof (*ei)); /* Wipe out everything */ + + strncpy (ei->strings, s, sizeof (ei->strings) - 1); + ei->strings[sizeof (ei->strings) - 1] = 0; + + ei->strindex[0] = 0; + + l = strlen (ei->strings); + for (i = 0; i < l; i++) + { + if (ei->strings[i] == ' ') + { + ei->strindex[n++] = i + 1; + ei->strings[i] = 0; + } + } + + ei->nvalues = n; + + return 0; +} + +static int +get_legacy_recsrc_names (int dev, oss_mixer_enuminfo * ei) +{ + static const char *labels[] = SOUND_DEVICE_NAMES; + + int i, mixer_dev, recmask, devmask, caps, n; + char *s; + + if (audio_engines[dev]->mixer_dev < 0) /* No mixer */ + return 0; + + mixer_dev = audio_engines[dev]->mixer_dev; + + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_CAPS, (ioctl_arg) & caps) < 0) + caps = 0; /* Error */ + + if (caps & SOUND_CAP_NORECSRC) + return 0; + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_DEVMASK, (ioctl_arg) & devmask) < 0) + return 0; /* Error */ + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_RECMASK, (ioctl_arg) & recmask) < 0) + return 0; /* Error */ + + recmask &= devmask; + if (recmask == 0) + return 0; + + n = 0; + s = ei->strings; + + for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) + if (recmask & (1 << i)) /* This control is also recording device */ + { + /*LINTED*/ ei->strindex[n] = s - ei->strings; + + strcpy (s, labels[i]); + s += strlen (s); + *s++ = 0; + n++; + } + + ei->nvalues = n; + + return (n > 0); +} + +static int +get_legacy_recsrc (int dev) +{ + int i, mixer_dev, recmask, recsrc, caps, n; + + if (audio_engines[dev]->mixer_dev < 0) /* No mixer */ + return 0; + + mixer_dev = audio_engines[dev]->mixer_dev; + + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_CAPS, (ioctl_arg) & caps) < 0) + caps = 0; /* Error */ + + if (caps & SOUND_CAP_NORECSRC) + return 0; + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_RECSRC, (ioctl_arg) & recsrc) < 0) + return 0; /* Error */ + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_RECMASK, (ioctl_arg) & recmask) < 0) + return 0; /* Error */ + + if (recmask == 0 || recsrc == 0) + return 0; + + n = 0; + + for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) + if (recmask & (1 << i)) /* This control is also recording device */ + { + if (recsrc & (1 << i)) /* It was this one */ + return n; + n++; + } + + + return 0; +} + +static int +set_legacy_recsrc (int dev, int val) +{ + int i, mixer_dev, recmask, recsrc, caps, n; + + if (audio_engines[dev]->mixer_dev < 0) /* No mixer */ + return 0; + + mixer_dev = audio_engines[dev]->mixer_dev; + + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_CAPS, (ioctl_arg) & caps) < 0) + caps = 0; /* Error */ + + if (caps & SOUND_CAP_NORECSRC) + return 0; + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_READ_RECMASK, (ioctl_arg) & recmask) < 0) + return 0; /* Error */ + + if (recmask == 0) + return 0; + + n = 0; + + for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) + if (recmask & (1 << i)) /* This control is also recording device */ + { + if (n == val) + { + recsrc = (1 << i); + + if (oss_legacy_mixer_ioctl + (mixer_dev, -1, SOUND_MIXER_WRITE_RECSRC, + (ioctl_arg) & recsrc) < 0) + return 0; /* Error */ + + return 1; + } + n++; + } + + + return 0; +} + +/*ARGSUSED*/ +int +oss_audio_ioctl (int dev, struct fileinfo *bogus, + unsigned int cmd, ioctl_arg arg) +{ + int val, err; + int mixdev; + int ret; + adev_p adev; + dmap_p dmapin, dmapout; + oss_native_word flags; +#ifdef DO_TIMINGS + oss_timing_printf ("oss_audio_ioctl(%d, %s)", dev, find_ioctl_name (cmd, arg)); +#endif + + if (cmd == OSS_GETVERSION) + return *arg = OSS_VERSION; + + UP_STATUS (STS_IOCTL); + DOWN_STATUS (STS_IOCTL); + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (adev->unloaded) + return OSS_ENODEV; + if (!adev->enabled) + return OSS_ENXIO; + + if (adev->d->adrv_ioctl_override != NULL) + { + /* + * Use the ioctl override function if available. However process the request + * in the usual way if the override function returned OSS_EAGAIN. It may + * be possible that the override function has modified the parameters + * before returning. + */ + if ((err = adev->d->adrv_ioctl_override(dev, cmd, arg)) != OSS_EAGAIN) + return err; + } + + dmapout = adev->dmap_out; + dmapin = adev->dmap_in; + +/* + * Handle mixer ioctl calls on audio fd. + */ + + if (cmd == SOUND_MIXER_WRITE_PCM) cmd = SNDCTL_DSP_SETPLAYVOL; + if (cmd == SOUND_MIXER_WRITE_RECLEV) cmd = SNDCTL_DSP_SETRECVOL; + if (cmd == SOUND_MIXER_READ_PCM) cmd = SNDCTL_DSP_GETPLAYVOL; + if (cmd == SOUND_MIXER_READ_RECLEV) cmd = SNDCTL_DSP_GETRECVOL; + + if ((mixdev = adev->mixer_dev) != -1) + { + if (((cmd >> 8) & 0xff) == 'M' && num_mixers > 0) /* Mixer ioctl */ + if ((ret = oss_legacy_mixer_ioctl (mixdev, dev, cmd, arg)) != OSS_EINVAL) + return ret; + } + + if (((cmd >> 8) & 0xff) == 'X') /* Mixer extension API */ + return oss_mixer_ext (adev->engine_num, OSS_DEV_DSP, cmd, arg); + + switch (cmd) + { + case SNDCTL_DSP_SYNC: + oss_audio_sync (adev); + return 0; + break; + + case SNDCTL_DSP_POST: + oss_audio_post (adev); + return 0; + break; + + case SNDCTL_DSP_HALT: + audio_reset_adev (adev); + return 0; + break; + + case SNDCTL_DSP_HALT_INPUT: + audio_reset_input (adev); + return 0; + break; + + case SNDCTL_DSP_LOW_WATER: + val = *arg; + if (adev->open_mode & OPEN_READ) + adev->dmap_in->low_water = val; + if (adev->open_mode & OPEN_WRITE) + adev->dmap_out->low_water = val; + return 0; + break; + + case SNDCTL_DSP_HALT_OUTPUT: + audio_reset_output (adev); + return 0; + break; + + case SNDCTL_DSP_GETFMTS: + switch (adev->open_mode & (OPEN_READ | OPEN_WRITE)) + { + case OPEN_WRITE: + return *arg = (adev->oformat_mask); + break; + + case OPEN_READ: + return *arg = (adev->oformat_mask); + break; + + default: + return *arg = (adev->xformat_mask); + break; + } + break; + + case SNDCTL_DSP_SETFMT: + val = *arg; + switch (adev->open_mode & (OPEN_READ | OPEN_WRITE)) + { + case OPEN_WRITE: + return *arg = (oss_audio_set_format (dev, val, + audio_engines + [dev]->oformat_mask)); + break; + + case OPEN_READ: + return *arg = (oss_audio_set_format (dev, val, + audio_engines + [dev]->iformat_mask)); + break; + + default: + return *arg = (oss_audio_set_format (dev, val, + audio_engines + [dev]->oformat_mask & + audio_engines + [dev]->iformat_mask)); + break; + } + + case SNDCTL_DSP_GETOSPACE: + if (!(adev->dmask & DMASK_OUT)) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1001, + "GETOSPACE called in read-only mode"), + 0); + /* Errordesc: SNDCTL_DSP_GETOSPACE is not defined in read-only access mode */ + return OSS_ENOTSUP; + } + ret = get_ospace (adev, dmapout, arg); +#ifdef DO_TIMINGS + { + audio_buf_info *info = (audio_buf_info *) arg; + oss_timing_printf ("GETOSPACE(b=%d,f=%d,fsz=%d,ft=%d)=%d", info->bytes, + info->fragments, info->fragsize, info->fragstotal, ret); + oss_timing_printf ("Low water %d, ap flags=%x, tmpbuf=%d/%d", + dmapout->low_water, adev->open_flags, dmapout->tmpbuf_ptr, + dmapout->tmpbuf_len); + } +#endif + return ret; + break; + + case SNDCTL_DSP_GETISPACE: + if (!(adev->dmask & DMASK_IN)) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1002, + "GETISPACE called in write-only mode"), + 0); + /* + * Errordesc: SNDCTL_DSP_GETISPACE has no defined meaning when the audio + * device is opened in write-only mode. + */ + return OSS_ENOTSUP; + } + + return get_ispace (adev, dmapin, arg); + break; + + case SNDCTL_DSP_GETODELAY: + if (!(adev->dmask & DMASK_OUT)) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1005, + "GETODELAY called in read-only mode"), + 0); + return OSS_ENOTSUP; + } + return get_odelay (adev, dmapout, arg); + break; + + case SNDCTL_DSP_SETDUPLEX: + /* + * Note! SNDCTL_DSP_SETDUPLEX has not been implemented by any driver for years. + * The call is still implemented in audio core but it may get removed in the + * future. + */ + if (adev->open_mode != OPEN_READWRITE) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1006, + "SETDUPLEX called in non-read/write mode"), + 0); + return OSS_ENOTSUP; + } + if (adev->flags & ADEV_DUPLEX) + { + if (adev->d->adrv_ioctl == NULL) + return 0; + val = adev->d->adrv_ioctl (dev, cmd, arg); + if (val == OSS_EINVAL) + return 0; + else + return val; + } + else + { + return OSS_ENOTSUP; + } + break; + + case SNDCTL_DSP_COOKEDMODE: + val = *arg; + + if (adev->flags & ADEV_NONINTERLEAVED) + val=1; + + adev->cooked_enable = !!val; + if (adev->d->adrv_ioctl != NULL) + adev->d->adrv_ioctl (dev, cmd, arg); +#ifdef DO_TIMINGS + if (adev->cooked_enable) + oss_do_timing ("Setting cooked mode ON"); + else + oss_do_timing ("Setting cooked mode OFF"); +#endif + return 0; + break; + + case SNDCTL_DSP_GETCAPS: + { + int info; + info = audio_engines[dev]->caps; + info |= 2; /* Revision level of this ioctl() */ + +#if 0 + if (!(adev->flags & ADEV_VIRTUAL) && !adev->d->adrv_local_qlen) +#endif + info |= PCM_CAP_REALTIME; + + + if (!(adev->flags & ADEV_NOINPUT)) + info |= PCM_CAP_INPUT; + + if (!(adev->flags & ADEV_NOOUTPUT)) + info |= PCM_CAP_OUTPUT; + + if ((adev->flags & ADEV_VIRTUAL)) + info |= PCM_CAP_VIRTUAL; + + if (!(adev->flags & ADEV_NOINPUT) && !(adev->flags & ADEV_NOOUTPUT)) + if (adev->flags & ADEV_DUPLEX && adev->open_mode == OPEN_READWRITE) + info |= PCM_CAP_DUPLEX; + + if (dev > 0) + if (adev->flags & ADEV_SPECIAL) + info |= PCM_CAP_SPECIAL; + + if (dev < num_audio_engines - 1) + { + if (audio_engines[dev + 1]->flags & ADEV_SHADOW) + info |= PCM_CAP_MULTI; + } + + if (adev->d->adrv_local_qlen) /* Device has hidden buffers */ + info |= PCM_CAP_BATCH; + + if (adev->d->adrv_trigger) /* Supports SETTRIGGER */ + info |= PCM_CAP_TRIGGER; + +#ifdef ALLOW_BUFFER_MAPPING + info |= PCM_CAP_MMAP; +#endif + if (!(adev->flags & ADEV_NOINPUT)) + info |= PCM_CAP_INPUT; + + if (!(adev->flags & ADEV_NOOUTPUT)) + info |= PCM_CAP_OUTPUT; + + if (adev->d->adrv_bind != NULL) + info |= PCM_CAP_BIND; + /* + * TODO: ADEV_DEFAULT is not the right way to find out + * PCM_CAP_DEFAULT devices. A new ADEV_ flag should be defined + * for this purpose. + */ + if (adev->flags & ADEV_DEFAULT) + info |= PCM_CAP_DEFAULT; + + return *arg = (info); + } + break; + + case SNDCTL_DSP_NONBLOCK: + adev->forced_nonblock = 1; + return 0; + break; + + case SNDCTL_DSP_GETCHANNELMASK: + case SNDCTL_DSP_BIND_CHANNEL: + if (adev->d->adrv_bind == NULL) + return OSS_EINVAL; + return adev->d->adrv_bind (adev->engine_num, cmd, arg); + break; + + case SNDCTL_DSP_SETTRIGGER: + { + int val; + + if (!adev->d->adrv_trigger) + { + cmn_err (CE_NOTE, "Device %d doesn't have trigger capability\n", + adev->engine_num); + return OSS_EIO; + } + + val = *arg; + val &= PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT; + val &= adev->open_mode; + + if ((val & adev->open_mode) != (adev->enable_bits & adev->open_mode)) + { + if ((val & PCM_ENABLE_OUTPUT) + && !(adev->enable_bits & PCM_ENABLE_OUTPUT)) + { + dmap_p dmap = adev->dmap_out; + oss_native_word flags; + if (adev->dmap_out->mapping_flags & DMA_MAP_MAPPED) + dmap->dma_mode = PCM_ENABLE_OUTPUT; + if ((err = prepare_output (adev, adev->dmap_out)) < 0) + return err; + launch_output (adev, adev->dmap_out); + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + adev->enable_bits &= PCM_ENABLE_OUTPUT; + adev->enable_bits |= val & PCM_ENABLE_OUTPUT; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + } + + if ((val & PCM_ENABLE_INPUT) + && !(adev->enable_bits & PCM_ENABLE_INPUT)) + { + dmap_p dmap = adev->dmap_in; + oss_native_word flags; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->dma_mode = PCM_ENABLE_INPUT; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if ((err = prepare_input (adev, adev->dmap_in)) < 0) + return err; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + launch_input (adev, adev->dmap_in); + adev->enable_bits &= PCM_ENABLE_INPUT; + adev->enable_bits |= val & PCM_ENABLE_INPUT; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + } + + adev->enable_bits = val; + if (adev->enable_bits == 0 || adev->go) /* Device is enabled */ + { + adev->d->adrv_trigger (adev->engine_num, adev->enable_bits); + } + } + *arg = val; + return 0; + } + break; + + case SNDCTL_DSP_GETTRIGGER: + if (!adev->d->adrv_trigger) + { + cmn_err (CE_NOTE, "Device %d doesn't have trigger capability\n", + adev->engine_num); + return OSS_EIO; + } + return *arg = (adev->enable_bits & adev->open_mode); + break; + + case SNDCTL_DSP_SETSYNCRO: + adev->go = 0; + break; + + case SNDCTL_DSP_SYNCGROUP: + return handle_syncgroup (adev, (oss_syncgroup *) arg); + break; + + case SNDCTL_DSP_SYNCSTART: + val = *arg; + + MUTEX_ENTER_IRQDISABLE (audio_global_mutex, flags); + ret = handle_syncstart (adev->engine_num, val); + MUTEX_EXIT_IRQRESTORE (audio_global_mutex, flags); + + return ret; + break; + + case SNDCTL_DSP_GETERROR: + { + audio_errinfo *info = (audio_errinfo *) arg; + + memset ((void *) info, 0, sizeof (*info)); + + //if (audio_engines[dev]->open_mode & OPEN_READ) + { + dmap_t *dmap = audio_engines[dev]->dmap_in; + + info->rec_overruns = dmap->rec_overruns; + dmap->rec_overruns = 0; + info->rec_ptradjust = 0; + info->rec_errorcount = dmap->num_errors; + info->rec_lasterror = dmap->errors[0]; + info->rec_errorparm = dmap->error_parms[0]; + } + + //if (audio_engines[dev]->open_mode & OPEN_WRITE) + { + dmap_t *dmap = audio_engines[dev]->dmap_out; + + info->play_underruns = dmap->play_underruns; + dmap->play_underruns = 0; + info->play_ptradjust = 0; + info->play_errorcount = dmap->num_errors; + info->play_lasterror = dmap->errors[0]; + info->play_errorparm = dmap->error_parms[0]; + } + + return 0; + } + break; + + case SNDCTL_DSP_GETPLAYVOL: + case SNDCTL_DSP_SETPLAYVOL: + { + int err, mixdev; + + mixdev = adev->mixer_dev; + if (cmd == SNDCTL_DSP_SETPLAYVOL && mixdev >= 0 + && mixdev < num_mixers) + mixer_devs[mixdev]->modify_counter++; + + if (adev->d->adrv_ioctl == NULL + || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) + { + /* Emulate these calls using mixer API */ + + if (mixdev < 0 || mixdev >= num_mixers) + return OSS_EINVAL; + + if (cmd == SNDCTL_DSP_GETPLAYVOL) + cmd = SOUND_MIXER_READ_PCM; + else + cmd = SOUND_MIXER_WRITE_PCM; + return mixer_devs[mixdev]->d->ioctl (mixdev, dev, cmd, arg); + } + return err; + } + break; + + case SNDCTL_DSP_GETRECVOL: + case SNDCTL_DSP_SETRECVOL: + { + int err, mixdev; + + mixdev = adev->mixer_dev; + if (cmd == SNDCTL_DSP_SETRECVOL && mixdev >= 0 && mixdev < num_mixers) + mixer_devs[mixdev]->modify_counter++; + + if (adev->d->adrv_ioctl == NULL + || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) + { + /* Emulate these calls using mixer API */ + + if (mixdev < 0 || mixdev >= num_mixers) + return OSS_EINVAL; + + /* Try with RECGAIN */ + if (cmd == SNDCTL_DSP_GETRECVOL) + cmd = SOUND_MIXER_READ_RECGAIN; + else + cmd = SOUND_MIXER_WRITE_RECGAIN; + err = mixer_devs[mixdev]->d->ioctl (mixdev, dev, cmd, arg); + + /* Try with RECLEV */ + if (cmd == SNDCTL_DSP_GETRECVOL) + cmd = SOUND_MIXER_READ_RECLEV; + else + cmd = SOUND_MIXER_WRITE_RECLEV; + err = mixer_devs[mixdev]->d->ioctl (mixdev, dev, cmd, arg); + + if (err >= 0) /* Was OK */ + return err; + + /* Try with IGAIN */ + if (cmd == SNDCTL_DSP_GETRECVOL) + cmd = SOUND_MIXER_READ_IGAIN; + else + cmd = SOUND_MIXER_WRITE_IGAIN; + return mixer_devs[mixdev]->d->ioctl (mixdev, dev, cmd, arg); + } + return err; + } + break; + + case SNDCTL_DSP_GETOPTR: + if (!(adev->dmask & DMASK_OUT)) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1007, + "GETOPTR called in read-only mode"), + 0); + return OSS_ENOTSUP; + } + return get_optr (adev, dmapout, arg); + break; + + case SNDCTL_DSP_GETIPTR: + if (!(adev->dmask & DMASK_IN)) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1008, + "GETIPTR called in write-only mode"), + 0); + return OSS_ENOTSUP; + } + return get_iptr (adev, dmapin, arg); + break; + +#ifndef OSS_NO_LONG_LONG + case SNDCTL_DSP_CURRENT_OPTR: + if (!(adev->dmask & DMASK_OUT)) + return OSS_ENOTSUP; + return get_long_optr (adev, dmapout, arg); + break; + + case SNDCTL_DSP_CURRENT_IPTR: + if (!(adev->dmask & DMASK_IN)) + return OSS_ENOTSUP; + return get_long_iptr (adev, dmapin, arg); + break; +#endif + + case SNDCTL_DSP_POLICY: + val = *arg; + if (val < 0 || val > 10) + return OSS_EIO; + adev->policy = val; + return 0; + break; + + case SNDCTL_DSP_SETFRAGMENT: + case SNDCTL_DSP_SUBDIVIDE: + if (cmd == SNDCTL_DSP_SUBDIVIDE) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1010, + "SNDCTL_DSP_SUBDIVIDE is obsolete"), + 0); + /* + * Errordesc: + * SNDCTL_DSP_SUBDIVIDE is obsolete. It's still emulated by OSS but + * the result is not precise. You need to use SNDCTL_DSP_SETFRAGMENT + * instead. + */ + *arg = 0x00040008; /* Default to 4 fragments of 256 bytes */ + } + + val = *arg; + if (adev->dmask & DMASK_OUT) + { + if (dmapout->flags & DMAP_FRAGFIXED) + setfragment_error (dev); + dmapout->fragsize_rq = val; + } + if (adev->dmask & DMASK_IN) + { + if (dmapin->flags & DMAP_FRAGFIXED) + setfragment_error (dev); + dmapin->fragsize_rq = val; + } + return 0; + +#ifdef __FreeBSD__ + case FREEBSD_GETBLKSIZE: +#endif + case SNDCTL_DSP_GETBLKSIZE: + return *arg = getblksize (adev); + + case SNDCTL_DSP_SPEED: + val = *arg; + if (val<0) + return OSS_EINVAL; + return *arg = (oss_audio_set_rate (dev, val)); + + case SNDCTL_DSP_STEREO: + { + int n, v; + + n = *arg; + if (n > 1) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1009, + "SNDCTL_DSP_STEREO called with bad agrument value"), + n); + /* + * Errordesc: SNDCTL_DSP_STEREO is an obsolete ioctl call that + * supports only mono (0) or stereo (1). For larger number of channels + * you need to use SNDCTL_DSP_CHANNELS instead. + */ + return OSS_EINVAL; + } + + if (n < 0) + return OSS_EINVAL; + + v = oss_audio_set_channels (dev, n + 1); + return *arg = (v - 1); + } + + case SNDCTL_DSP_CHANNELS: + { + int v; + val = *arg; +#ifdef DO_TIMINGS + { + char tmp[128]; + + sprintf (tmp, "Set channels %d", (int) val); + oss_do_timing2 (DFLAG_PROFILE, tmp); + } +#endif + if (val<0) + { + return OSS_EINVAL; + } + v = oss_audio_set_channels (dev, val); + return *arg = v; + } + + case SNDCTL_DSP_PROFILE: /* Obsolete */ + return 0; + break; + + case SNDCTL_DSP_SILENCE: + memset (dmapout->dmabuf, dmapout->neutral_byte, dmapout->buffsize); + return 0; + break; + + case SNDCTL_DSP_SKIP: + return 0; + break; + + case SNDCTL_DSP_GET_RECSRC_NAMES: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + oss_mixer_enuminfo *ei = (oss_mixer_enuminfo *) arg; + + memset (ei, 0, sizeof (*ei)); /* Wipe out everything */ + + if (get_legacy_recsrc_names (dev, ei)) + return 0; + ei->nvalues = 1; + strcpy (ei->strings, "default"); + return 0; + } + return err; + break; + + case SNDCTL_DSP_GET_RECSRC: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + return *arg = (get_legacy_recsrc (dev)); + } + return err; + break; + + case SNDCTL_DSP_SET_RECSRC: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + val = *arg; + set_legacy_recsrc (dev, val); + return *arg = (get_legacy_recsrc (dev)); + } + return err; + break; + + case SNDCTL_DSP_GET_PLAYTGT_NAMES: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + oss_mixer_enuminfo *ei = (oss_mixer_enuminfo *) arg; + memset (ei, 0, sizeof (*ei)); + ei->nvalues = 1; + strcpy (ei->strings, "default"); + return 0; + } + return err; + break; + + case SNDCTL_DSP_GET_PLAYTGT: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + return *arg = (0); + } + return err; + break; + + case SNDCTL_DSP_SET_PLAYTGT: + if (adev->d->adrv_ioctl == NULL || (err = adev->d->adrv_ioctl (dev, cmd, arg)) == OSS_EINVAL) /* Not handled */ + { + return *arg = (0); + } + return err; + break; + + case SNDCTL_SETSONG: + if (adev->d->adrv_ioctl != NULL + && adev->d->adrv_ioctl (dev, cmd, arg) >= 0) + return 0; + strncpy (adev->song_name, (char *) arg, sizeof (adev->song_name)); + adev->song_name[sizeof (adev->song_name) - 1] = 0; + return 0; + break; + + case SNDCTL_SETLABEL: + if (adev->d->adrv_ioctl != NULL + && adev->d->adrv_ioctl (dev, cmd, arg) >= 0) + return 0; + strncpy (adev->label, (char *) arg, sizeof (adev->label)); + adev->label[sizeof (adev->label) - 1] = 0; + if (*adev->cmd == 0) /* Command name not known */ + strcpy (adev->cmd, adev->label); + return 0; + break; + default: + if (adev->d->adrv_ioctl == NULL) + return OSS_EINVAL; + return adev->d->adrv_ioctl (dev, cmd, arg); + } + return OSS_EINVAL; +} + + +static int +prepare_output (adev_p adev, dmap_p dmap) +{ + int ret, data_rate = 0; + audio_format_info_p fmt_info; + + if (dmap->flags & DMAP_PREPARED) + return 0; + + data_rate = 8; + + dmap->flags &= ~DMAP_COOKED; + adev->user_parms.convert = 0; + adev->hw_parms.convert = 0; + dmap->convert_func = NULL; + dmap->convert_mode = 0; + dmap->expand_factor = UNIT_EXPAND; + + if (adev->user_parms.rate != adev->hw_parms.rate) + dmap->flags |= DMAP_COOKED; + if (adev->user_parms.fmt != adev->hw_parms.fmt) + dmap->flags |= DMAP_COOKED; + if (adev->user_parms.channels != adev->hw_parms.channels) + dmap->flags |= DMAP_COOKED; + if ((adev->flags & ADEV_NONINTERLEAVED) && adev->hw_parms.channels > 1) + dmap->flags |= DMAP_COOKED; + +#if 1 + if (always_cooked && !(dmap->mapping_flags & DMA_MAP_MAPPED)) + dmap->flags |= DMAP_COOKED; +#endif + + if ((dmap->mapping_flags & DMA_MAP_MAPPED) && (dmap->flags & DMAP_COOKED)) + { + cmn_err (CE_WARN, "Internal error in mmap() support\n"); + dmap->flags &= ~DMAP_COOKED; + } + + if (dmap->flags & DMAP_COOKED) + { +#ifdef DO_TIMINGS + oss_do_timing ("Cooked mode - Setting up conversions"); +#endif + if ((ret = + setup_format_conversions (adev, dmap, &adev->user_parms, + &adev->hw_parms, + &adev->user_parms, + &adev->hw_parms, + adev->oformat_mask)) < 0) + { + return ret; + } + } + else + { + DDB (cmn_err (CE_CONT, "No format conversions needed\n")); +#ifdef DO_TIMINGS + oss_do_timing ("No format conversions needed"); +#endif + } + +/* + * Compute device data rate and frame size + */ + if ((fmt_info = oss_find_format (adev->hw_parms.fmt)) != NULL) + data_rate = fmt_info->bits; + + data_rate /= 8; + if (data_rate < 1) + data_rate = 1; + data_rate *= adev->hw_parms.channels; + dmap->frame_size = data_rate; + data_rate *= adev->hw_parms.rate; + if (data_rate < 1) + data_rate = 8000; + dmap->data_rate = data_rate; + +/* + * Compute application/user frame_size + */ + data_rate = 8; + if ((fmt_info = oss_find_format (adev->user_parms.fmt)) != NULL) + data_rate = fmt_info->bits; + + data_rate /= 8; + if (data_rate < 1) + data_rate = 1; + data_rate *= adev->user_parms.channels; + dmap->user_frame_size = data_rate; + + setup_fragments (adev, dmap, OPEN_WRITE); + if (dmap->expand_factor == 0) + { + dmap->expand_factor = UNIT_EXPAND; + cmn_err (CE_WARN, "Bad expand factor for device %d\n", + adev->engine_num); + } + if (dmap->low_water == -1) + { + dmap->low_water = + (dmap->low_water_rq * UNIT_EXPAND) / dmap->expand_factor; + } + +#ifdef DO_TIMINGS + oss_timing_printf ("Prepare output dev=%d, fragsize=%d, nfrags=%d, bytes_in_use=%d/%d", + adev->engine_num, dmap->fragment_size, dmap->nfrags, + dmap->bytes_in_use, dmap->buffsize); +#endif + + if ((ret = + adev->d->adrv_prepare_for_output (adev->engine_num, + dmap->fragment_size, + dmap->nfrags)) < 0) + { + return ret; + } + + dmap->flags |= DMAP_PREPARED; +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_PREPARE_OUTPUT); +#endif + + return 0; +} + +static int +prepare_input (adev_p adev, dmap_p dmap) +{ + int ret, data_rate = 0; + audio_format_info_p fmt_info; + + if (dmap->flags & DMAP_PREPARED) + return 0; + + data_rate = 0; + + dmap->flags &= ~DMAP_COOKED; + adev->user_parms.convert = 0; + adev->hw_parms.convert = 0; + dmap->convert_func = NULL; + dmap->convert_mode = 0; + dmap->expand_factor = UNIT_EXPAND; + + if (adev->user_parms.rate != adev->hw_parms.rate) + dmap->flags |= DMAP_COOKED; + if (adev->user_parms.fmt != adev->hw_parms.fmt) + dmap->flags |= DMAP_COOKED; + if (adev->user_parms.channels != adev->hw_parms.channels) + dmap->flags |= DMAP_COOKED; + if ((adev->flags & ADEV_NONINTERLEAVED) && adev->hw_parms.channels > 1) + dmap->flags |= DMAP_COOKED; + +#if 1 + if (always_cooked && !(dmap->mapping_flags & DMA_MAP_MAPPED)) + dmap->flags |= DMAP_COOKED; +#endif + + if ((dmap->mapping_flags & DMA_MAP_MAPPED) && (dmap->flags & DMAP_COOKED)) + { + cmn_err (CE_WARN, "Internal error in mmap() support\n"); + dmap->flags &= ~DMAP_COOKED; + } + + if (dmap->flags & DMAP_COOKED) + { + if ((ret = + setup_format_conversions (adev, dmap, &adev->hw_parms, + &adev->user_parms, + &adev->user_parms, + &adev->hw_parms, + adev->iformat_mask)) < 0) + { + DDB (cmn_err + (CE_CONT, "setup_format_conversions failed, err=%d\n", ret)); + return ret; + } + } + else + dmap->expand_factor = UNIT_EXPAND; + +/* + * Compute device data rate and frame size + */ + if ((fmt_info = oss_find_format (adev->hw_parms.fmt)) != NULL) + data_rate = fmt_info->bits; + + data_rate /= 8; + if (data_rate < 1) + data_rate = 1; + data_rate *= adev->hw_parms.channels; + dmap->frame_size = data_rate; + data_rate *= adev->hw_parms.rate; + if (data_rate < 1) + data_rate = 8000; + dmap->data_rate = data_rate; + +/* + * Compute user/application frame size + */ + data_rate = 8; + if ((fmt_info = oss_find_format (adev->user_parms.fmt)) != NULL) + data_rate = fmt_info->bits; + + data_rate /= 8; + if (data_rate < 1) + data_rate = 1; + data_rate *= adev->user_parms.channels; + dmap->user_frame_size = data_rate; + + setup_fragments (adev, dmap, OPEN_READ); + +#if 1 + /* Compute 1/expand_factor */ + + if (dmap->expand_factor == 0) + { + cmn_err (CE_NOTE, "Internal error (expand_factor==0)\n"); + dmap->expand_factor = UNIT_EXPAND; + } + + { + int expand = dmap->expand_factor; + int expand2 = expand * 100 / UNIT_EXPAND; + DDB (cmn_err (CE_CONT, "Expand factor was = %d (%d.%02d)\n", expand, + expand2 / 100, expand2 % 100)); + } + + dmap->expand_factor = (UNIT_EXPAND * UNIT_EXPAND) / dmap->expand_factor; + + { + int expand = dmap->expand_factor; + int expand2 = expand * 100 / UNIT_EXPAND; + DDB (cmn_err + (CE_CONT, "Expand factor inverted to = %d (%d.%02d)\n", expand, + expand2 / 100, expand2 % 100)); + } +#endif + + if (dmap->low_water == -1) + { + dmap->low_water = + (dmap->low_water_rq * UNIT_EXPAND) / dmap->expand_factor; + } + +#ifdef DO_TIMINGS + oss_timing_printf ("Prepare input dev=%d, fragsize=%d, nfrags=%d, bytes_in_use=%d", + adev->engine_num, dmap->fragment_size, dmap->nfrags, + dmap->bytes_in_use); +#endif + + if ((ret = + adev->d->adrv_prepare_for_input (adev->engine_num, dmap->fragment_size, + dmap->nfrags)) < 0) + { + DDB (cmn_err + (CE_CONT, "/dev/dsp%d: prepare_for_input failed, err=%d\n", + adev->engine_num, ret)); + return ret; + } + + dmap->flags |= DMAP_PREPARED; +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_PREPARE_INPUT); +#endif + + return 0; +} + +static int +launch_input (adev_p adev, dmap_p dmap) +{ +#ifdef DO_TIMINGS + oss_do_timing ("Launch input called"); +#endif + if (dmap->flags & DMAP_STARTED) + return 0; + + if (!(dmap->flags & DMAP_PREPARED)) + { + cmn_err (CE_WARN, "launch_input while not prepared.\n"); + return OSS_EIO; + } + +#ifdef DO_TIMINGS + oss_do_timing ("Launch_input calling d->start_input"); +#endif + + if (adev->d->adrv_start_input != NULL) + { + if (adev->flags & ADEV_AUTOMODE) + adev->d->adrv_start_input (adev->engine_num, dmap->dmabuf_phys, + dmap->bytes_in_use, dmap->fragment_size, + 0); + else + adev->d->adrv_start_input (adev->engine_num, dmap->dmabuf_phys, + dmap->fragment_size, dmap->fragment_size, + 0); + } + +#ifdef DO_TIMINGS + oss_do_timing ("Launch_input calling trigger"); +#endif + dmap->flags |= DMAP_STARTED; + if (adev->d->adrv_trigger + && ((adev->enable_bits * adev->go) & PCM_ENABLE_INPUT)) + { + adev->d->adrv_trigger (adev->engine_num, adev->enable_bits * adev->go); + } + + return 0; +} + +static int +find_raw_input_space (adev_p adev, dmap_p dmap, int *dmapos) +{ + int count; + int tmout, n = 0; + oss_uint64_t offs, doffs; + int lim = 1; + unsigned int status; + oss_native_word flags; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + if (adev->nonblock) + get_input_pointer (adev, dmap, 1); + count = (int) (dmap->byte_counter - dmap->user_counter); + *dmapos=0; + + if (dmap->flags & DMAP_COOKED) + { + lim = dmap->fragment_size; + } + + while (count < lim) + { + if (adev->nonblock) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); +#ifdef DO_TIMINGS + oss_do_timing ("*** EAGAIN ***"); +#endif + return OSS_EAGAIN; + } + + if (n++ > 100) + { + cmn_err (CE_WARN, "Audio input %d doesn't get filled.\n", + adev->engine_num); + cmn_err (CE_CONT, "Counters %d / %d\n", count, lim); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return OSS_EIO; + } + + tmout = (dmap->fragment_size * OSS_HZ) / dmap->data_rate; + tmout += OSS_HZ / 2; + + if (adev->go == 0) + tmout = 0; + +#ifdef DO_TIMINGS + oss_do_timing ("Sleep (in)"); + oss_timing_enter (DF_SLEEPREAD); +#endif + audio_engines[adev->engine_num]->dmap_in->error = 0; + if (!oss_sleep (adev->in_wq, &dmap->mutex, tmout, &flags, &status)) + { +#ifdef DO_TIMINGS + oss_do_timing ("Sleep (in) timed out"); +#endif + adev->timeout_count++; + if (adev->d->adrv_check_input) + { + int err = adev->d->adrv_check_input (adev->engine_num); + if (err == 0) + continue; /* Retry */ + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return err; + } + cmn_err (CE_NOTE, + "Input timed out on audio engine %d (count=%lld)\n", + adev->engine_num, dmap->byte_counter); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + FMA_EREPORT(adev->osdev, DDI_FM_DEVICE_STALL, NULL, NULL, NULL); + FMA_IMPACT(adev->osdev, DDI_SERVICE_LOST); + return OSS_EIO; + } /* Timed out */ + +#ifdef DO_TIMINGS + oss_timing_leave (DF_SLEEPREAD); + oss_do_timing ("Sleep (in) done"); +#endif + + if (status & WK_SIGNAL) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return OSS_EINTR; + } + count = (int) (dmap->byte_counter - dmap->user_counter); +#ifdef DO_TIMINGS + oss_timing_printf ("User counter %d, byte_counter %d", dmap->user_counter, + dmap->byte_counter); +#endif + } + +/* Now we should have some data */ + + if (adev->nonblock) + get_input_pointer (adev, dmap, 1); + + offs = dmap->user_counter % dmap->bytes_in_use; + doffs = dmap->byte_counter % dmap->bytes_in_use; + + count = (int) (dmap->bytes_in_use - offs); + if (offs <= doffs) + count = (int) (doffs - offs); + if (count == 0) + count = dmap->bytes_in_use; + + *dmapos = offs; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return count; +} + +/*ARGSUSED*/ +static int +move_raw_rdpointer (adev_p adev, dmap_p dmap, int len) +{ + int ret = 0; + oss_native_word flags; +#ifdef DO_TIMINGS + oss_timing_printf ("Move rdpointer, offs=%d, incr %d", dmap->user_counter, + len); +#endif + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->user_counter += len; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return ret; +} + +static void +copy_read_noninterleaved(adev_t *adev, dmap_t *dmap, int dma_offs, unsigned char *localbuf, int local_offs, int l) +{ +/* + * Copy audio data from non-interleaved device buffer to interleaved + * local buffer. + */ +// TODO: This function assumes 32 bit audio DATA + + int ch, i, nc = adev->hw_parms.channels; + int *outbuf, *inbuf; + + l /= sizeof(*outbuf)*nc; + dma_offs /= sizeof(*outbuf); + local_offs /= sizeof(*outbuf); + + for (ch=0;ch<nc;ch++) + { + outbuf = (int*)(localbuf+local_offs); + outbuf += ch; + + inbuf = (int *)(dmap->dmabuf + dmap->buffsize*ch / nc); + inbuf += dma_offs / nc; + + for (i=0;i<l;i++) + { + *outbuf = *inbuf++; + outbuf += nc; + } + } + +} + +static int +find_input_space (adev_p adev, dmap_p dmap, unsigned char **dbuf) +{ + unsigned char *p, *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; + int err, l, l2, max, dmapos; + + if (!(dmap->flags & DMAP_COOKED)) + { + err=find_raw_input_space (adev, dmap, &dmapos); + *dbuf=dmap->dmabuf+dmapos; + return err; + } + + if (dmap->tmpbuf_len > dmap->tmpbuf_ptr) + { + *dbuf = dmap->tmpbuf1 + dmap->tmpbuf_ptr; + return dmap->tmpbuf_len - dmap->tmpbuf_ptr; + } + + dmap->tmpbuf_len = dmap->tmpbuf_ptr = 0; + + if ((l = find_raw_input_space (adev, dmap, &dmapos)) < 0) + { + return l; + } + p=dmap->dmabuf; + + if (dmap->expand_factor > UNIT_EXPAND) + max = (TMP_CONVERT_MAX * UNIT_EXPAND) / dmap->expand_factor; + else + max = TMP_CONVERT_MAX; + + if (max > TMP_CONVERT_MAX) + max = TMP_CONVERT_MAX; + + if (l > max) + l = max; + l = (l / dmap->frame_size) * dmap->frame_size; /* Truncate to nearest frame size */ + l2 = l; + VMEM_CHECK (p1, l); + VMEM_CHECK (p+dmapos, l); + + if ((adev->flags & ADEV_NONINTERLEAVED) && adev->hw_parms.channels > 1) + copy_read_noninterleaved(adev, dmap, dmapos, p1, 0, l); + else + memcpy (p1, p+dmapos, l); + + move_raw_rdpointer (adev, dmap, l); + + if ((err = + dmap->convert_func (adev, dmap, &p1, &l2, + &p2, &adev->hw_parms, + &adev->user_parms)) < 0) + return err; + + dmap->tmpbuf1 = p1; + dmap->tmpbuf2 = p2; + dmap->tmpbuf_len = l2; + + *dbuf = dmap->tmpbuf1; + return dmap->tmpbuf_len; +} + +static int +move_rdpointer (adev_p adev, dmap_p dmap, int len) +{ + if (!(dmap->flags & DMAP_COOKED) || dmap->tmpbuf_ptr >= dmap->tmpbuf_len) + { + dmap->tmpbuf_ptr = 0; + dmap->tmpbuf_len = 0; + return move_raw_rdpointer (adev, dmap, len); + } + + if (dmap->tmpbuf_ptr < dmap->tmpbuf_len) + { + dmap->tmpbuf_ptr += len; + + if (dmap->tmpbuf_ptr >= dmap->tmpbuf_len) + dmap->tmpbuf_len = dmap->tmpbuf_ptr = 0; + + return 0; + } + + cmn_err (CE_NOTE, "Why here?\n"); + return OSS_EIO; +} + +int +oss_audio_read (int dev, struct fileinfo *file, uio_t * buf, int count) +{ + adev_p adev; + dmap_p dmap; + int c, l, p, ret, n; + unsigned char *dmabuf; +#ifdef DO_TIMINGS + oss_timing_printf ("--- audio_read(%d, %d) ---", dev, count); +#endif + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (!adev->enabled) + return OSS_ENXIO; + if (adev->flags & ADEV_NOINPUT) + return OSS_EACCES; + dmap = adev->dmap_in; + + if (!(adev->open_mode & OPEN_READ)) + return OSS_ENOTSUP; + if (dmap->dma_mode == PCM_ENABLE_OUTPUT) + { + audio_reset_output (adev); + reset_dmap (dmap); + } + +/* + * Initial setup + */ + oss_reset_wait_queue (adev->in_wq); + + if (file != NULL) + { + if ((ISSET_FILE_FLAG (file, O_NONBLOCK) + && !(adev->open_flags & OF_BLOCK)) || adev->forced_nonblock) + adev->nonblock = 1; + else + adev->nonblock = 0; +#ifdef DO_TIMINGS + if (adev->nonblock) + oss_do_timing ("*** NON BLOCKING READ ***"); +#endif + } + + if (dmap->dma_mode != PCM_ENABLE_INPUT) + { + if ((ret = prepare_input (adev, dmap)) < 0) + { + DDB (cmn_err (CE_CONT, "Prepare input failed, err=%d\n", ret)); + return ret; + } + dmap->dma_mode = PCM_ENABLE_INPUT; + launch_input (adev, dmap); + } + + if (!(dmap->flags & DMAP_PREPARED)) + { /* Not prepared. Why??? */ + cmn_err (CE_WARN, "Intenal error (not prepared)\n"); + return OSS_EIO; + } + + c = count; + p = 0; + n = 0; + + while (c > 0 && n++ < 1000) + { + if ((l = find_input_space (adev, dmap, &dmabuf)) < 0) + { + if (l == OSS_EINTR) + { + if (c == count) /* Nothing read yet */ + return OSS_EINTR; + return count - c; + } + if (l == OSS_EAGAIN) + { + if (c == count) /* Nothing read yet */ + return OSS_EAGAIN; + return count - c; + } + return l; + } + + if (l > c) + l = c; + + if (uiomove (dmabuf, l, UIO_READ, buf) != 0) + { + cmn_err (CE_WARN, "audio: uiomove(UIO_READ) failed\n"); + return OSS_EFAULT; + } + if ((ret = move_rdpointer (adev, dmap, l)) < 0) + { + return ret; + } + + c -= l; + p += l; + } + +#ifdef DO_TIMINGS + oss_timing_printf ("-------- Audio read done (%d)", count - c); +#endif + + return count - c; +} + +/*ARGSUSED*/ +static int +audio_space_in_queue (adev_p adev, dmap_p dmap, int count) +{ + int cnt; + + cnt = (int) (dmap->byte_counter + dmap->bytes_in_use - dmap->user_counter); + + if (cnt < 0) + { + cmn_err (CE_CONT, "Buffer %d overfilled (%d)\n", adev->engine_num, cnt); + } + + if (!(dmap->mapping_flags & DMA_MAP_MAPPED)) + if (cnt > dmap->bytes_in_use) /* Output underrun */ + { +#ifdef DO_TIMINGS + oss_timing_printf ("adev %d: Play underrun B", adev->engine_num); + oss_timing_printf (" User=%lld", dmap->user_counter); + oss_timing_printf (" Dev=%lld", dmap->byte_counter); + oss_timing_printf (" Tmp=%d", dmap->tmpbuf_ptr); +#endif + cnt = dmap->bytes_in_use; + dmap->user_counter = dmap->byte_counter; + dmap->play_underruns++; + if (!dmap->underrun_flag) + { +#ifdef DO_TIMINGS + oss_do_timing ("Clearing the buffer"); +#endif + memset (dmap->dmabuf, dmap->neutral_byte, dmap->bytes_in_use); + } + dmap->underrun_flag = 1; + } + + if ((dmap->user_counter + cnt) > (dmap->byte_counter + dmap->bytes_in_use)) + cmn_err (CE_CONT, "Overflow %lld+%d, %lld\n", dmap->user_counter, cnt, + dmap->byte_counter); + + return cnt; +} + +static int +find_output_space (adev_p adev, dmap_p dmap, int *size, int count) +{ + int offs; + int len, l2, n = 0, tmout; + oss_native_word flags; + int tout; + unsigned int status; + + if (dmap == NULL) + { + cmn_err (CE_WARN, "Internal error - dmap==NULL\n"); + return OSS_EIO; + } + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + len = audio_space_in_queue (adev, dmap, count); + + tout = 0; + while (len < dmap->user_frame_size) + { /* Wait for some space */ + if (tout++ > 10000) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, "Internal timeout error B\n"); + return OSS_EIO; + } + + if (adev->nonblock || !(adev->enable_bits & PCM_ENABLE_OUTPUT)) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); +#ifdef DO_TIMINGS + oss_timing_printf ("Space=%d\n", len); + oss_do_timing ("*** EAGAIN ***"); +#endif + if (!(adev->enable_bits & PCM_ENABLE_OUTPUT)) + { + launch_output (adev, dmap); + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1021, + "Play buffer full when playback is triggered off."), + 0); + /* + * Errordesc: + * An application had written too many samples of data between + * turning off the PCM_ENABLE_OUTPUT trigger bit and turning it back + * again to trigger playback. + * + * Applications using SNDCTL_DSP_SETTRIGGER should avoid filling the + * available playback buffer before triggering output. + * + * One possible error causing this is that the application has + * triggered only recording on a duplex device. + */ + } + return OSS_EAGAIN; + } + + if (n++ > dmap->nfrags * 2) + { + cmn_err (CE_WARN, "Audio output %d doesn't drain (%lld/%lld %d).\n", + adev->engine_num, dmap->user_counter, dmap->byte_counter, + len); + cmn_err (CE_CONT, "len=%d/%d, total=%d\n", len, dmap->fragment_size, + dmap->bytes_in_use); +#ifdef DO_TIMINGS + oss_do_timing ("Audio output doesn't drain"); +#endif + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + audio_reset_output (adev); + return OSS_EIO; + } + + tmout = (dmap->fragment_size * OSS_HZ) / dmap->data_rate; + tmout += OSS_HZ; + + if (adev->go == 0) + tmout = 0; + + audio_engines[adev->engine_num]->dmap_out->error = 0; + if (adev->go == 0) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return OSS_EAGAIN; + } +#ifdef DO_TIMINGS + oss_timing_printf ("Sleep(%d)", adev->engine_num); + oss_timing_enter (DF_SLEEPWRITE); +#endif + UP_STATUS (STS_SLEEP); + if (!oss_sleep (adev->out_wq, &dmap->mutex, tmout, &flags, &status)) + { +#ifdef DO_TIMINGS + oss_timing_printf ("Sleep(%d) (out) timed out", adev->engine_num); +#endif + adev->timeout_count++; + + if (adev->d->adrv_check_output) + { + int err = adev->d->adrv_check_output (adev->engine_num); + if (err == 0) + continue; /* Retry */ + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return err; + } + else + { + cmn_err (CE_NOTE, + "Output timed out on audio engine %d/'%s' (count=%lld)\n", + adev->engine_num, adev->name, dmap->byte_counter); + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + FMA_EREPORT(adev->osdev, DDI_FM_DEVICE_STALL, NULL, NULL, NULL); + FMA_IMPACT(adev->osdev, DDI_SERVICE_LOST); + return OSS_EIO; + } /* Timed out */ + DOWN_STATUS (STS_SLEEP); + +#ifdef DO_TIMINGS + oss_timing_leave (DF_SLEEPWRITE); + oss_timing_printf ("Sleep(%d) (out) done", adev->engine_num); +#endif + + if (status & WK_SIGNAL) + { +#ifdef DO_TIMINGS + oss_do_timing ("Signal caught"); +#endif + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return OSS_EINTR; + } + + len = audio_space_in_queue (adev, dmap, count); +#ifdef DO_TIMINGS + oss_timing_printf ("Free output space now %d bytes", len); +#endif + } /* Wait for space */ + +/* + * Now we hopefully have some free space in the buffer. + */ + + offs = (int) (dmap->user_counter % dmap->bytes_in_use); + + l2 = dmap->bytes_in_use - offs; + if (len > l2) + len = l2; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if (len < 0) + len = 0; + + *size = len; +#ifdef DO_TIMINGS + oss_timing_printf ("Got output buffer, offs %d/%d, len %d", offs, + dmap->bytes_in_use, len); +#endif + if (offs < 0 || (offs + len) > dmap->bytes_in_use) + { + cmn_err (CE_WARN, "Bad audio output buffer %d/%d\n", offs, len); + return OSS_EIO; + } + + return offs; +} + +static int +launch_output (adev_p adev, dmap_p dmap) +{ + oss_native_word flags; + +#ifdef DO_TIMINGS + oss_do_timing ("Launch output called"); +#endif + if (dmap->flags & DMAP_STARTED) + { + return 0; + } + + if (dmap->user_counter == 0 && dmap->audio_callback == NULL + && dmap->mapping_flags == 0) + { + return 0; + } + + if (!(dmap->flags & DMAP_PREPARED)) + { + cmn_err (CE_WARN, "launch_output while not prepared. Engine=%d\n", adev->engine_num); + return OSS_EIO; + } + +#ifdef DO_TIMINGS + oss_do_timing ("Launch_output calling output_block"); +#endif + + if (adev->d->adrv_output_block != NULL) + { + if (adev->flags & ADEV_AUTOMODE) + adev->d->adrv_output_block (adev->engine_num, dmap->dmabuf_phys, + dmap->bytes_in_use, dmap->fragment_size, + 0); + else + adev->d->adrv_output_block (adev->engine_num, dmap->dmabuf_phys, + dmap->fragment_size, dmap->fragment_size, + 0); + } + +#ifdef DO_TIMINGS + oss_do_timing ("Launch_output calling trigger"); +#endif + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->flags |= DMAP_STARTED; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if (adev->d->adrv_trigger + && ((adev->enable_bits * adev->go) & PCM_ENABLE_OUTPUT)) + { + adev->d->adrv_trigger (adev->engine_num, adev->enable_bits * adev->go); + } + + return 0; +} + +static int +move_wrpointer (adev_p adev, dmap_p dmap, int len) +{ + int ret = 0; + oss_native_word flags; +#ifdef DO_TIMINGS + oss_timing_printf ("Move wrpointer, len %d", len); +#endif + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->underrun_flag = 0; + + dmap->user_counter += len; +#ifdef DO_TIMINGS + oss_timing_printf (" User=%lld", dmap->user_counter); + oss_timing_printf (" Byte=%lld", dmap->byte_counter); + oss_timing_printf (" Fill=%lld", dmap->user_counter - dmap->byte_counter); +#endif + +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_UPDATE_OUTPUT); +#endif + + if (ret < 0 || dmap->flags & DMAP_STARTED) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return ret; + } + + if (!(adev->enable_bits & PCM_ENABLE_OUTPUT)) + { +#ifdef DO_TIMINGS + oss_do_timing ("Output not triggered - skipping launch_output"); +#endif + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return ret; + } + + if ((dmap->user_counter < dmap->fragment_size * 2) + && (dmap->user_counter < dmap->bytes_in_use / 2)) + { +#ifdef DO_TIMINGS + oss_timing_printf ("dmap->user_counter=%lld, dmap->fragment_size*2=%ld", + dmap->user_counter, dmap->fragment_size * 2); + oss_do_timing + ("Not enough data in the buffer yet - skipping launch_output"); +#endif + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + return ret; + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + ret = launch_output (adev, dmap); + return ret; +} + +/*ARGSUSED*/ +static void +store_tmp_data (adev_p adev, dmap_p dmap, unsigned char *buf, int count) +{ + dmap->leftover_buf = buf; + dmap->leftover_bytes = count; +} + +static void +copy_write_noninterleaved(adev_t *adev, dmap_t *dmap, int dma_offs, unsigned char *localbuf, int local_offs, int l) +{ +/* + * Copy interleaved N channel data to non-interleaved device buffer. + */ +// TODO: This function assumes 32 bit audio DATA + + int ch, i, nc = adev->hw_parms.channels; + int *inbuf, *outbuf; + + l /= sizeof(*inbuf)*nc; + dma_offs /= sizeof(*inbuf); + local_offs /= sizeof(*inbuf); + + for (ch=0;ch<nc;ch++) + { + inbuf = (int*)(localbuf+local_offs); + inbuf += ch; + + outbuf = (int *)(dmap->dmabuf + dmap->buffsize*ch / nc); + outbuf += dma_offs / nc; + + for (i=0;i<l;i++) + { + *outbuf++ = *inbuf; + inbuf += nc; + } + } + +} + +static int +write_copy (adev_p adev, dmap_p dmap, unsigned char *buf, int count) +{ + int err, offs, spc, l, p = 0; + + while (count) + { + l = count; + + if ((offs = find_output_space (adev, dmap, &spc, l)) < 0) + { + if (offs == OSS_EAGAIN) + { + store_tmp_data (adev, dmap, buf + p, count); + launch_output (adev, dmap); + return OSS_EAGAIN; + } + return offs; + } + + if (l > spc) + l = spc; + + VMEM_CHECK (&dmap->dmabuf[offs], l); + VMEM_CHECK (buf + p, l); + + if ((adev->flags & ADEV_NONINTERLEAVED) && adev->hw_parms.channels > 1) + { + copy_write_noninterleaved(adev, dmap, offs, buf + p, 0, l); + } + else + memcpy (&dmap->dmabuf[offs], buf + p, l); + + if ((err = move_wrpointer (adev, dmap, l)) < 0) + return err; + + count -= l; + p += l; + } + return 0; +} + +int +oss_audio_write (int dev, struct fileinfo *file, uio_t * buf, int count) +{ + adev_p adev; + oss_native_word flags; + dmap_p dmap; + int ret; + int l, c, spc, offs, p, err; + int tmout; + +#ifdef DO_TIMINGS + oss_timing_printf ("--- audio_write(%d, %d) ---", dev, count); +#endif + + sync_seed++; + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + + adev = audio_engines[dev]; + if (!adev->enabled) + return OSS_ENXIO; + if (adev->flags & ADEV_NOOUTPUT) + return OSS_EACCES; + dmap = adev->dmap_out; + + if (!(adev->open_mode & OPEN_WRITE)) + return OSS_ENOTSUP; + + UP_STATUS (STS_WRITE); + + if (dmap->dma_mode == PCM_ENABLE_INPUT) + { + audio_reset_input (adev); + reset_dmap (dmap); + } + +/* + * Initial setup + */ + oss_reset_wait_queue (adev->out_wq); + + if (file != NULL) + { + if ((ISSET_FILE_FLAG (file, O_NONBLOCK) + && !(adev->open_flags & OF_BLOCK)) || adev->forced_nonblock) + adev->nonblock = 1; + else + adev->nonblock = 0; +#ifdef DO_TIMINGS + if (adev->nonblock) + oss_do_timing ("*** NON BLOCKING WRITE ***"); +#endif + } + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if ((ret = prepare_output (adev, dmap)) < 0) + { + DOWN_STATUS (STS_WRITE); + return ret; + } + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + dmap->dma_mode = PCM_ENABLE_OUTPUT; + } + + if (!(dmap->flags & DMAP_PREPARED)) + { /* Not prepared. Why??? */ + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + DOWN_STATUS (STS_WRITE); + cmn_err (CE_WARN, "Internal error (not prepared)\n"); + return OSS_EIO; + } +#if 1 + if (dmap->leftover_bytes > 0) + { + unsigned char *b; + int l; + + b = dmap->leftover_buf; + l = dmap->leftover_bytes; + dmap->leftover_bytes = 0; + dmap->leftover_buf = NULL; + + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if ((err = write_copy (adev, dmap, b, l)) < 0) + { + DOWN_STATUS (STS_WRITE); + return err; + } + + dmap->leftover_bytes = 0; + dmap->leftover_buf = NULL; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + } +#endif + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + if (count <= 0) + { + DOWN_STATUS (STS_WRITE); + return 0; + } + + c = count; + p = 0; + + tmout = 0; + + while (c > 0) + { +#ifdef DO_TIMINGS + oss_timing_printf ("%d/%d bytes to go", c, count); +#endif + + if (tmout++ > 1000) + { + cmn_err (CE_WARN, "Internal timeout error A (%d/%d)\n", c, count); + return OSS_EIO; + } + + l = c; + if (l > 8) + l &= ~7; /* Align it */ + + if ((offs = find_output_space (adev, dmap, &spc, l)) < 0) + { + if (offs == OSS_EINTR) + { + DOWN_STATUS (STS_WRITE); + if (c == count) /* Nothing written yet */ + return OSS_EINTR; + return count - c; + } + if (offs == OSS_EAGAIN) + { + DOWN_STATUS (STS_WRITE); + if (c == count) /* Nothing written yet */ + { + return OSS_EAGAIN; + } + return count - c; + } + DOWN_STATUS (STS_WRITE); + return offs; + } + + if (dmap->convert_func == NULL) + { + if (dmap->device_write != NULL) + { + unsigned char *tmpbuf; + int l2; + + if (dmap->tmpbuf1 == NULL) + { + dmap->tmpbuf1 = AUDIO_MALLOC (dmap->osdev, TMP_CONVERT_BUF_SIZE+512); + } + +/* + * Leave some room for data expansion so use just half of the available + * space. + */ + tmpbuf = dmap->tmpbuf1; + if (l > spc / 2) + l = spc / 2; + if (l > TMP_CONVERT_BUF_SIZE / 2) + l = TMP_CONVERT_BUF_SIZE / 2; + + l2 = l; + if (uiomove (tmpbuf, l, UIO_WRITE, buf) != 0) + { + cmn_err (CE_WARN, + "audio: uiomove(UIO_WRITE) failed (noconv)\n"); + DOWN_STATUS (STS_WRITE); + return OSS_EFAULT; + } + if ((err = + dmap->device_write (adev, dmap, tmpbuf, + &dmap->dmabuf[offs], spc, &l, + &l2)) < 0) + { + DOWN_STATUS (STS_WRITE); + return err; + } + if ((err = move_wrpointer (adev, dmap, l2)) < 0) + { + DOWN_STATUS (STS_WRITE); + return err; + } + } + else + { + if (l > spc) + l = spc; + if (uiomove (&dmap->dmabuf[offs], l, UIO_WRITE, buf) != 0) + { + cmn_err (CE_WARN, + "audio: uiomove(UIO_WRITE) (noconv2) failed\n"); + return OSS_EFAULT; + } + if ((err = move_wrpointer (adev, dmap, l)) < 0) + { + DOWN_STATUS (STS_WRITE); + return err; + } + } + } + else + { + /* + * Perform format conversions. + */ + unsigned char *p1 = dmap->tmpbuf1, *p2 = dmap->tmpbuf2; + int l2, max, out_max; + + if (spc > TMP_CONVERT_MAX) + spc = TMP_CONVERT_MAX / 2; + + if (dmap->expand_factor > UNIT_EXPAND) + { + max = spc; + + out_max = (spc * dmap->expand_factor) / UNIT_EXPAND; /* Output size */ + if (out_max > TMP_CONVERT_BUF_SIZE) /* Potential overflow */ + { + max = (TMP_CONVERT_BUF_SIZE * UNIT_EXPAND) / dmap->expand_factor; + } + } + else + max = spc; + if (max < dmap->frame_size) + max = dmap->frame_size; + + if (max > TMP_CONVERT_MAX) + max = TMP_CONVERT_MAX / 2; + + if (l > max) + l = max; + /* Avoid leaving too short "tails" */ + if (c - l < 64) + l = c; + + /* Round to integer number of samples */ + l = + (((l + dmap->frame_size - + 1) / dmap->frame_size)) * dmap->frame_size; + if (l > c) + l = c; + + l2 = l; + + VMEM_CHECK (p1, l); + if (uiomove (p1, l, UIO_WRITE, buf) != 0) + cmn_err (CE_WARN, "audio: uiomove(UIO_WRITE) (conv) failed\n"); + UP_STATUS (STS_CONVERT); + if ((err = + dmap->convert_func (adev, dmap, &p1, &l2, + &p2, &adev->user_parms, + &adev->hw_parms)) < 0) + { + cmn_err (CE_WARN, "Format conversion failed (%d)\n", err); + DOWN_STATUS (STS_WRITE | STS_CONVERT); + return err; + } + DOWN_STATUS (STS_CONVERT); + + if ((err = write_copy (adev, dmap, p1, l2)) < 0) + { + if (err != OSS_EAGAIN) + { + DOWN_STATUS (STS_WRITE); + return err; + } + + /* Handle non blocking I/O */ + if (c == count) /* Nothing written yet */ + { + DOWN_STATUS (STS_WRITE); + return OSS_EAGAIN; + } + + DOWN_STATUS (STS_WRITE); + return count - c; + + } + } + + c -= l; + p += l; + + if (l > 0) + tmout = 0; + } + +#ifdef DO_TIMINGS + oss_do_timing ("--- Audio write done"); +#endif + DOWN_STATUS (STS_WRITE); + return count - c; +} + +#ifdef MANAGE_DEV_DSP +#ifdef VDEV_SUPPORT +void +oss_combine_write_lists (void) +{ + int i; + + for (i = 0; i < dspoutlist2.ndevs; i++) + dspoutlist.devices[dspoutlist.ndevs++] = dspoutlist2.devices[i]; + + dspoutlist2.ndevs = 0; +} + +/*ARGSUSED*/ +int +oss_open_vdsp (int dev, int dev_type, struct fileinfo *file, int recursive, + int open_flags, int *newdev) +{ + int ret, i, d; + int mode = file->mode & O_ACCMODE; + + DDB (cmn_err (CE_CONT, "oss_open_vdsp(%d, mode=%d)\n", dev, mode)); + + switch (dev) + { + case 1: + mode = OPEN_READ; + break; + case 2: + mode = OPEN_WRITE; + break; + + /* default: Use the mode defined by O_ACCMODE */ + } + + dev = -1; + open_flags = get_open_flags (mode, open_flags, file); + + switch (dev_type) + { + case OSS_DEV_VDSP: + dev_type = OSS_DEV_DSP; + break; +#if 0 + case OSS_DEV_VAUDIO: + dev_type = OSS_DEV_DEVAUDIO; + break; +#endif + default: + cmn_err (CE_NOTE, "Unknown dev class %d\n", dev_type); + break; + } + + if (audio_devfiles == NULL) + { + cmn_err (CE_NOTE, "No audio device files available\n"); + return OSS_ENXIO; + } +#ifdef MANAGE_DEV_DSP +#ifdef VDEV_SUPPORT + oss_combine_write_lists (); +#endif +#endif + +#ifdef APPLIST_SUPPORT + { + char *appname; + appname = GET_PROCESS_NAME (file); + if (open_flags & OF_DEVAUDIO) + appname = "Devaudio_Support"; + + if ((dev = app_lookup (mode, appname, &open_flags)) >= 0) + if (audio_devfiles[dev]->enabled && !audio_devfiles[dev]->unloaded) + if ((ret = + oss_audio_open_devfile (dev, dev_type, file, 0, open_flags, + newdev)) >= 0) + { + dev = ret; + DDB (cmn_err + (CE_CONT, "Using dsp%d configured for this application\n", + dev)); + goto done; + } + } +#endif + DDB (cmn_err (CE_CONT, "\n")); + DDB (cmn_err (CE_CONT, "Out devs: ")); + for (i = 0; i < dspoutlist.ndevs; i++) + DDB (cmn_err (CE_CONT, "%d ", dspoutlist.devices[i])); + for (i = 0; i < dspoutlist2.ndevs; i++) + DDB (cmn_err (CE_CONT, "(%d) ", dspoutlist2.devices[i])); + DDB (cmn_err (CE_CONT, "\n")); + DDB (cmn_err (CE_CONT, "In devs: ")); + for (i = 0; i < dspinlist.ndevs; i++) + DDB (cmn_err (CE_CONT, "%d ", dspinlist.devices[i])); + DDB (cmn_err (CE_CONT, "\n")); + DDB (cmn_err (CE_CONT, "In/out devs: ")); + for (i = 0; i < dspinoutlist.ndevs; i++) + DDB (cmn_err (CE_CONT, "%d ", dspinoutlist.devices[i])); + DDB (cmn_err (CE_CONT, "\n")); + + switch (mode & (OPEN_READ | OPEN_WRITE)) + { + case OPEN_WRITE: + DDB (cmn_err (CE_CONT, "Selecting output device: ")); + + for (i = 0; i < dspoutlist.ndevs; i++) + { + dev = dspoutlist.devices[i]; + if (!audio_devfiles[dev]->enabled || audio_devfiles[dev]->unloaded) + { + dev = -1; + continue; + } + + DDB (cmn_err (CE_CONT, "%d ", dev)); + if ((ret = + oss_audio_open_devfile (dev, dev_type, file, 0, open_flags, + newdev)) >= 0) + { + dev = ret; + DDB (cmn_err (CE_CONT, "->%d ", dev)); + break; + } + dev = -1; + } + break; + + case OPEN_READ: + DDB (cmn_err (CE_CONT, "Selecting input device: ")); + for (i = 0; i < dspinlist.ndevs; i++) + { + dev = dspinlist.devices[i]; + if (!audio_devfiles[dev]->enabled || audio_devfiles[dev]->unloaded) + { + dev = -1; + continue; + } + DDB (cmn_err (CE_CONT, "%d ", dev)); + if ((ret = + oss_audio_open_devfile (dev, dev_type, file, 0, open_flags, + newdev)) >= 0) + { + dev = ret; + DDB (cmn_err (CE_CONT, "->%d ", dev)); + break; + } + + dev = -1; + } + break; + + case OPEN_WRITE | OPEN_READ: + DDB (cmn_err (CE_CONT, "Selecting input/output device: ")); + for (i = 0; i < dspinoutlist.ndevs; i++) + { + dev = dspinoutlist.devices[i]; + if (!audio_devfiles[dev]->enabled || audio_devfiles[dev]->unloaded) + { + dev = -1; + continue; + } + DDB (cmn_err (CE_CONT, "%d ", dev)); + if ((ret = + oss_audio_open_devfile (dev, dev_type, file, 0, open_flags, + newdev)) >= 0) + { + dev = ret; + DDB (cmn_err (CE_CONT, "->%d ", dev)); + break; + } + dev = -1; + } + break; + } + + DDB (cmn_err (CE_CONT, " - got vdsp -> %d\n", dev)); + if (dev == -1) + return OSS_EBUSY; + +done: +/* + * Try to find which minor number matches this /dev/dsp# device. Note that the actual + * device type doesn't matter after this point so we can use OSS_DEV_DSP. + */ + if ((d = oss_find_minor (OSS_DEV_DSP_ENGINE, dev)) < 0) + { + oss_audio_release (dev, file); + return d; + } + + *newdev = d; + return dev; +} +#endif +#endif + +static int +audio_init_device (int dev) +{ + adev_p adev; + + sync_seed = GET_JIFFIES (); + adev = audio_engines[dev]; + + MUTEX_INIT (adev->master_osdev, adev->mutex, MH_FRAMEW); + + if (audio_engines[dev]->dmap_out == NULL + || audio_engines[dev]->dmap_in == NULL) + { + dmap_p dmap; + + dmap = AUDIO_MALLOC (adev->osdev, sizeof (dmap_t)); + if (dmap == NULL) + { + cmn_err (CE_WARN, "Failed to allocate dmap, dev=%d\n", dev); + return OSS_ENOMEM; + } + + memset ((char *) dmap, 0, sizeof (dmap_t)); + + if (!(adev->flags & ADEV_NOOUTPUT) && adev->out_wq == NULL) + { + if ((adev->out_wq = + oss_create_wait_queue (adev->osdev, "audio_out")) == NULL) + { + cmn_err (CE_WARN, "Cannot create audio output wait queue\n"); + return OSS_ENOMEM; + } + } + + if (!(adev->flags & ADEV_NOINPUT) && adev->in_wq == NULL) + { + if ((adev->in_wq = + oss_create_wait_queue (adev->osdev, "audio_in")) == NULL) + { + cmn_err (CE_WARN, "Cannot create audio input wait queue\n"); + return OSS_ENOMEM; + } + } + + memset ((char *) dmap, 0, sizeof (dmap_t)); + dmap->osdev = adev->osdev; + dmap->adev = adev; + dmap->master_osdev = adev->master_osdev; + MUTEX_INIT (dmap->master_osdev, dmap->mutex, MH_FRAMEW + 1); + adev->dmap_out = adev->dmap_in = dmap; + + if (adev->flags & ADEV_DUPLEX) + { + + dmap = AUDIO_MALLOC (adev->osdev, sizeof (dmap_t)); + if (dmap == NULL) + { + cmn_err (CE_WARN, "Failed to allocate dmap, dev=%d\n", dev); + return OSS_ENOMEM; + } + + memset ((char *) dmap, 0, sizeof (dmap_t)); + dmap->osdev = adev->osdev; + dmap->adev = adev; + dmap->master_osdev = adev->master_osdev; + MUTEX_INIT (dmap->master_osdev, dmap->mutex, MH_FRAMEW + 1); + adev->dmap_in = dmap; + } + } + + return 0; +} + +void +audio_uninit_device (int dev) +{ + adev_p adev; + /* oss_native_word flags; */ + + adev = audio_engines[dev]; + + if (adev->unloaded) + return; + + if (adev->dmap_out != NULL && adev->dmap_out->dmabuf != NULL) + { + if (adev->d->adrv_free_buffer != NULL) + { + adev->d->adrv_free_buffer (dev, adev->dmap_out, OPEN_WRITE); + } + else + default_free_buffer (dev, adev->dmap_out, OPEN_WRITE); + adev->dmap_out->dmabuf = NULL; + } + + if (adev->dmap_in != NULL + && (adev->dmap_in != adev->dmap_out && adev->dmap_in->dmabuf != NULL)) + { + if (adev->d->adrv_free_buffer != NULL) + { + adev->d->adrv_free_buffer (dev, adev->dmap_in, OPEN_READ); + } + else + default_free_buffer (dev, adev->dmap_in, OPEN_READ); + adev->dmap_in->dmabuf = NULL; + } + + if (adev->in_wq != NULL) + { + oss_remove_wait_queue (adev->in_wq); + adev->in_wq = NULL; + } + if (adev->out_wq != NULL) + { + oss_remove_wait_queue (adev->out_wq); + adev->out_wq = NULL; + } + +#ifdef CONFIG_OSS_VMIX + if (adev->vmix_mixer != NULL) + { + adev->vmix_mixer = NULL; + } +#endif + + MUTEX_CLEANUP (adev->mutex); + + if (adev->dmap_out != NULL) + MUTEX_CLEANUP (adev->dmap_out->mutex); + + if (adev->flags & ADEV_DUPLEX && adev->dmap_in != NULL + && adev->dmap_out != adev->dmap_in) + { + MUTEX_CLEANUP (adev->dmap_in->mutex); + } + adev->unloaded = 1; +} + +void +oss_audio_init (oss_device_t *osdev) +{ + MUTEX_INIT (osdev, audio_global_mutex, MH_DRV); +} + +void +oss_audio_uninit (void) +{ +/* + * Release all memory/resources allocated by the audio core. + */ + oss_memblk_unalloc(&audio_global_memblk); + + MUTEX_CLEANUP (audio_global_mutex); +} + +void +oss_audio_inc_byte_counter (dmap_t * dmap, int increment) +{ + oss_uint64_t p1, p2; + oss_native_word flags; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + p1 = dmap->byte_counter / dmap->fragment_size; + dmap->byte_counter += increment; + p2 = dmap->byte_counter / dmap->fragment_size; + + dmap->interrupt_count += (int) (p2 - p1); + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); +} + +static void +do_inputintr (int dev, int intr_flags) +{ + adev_p adev; + dmap_p dmap; + int cptr; + oss_native_word flags; + + adev = audio_engines[dev]; + dmap = adev->dmap_in; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + + if (!(intr_flags & AINTR_NO_POINTER_UPDATES)) + { + dmap->byte_counter += dmap->fragment_size; + dmap->interrupt_count++; + } + + while (dmap->byte_counter > dmap->user_counter && + (int) (dmap->byte_counter - dmap->user_counter) > dmap->bytes_in_use) + { + dmap->user_counter += dmap->fragment_size; + dmap->rec_overruns++; + } + dmap->fragment_counter = (dmap->fragment_counter + 1) % dmap->nfrags; + + if (dmap->dmabuf_dma_handle != NULL) /* Some drivers don't use DMA */ + OSS_DMA_SYNC(dmap->dmabuf_dma_handle, 0, dmap->bytes_in_use, OSS_DMA_SYNC_INBOUND); + +#ifdef DO_TIMINGS + oss_do_timing ("Wake up (in)"); +#endif + oss_wakeup (adev->in_wq, &dmap->mutex, &flags, POLLIN | POLLRDNORM); + + if (adev->flags & ADEV_AUTOMODE) + { + goto finish; + } + + cptr = dmap_get_qtail (dmap) * dmap->fragment_size; + if (adev->d->adrv_start_input != NULL) + adev->d->adrv_start_input (adev->engine_num, dmap->dmabuf_phys + cptr, + dmap->fragment_size, dmap->fragment_size, 1); +finish: + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + if (dmap->audio_callback != NULL) + dmap->audio_callback (adev->engine_num, dmap->callback_parm); +} + +static void +audio_inputintr (int dev, int intr_flags) +{ + adev_p adev; + dmap_p dmap; + int n; + oss_uint64_t pos; + + if (dev < 0 || dev >= num_audio_engines) + return; + + adev = audio_engines[dev]; + dmap = adev->dmap_in; + + if (dmap->dma_mode != PCM_ENABLE_INPUT) + { + return; + } + + if (!(dmap->flags & DMAP_STARTED)) + { + return; + } +#ifdef DO_TIMINGS + oss_timing_printf ("Inputintr(%d)", dev); +#endif + + if (adev->d->adrv_get_input_pointer == NULL + || (intr_flags & AINTR_NO_POINTER_UPDATES)) + { + do_inputintr (dev, intr_flags); + return; + } + + pos = + adev->d->adrv_get_input_pointer (adev->engine_num, dmap, + PCM_ENABLE_INPUT) / dmap->fragment_size; + n = 0; + + while (dmap_get_qtail (dmap) != pos && n++ < dmap->nfrags) + { + do_inputintr (dev, intr_flags); + } +} + +static void +finish_output_interrupt (adev_p adev, dmap_p dmap) +{ + if (dmap->dmabuf_dma_handle != NULL) /* Some drivers don't use DMA */ + OSS_DMA_SYNC(dmap->dmabuf_dma_handle, 0, dmap->bytes_in_use, OSS_DMA_SYNC_OUTBOUND); + +#ifdef CONFIG_OSSD + ossd_event (adev->engine_num, OSSD_EV_UPDATE_OUTPUT); +#endif + if (dmap->audio_callback != NULL) + { + dmap->audio_callback (adev->engine_num, dmap->callback_parm); + } +} + +static void +do_outputintr (int dev, int intr_flags) +{ + adev_p adev; + dmap_p dmap; + int cptr; + oss_native_word flags; + + adev = audio_engines[dev]; + dmap = adev->dmap_out; + + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + + if (dmap->dmabuf == NULL) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + cmn_err (CE_WARN, "Output interrupt when no buffer is allocated\n"); + return; + } + + if (!(intr_flags & AINTR_NO_POINTER_UPDATES)) + { + dmap->byte_counter += dmap->fragment_size; + dmap->interrupt_count++; + } + + dmap->fragment_counter = (dmap->fragment_counter + 1) % dmap->nfrags; + + if (dmap->user_counter <= dmap->byte_counter) /* Underrun */ + { + if (!(dmap->mapping_flags & DMA_MAP_MAPPED)) + { +#ifdef DO_TIMINGS + oss_timing_printf ("adev %d: Play underrun A", dev); + oss_timing_printf (" User=%lld", dmap->user_counter); + oss_timing_printf (" Dev=%lld", dmap->byte_counter); + oss_timing_printf (" Tmp=%d", dmap->tmpbuf_ptr); +#endif + dmap->play_underruns++; + + if (!dmap->underrun_flag) + { +#ifdef DO_TIMINGS + oss_do_timing ("Clearing the buffer"); +#endif + memset (dmap->dmabuf, dmap->neutral_byte, dmap->buffsize); + } + dmap->underrun_flag = 1; +#if 1 + dmap->user_counter = dmap->byte_counter + dmap->fragment_size; +#endif + } + } + + if (audio_space_in_queue (adev, dmap, 0) >= 0 || adev->nonblock) + { +#ifdef DO_TIMINGS + oss_do_timing ("Wake up (out)"); +#endif + oss_wakeup (adev->out_wq, &dmap->mutex, &flags, POLLOUT | POLLWRNORM); + } + + if (adev->flags & ADEV_AUTOMODE) + { + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + finish_output_interrupt (adev, dmap); + return; + } + + cptr = dmap_get_qhead (dmap) * dmap->fragment_size; + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + if (adev->d->adrv_output_block != NULL) + { + adev->d->adrv_output_block (adev->engine_num, dmap->dmabuf_phys + cptr, + dmap->fragment_size, dmap->fragment_size, + 1); + } + finish_output_interrupt (adev, dmap); +} + +static void +audio_outputintr (int dev, int intr_flags) +{ + adev_p adev; + dmap_p dmap; + int n; + oss_uint64_t pos; + + if (dev < 0 || dev >= num_audio_engines) + return; + + adev = audio_engines[dev]; + dmap = adev->dmap_out; + + if (dmap->dma_mode != PCM_ENABLE_OUTPUT) + { + return; + } + + if (!(dmap->flags & DMAP_STARTED)) + { + return; + } + +#ifdef DO_TIMINGS + oss_timing_printf ("Outputintr(%d)", dev); +#endif + UP_STATUS (STS_INTR); + + if (adev->d->adrv_get_output_pointer == NULL + || (intr_flags & AINTR_NO_POINTER_UPDATES)) + { + UP_STATUS (STS_DOINTR); + do_outputintr (dev, intr_flags); + DOWN_STATUS (STS_DOINTR | STS_INTR); + return; + } + + pos = get_output_pointer (adev, dmap, 0) / dmap->fragment_size; + n = 0; + + while (dmap_get_qhead (dmap) != pos && n++ < dmap->nfrags) + { + UP_STATUS (STS_DOINTR); + do_outputintr (dev, intr_flags); + DOWN_STATUS (STS_DOINTR); + } + DOWN_STATUS (STS_INTR); +} + +void +oss_audio_reset (int dev) +{ + adev_p adev; + if (dev < 0 || dev >= num_audio_engines) + return; + adev = audio_engines[dev]; + + audio_reset_adev (adev); + + if (adev->dmask & DMASK_OUT) + reset_dmap (adev->dmap_out); + if (adev->dmask & DMASK_IN) + reset_dmap (adev->dmap_in); +} + +void +oss_audio_start_syncgroup (unsigned int syncgroup) +{ +/* + * This routine is to be called by the /dev/midi driver to start a sync group + * at the right time. + */ + oss_native_word flags; + + MUTEX_ENTER_IRQDISABLE (audio_global_mutex, flags); + handle_syncstart (syncgroup & SYNC_DEVICE_MASK, syncgroup); + MUTEX_EXIT_IRQRESTORE (audio_global_mutex, flags); +} + +#ifdef ALLOW_SELECT +/*ARGSUSED*/ +static int +chpoll_output (int dev, struct fileinfo *file, oss_poll_event_t * ev) +{ + short events = ev->events; + adev_p adev; + dmap_p dmap; + oss_native_word flags; + audio_buf_info bi; + int limit; + +#ifdef DO_TIMINGS + oss_timing_printf ("--- audio_chpoll_output(%d, %08x) ---", dev, events); +#endif + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + adev = audio_engines[dev]; + + dmap = adev->dmap_out; + if (dmap->mapping_flags & DMA_MAP_MAPPED) + { +#if 1 + /* + * It might actually be better to permit pollling in mmapped + * mode rather than returning an error. + */ + if (dmap->interrupt_count > 0) + ev->revents |= (POLLOUT | POLLWRNORM) & events; + return 0; +#else + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1014, + "select/poll called for an OSS device in mmap mode."), + 0); + /* + * Errordesc: + * The select() and poll() system calls are not defined for OSS devices + * when the device is in mmap mode. + */ + return OSS_EPERM; +#endif + } + + if (dmap->dma_mode == PCM_ENABLE_INPUT) + { + oss_audio_set_error (adev->engine_num, E_PLAY, + OSSERR (1015, + "select/poll called for wrong direction."), + 0); + /* + * Errordesc: The application has opened the device in read-only + * mode but it tried to use select/poll to check if the device is + * ready for write. This is pointless because that will never + * happen. + */ + return 0; + } + + get_ospace (audio_engines[dev], dmap, (ioctl_arg) & bi); + limit = bi.fragsize * bi.fragstotal / 4; + if (dmap->low_water > limit) + dmap->low_water = limit; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + if (bi.bytes < dmap->low_water) + { /* No space yet */ +#ifdef DO_TIMINGS + oss_do_timing ("Output not ready yet"); +#endif + oss_register_poll (adev->out_wq, &dmap->mutex, &flags, ev); + } + else + { +#ifdef DO_TIMINGS + oss_do_timing ("Reporting output ready"); +#endif + ev->revents |= (POLLOUT | POLLWRNORM) & events; + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return 0; +} + +/*ARGSUSED*/ +static int +chpoll_input (int dev, struct fileinfo *file, oss_poll_event_t * ev) +{ + short events = ev->events; + adev_p adev; + dmap_p dmap; + oss_native_word flags; + audio_buf_info bi; + int limit; + +#ifdef DO_TIMINGS + oss_timing_printf ("--- audio_chpoll_input(%d, %08x) ---", dev, events); +#endif + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + adev = audio_engines[dev]; + + dmap = adev->dmap_in; + if (dmap->mapping_flags & DMA_MAP_MAPPED) + { +#if 1 + /* + * It might actually be better to permit pollling in mmapped + * mode rather than returning an error. + */ + if (dmap->interrupt_count > 0) + ev->revents |= (POLLOUT | POLLWRNORM) & events; + return 0; +#else + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1013, + "select/poll called for an OSS device in mmap mode."), + 0); + /* + * Errordesc: + * The select() and poll() system calls are not defined for OSS devices + * when the device is in mmap mode. + */ + return OSS_EIO; +#endif + } + + if (dmap->dma_mode != PCM_ENABLE_INPUT) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1016, + "select/poll called for wrong direction."), + 0); + /* + * Errordesc: The application has opened the device in write-only + * mode but it tried to use select/poll to check if the device has any + * data available to read. This is pointless because that will never + * happen. + */ + return 0; + } + + if (!(dmap->flags & DMAP_STARTED)) + { + oss_audio_set_error (adev->engine_num, E_REC, + OSSERR (1017, + "select/poll called before recording is started."), + 0); + /* + * Errordesc: + * The application should start recording (using SNDCTL_DSP_SETTRIGGER) + * before calling select/poll to wait for recorded data. If recording is + * not active then recorded data will never arrive and the application + * will just sit and wait without doing anything. + */ + } + + get_ispace (audio_engines[dev], dmap, (ioctl_arg) & bi); + limit = bi.fragsize * bi.fragstotal / 4; + if (dmap->low_water > limit) + dmap->low_water = limit; + MUTEX_ENTER_IRQDISABLE (dmap->mutex, flags); + if (bi.bytes < dmap->low_water) + { /* No space yet */ +#ifdef DO_TIMINGS + oss_timing_printf ("Input not ready yet (%d/%d)\n", bi.bytes, + dmap->low_water); +#endif + oss_register_poll (adev->in_wq, &dmap->mutex, &flags, ev); + } + else + { +#ifdef DO_TIMINGS + oss_do_timing ("Reporting input ready"); +#endif + ev->revents |= (POLLIN | POLLRDNORM) & events; + } + MUTEX_EXIT_IRQRESTORE (dmap->mutex, flags); + + return 0; +} + +/*ARGSUSED*/ +int +oss_audio_chpoll (int dev, struct fileinfo *file, oss_poll_event_t * ev) +{ + short events = ev->events; + adev_p adev; + +#ifdef DO_TIMINGS + oss_timing_printf ("--- audio_chpoll(%d, %08x) ---", dev, events); +#endif + + if (dev < 0 || dev >= num_audio_engines) + return OSS_ENXIO; + adev = audio_engines[dev]; + + if ((events & (POLLOUT | POLLWRNORM)) && (adev->open_mode & OPEN_WRITE)) + { + int err; + + if ((err=chpoll_output (dev, file, ev))<0) + return err; + } + + if ((events & (POLLIN | POLLRDNORM)) && (adev->open_mode & OPEN_READ)) + { + int err; + + if ((err=chpoll_input (dev, file, ev))<0) + return err; + } + + return 0; +} +#endif + +/*ARGSUSED*/ +static void +dummy_inputintr (int dev, int intr_flags) +{ + /* Dummy input interrupt handler */ +} + +/*ARGSUSED*/ +static void +dummy_outputintr (int dev, int x) +{ + /* Dummy output interrupt handler */ +} + +static oss_cdev_drv_t audio_cdev_drv = { +#ifdef VDEV_SUPPORT + oss_audio_open_devfile, +#else + oss_audio_open_engine, +#endif + oss_audio_release, + oss_audio_read, + oss_audio_write, + oss_audio_ioctl, +#ifdef ALLOW_SELECT + oss_audio_chpoll +#else + NULL +#endif +}; + +#ifdef MANAGE_DEV_DSP +#ifdef VDEV_SUPPORT +static oss_cdev_drv_t vdsp_cdev_drv = { + oss_open_vdsp, + oss_audio_release, + oss_audio_read, + oss_audio_write, + oss_audio_ioctl, +#ifdef ALLOW_SELECT + oss_audio_chpoll +#else + NULL +#endif +}; +#endif +#endif + +static oss_cdev_drv_t audio_engine_cdev_drv = { + oss_audio_open_engine, + oss_audio_release, + oss_audio_read, + oss_audio_write, + oss_audio_ioctl, +#ifdef ALLOW_SELECT + oss_audio_chpoll +#else + NULL +#endif +}; + +void +oss_audio_register_client (oss_audio_startup_func func, void *devc, + oss_device_t * osdev) +{ +/* + * Register a callback for a driver that wants to be initialized after a new audio device + * is installed. + */ + + if (num_audio_startups >= MAX_STARTUPS) + return; + + audio_startups[num_audio_startups].func = func; + audio_startups[num_audio_startups].devc = devc; + audio_startups[num_audio_startups].osdev = osdev; + num_audio_startups++; +} + +void +oss_add_audio_devlist (int list_id, int devfile) +{ +#if 0 +/* + * Device list support is not in use at this moment + */ + oss_devlist_t *list; + int i; + + switch (list_id) + { + case OPEN_READ: + list = &dspinlist; + break; + + case OPEN_WRITE: + list = &dspoutlist; + break; + + case OPEN_READ | OPEN_WRITE: + list = &dspinoutlist; + break; + + default: + cmn_err (CE_CONT, "Bad device list ID %d\n", list_id); + return; + } + + for (i = 0; i < list->ndevs; i++) + if (list->devices[i] == devfile) /* Already there */ + return; + + /* + * Add the device to the list + */ + list->devices[list->ndevs++] = devfile; +#endif +} + +#if 0 +static void +add_to_devlists (adev_p adev) +{ +/* + * Add the device to the default input, output and/or input/output lists + * for /dev/dsp. + */ + + if (!(adev->flags & ADEV_SPECIAL)) + { + if (!(adev->flags & ADEV_NOOUTPUT)) + { /* Output capable */ + + if (adev->flags & ADEV_VIRTUAL) + { + int n = dspoutlist.ndevs++; + + if (adev->flags & ADEV_DEFAULT) + { + int i; + + for (i = n; i > 0; i--) + dspoutlist.devices[i] = dspoutlist.devices[i - 1]; + dspoutlist.devices[0] = adev->audio_devfile; + } + else + dspoutlist.devices[n] = adev->audio_devfile; + } + else + { + /* Put non-virtual devices to a secondary list */ + int n = dspoutlist2.ndevs++; + dspoutlist2.devices[n] = adev->audio_devfile; + } + + } + + if (!(adev->flags & (ADEV_NOINPUT))) + { /* Input capable */ + + int n = dspinlist.ndevs++; + + if (adev->flags & ADEV_DEFAULT) + { + int i; + + for (i = n; i > 0; i--) + dspinlist.devices[i] = dspinlist.devices[i - 1]; + dspinlist.devices[0] = adev->audio_devfile; + } + else + dspinlist.devices[n] = adev->audio_devfile; + } + + if (!(adev->flags & (ADEV_NOINPUT | ADEV_NOOUTPUT)) + || (adev->flags & ADEV_DUPLEX)) + { /* Input/output capable */ + + int n = dspinoutlist.ndevs++; + + if (adev->flags & ADEV_DEFAULT) + { + int i; + + for (i = n; i > 0; i--) + dspinoutlist.devices[i] = dspinoutlist.devices[i - 1]; + dspinoutlist.devices[0] = adev->audio_devfile; + } + else + dspinoutlist.devices[n] = adev->audio_devfile; + } + } +} +#endif + +static int +resize_array(oss_device_t *osdev, adev_t ***arr, int *size, int increment) +{ + adev_t **old=*arr, **new = *arr; + int old_size = *size; + int new_size = *size; + + if (new_size >= HARD_MAX_AUDIO_DEVFILES) /* Too many device files */ + return 0; + + new_size += increment; + if (new_size > HARD_MAX_AUDIO_DEVFILES) + new_size = HARD_MAX_AUDIO_DEVFILES; + + if ((new=AUDIO_MALLOC(osdev, new_size * sizeof (adev_t *)))==NULL) + return 0; + + memset(new, 0, new_size * sizeof(adev_t *)); + if (old != NULL) + memcpy(new, old, old_size * sizeof(adev_t *)); + + *size = new_size; + *arr = new; + + if (old != NULL) + AUDIO_FREE(osdev, old); + + return 1; +} + +int +oss_install_audiodev_with_devname (int vers, + oss_device_t * osdev, + oss_device_t * master_osdev, + char *name, + const audiodrv_t * driver, + int driver_size, + int flags, + unsigned int format_mask, void *devc, int parent, + const char * devfile_name) +{ + audiodrv_t *d; + adev_t *op; + int i, num = -1, hidden_device = 0; + int update_devlists = 0; + int reinsterted_device = 0; + int chdev_flags = 0; + int devfile_num = 0; + + if (devc == NULL) + { + cmn_err(CE_WARN, "devc==NULL for %s. Cannot install audio device\n", name); + return OSS_EINVAL; + } + + if (name == NULL) + cmn_err (CE_CONT, "Name is really NULL\n"); + if (master_osdev == NULL) + master_osdev = osdev; + +#ifdef VDEV_SUPPORT + if (flags & (ADEV_SHADOW | ADEV_HIDDEN)) + hidden_device = 1; +#else + flags &= ~ADEV_HIDDEN; + hidden_device = 0; +#endif + + if (audio_engines == NULL) + { + audio_engines = AUDIO_MALLOC (NULL, sizeof (adev_t *) * MAX_AUDIO_ENGINES); + memset (audio_engines, 0, sizeof (adev_t *) * MAX_AUDIO_ENGINES); + } + + if (audio_devfiles == NULL) + { + audio_devfiles = AUDIO_MALLOC (NULL, sizeof (adev_t *) * MAX_AUDIO_DEVFILES); + memset (audio_devfiles, 0, sizeof (adev_t *) * MAX_AUDIO_DEVFILES); + } + + if (vers != OSS_AUDIO_DRIVER_VERSION) + { + cmn_err (CE_WARN, "Incompatible audio driver for %s\n", name); + return OSS_EIO; + } + + if (driver_size > sizeof (audiodrv_t)) + driver_size = sizeof (audiodrv_t); +/* + * Try to figure out if this device has earlier been installed. Sometimes it may happen that + * the low level driver gets unloaded while the osscore module still + * remains loaded. Try to re-use the same audio device number if possible. + */ + + num = -1; + + for (i = 0; i < num_audio_engines; i++) + { + + if ((audio_engines[i]->flags & (ADEV_SHADOW|ADEV_HIDDEN)) != + (flags & (ADEV_SHADOW|ADEV_HIDDEN))) /* Different visibility */ + continue; + + if (audio_engines[i]->unloaded + && audio_engines[i]->os_id == oss_get_osid (osdev)) + { + /* This audio device was previously connected to the same physical device */ + + num = i; + reinsterted_device = 1; + DDB (cmn_err + (CE_NOTE, "Audio device %d got re-installed again.\n", i)); + break; + } + } + + if (num == -1) + { + + if (num_audio_engines >= MAX_AUDIO_ENGINES) + { + if (!resize_array(osdev, &audio_engines, &oss_max_audio_engines, AUDIO_ENGINE_INCREMENT)) + { + cmn_err (CE_CONT, "Cannot grow audio_engines[]\n"); + return OSS_EIO; + } + } + + d = AUDIO_MALLOC (osdev, sizeof (audiodrv_t)); + op = AUDIO_MALLOC (osdev, sizeof (adev_t)); + memset ((char *) op, 0, sizeof (adev_t)); + if (driver_size < sizeof (audiodrv_t)) + memset ((char *) d, 0, sizeof (audiodrv_t)); + memcpy ((char *) d, (char *) driver, driver_size); + num = num_audio_engines; + audio_engines[num] = op; + num_audio_engines++; + + update_devlists = 1; + + sprintf (op->handle, "%s-au%02d", osdev->handle, + osdev->num_audio_engines + 1); + op->port_number = osdev->num_audio_engines; + } + else + { + op = audio_engines[num]; + d = audio_engines[num]->d; + if (driver_size < sizeof (audiodrv_t)) + memset ((char *) d, 0, sizeof (audiodrv_t)); + memcpy ((char *) d, (char *) driver, driver_size); + update_devlists = 0; + } + + if (d == NULL || op == NULL) + { + cmn_err (CE_WARN, "Can't allocate driver for %s (adev=%p, d=%p)\n", + name, op, d); + return OSS_ENOSPC; + } + + if (d->adrv_get_input_pointer == NULL) + d->adrv_get_input_pointer = d->adrv_get_buffer_pointer; + if (d->adrv_get_output_pointer == NULL) + d->adrv_get_output_pointer = d->adrv_get_buffer_pointer; + + op->d = d; + op->os_id = oss_get_osid (osdev); + op->enabled = 0; + op->outputintr = dummy_outputintr; + op->inputintr = dummy_inputintr; + op->vmix_mixer = NULL; + + strncpy (op->name, name, sizeof (op->name)); + op->name[sizeof (op->name) - 1] = 0; + op->caps = 0; + + op->flags = flags; + op->latency = -1; /* Unknown */ + + op->oformat_mask = format_mask; + op->iformat_mask = format_mask; + op->mixer_dev = -1; + op->min_channels = 1; + op->max_channels = 2; + op->min_rate = 8000; + op->max_rate = 44100; + op->devc = devc; + op->parent_dev = parent + 1; + op->dmap_in = NULL; + op->dmap_out = NULL; + memset (op->cmd, 0, sizeof (op->cmd)); + op->pid = -1; + op->osdev = osdev; + op->master_osdev = master_osdev; + op->card_number = osdev->cardnum; + op->engine_num = op->rate_source = num; + op->real_dev = num; + op->redirect_in = -1; + op->redirect_out = -1; + op->dmabuf_alloc_flags = 0; + op->dmabuf_maxaddr = MEMLIMIT_32BITS; + + audio_engines[num] = op; + op->next_out = NULL; + op->next_in = NULL; + + op->song_name[0] = 0; + op->label[0] = 0; + op->nrates=0; + + if ((flags & ADEV_SHADOW) && num > 0) + { + adev_p prev = audio_engines[num - 1]; /* Previous device */ + + prev->next_out = op; + prev->next_in = op; + } + + if (audio_init_device (num) < 0) + return OSS_ENOMEM; + +/* + * Create the device node. + */ +#ifndef VDEV_SUPPORT + flat_device_model = 1; + hidden_device = 0; +#endif + + if (reinsterted_device) + { + /* + * A hotpluggable device has been reinserted in the system. + * Update the internal tables and re-create the device file entry. + * However don't create new audio engine and device file numbers. + */ + devfile_num = op->audio_devfile; + chdev_flags |= CHDEV_REPLUG; + } + else + { + if (!hidden_device) + { + if (num_audio_devfiles >= MAX_AUDIO_DEVFILES) + { + if (!resize_array(osdev, &audio_devfiles, &oss_max_audio_devfiles, AUDIO_DEVFILE_INCREMENT)) + { + cmn_err (CE_CONT, "Cannot grow audio_devfiles[]\n"); + return num; + } + } + + audio_devfiles[num_audio_devfiles] = op; + devfile_num = num_audio_devfiles++; + } + } + + if (flat_device_model || !hidden_device) + { +#ifdef NEW_DEVICE_NAMING + oss_devnode_t name; + char tmpl[32]; + + if (*devfile_name != 0) + { + /* + * A name was suggested by the low level driver + */ + strcpy (tmpl, devfile_name); + } + else if (flags & ADEV_NOOUTPUT) + sprintf (tmpl, "pcmin%d", osdev->num_audiorec++); + else + sprintf (tmpl, "pcm%d", osdev->num_audioduplex++); + +# ifdef USE_DEVICE_SUBDIRS + sprintf (name, "oss/%s/%s", osdev->nick, tmpl); +# else + sprintf (name, "%s_%s", osdev->nick, tmpl); +# endif +#else + sprintf (name, "dsp%d", num); +#endif + + op->real_dev = devfile_num; + op->audio_devfile = devfile_num; + audio_devfiles[devfile_num] = op; + sprintf (op->devnode, "/dev/%s", name); + oss_install_chrdev (master_osdev, name, OSS_DEV_DSP, devfile_num, + &audio_cdev_drv, chdev_flags); + osdev->num_audio_engines++; + + op->enabled = 1; + op->unloaded = 0; + + } + else + { + op->real_dev = -1; + if (devfile_num > 0 && (flags & ADEV_SHADOW)) + { + /* Use the device node of the parent device file */ + if (audio_devfiles[devfile_num - 1] != NULL) + strcpy (op->devnode, audio_devfiles[devfile_num - 1]->devnode); + else + strcpy (op->devnode, "Unknown"); + audio_devfiles[devfile_num] = op; + } + else + { + strcpy (op->devnode, "HiddenAudioDevice"); + } + op->enabled = 1; + op->unloaded = 0; + } + +//#ifdef VDEV_SUPPORT + oss_install_chrdev (osdev, NULL, OSS_DEV_DSP_ENGINE, num, + &audio_engine_cdev_drv, chdev_flags); +//#endif + +#if 0 + if (!reinsterted_device && update_devlists && !hidden_device) + add_to_devlists (op); +#endif + + { + int i; + for (i = 0; i < num_audio_engines; i++) + if (audio_engines[i] == NULL) + cmn_err (CE_WARN, "Audio engines %d==NULL\n", i); + for (i = 0; i < num_audio_devfiles; i++) + if (audio_devfiles[i] == NULL) + cmn_err (CE_WARN, "Audio devfiles %d==NULL\n", i); + } + + return num; +} + +int +oss_install_audiodev (int vers, + oss_device_t * osdev, + oss_device_t * master_osdev, + char *name, + const audiodrv_t * driver, + int driver_size, + unsigned long long flags, + unsigned int format_mask, void *devc, int parent) +{ + return oss_install_audiodev_with_devname (vers, + osdev, + master_osdev, + name, + driver, + driver_size, + flags, + format_mask, devc, parent, + ""); /* Use default device file naming */ +} + +void +oss_audio_delayed_attach (void) +{ + int i; + + /* + * Serve possible other drivers waiting for new friends. + */ + for (i = 0; i < num_audio_startups; i++) + { + if (audio_startups[i].osdev != NULL + && audio_startups[i].osdev->available) + { + if (audio_startups[i].func (audio_startups[i].devc)) + audio_startups[i].osdev = NULL; /* Inactivate it */ + } + } +} + +/*ARGSUSED*/ +void +install_vdsp (oss_device_t * osdev) +{ +#ifdef MANAGE_DEV_DSP +/* + * Install the driver for /dev/dsp (the multiplexer device) + * + * NOTE! Not used at this moment because /dev/dsp assignment is managed in user + * space (by ossdevlinks). + */ +#ifdef VDEV_SUPPORT + oss_install_chrdev (osdev, "dsp", OSS_DEV_VDSP, 0, &vdsp_cdev_drv, + CHDEV_VIRTUAL); + oss_install_chrdev (osdev, "dsp_in", OSS_DEV_VDSP, 1, &vdsp_cdev_drv, + CHDEV_VIRTUAL); + oss_install_chrdev (osdev, "dsp_out", OSS_DEV_VDSP, 2, &vdsp_cdev_drv, + CHDEV_VIRTUAL); +#endif +#endif +} diff --git a/kernel/framework/audio/oss_audiofmt.c b/kernel/framework/audio/oss_audiofmt.c new file mode 100644 index 0000000..7917d9e --- /dev/null +++ b/kernel/framework/audio/oss_audiofmt.c @@ -0,0 +1,1278 @@ +/* + * Purpose: Audio format conversion routines used by audio.c + */ + +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +#undef NO_COOKED_MODE +#define AUDIO_C + +#define GRC 3 + +/* SINE_DEBUG enables internal test signal (sine wave) */ +#undef SINE_DEBUG + +#include "oss_config.h" +#include "ulaw.h" +#define __int8_t_defined +#include "grc3.h" + +/* + * Audio format conversion stuff + */ +#define CNV_NONE 0x00000000 +#define CNV_SRC 0x00000001 + +#define CNV_CHNMASK 0x000000f0 +#define CNV_M2S 0x00000010 +#define CNV_S2M 0x00000020 +#define CNV_MULT 0x00000040 + +#define CNV_Flog 0x00001000 +#define CNV_F8bit 0x00002000 +#define CNV_F16bit 0x00004000 +#define CNV_F24bit 0x00008000 +#define CNV_F32bit 0x00010000 + +#define CNV_Tlog 0x00100000 +#define CNV_T8bit 0x00200000 +#define CNV_T16bit 0x00400000 +#define CNV_T24bit 0x00800000 +#define CNV_T32bit 0x01000000 + +#define CNV_SIGN 0x10000000 +#define CNV_ENDIAN 0x20000000 +#define CNV_TOLOG 0x40000000 +#define CNV_FROMLOG 0x80000000 + +static audio_format_info_t audio_format_info[] = { + {"mu-Law", AFMT_MU_LAW, 0x80, 8, 0, ENDIAN_NONE, 1}, + {"A-Law", AFMT_A_LAW, 0x80, 8, 0, ENDIAN_NONE, 1}, + {"IMA-ADPCM", AFMT_IMA_ADPCM, 0x00, 4, 0, ENDIAN_NONE, 0, ALIGN_LSB, 1}, + {"8", AFMT_U8, 0x80, 8, 1, ENDIAN_NONE, 0}, + {"16(LE)", AFMT_S16_LE, 0x00, 16, 1, ENDIAN_LITTLE, 1}, + {"16(BE)", AFMT_S16_BE, 0x00, 16, 1, ENDIAN_BIG, 1}, + {"8(signed)", AFMT_S8, 0x00, 8, 1, ENDIAN_NONE, 1}, + {"16(unsigned LE)", AFMT_U16_LE, 0x00, 16, 1, ENDIAN_LITTLE, 0}, + {"16(unsigned BE)", AFMT_U16_BE, 0x00, 16, 1, ENDIAN_BIG, 0}, + {"mp2/mp3", AFMT_MPEG, 0x00, 8, 0, ENDIAN_NONE, 0, ALIGN_LSB, 1}, + {"AC3", AFMT_AC3, 0x00, 16, 0, ENDIAN_NONE, 0, ALIGN_LSB, 1}, + {"SPDIF (RAW)", AFMT_SPDIF_RAW, 0x00, 32, 0, ENDIAN_NONE, 0, ALIGN_LSB, 1}, + {"24(LE)", AFMT_S24_LE, 0x00, 32, 1, ENDIAN_LITTLE, 1, ALIGN_LSB}, + {"24(BE)", AFMT_S24_BE, 0x00, 32, 1, ENDIAN_BIG, 1, ALIGN_LSB}, + {"32(LE)", AFMT_S32_LE, 0x00, 32, 1, ENDIAN_LITTLE, 1}, + {"32(BE)", AFMT_S32_BE, 0x00, 32, 1, ENDIAN_BIG, 1}, + {"24(PACKED)", AFMT_S24_PACKED, 0x00, 24, 1, ENDIAN_LITTLE, 1, ALIGN_LSB}, + {0, 0} +}; + +audio_format_info_p +oss_find_format (unsigned int fmt) +{ + int i; + + i = 0; + + while (audio_format_info[i].fmt != 0) + { + if (audio_format_info[i].fmt == fmt) + return &audio_format_info[i]; + i++; + } + + return NULL; +} + +#if 0 +/* + * Limiter stuff. Currently not in use. + */ +static const unsigned char limit8[] = { +/*-128*/ 64, 65, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, +/*-112*/ 72, 73, 73, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, +/* -96*/ 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, +/* -80*/ 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, +/* -64*/ 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, + 104, +/* -48*/ 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, + 111, 111, 112, +/* -32*/ 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, + 119, 119, 120, +/* -16*/ 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, + 127, 127, 128, +/* 0*/ 128, 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, + 134, 135, 135, +/* 16*/ 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, + 142, 143, 143, +/* 32*/ 144, 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, 150, + 150, 151, 151, +/* 48*/ 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, + 158, 159, 159, +/* 64*/ 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, + 166, 167, 167, +/* 80*/ 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, + 174, 175, 175, +/* 96*/ 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, + 182, 183, 183, +/* 112*/ 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, + 190, 191, 191 +}; + +static __inline__ void +limit_8bit (unsigned char *buf, int l) +{ + int i; + + for (i = 0; i < l; i++) + buf[i] = limit8[buf[i]]; +} + +static __inline__ void +limit_16bit (short *buf, int l) +{ + int i; + l /= sizeof (*buf); + + for (i = 0; i < l; i++) + buf[i] /= 2; +} + +static __inline__ void +limit_32bit (int *buf, int l) +{ + int i; + l /= sizeof (*buf); + + for (i = 0; i < l; i++) + buf[i] /= 2; +} + +static const unsigned char unlimit8[] = { +/* 0*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 16*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 32*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 48*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 64*/ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, +/* 80*/ 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, +/* 96*/ 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, +/* 112*/ 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, + 124, 126, +/* 128*/ 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, + 154, 156, 158, +/* 144*/ 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, + 186, 188, 190, +/* 160*/ 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, + 218, 220, 222, +/* 176*/ 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, + 250, 252, 254, +/* 192*/ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, +/* 208*/ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, +/* 224*/ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, +/* 240*/ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255 +}; + +static __inline__ void +unlimit_8bit (unsigned char *buf, int l) +{ + int i; + + for (i = 0; i < l; i++) + buf[i] = unlimit8[buf[i]]; +} + +static __inline__ void +unlimit_16bit (short *buf, int l) +{ + int i; + l /= sizeof (*buf); + + for (i = 0; i < l; i++) + buf[i] *= 2; +} + +static __inline__ void +unlimit_32bit (int *buf, int l) +{ + int i; + l /= sizeof (*buf); + + for (i = 0; i < l; i++) + buf[i] *= 2; +} +#endif + +/*ARGSUSED*/ +static int +do_src (adev_p adev, dmap_p dmap, int srcrate, int tgtrate, void *p1, + void *p2, int *len, int channels, int bits, int ssize) +{ +#if GRC == 2 + int err, l, l1, l2; + + l = *len; + + err = src_convert (dmap->src, p1, l, bits, p2, 4096, 24, &l1, &l2, 0); + *len = l2; + if (l1 != l) + cmn_err (CE_NOTE, "Everything not taken %d/%d\n", l1, l); + +#endif + +#if GRC == 3 + int ch, l, size, nsamples, err; + + l = *len / ssize; + size = TMP_CONVERT_BUF_SIZE / ssize; + size /= channels; + nsamples = l / channels; + + if (bits == 24) + bits = 32; + +# ifdef DO_TIMINGS + oss_timing_printf ("grc3_convert %d bytes / %d samples * %d channels in. ", + *len, nsamples, channels); +# endif + +#if 0 + /* Limit the volume levels before calling GRC3 */ + buf = p1; + + switch (ssize) + { + case 1: + limit_8bit ((unsigned char *) buf, *len); + break; + case 2: + limit_16bit ((short *) buf, *len); + break; + case 4: + limit_32bit ((int *) buf, *len); + break; + } +#endif + + for (ch = 0; ch < channels; ch++) + { + if ((err = grc3_convert (dmap->srcstate[ch], bits, adev->src_quality, /* Numbits, quality */ + p1, p2, nsamples, size, channels, ch)) < 0) + { + cmn_err (CE_WARN, "SRC failed (%d), bits=%d, ssize=%d\n", err, bits, + ssize); + return OSS_EIO; + } + + *len = ((grc3state_t *) dmap->srcstate[ch])->outsz * ssize * channels; + VMEM_CHECK (p2, *len); + } +#if 0 + buf = p2; + switch (ssize) + { + case 1: + unlimit_8bit ((unsigned char *) buf, *len); + break; + case 2: + unlimit_16bit ((short *) buf, *len); + break; + case 4: + unlimit_32bit ((int *) buf, *len); + break; + } +#endif +# ifdef DO_TIMINGS + oss_timing_printf ("-> %d bytes, %d samples out, %d samples in", + *len, ((grc3state_t *) dmap->srcstate[0])->outsz, + ((grc3state_t *) dmap->srcstate[0])->insz); +# endif +#endif + + return 0; +} + +static int +setup_src (adev_p adev, dmap_p dmap, int srate, int trate, int sch, int tch) +{ + int ch, nch; + + nch = sch; + if (tch < nch) + nch = tch; + + if (adev->src_quality < 1) + adev->src_quality = 1; + if (adev->src_quality > 5) + adev->src_quality = 5; + +#if GRC == 2 + if (nch > 2) + { + cmn_err (CE_WARN, "Too many channels for SRC (%d)\n", nch); + return OSS_EIO; + } + { + int val; + val = src_find_output_rate (trate, srate); + if (src_open (&dmap->src, srate, trate, nch, 0) != 0) + { + cmn_err (CE_CONT, "OSS audio: SRC open failed\n"); + return OSS_EIO; + } + } +#endif +#if GRC == 3 + if (nch > OSS_MAX_CONVERT_CHANNELS) + { + cmn_err (CE_WARN, "Too many channels for SRC (%d)\n", nch); + return OSS_EIO; + } +#ifdef DO_TIMINGS + oss_timing_printf ("grc3_setup %d -> %d Hz, %d channels", srate, trate, nch); +#endif + + for (ch = 0; ch < nch; ch++) + { + if (dmap->srcstate[ch] == NULL) + { + dmap->srcstate[ch] = PMALLOC (dmap->osdev, sizeof (grc3state_t)); + } + grc3_reset (dmap->srcstate[ch]); + grc3_setup (dmap->srcstate[ch], srate, trate); + } +#endif + return 0; +} + +#if !defined(__OpenBSD__) +static __inline__ unsigned int +swap32 (unsigned int x) +{ + +#if 1 + unsigned int y = 0; + unsigned char *a = ((unsigned char *) &x) + 3; + unsigned char *b = (unsigned char *) &y; + + *b++ = *a--; + *b++ = *a--; + *b++ = *a--; + *b++ = *a--; + + return y; +#else + /* Old version */ + return ((x & 0x000000ff) << 24) | + ((x & 0x0000ff00) << 8) | + ((x & 0x00ff0000) >> 8) | ((x & 0xff000000) >> 24); +#endif +} +#endif + +#ifdef SINE_DEBUG +#define SIN_STEPS 48 +static short sinebuf[48] = { + 0, 4276, 8480, 12539, 16383, 19947, 23169, 25995, + 28377, 30272, 31650, 32486, 32767, 32486, 31650, 30272, + 28377, 25995, 23169, 19947, 16383, 12539, 8480, 4276, + 0, -4276, -8480, -12539, -16383, -19947, -23169, -25995, + -28377, -30272, -31650, -32486, -32767, -32486, -31650, -30272, + -28377, -25995, -23169, -19947, -16383, -12539, -8480, -4276 +}; +static int sine_ptr = 0; +#endif + +static int +cnv_default (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, unsigned char **tgtp, + sample_parms * source, sample_parms * target) +{ + void *p1 = *srcp, *p2 = *tgtp, *tmpp; + int len = *srcl, l, i; + +/* + * Convert samples to 24 bit (32 bit lsb aligned) if necessary. + */ + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len); + if (source->fmt != AFMT_S24_NE) + switch (source->fmt) + { + case AFMT_U8: + { + unsigned char *fromp = p1; + unsigned int *top = p2; + + l = len; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + *top++ = ((signed char) (*fromp++ ^ 0x80)) << 16; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S8: + { + char *fromp = p1; + int *top = p2; + int t; + + l = len; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + t = (*fromp++) << 24; + *top++ = t >> 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_MU_LAW: + { + unsigned char *fromp = p1; + unsigned int *top = p2; + + l = len; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + *top++ = ((signed char) (ulaw_dsp[(*fromp++)] ^ 0x80)) << 16; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S16_NE: + { + short *fromp = p1; + int *top = p2; + + l = len / 2; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + *top++ = *fromp++ << 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S16_OE: + { + short *fromp = p1; + int *top = p2; + + l = len / 2; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + short tmp; + int t; + tmp = *fromp++; + /* Try to maintain the sign bit by shifting 8 bits too far */ + t = ((tmp & 0xff) << 24) | ((tmp & 0xff00) << 8); + *top++ = t >> 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S32_NE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = *fromp++ >> 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S32_OE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = swap32 (*fromp++) >> 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S24_OE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = swap32 ((unsigned int) (*fromp++)); + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S24_PACKED: + { + unsigned char *fromp = p1; + int *top = p2; + + l = len / 3; + len = l * sizeof (int); + + for (i = 0; i < l; i++) + { + int tmp = 0; + +#if 1 + tmp |= (*fromp++); + tmp |= (*fromp++) << 8; + tmp |= (*fromp++) << 16; +#else + tmp |= (*fromp++) << 16; + tmp |= (*fromp++) << 8; + tmp |= (*fromp++); +#endif + + *top++ = tmp; + + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + default: + cmn_err (CE_WARN, "Unsupported conversion source format %08x\n", + source->fmt); + return OSS_EIO; + } + + if (source->rate != target->rate && source->channels <= target->channels) + { + int err; + + VMEM_CHECK (p1, len); + err = + do_src (adev, dmap, source->rate, target->rate, p1, p2, &len, + source->channels, 32, 4); + if (err < 0) + return err; + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + +/* + * Convert between mono and stereo + */ + + if (source->channels != target->channels) + { + VMEM_CHECK (p1, len); + if (source->channels == 1 && target->channels == 2) + { + /* Mono -> Stereo */ + int *fromp = p1, *top = p2; + + l = len / sizeof (int); /* Number of (mono) samples */ + len = len * 2; /* Number of bytes will get doubled */ + for (i = 0; i < l; i++) + { + *top++ = *fromp; + *top++ = *fromp++; + } + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + else if (source->channels == 2 && target->channels == 1) + { + /* Stereo -> mono */ + int *fromp = p1, *top = p2; + + len = len / 2; /* Number of bytes will drop to a half */ + l = len / sizeof (int); /* Number of (mono) samples */ + + for (i = 0; i < l; i++) + { + *top++ = *fromp++; /* Take just the left channel sample */ + fromp++; /* discard the right channel one */ + } + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + else + { + /* Multi channel conversions */ + + int *fromp = p1, *top = p2; + int n, nc, sc, tc; + + l = len / sizeof (int); + n = l / source->channels; + len = len * target->channels / source->channels; + + tc = target->channels; + sc = source->channels; + nc = tc; + if (nc > sc) + nc = sc; + + memset (top, 0, len); + + for (i = 0; i < n; i++) + { + int c; + + for (c = 0; c < nc; c++) + top[c] = fromp[c]; + + fromp += sc; + top += tc; + } + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + } + + if (source->rate != target->rate && source->channels > target->channels) + { + int err; + + VMEM_CHECK (p1, len); + err = + do_src (adev, dmap, source->rate, target->rate, p1, p2, &len, + target->channels, 24, 4); + if (err < 0) + return err; + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + +#ifdef SINE_DEBUG +/* + * Debugging stuff. Overwrite the sample buffer with pure sine wave. + */ + { + int *p = p1; + l = len / sizeof (int); + for (i = 0; i < l; i += 2) + { +#if 1 + *p++ = sinebuf[sine_ptr] << 15; /* Left chn */ + *p++ = sinebuf[sine_ptr] << 15; /* Right chn */ + sine_ptr = (sine_ptr + 1) % SIN_STEPS; +#else + static short pp = 0; + *p++ = pp * 256; + *p++ = pp * 256; + pp++; +#endif + } + } +#endif + +/* + * Finally convert the samples from internal 24 bit format to the target format + */ + + if (target->fmt != AFMT_S24_NE) + switch (target->fmt) + { + case AFMT_U8: + { + unsigned int *fromp = p1; + unsigned char *top = p2; + + l = len / sizeof (int); + len = l; + + for (i = 0; i < l; i++) + { + *top++ = (*fromp++ >> 16) ^ 0x80; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S8: + { + int *fromp = p1; + char *top = p2; + + l = len / sizeof (int); + len = l; + + for (i = 0; i < l; i++) + { + *top++ = *fromp++ >> 16; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S16_NE: + { + int *fromp = p1; + short *top = p2; + + l = len / sizeof (int); + len = l * sizeof (short); + + for (i = 0; i < l; i++) + { + *top++ = *fromp++ >> 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S16_OE: + { + int *fromp = p1; + unsigned char *top = p2; + + l = len / sizeof (int); + len = l * sizeof (short); + + for (i = 0; i < l; i++) + { + int tmp; + tmp = *fromp++ >> 8; + *top++ = tmp & 0xff; + *top++ = (tmp >> 8) & 0xff; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S32_NE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = *fromp++ << 8; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S32_OE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = swap32 ((unsigned int) (*fromp++ << 8)); + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S24_OE: + { + int *fromp = p1; + int *top = p2; + + l = len / 4; + /* len = l * sizeof (int); */ + + for (i = 0; i < l; i++) + { + *top++ = swap32 ((unsigned int) (*fromp++)); + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_S24_PACKED: + { + int *fromp = p1; + unsigned char *top = p2; + + l = len / 4; + len = l * 3; + + for (i = 0; i < l; i++) + { + int tmp = *fromp++; + *top++ = tmp & 0xff; + *top++ = (tmp >> 8) & 0xff; + *top++ = (tmp >> 16) & 0xff; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + case AFMT_MU_LAW: + { + unsigned int *fromp = p1; + unsigned char *top = p2; + + l = len / sizeof (int); + len = l; + + for (i = 0; i < l; i++) + { + *top++ = dsp_ulaw[((*fromp++ >> 16) & 0xff) ^ 0x80]; + } + + tmpp = p1; + p1 = p2; + p2 = tmpp; + } + break; + + default: + cmn_err (CE_WARN, "Unsupported conversion target format %08x\n", + target->fmt); + return OSS_EIO; + } + + VMEM_CHECK (p1, len); + *srcl = len; + *srcp = p1; + *tgtp = p2; + + return 0; +} + +static int +cnv_srconly (adev_p adev, dmap_p dmap, unsigned char **srcp, int *srcl, unsigned char **tgtp, + sample_parms * source, sample_parms * target) +{ + void *p1 = *srcp, *p2 = *tgtp, *tmpp; + int len = *srcl; + int err; + int ssize = 2; + audio_format_info_p fmt; + + VMEM_CHECK (p1, len); + VMEM_CHECK (p2, len); + + if ((fmt = oss_find_format (source->fmt)) == NULL) + { + cmn_err (CE_WARN, "Unknown audio format %x\n", source->fmt); + return OSS_EIO; + } + + switch (fmt->bits) + { + default: + case 8: + ssize = 1; + break; + case 16: + ssize = 2; + break; + case 24: + ssize = 4; + break; + case 32: + ssize = 4; + break; + } + + err = + do_src (adev, dmap, source->rate, target->rate, p1, p2, &len, + source->channels, fmt->bits, ssize); + if (err < 0) + return err; + + tmpp = p1; + p1 = p2; + p2 = tmpp; + + VMEM_CHECK (p1, len); + *srcl = len; + *srcp = p1; + *tgtp = p2; + + return 0; +} + +#include "audiocnv.inc" + +static cnv_func_t +select_converter (unsigned int cnv, int expand, audio_format_info_p src_f, + audio_format_info_p tgt_f) +{ +#if 1 + { + int expand2 = expand * 100 / UNIT_EXPAND; + DDB (cmn_err + (CE_CONT, "Expand = %d (%d.%02d)\n", expand, expand2 / 100, + expand2 % 100)); + DDB (cmn_err (CE_CONT, "Convert = %08x / ", cnv)); + if (cnv & CNV_SRC) + DDB (cmn_err (CE_CONT, "CNV_SRC ")); + if (cnv & CNV_M2S) + DDB (cmn_err (CE_CONT, "CNV_M2S ")); + if (cnv & CNV_S2M) + DDB (cmn_err (CE_CONT, "CNV_S2M ")); + if (cnv & CNV_MULT) + DDB (cmn_err (CE_CONT, "CNV_MULT ")); + if (cnv & CNV_Flog) + DDB (cmn_err (CE_CONT, "CNV_Flog ")); + if (cnv & CNV_F8bit) + DDB (cmn_err (CE_CONT, "CNV_F8bit ")); + if (cnv & CNV_F16bit) + DDB (cmn_err (CE_CONT, "CNV_F16bit ")); + if (cnv & CNV_F24bit) + DDB (cmn_err (CE_CONT, "CNV_F24bit ")); + if (cnv & CNV_F32bit) + DDB (cmn_err (CE_CONT, "CNV_F32bit ")); + if (cnv & CNV_Tlog) + DDB (cmn_err (CE_CONT, "CNV_Tlog ")); + if (cnv & CNV_T8bit) + DDB (cmn_err (CE_CONT, "CNV_T8bit ")); + if (cnv & CNV_T16bit) + DDB (cmn_err (CE_CONT, "CNV_T16bit ")); + if (cnv & CNV_T24bit) + DDB (cmn_err (CE_CONT, "CNV_T24bit ")); + if (cnv & CNV_T32bit) + DDB (cmn_err (CE_CONT, "CNV_T32bit ")); + if (cnv & CNV_SIGN) + DDB (cmn_err (CE_CONT, "CNV_SIGN ")); + if (cnv & CNV_ENDIAN) + DDB (cmn_err (CE_CONT, "CNV_ENDIAN ")); + if (cnv & CNV_TOLOG) + DDB (cmn_err (CE_CONT, "CNV_TOLOG ")); + if (cnv & CNV_FROMLOG) + DDB (cmn_err (CE_CONT, "CNV_FROMLOG ")); + DDB (cmn_err (CE_CONT, "\n")); + } + DDB (cmn_err (CE_CONT, "\n")); +#endif + + if (cnv == CNV_SRC) /* Only SRC is needed */ + if (src_f->fmt & (CONVERTABLE_FORMATS & ~AFMT_MU_LAW)) /* Can convert this */ +#ifdef OSS_BIG_ENDIAN + if (src_f->endianess == ENDIAN_BIG) +#else + if (src_f->endianess == ENDIAN_LITTLE) +#endif + { + DDB (cmn_err (CE_CONT, "Only SRC\n")); + return cnv_srconly; + } + + if (cnv & CNV_SRC) + { /* Needs SRC together with some other conversion. Use the default. */ + return cnv_default; + } + + if (src_f->endianess != tgt_f->endianess) + { /* Needs endianess handling - use the default for the time being. */ + return cnv_default; + } + +#ifdef OSS_BIG_ENDIAN + if (src_f->endianess != ENDIAN_BIG) +#else + if (src_f->endianess != ENDIAN_LITTLE) +#endif + { /* Opposite endianess - use the default. */ + return cnv_default; + } + +/* + * The remaining conversions don't use SRC and the endianess is native + * so they are easier to optimize. + */ + + switch (cnv) + { + case CNV_F8bit | CNV_T16bit: + return cnv_F8bits_T16bits; + case CNV_F8bit | CNV_T32bit: + return cnv_F8bits_T32bits; + case CNV_F16bit | CNV_T32bit: + return cnv_F16bits_T32bits; + case CNV_F32bit | CNV_T16bit: + return cnv_F32bits_T16bits; + case CNV_F32bit | CNV_T8bit: + return cnv_F32bits_T8bits; + case CNV_F16bit | CNV_T8bit: + return cnv_F16bits_T8bits; + } + + DDB (cmn_err (CE_CONT, "Will use the default converter\n")); + return cnv_default; +} + +/*ARGSUSED*/ +int +setup_format_conversions (adev_p adev, dmap_p dmap, sample_parms * source, + sample_parms * target, + sample_parms * user, + sample_parms * device, int format_mask) +{ + int expand = UNIT_EXPAND; + unsigned int cnv = CNV_NONE; + audio_format_info_p src_f, tgt_f; + + dmap->expand_factor = UNIT_EXPAND; + + if (source->fmt == AFMT_AC3) + { + source->channels = target->channels = 2; + source->rate = target->rate; + target->fmt = source->fmt; + dmap->convert_mode = 0; + dmap->convert_func = NULL; + return 0; + } + + if ((src_f = oss_find_format (source->fmt)) == NULL) + { + cmn_err (CE_CONT, "internal format error 1 (%x)\n", source->fmt); + return OSS_EIO; + } + + if ((tgt_f = oss_find_format (target->fmt)) == NULL) + { + cmn_err (CE_CONT, "internal format error 2\n"); + return OSS_EIO; + } + +#ifdef DO_TIMINGS + oss_timing_printf ("Setting up format conversions for device %d", + adev->engine_num); + oss_timing_printf (" Speed %d->%d", source->rate, target->rate); + oss_timing_printf (" Channels %d->%d", source->channels, target->channels); + oss_timing_printf (" Format %02x/%s->%02x/%s", source->fmt, src_f->name, + target->fmt, tgt_f->name); +#endif + DDB (cmn_err + (CE_CONT, "Setting up format conversions for device %d\n", + adev->engine_num)); + DDB (cmn_err (CE_CONT, " Speed %d->%d\n", source->rate, target->rate)); + DDB (cmn_err + (CE_CONT, " Channels %d->%d\n", source->channels, target->channels)); + DDB (cmn_err + (CE_CONT, " Format %02x/%s->%02x/%s\n", source->fmt, src_f->name, + target->fmt, tgt_f->name)); + + if (source->channels > OSS_MAX_CONVERT_CHANNELS + || target->channels > OSS_MAX_CONVERT_CHANNELS) + { + cmn_err + (CE_WARN, + "Audio format conversions not supported with more than %d channels\n", + OSS_MAX_CONVERT_CHANNELS); + dmap->flags &= ~DMAP_COOKED; + return OSS_EIO; + } + + expand = (expand * target->rate) / source->rate; + expand = (expand * target->channels) / source->channels; + expand = (expand * tgt_f->bits) / src_f->bits; + + dmap->expand_factor = expand; + + if (source->rate != target->rate) + cnv |= CNV_SRC; + + if (source->channels != target->channels) /* Change # of channels */ + { + if (target->channels > 2 || source->channels > 2) + cnv |= CNV_MULT; + else + { + if (source->channels == 1 && target->channels == 2) + cnv |= CNV_M2S; + else + cnv |= CNV_S2M; + } + } + + if (source->fmt != target->fmt) + { + + if (src_f->endianess != tgt_f->endianess) + if (src_f->endianess != ENDIAN_NONE + && tgt_f->endianess != ENDIAN_NONE) + { /* Endianess change */ + cnv |= CNV_ENDIAN; + } + + if (src_f->endianess != ENDIAN_NONE && tgt_f->endianess != ENDIAN_NONE) + if (src_f->is_signed != tgt_f->is_signed) + { + cnv |= CNV_SIGN; + } + + if (src_f->bits != tgt_f->bits) + { + switch (src_f->bits) + { + case 8: + cnv |= CNV_F8bit; + break; + case 16: + cnv |= CNV_F16bit; + break; + case 24: + cnv |= CNV_F24bit; + break; + case 32: + cnv |= CNV_F32bit; + break; + default: + cnv |= CNV_Flog; + } + + switch (tgt_f->bits) + { + case 8: + cnv |= CNV_T8bit; + break; + case 16: + cnv |= CNV_T16bit; + break; + case 24: + cnv |= CNV_T24bit; + break; + case 32: + cnv |= CNV_T32bit; + break; + default: + cnv |= CNV_Tlog; + } + } + + if (!src_f->is_linear) + cnv |= CNV_FROMLOG; + + if (!tgt_f->is_linear) + cnv |= CNV_TOLOG; + } + + dmap->convert_mode = cnv; + + dmap->convert_func = select_converter (cnv, expand, src_f, tgt_f); + + dmap->tmpbuf_len = dmap->tmpbuf_ptr = 0; + if (dmap->tmpbuf1 == NULL) + { + dmap->tmpbuf1 = PMALLOC (dmap->osdev, TMP_CONVERT_BUF_SIZE+512); + } + + if (dmap->tmpbuf2 == NULL) + { + dmap->tmpbuf2 = PMALLOC (dmap->osdev, TMP_CONVERT_BUF_SIZE+512); + } + + if (dmap->tmpbuf1 == NULL || dmap->tmpbuf2 == NULL) + return OSS_ENOSPC; + + if (cnv & CNV_SRC) + if (setup_src + (adev, dmap, source->rate, target->rate, source->channels, + target->channels) < 0) + { + cmn_err (CE_CONT, "internal format error 3\n"); + return OSS_EIO; + } + + return 0; +} diff --git a/kernel/framework/audio/oss_grc3.c b/kernel/framework/audio/oss_grc3.c new file mode 100644 index 0000000..d47379a --- /dev/null +++ b/kernel/framework/audio/oss_grc3.c @@ -0,0 +1,451 @@ +/* + * Purpose: GRC3 Sample Rate Converter + * + * GRC library version 3.1 + */ + +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +#ifdef _KERNEL +//#include "oss_config.h" +#endif + +#ifdef _KERNEL +#include <inttypes.h> +#endif + +#include "grc3.h" + +char _grc3_copyright[] = + "GRC library version 3.0\n" + "Copyright (C)2001-2009 4Front Technologies\n" + "Copyright (C)2001-2002 by George Yohng\n\0" "GRC3 ENGINE"; + +#ifdef GRC3_COMPILE_L +#define filter_data filter_data_L +#include "fltdata3_l.inc" +#undef filter_data +#endif + +#ifdef GRC3_COMPILE_M +#define filter_data filter_data_M +#include "fltdata1_m.inc" +#undef filter_data +#endif + +#ifdef GRC3_COMPILE_H +#define filter_data filter_data_H +#include "fltdata2_h.inc" +#undef filter_data +#define filter_data_HX filter_data_H +#endif + +#ifdef GRC3_COMPILE_P +#define filter_data filter_data_P +#include "fltdata4_p.inc" +#undef filter_data +#define filter_data_PX filter_data_P +#endif + +#if (CONFIG_OSS_GRC_MIN_QUALITY>CONFIG_OSS_GRC_MAX_QUALITY) +#error Invalid values specified in CONFIG_OSS_GRC_XXX_QUALITY +#endif + +#if !defined(GRC3_COMPILE_L) && !defined(GRC3_COMPILE_M) && !defined(GRC3_COMPILE_H) && !defined(GRC3_COMPILE_P) +#error Invalid values specified in CONFIG_OSS_GRC_XXX_QUALITY +#endif + + +/* TODO: Wy doesn't -O and inlining work? */ +#undef __inline__ +#define __inline__ + +static __inline__ int32_t +_muldivu64 (GRCpreg uint32_t a, GRCpreg uint32_t val1, GRCpreg uint32_t val2) +{ + GRCvreg uint64_t v = ((uint64_t) a) * val1 / val2; + return (uint32_t) (v); +} + + +static __inline__ int32_t +_grc_sat6 (GRCpreg int32_t a, GRCpreg int32_t b) +{ + GRCvreg int64_t v = ((int64_t) a) * b + (1 << 5); + return (int32_t) (v >> 6); +} + +#if 0 +static __inline__ int32_t +_grc_sat21 (GRCpreg int32_t a, GRCpreg int32_t b) +{ + GRCvreg int64_t v = ((int64_t) a) * b + (1 << 20); + return (int32_t) (v >> 21); +} +#endif + +static __inline__ int32_t +_grc_sat31 (GRCpreg int32_t a, GRCpreg int32_t b) +{ + GRCvreg int64_t v = ((int64_t) a) * b + (1 << 30); + return (int32_t) (v >> 31); +} + + +#define DEFINE_FILTER(T)\ + static __inline__ int32_t _filt31_##T(GRCpreg int32_t a, GRCpreg int32_t idx)\ + {\ + GRCvreg int64_t v=((int64_t)a)*filter_data_##T[idx>>15];\ + return (int32_t)(v>>31);\ + } + +#define DEFINE_FILTER_HQ(T)\ + static __inline__ int32_t _filt31_##T(GRCpreg int32_t a, GRCpreg int32_t idx)\ + {\ + GRCvreg int32_t idx2=idx>>15;\ + GRCvreg int64_t v=((int64_t)a)*\ + \ + (filter_data_##T[idx2] +\ + \ + (((int64_t)(idx&32767))*(filter_data_##T[idx2+1] - filter_data_##T[idx2])>>15));\ + return (int32_t)(v>>31);\ + } + + +#ifdef GRC3_COMPILE_L +DEFINE_FILTER (L) +#endif + +#ifdef GRC3_COMPILE_M +DEFINE_FILTER (M) +#endif + +#ifdef GRC3_COMPILE_H +DEFINE_FILTER (H) +DEFINE_FILTER_HQ (HX) +#endif + +#ifdef GRC3_COMPILE_P +DEFINE_FILTER (P) +DEFINE_FILTER_HQ (PX) +#endif + +int32_t +_clamp24 (int32_t v) +{ + return (v <= -0x007FFFFF) ? -0x007FFFFF : + (v >= 0x007FFFFF) ? 0x007FFFFF : v; +} + +#define DEFINE_CONVD(T,SZ)\ + static __inline__ int32_t _conv31d_##T(GRCpreg int32_t *history,GRCpreg uint32_t filter,GRCpreg uint32_t incv)\ + {\ + GRCvreg int32_t accum=0;\ + \ + filter = (1024<<15) - filter;\ + \ + while(filter<((uint32_t)(SZ<<15)))\ + {\ + accum+=_filt31_##T(*history,filter);\ + filter+=incv;\ + history--;\ + }\ + \ + return accum;\ + } + +#ifdef GRC3_COMPILE_L +DEFINE_CONVD (L, 4096) +#endif + +#ifdef GRC3_COMPILE_M +DEFINE_CONVD (M, 8192) +#endif + +#ifdef GRC3_COMPILE_H +DEFINE_CONVD (H, 16384) +DEFINE_CONVD (HX, 16384) +#endif + +#ifdef GRC3_COMPILE_P +DEFINE_CONVD (P, 32768) +DEFINE_CONVD (PX, 32768) +#endif + +#define ITERATION(p)\ + accum+=_filt31_##p(*history,filter);\ + filter+=(1024<<15);\ + history--; + +#ifdef GRC3_COMPILE_L +static __inline__ int32_t +_conv31_L (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (L) ITERATION (L) ITERATION (L) ITERATION (L) return accum; +} +#endif + + +#ifdef GRC3_COMPILE_M +static __inline__ int32_t +_conv31_M (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (M) ITERATION (M) ITERATION (M) ITERATION (M) + ITERATION (M) ITERATION (M) ITERATION (M) ITERATION (M) return accum; +} +#endif + +#ifdef GRC3_COMPILE_H +static __inline__ int32_t +_conv31_H (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (H) ITERATION (H) ITERATION (H) ITERATION (H) + ITERATION (H) ITERATION (H) ITERATION (H) ITERATION (H) + ITERATION (H) ITERATION (H) ITERATION (H) ITERATION (H) + ITERATION (H) ITERATION (H) ITERATION (H) ITERATION (H) return accum; +} + +static __inline__ int32_t +_conv31_HX (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (HX) ITERATION (HX) ITERATION (HX) ITERATION (HX) + ITERATION (HX) ITERATION (HX) ITERATION (HX) ITERATION (HX) + ITERATION (HX) ITERATION (HX) ITERATION (HX) ITERATION (HX) + ITERATION (HX) ITERATION (HX) ITERATION (HX) ITERATION (HX) return accum; +} +#endif + +#ifdef GRC3_COMPILE_P +static __inline__ int32_t +_conv31_P (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) + ITERATION (P) ITERATION (P) ITERATION (P) ITERATION (P) return accum; +} + +static __inline__ int32_t +_conv31_PX (GRCpreg int32_t * history, GRCpreg uint32_t filter) +{ + GRCvreg int32_t accum = 0; + + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) + ITERATION (PX) ITERATION (PX) ITERATION (PX) ITERATION (PX) return accum; +} +#endif + +static __inline__ int16_t +_swap16 (GRCpreg int32_t v) +{ + return (int16_t) ((((uint16_t) v) << 8) + (((uint16_t) v) >> 8)); +} + +static __inline__ int32_t +_swap32 (GRCpreg int32_t v) +{ + return (int32_t) ((((uint32_t) v) >> 24) + + (((uint32_t) v) << 24) + + (((uint32_t) _swap16 ((int16_t) (v >> 8))) << 8)); +} + +#include "grc3code.inc" + +#define DECLCVT(bit,q,func)\ + if ((domain==bit)&&(quality==q)) \ + {\ + if (!grc) return 0; \ + return grc3_resample_##func(grc,\ + (void *)src, \ + (void *)dst, \ + (int32_t)sz, \ + (int32_t)bufsz, \ + (int32_t)inc, \ + (int32_t)offset \ + ); \ + }else + +int +grc3_convert (grc3state_t * grc, + int domain, int quality, + void *src, void *dst, + int sz, int bufsz, int inc, int offset) +{ + +again: + +#ifdef GRC3_COMPILE_L + DECLCVT (8, 0, L8_8) + DECLCVT (16, 0, L16_16) + DECLCVT (-16, 0, Lv16_v16) + DECLCVT (32, 0, L32_32) + DECLCVT (-32, 0, Lv32_v32) + + DECLCVT (8, 1, L8_8) + DECLCVT (16, 1, L16_16) + DECLCVT (-16, 1, Lv16_v16) + DECLCVT (32, 1, L32_32) + DECLCVT (-32, 1, Lv32_v32) +#endif +#ifdef GRC3_COMPILE_M + DECLCVT (8, 2, M8_8) + DECLCVT (16, 2, M16_16) + DECLCVT (-16, 2, Mv16_v16) + DECLCVT (32, 2, M32_32) + DECLCVT (-32, 2, Mv32_v32) +#endif +#ifdef GRC3_COMPILE_H + DECLCVT (8, 3, H8_8) + DECLCVT (16, 3, H16_16) + DECLCVT (-16, 3, Hv16_v16) + DECLCVT (32, 3, H32_32) + DECLCVT (-32, 3, Hv32_v32) + DECLCVT (8, 4, HX8_8) + DECLCVT (16, 4, HX16_16) + DECLCVT (-16, 4, HXv16_v16) + DECLCVT (32, 4, HX32_32) + DECLCVT (-32, 4, HXv32_v32) +#endif +#ifdef GRC3_COMPILE_P + DECLCVT (8, 5, P8_8) + DECLCVT (16, 5, P16_16) + DECLCVT (-16, 5, Pv16_v16) + DECLCVT (32, 5, P32_32) + DECLCVT (-32, 5, Pv32_v32) + DECLCVT (8, 6, PX8_8) + DECLCVT (16, 6, PX16_16) + DECLCVT (-16, 6, PXv16_v16) + DECLCVT (32, 6, PX32_32) + DECLCVT (-32, 6, PXv32_v32) +#endif + { + if ((quality > 6) && (grc)) + { + quality = DEFAULT_GRC_QUALITY; + goto again; + } + + return -1; + } +} + +int +grc3_reset (grc3state_t * grc) +{ + int32_t t; + grc->ptr = 0; + grc->historyptr = grc->history + GRC3_MAXHISTORY; + + for (t = 0; t < GRC3_MAXHISTORY * 2; t++) + grc->history[t] = 0; + + return 1; +} + +static int +grc3_setup_up (grc3state_t * grc, uint32_t fromRate, uint32_t toRate) +{ + grc->srcrate = fromRate; + grc->dstrate = toRate; + grc->filtfactor = 0x80000000U / toRate; + return 1; +} + +static int +grc3_setup_dn (grc3state_t * grc, uint32_t fromRate, uint32_t toRate) +{ + grc->srcrate = fromRate; + grc->dstrate = toRate; + grc->filtfactor = 0x80000000U / fromRate; + grc->ptr_incv = _muldivu64 (1024 << 15, toRate, fromRate); + grc->sat = _muldivu64 (0x80000000U, toRate, fromRate); + return 1; +} + +int +grc3_setup (grc3state_t * grc, uint32_t fromRate, uint32_t toRate) +{ + while ((!(fromRate & 1)) && (!(toRate & 1)) && (fromRate > 0)) + { + fromRate >>= 1; + toRate >>= 1; + } + + if (fromRate <= toRate) + return grc3_setup_up (grc, fromRate, toRate); + else + return grc3_setup_dn (grc, fromRate, toRate); +} + + +#ifdef TESTCASE + +#include <stdio.h> +grc3state_t grc1, grc2; + +#define BUFLEN (135*4) /* Randomish lenghth */ + +int +main () +{ + int t, k, l; + short tmp; + short p[BUFLEN], o[BUFLEN * 8]; + + grc3_reset (&grc1); + grc3_setup (&grc1, 44100, 48000); + grc3_reset (&grc2); + grc3_setup (&grc2, 44100, 48000); + + + while ((l = read (0, p, sizeof (p))) > 0) + { + t = l / 4; + fprintf (stderr, "Convert %d (%d)", t, l); + grc3_convert (&grc1, 16, 4, p, o, t, (uint32_t) - 1, 2, 0); + grc3_convert (&grc2, 16, 4, p, o, t, (uint32_t) - 1, 2, 1); + l = grc2.outsz * 4; + fprintf (stderr, " -> %d (%d)\n", grc2.outsz, l); + + if (write (1, o, l) != l) + { + perror ("write"); + exit (-1); + } + + } + + return 0; +} + +#endif diff --git a/kernel/framework/audio/oss_spdif.c b/kernel/framework/audio/oss_spdif.c new file mode 100644 index 0000000..9b8c312 --- /dev/null +++ b/kernel/framework/audio/oss_spdif.c @@ -0,0 +1,627 @@ +/* + * Purpose: S/PDIF (IEC958) control bit and mixer extension management + * + * This code is used by some drivers to handle S/PDIF specific control + * functions (see {!xlink spdif_control} for more info. + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +#include "oss_config.h" +#include "spdif.h" + +#define MAX_DEV 10 +static int ndevs = 0; +static spdif_devc *devc_list[MAX_DEV] = { 0 }; + +static void +init_ctl (spdif_devc * devc, oss_digital_control * ctl) +{ + memset (ctl, 0, sizeof (*ctl)); + + ctl->caps = devc->caps; +} + +static void +block_mixer (spdif_devc * devc) +{ + devc->mixer_blocked = 1; + memcpy (&devc->cold_ctl, &devc->hot_ctl, sizeof (devc->hot_ctl)); + devc->ctl = &devc->cold_ctl; + +} + +static void +unblock_mixer (spdif_devc * devc) +{ + memcpy (&devc->hot_ctl, &devc->cold_ctl, sizeof (devc->hot_ctl)); + devc->ctl = &devc->hot_ctl; + devc->mixer_blocked = 0; +} + +int +oss_spdif_install (spdif_devc * devc, oss_device_t * osdev, + spdif_driver_t * d, int driver_size, void *host_devc, + void *host_portc, int mixer_dev, int flags, + unsigned int caps) +{ + int i, pos; + + if (devc->is_ok) + { + /* cmn_err (CE_WARN, "spdif: Bad usage - double init\n"); */ + return 0; + } + + if (d == NULL || driver_size != sizeof (spdif_driver_t)) + { + cmn_err (CE_WARN, "spdif: Bad driver\n"); + return OSS_EIO; + } + + memset (devc, 0, sizeof (*devc)); + + devc->open_mode = 0; + devc->osdev = osdev; + MUTEX_INIT (devc->osdev, devc->mutex, MH_FRAMEW + 2); + devc->d = d; + devc->flags = flags; + devc->host_devc = host_devc; + devc->host_portc = host_portc; + devc->mixer_dev = mixer_dev; + devc->ctl = &devc->hot_ctl; + devc->caps = caps; + devc->is_ok = 1; + + pos=-1; + + for (i=0;pos==-1 && i<ndevs;i++) + if (devc_list[i]==NULL) + { + pos = i; + } + + if (pos==-1) + { + if (ndevs >= MAX_DEV) + { + cmn_err(CE_WARN, "Too many S/PDIF devices\n"); + return OSS_EBUSY; + } + + pos=ndevs++; + } + + devc_list[pos] = devc; + + init_ctl (devc, &devc->hot_ctl); + init_ctl (devc, &devc->cold_ctl); + + return 0; +} + +void +oss_spdif_uninstall (spdif_devc * devc) +{ + int i; + + for (i=0;i<ndevs;i++) + if (devc_list[i]==devc) + devc_list[i]=NULL; +} + +int +oss_spdif_open (spdif_devc * devc, int open_mode) +{ + oss_native_word flags; + flags = 0; + if (!devc->is_ok) + { + cmn_err (CE_WARN, "spdif: Bad usage - open\n"); + return OSS_EIO; + } + MUTEX_ENTER (devc->mutex, flags); + devc->open_mode |= open_mode; + MUTEX_EXIT (devc->mutex, flags); + return 0; +} + +void +oss_spdif_close (spdif_devc * devc, int open_mode) +{ + oss_native_word flags; + flags = 0; + if (!devc->is_ok) + { + cmn_err (CE_WARN, "spdif: Bad usage - close\n"); + return; + } + MUTEX_ENTER (devc->mutex, flags); + devc->open_mode &= ~open_mode; + + if (devc->mixer_blocked && (open_mode & OPEN_WRITE)) + { + unblock_mixer (devc); + } + MUTEX_EXIT (devc->mutex, flags); +} + +static void +update_rate_bits (spdif_devc * devc, int rate) +{ + unsigned char spd; +/* + * Set S/PDIF rate control (TODO: Pro mode) + */ + + devc->hot_ctl.srate_out = rate; + + switch (rate) + { + case 48000: + spd = 2; + break; + case 32000: + spd = 3; + break; + case 88200: + spd = 4; + break; + case 96000: + spd = 5; + break; + case 176400: + spd = 7; + break; + case 192000: + spd = 6; + break; + default: + spd = 0; + rate = 44100; + } + + devc->hot_ctl.rate_bits = spd; + + devc->hot_ctl.cbitout[3] &= ~0x0f; + devc->hot_ctl.cbitout[3] |= spd & 0x0f; + devc->hot_ctl.srate_out = rate; +} + +void +oss_spdif_setrate (spdif_devc * devc, int rate) +{ + oss_native_word flags; + flags = 0; + if (!devc->is_ok) + { + cmn_err (CE_WARN, "spdif: Bad usage - setrate\n"); + return; + } + MUTEX_ENTER (devc->mutex, flags); + + update_rate_bits (devc, rate); + + if (devc->d->reprogram_device) + devc->d->reprogram_device (devc->host_devc, devc->host_portc, + &devc->hot_ctl, REPGM_RATE | REPGM_CBIT3); + MUTEX_EXIT (devc->mutex, flags); +} + +static int spdif_mix_init (spdif_devc * devc); + +/*ARGSUSED*/ +static void +switch_mode (spdif_devc * devc, oss_digital_control * ctl, int smurf) +{ + ctl->pro_mode = ctl->cbitout[0] & 0x01; + + if (ctl == devc->ctl) /* Visible to mixer */ + spdif_mix_init (devc); /* Re-create mixer extensions */ +} + +static void +update_hardware (spdif_devc * devc, int repgm) +{ + if (repgm & REPGM_RATE) + update_rate_bits (devc, devc->hot_ctl.srate_out); + if (devc->d->reprogram_device) + devc->d->reprogram_device (devc->host_devc, devc->host_portc, + &devc->hot_ctl, repgm); +} + +static int +readctl (spdif_devc * devc, oss_digital_control * c, int open_mode) +{ + int valid = c->valid & ~(VAL_OUTMASK); + int ret = 0; + oss_native_word flags; + flags = 0; + + MUTEX_ENTER (devc->mutex, flags); + + memcpy (c, &devc->hot_ctl, sizeof (devc->hot_ctl)); + memset (c->filler, 0, sizeof (c->filler)); /* Hide internal variables */ + c->valid &= (VAL_OUTMASK); + + if (open_mode & OPEN_READ) + { + if (devc->d->get_status) + ret = devc->d->get_status (devc->host_devc, devc->host_portc, + c, valid); + else + { + if (valid != 0) /* Can't get input status */ + ret = OSS_EIO; + } + } + + MUTEX_EXIT (devc->mutex, flags); + return ret; +} + +/*ARGSUSED*/ +static int +handle_request (spdif_devc * devc, oss_digital_control * c) +{ + return OSS_EIO; +} + +static int +writectl (spdif_devc * devc, oss_digital_control * c) +{ + int valid = c->valid; + int repgm = 0; + int err = 0; + oss_native_word flags; + flags = 0; + + MUTEX_ENTER (devc->mutex, flags); + if (!devc->mixer_blocked) + block_mixer (devc); + c->valid = 0; + c->caps = devc->caps; + + if ((valid & VAL_CBITOUT) && + ((devc->caps & DIG_CBITOUT_MASK) != DIG_CBITOUT_NONE)) + { + int smurf; + + smurf = (devc->hot_ctl.cbitout[0] ^ c->cbitout[0]) & 1; + c->valid |= VAL_CBITOUT; + repgm |= REPGM_CBITALL; + + if (smurf) /* Mode changet CONSUMER<->PRO */ + { + repgm |= REPGM_ALL; + switch_mode (devc, &devc->hot_ctl, 0); + } + + memcpy (&devc->hot_ctl.cbitout, &c->cbitout, sizeof (c->cbitout)); + } + + if ((valid & VAL_UBITOUT) && (devc->caps & DIG_UBITOUT)) + { + c->valid |= VAL_UBITOUT; + repgm |= REPGM_UBITALL; + memcpy (&devc->hot_ctl.ubitout, &c->ubitout, sizeof (c->ubitout)); + } + + if ((c->out_vbit != VBIT_NOT_INDICATED) && (devc->caps & DIG_VBITOUT)) + { + devc->hot_ctl.out_vbit = c->out_vbit; + repgm |= REPGM_VBIT; + } + else + c->out_vbit = VBIT_NOT_INDICATED; + c->in_vbit = VBIT_NOT_INDICATED; + + devc->hot_ctl.valid = valid; + + if ((valid & VAL_ORATE)) + { + /* TODO: Check the rate */ + update_rate_bits (devc, c->srate_out); + c->valid |= VAL_ORATE; + c->srate_out = devc->hot_ctl.srate_out; + } + + if (valid & VAL_REQUEST) + { + err = handle_request (devc, c); + if (err >= 0) + c->valid |= VAL_REQUEST; + } + + MUTEX_EXIT (devc->mutex, flags); + return err; +} + +int +oss_spdif_ioctl (spdif_devc * devc, int open_mode, unsigned int cmd, + ioctl_arg arg) +{ + if (!devc->is_ok) + { + cmn_err (CE_WARN, "spdif: Bad usage - ioctl\n"); + return SPDIF_NOIOCTL; /* Not for me */ + } + + switch (cmd) + { + case SNDCTL_DSP_WRITECTL: + if (!(open_mode & OPEN_WRITE)) /* Not opened for output */ + return OSS_ENOTSUP; + if (!(devc->flags & SPDF_OUT)) + return OSS_ENOTSUP; + return writectl (devc, (oss_digital_control *) arg); + break; + + case SNDCTL_DSP_READCTL: + if (!(devc->flags & (SPDF_OUT | SPDF_IN))) + return OSS_ENOTSUP; + return readctl (devc, (oss_digital_control *) arg, open_mode); + break; + } + + return SPDIF_NOIOCTL; /* Not for me too */ +} + +static int +spdif_set_control (spdif_devc * devc, int ctrl, unsigned int cmd, int value) +{ + int val; + + if (cmd == SNDCTL_MIX_READ) + { + switch (ctrl) + { + case 1: /* spdif.enable (OFF/ON) */ + return !!(devc->ctl->outsel & OUTSEL_DIGITAL); + break; + + case 2: /* spdif.mode (CONSUMER|PRO) */ + return !!(devc->ctl->cbitout[0] & 1); + break; + + case 3: /* spdif.audio (AUDIO/DATA) */ + return !!(devc->ctl->cbitout[0] & 2); + break; + + case 4: /* spdif.vbit (OFF/ON) */ + return (devc->ctl->out_vbit == VBIT_ON); + break; + + case 5: /* spdif.copyright (YES/NO) */ + return get_cbit (devc->ctl->cbitout, 0, 2); + break; + + case 6: /* spdif.generation (COPY/ORIGINAL) */ + return get_cbit (devc->ctl->cbitout, 1, 0); + break; + + case 7: /* spdif.preemph (OFF 50/16usec) */ + return devc->ctl->emphasis_type; + } + + return OSS_EINVAL; + } + + if (cmd == SNDCTL_MIX_WRITE) + { + switch (ctrl) + { + case 1: /* spdif.enable */ + if (value) + devc->ctl->outsel |= OUTSEL_DIGITAL; + else + devc->ctl->outsel &= ~OUTSEL_DIGITAL; + update_hardware (devc, REPGM_OUTSEL); + return !!(devc->ctl->outsel & OUTSEL_DIGITAL); + break; + + case 2: /* spdif.mode (CONSUMER|PRO) */ + val = devc->ctl->cbitout[0] & 1; + value = !!value; + + set_cbit (devc->ctl->cbitout, 0, 0, value); + if (val != value) /* Mode change */ + switch_mode (devc, devc->ctl, 1); + update_hardware (devc, REPGM_ALL); + return get_cbit (devc->ctl->cbitout, 0, 0); + break; + + case 3: /* spdif.audio (AUDIO|DATA) */ + value = !!value; + + set_cbit (devc->ctl->cbitout, 0, 1, value); + update_hardware (devc, REPGM_CBIT0); + return get_cbit (devc->ctl->cbitout, 0, 1); + break; + + case 4: /* spdif.vbit (OFF/ON) */ + devc->ctl->out_vbit = (value) ? VBIT_ON : VBIT_OFF; + update_hardware (devc, REPGM_VBIT); + return (devc->ctl->out_vbit == VBIT_ON); + break; + + case 5: /* spdif.copyright (YES|NO) */ + value = !!value; + + set_cbit (devc->ctl->cbitout, 0, 2, value); + update_hardware (devc, REPGM_CBIT0); + return get_cbit (devc->ctl->cbitout, 0, 2); + break; + + case 6: /* spdif.generation (COPY|ORIGINAL) */ + value = !!value; + + set_cbit (devc->ctl->cbitout, 1, 0, value); + update_hardware (devc, REPGM_CBIT1); + return get_cbit (devc->ctl->cbitout, 1, 0); + break; + + case 7: /* spdif.preemph (OFF 50/15usec) */ + value = !!value; + devc->ctl->emphasis_type = value; + if (devc->ctl->pro_mode) + { + devc->ctl->cbitout[0] &= ~0x1c; + if (value) + devc->ctl->cbitout[0] |= 0x0c; + } + else + { + devc->ctl->cbitout[0] &= ~0x28; + if (value) + devc->ctl->cbitout[0] |= 0x08; + } + update_hardware (devc, REPGM_CBIT0); + return value; + + break; + } + + return OSS_EINVAL; + } + return OSS_EINVAL; +} + +static int +spdif_set_mixer_control (int dev, int ctrl, unsigned int cmd, int value) +{ + int i, ret; + spdif_devc *devc = NULL; + oss_native_word flags; + flags = 0; + + for (i = 0; i < ndevs && devc == NULL; i++) + if (devc_list[i]->mixer_dev == dev) + devc = devc_list[i]; + + if (devc == NULL) + return OSS_EINVAL; + MUTEX_ENTER (devc->mutex, flags); + ret = spdif_set_control (devc, ctrl, cmd, value); + MUTEX_EXIT (devc->mutex, flags); + return ret; +} + +static int +spdif_mix_init (spdif_devc * devc) +{ + int group, err, dev; + + dev = devc->mixer_dev; + + if (!devc->is_ok) + { + cmn_err (CE_WARN, "spdif: Bad usage - mix_init\n"); + return OSS_EIO; + } + + if (devc->group > 0) + mixer_ext_truncate (devc->mixer_dev, devc->group); + devc->group = 0; + + if ((group = mixer_ext_create_group_flags (dev, 0, "SPDIF", MIXF_FLAT)) < 0) + return group; + + devc->group = group; + + if (devc->flags & SPDF_ENABLE) + if ((err = mixer_ext_create_control (dev, group, + 1, spdif_set_mixer_control, + MIXT_ONOFF, + "SPDIF_ENABLE", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < 0) + return err; + + if ((devc->caps & DIG_CBITOUT_MASK)) + { + if ((err = mixer_ext_create_control (dev, group, + 3, spdif_set_mixer_control, + MIXT_ENUM, + "SPDIF_AUDIO", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + } + + if (devc->caps & DIG_VBITOUT) + { + if ((err = mixer_ext_create_control (dev, group, + 4, spdif_set_mixer_control, + MIXT_ONOFF, + "SPDIF_VBIT", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + } + + if ((devc->caps & DIG_CBITOUT_MASK)) + { + if ((err = mixer_ext_create_control (dev, group, + 7, spdif_set_mixer_control, + MIXT_ENUM, + "SPDIF_PREEMPH", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + } + + if ((devc->caps & DIG_PRO) && (devc->caps & DIG_CONSUMER)) + { + /* Device supports both consumer and pro */ + if ((err = mixer_ext_create_control (dev, group, + 2, spdif_set_mixer_control, + MIXT_ENUM, + "SPDIF_MODE", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + } + + /* Copyright management */ + if ((devc->caps & DIG_CBITOUT_MASK) && !devc->ctl->pro_mode) + { + if ((err = mixer_ext_create_control (dev, group, + 5, spdif_set_mixer_control, + MIXT_ENUM, + "SPDIF_COPYRIGHT", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + + if ((err = mixer_ext_create_control (dev, group, + 6, spdif_set_mixer_control, + MIXT_ENUM, + "SPDIF_GENERAT", 2, + MIXF_READABLE | MIXF_WRITEABLE)) < + 0) + return err; + } + + return 0; +} + +int +oss_spdif_mix_init (spdif_devc * devc) +{ + int ret; + oss_native_word flags; + flags = 0; + MUTEX_ENTER (devc->mutex, flags); + ret = spdif_mix_init (devc); + MUTEX_EXIT (devc->mutex, flags); + return ret; +} diff --git a/kernel/framework/audio/ulaw.h b/kernel/framework/audio/ulaw.h new file mode 100644 index 0000000..d8b22ac --- /dev/null +++ b/kernel/framework/audio/ulaw.h @@ -0,0 +1,83 @@ +/* + * Purpose: u-Law to and from 8 bit unsigned linear audio conversion tables + */ +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ +static unsigned char ulaw_dsp[] = { + 3, 7, 11, 15, 19, 23, 27, 31, + 35, 39, 43, 47, 51, 55, 59, 63, + 66, 68, 70, 72, 74, 76, 78, 80, + 82, 84, 86, 88, 90, 92, 94, 96, + 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, + 113, 114, 114, 115, 115, 116, 116, 117, + 117, 118, 118, 119, 119, 120, 120, 121, + 121, 121, 122, 122, 122, 122, 123, 123, + 123, 123, 124, 124, 124, 124, 125, 125, + 125, 125, 125, 125, 126, 126, 126, 126, + 126, 126, 126, 126, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 253, 249, 245, 241, 237, 233, 229, 225, + 221, 217, 213, 209, 205, 201, 197, 193, + 190, 188, 186, 184, 182, 180, 178, 176, + 174, 172, 170, 168, 166, 164, 162, 160, + 158, 157, 156, 155, 154, 153, 152, 151, + 150, 149, 148, 147, 146, 145, 144, 143, + 143, 142, 142, 141, 141, 140, 140, 139, + 139, 138, 138, 137, 137, 136, 136, 135, + 135, 135, 134, 134, 134, 134, 133, 133, + 133, 133, 132, 132, 132, 132, 131, 131, + 131, 131, 131, 131, 130, 130, 130, 130, + 130, 130, 130, 130, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, +}; + +static unsigned char dsp_ulaw[] = { + 0, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 3, 3, 3, + 3, 4, 4, 4, 4, 5, 5, 5, + 5, 6, 6, 6, 6, 7, 7, 7, + 7, 8, 8, 8, 8, 9, 9, 9, + 9, 10, 10, 10, 10, 11, 11, 11, + 11, 12, 12, 12, 12, 13, 13, 13, + 13, 14, 14, 14, 14, 15, 15, 15, + 15, 16, 16, 17, 17, 18, 18, 19, + 19, 20, 20, 21, 21, 22, 22, 23, + 23, 24, 24, 25, 25, 26, 26, 27, + 27, 28, 28, 29, 29, 30, 30, 31, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 49, 51, 53, 55, 57, 59, 61, + 63, 66, 70, 74, 78, 84, 92, 104, + 254, 231, 219, 211, 205, 201, 197, 193, + 190, 188, 186, 184, 182, 180, 178, 176, + 175, 174, 173, 172, 171, 170, 169, 168, + 167, 166, 165, 164, 163, 162, 161, 160, + 159, 159, 158, 158, 157, 157, 156, 156, + 155, 155, 154, 154, 153, 153, 152, 152, + 151, 151, 150, 150, 149, 149, 148, 148, + 147, 147, 146, 146, 145, 145, 144, 144, + 143, 143, 143, 143, 142, 142, 142, 142, + 141, 141, 141, 141, 140, 140, 140, 140, + 139, 139, 139, 139, 138, 138, 138, 138, + 137, 137, 137, 137, 136, 136, 136, 136, + 135, 135, 135, 135, 134, 134, 134, 134, + 133, 133, 133, 133, 132, 132, 132, 132, + 131, 131, 131, 131, 130, 130, 130, 130, + 129, 129, 129, 129, 128, 128, 128, 128, +}; |