diff --git a/test/cmocka/src/audio/CMakeLists.txt b/test/cmocka/src/audio/CMakeLists.txt index 882dba7b7..ef0020ce0 100644 --- a/test/cmocka/src/audio/CMakeLists.txt +++ b/test/cmocka/src/audio/CMakeLists.txt @@ -19,3 +19,6 @@ endif() if(CONFIG_COMP_IIR) add_subdirectory(eq_iir) endif() +if(CONFIG_COMP_FIR) + add_subdirectory(eq_fir) +endif() diff --git a/test/cmocka/src/audio/eq_fir/CMakeLists.txt b/test/cmocka/src/audio/eq_fir/CMakeLists.txt new file mode 100644 index 000000000..8e53643c0 --- /dev/null +++ b/test/cmocka/src/audio/eq_fir/CMakeLists.txt @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: BSD-3-Clause + +cmocka_test(eq_fir_process + eq_fir_process.c +) + +target_include_directories(eq_fir_process PRIVATE ${PROJECT_SOURCE_DIR}/src/audio) + +# make small version of libaudio so we don't have to care +# about unused missing references + +add_compile_options(-DUNIT_TEST) + +add_library(audio_for_eq_fir STATIC + ${PROJECT_SOURCE_DIR}/src/audio/eq_fir/eq_fir.c + ${PROJECT_SOURCE_DIR}/src/audio/eq_fir/eq_fir_generic.c + ${PROJECT_SOURCE_DIR}/src/audio/eq_fir/eq_fir_hifi2ep.c + ${PROJECT_SOURCE_DIR}/src/audio/eq_fir/eq_fir_hifi3.c + ${PROJECT_SOURCE_DIR}/src/math/fir_generic.c + ${PROJECT_SOURCE_DIR}/src/math/fir_hifi2ep.c + ${PROJECT_SOURCE_DIR}/src/math/fir_hifi3.c + ${PROJECT_SOURCE_DIR}/src/math/numbers.c + ${PROJECT_SOURCE_DIR}/src/audio/module_adapter/module_adapter.c + ${PROJECT_SOURCE_DIR}/src/audio/module_adapter/module/generic.c + ${PROJECT_SOURCE_DIR}/src/audio/buffer.c + ${PROJECT_SOURCE_DIR}/src/audio/component.c + ${PROJECT_SOURCE_DIR}/src/audio/data_blob.c + ${PROJECT_SOURCE_DIR}/src/ipc/ipc3/helper.c + ${PROJECT_SOURCE_DIR}/src/ipc/ipc-common.c + ${PROJECT_SOURCE_DIR}/src/ipc/ipc-helper.c + ${PROJECT_SOURCE_DIR}/test/cmocka/src/notifier_mocks.c + ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-graph.c + ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-params.c + ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-schedule.c + ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-stream.c + ${PROJECT_SOURCE_DIR}/src/audio/pipeline/pipeline-xrun.c +) +sof_append_relative_path_definitions(audio_for_eq_fir) + +target_link_libraries(audio_for_eq_fir PRIVATE sof_options) + +target_link_libraries(eq_fir_process PRIVATE audio_for_eq_fir) diff --git a/test/cmocka/src/audio/eq_fir/cmocka_fir_coef_2ch.h b/test/cmocka/src/audio/eq_fir/cmocka_fir_coef_2ch.h new file mode 100644 index 000000000..dc8f341ba --- /dev/null +++ b/test/cmocka/src/audio/eq_fir/cmocka_fir_coef_2ch.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * + * Copyright(c) 2022 Intel Corporation. All rights reserved. + */ + +uint32_t fir_coef_2ch[146] = { + 0x00464f53, 0x00000000, 0x00000228, 0x03016001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000228, 0x00010002, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000000fc, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00010001, 0x00010001, 0x00010001, 0x00010001, + 0x00020001, 0x00020002, 0x00020002, 0x00030003, + 0x00030003, 0x00040003, 0x00040004, 0x00050005, + 0x00060005, 0x00060006, 0x00070007, 0x00080008, + 0x00090009, 0x000a000a, 0x000b000b, 0x000c000c, + 0x000d000d, 0x000f000e, 0x0010000f, 0x00120011, + 0x00130012, 0x00150014, 0x00170016, 0x00190018, + 0x001b001a, 0x001e001d, 0x0021001f, 0x00240022, + 0x00280026, 0x002b0029, 0x002f002d, 0x00340032, + 0x00380036, 0x003d003b, 0x00420040, 0x00480045, + 0x004d004b, 0x00540051, 0x005b0057, 0x0062005e, + 0x00680065, 0x006f006c, 0x00760072, 0x007d0079, + 0x00860081, 0x0092008c, 0x009f0098, 0x00ac00a5, + 0x00b800b2, 0x00c600be, 0x00d800ce, 0x00ea00e1, + 0x00f500ef, 0x00fc00fc, 0x00ff0118, 0x0170012f, + 0x043900c3, 0xe9ae02d3, 0xe9ae6cbf, 0x043902d3, + 0x017000c3, 0x00ff012f, 0x00fc0118, 0x00f500fc, + 0x00ea00ef, 0x00d800e1, 0x00c600ce, 0x00b800be, + 0x00ac00b2, 0x009f00a5, 0x00920098, 0x0086008c, + 0x007d0081, 0x00760079, 0x006f0072, 0x0068006c, + 0x00620065, 0x005b005e, 0x00540057, 0x004d0051, + 0x0048004b, 0x00420045, 0x003d0040, 0x0038003b, + 0x00340036, 0x002f0032, 0x002b002d, 0x00280029, + 0x00240026, 0x00210022, 0x001e001f, 0x001b001d, + 0x0019001a, 0x00170018, 0x00150016, 0x00130014, + 0x00120012, 0x00100011, 0x000f000f, 0x000d000e, + 0x000c000d, 0x000b000c, 0x000a000b, 0x0009000a, + 0x00080009, 0x00070008, 0x00060007, 0x00060006, + 0x00050005, 0x00040005, 0x00040004, 0x00030003, + 0x00030003, 0x00020003, 0x00020002, 0x00020002, + 0x00010001, 0x00010001, 0x00010001, 0x00010001, + 0x00000001, 0x00000000 +}; diff --git a/test/cmocka/src/audio/eq_fir/cmocka_fir_ref.h b/test/cmocka/src/audio/eq_fir/cmocka_fir_ref.h new file mode 100644 index 000000000..fdc43bb07 --- /dev/null +++ b/test/cmocka/src/audio/eq_fir/cmocka_fir_ref.h @@ -0,0 +1,1609 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * + * Copyright(c) 2022 Intel Corporation. All rights reserved. + */ + +#define FIR_REF_2CH_LENGTH 9600 + +int32_t fir_ref_2ch[FIR_REF_2CH_LENGTH] = { + 49805LL, 42597LL, 100165LL, 84537LL, 151069LL, 125814LL, + 202511LL, 166419LL, 254482LL, 206345LL, 306974LL, 245583LL, + 359978LL, 284127LL, 413486LL, 321968LL, 467488LL, 359100LL, + 571782LL, 438112LL, 677107LL, 515744LL, 783444LL, 591981LL, + 890778LL, 666809LL, 999090LL, 740212LL, 1158168LL, 854773LL, + 1318742LL, 967226LL, 1480786LL, 1077547LL, 1644273LL, 1185717LL, + 1809176LL, 1291713LL, 2025273LL, 1438111LL, 2243284LL, 1581638LL, + 2463174LL, 1722266LL, 2734711LL, 1902563LL, 3008607LL, 2079250LL, + 3284816LL, 2252291LL, 3613097LL, 2464249LL, 3944152LL, 2671838LL, + 4277925LL, 2875016LL, 4664167LL, 3116339LL, 5053569LL, 3352515LL, + 5495872LL, 3626094LL, 5941756LL, 3893776LL, 6440954LL, 4198105LL, + 6944138LL, 4495776LL, 7501027LL, 4829325LL, 8062286LL, 5155441LL, + 8677625LL, 5516656LL, 9297697LL, 5869652LL, 9972201LL, 6256955LL, + 10651782LL, 6635243LL, 11386128LL, 7047035LL, 12125871LL, 7449003LL, + 12920692LL, 7883664LL, 13771017LL, 8350280LL, 14627458LL, 8805512LL, + 15539674LL, 9291864LL, 16508072LL, 9808589LL, 17533047LL, 10354935LL, + 18565182LL, 10887544LL, 19654105LL, 11448906LL, 20800192LL, 12038256LL, + 22003808LL, 12654826LL, 23265308LL, 13297842LL, 24585039LL, 13966524LL, + 25963335LL, 14660086LL, 27400521LL, 15377740LL, 28896912LL, 16118688LL, + 30452812LL, 16882130LL, 32118321LL, 17709858LL, 33844469LL, 18557809LL, + 35631522LL, 19425160LL, 37529539LL, 20353681LL, 39489509LL, 21299288LL, + 41561463LL, 22303734LL, 43746165LL, 23365516LL, 46044363LL, 24483120LL, + 48406978LL, 25612423LL, 50883969LL, 26795140LL, 53476030LL, 28029731LL, + 56183839LL, 29314644LL, 59057854LL, 30690916LL, 62049459LL, 32113721LL, + 65159260LL, 33581470LL, 68387841LL, 35092564LL, 71785573LL, 36687989LL, + 75303747LL, 38322877LL, 78992682LL, 40038189LL, 82803617LL, 41789029LL, + 86786820LL, 43616334LL, 90943284LL, 45517782LL, 95273974LL, 47491034LL, + 99730015LL, 49491139LL, 104411368LL, 51601579LL, 109269658LL, 53776727LL, + 114305726LL, 56014184LL, 119570184LL, 58354139LL, 125014557LL, 60750914LL, + 130689387LL, 63244663LL, 136546125LL, 65789676LL, 142585433LL, 68383478LL, + 148857747LL, 71066179LL, 155314411LL, 73792026LL, 161955980LL, 76558505LL, + 168832780LL, 79405684LL, 175896048LL, 82287776LL, 183196033LL, 85244825LL, + 190733699LL, 88273613LL, 198559772LL, 91413504LL, 206725490LL, 94703190LL, + 215232787LL, 98138087LL, 224083537LL, 101713584LL, 233329359LL, 105467633LL, + 242922753LL, 109352311LL, 252915210LL, 113405509LL, 263259097LL, 117579241LL, + 273955967LL, 121868738LL, 285007307LL, 126269208LL, 296514151LL, 130861028LL, + 308478967LL, 135638044LL, 321003753LL, 140679260LL, 334042117LL, 145934537LL, + 347596818LL, 151396939LL, 361471306LL, 156889099LL, 375715750LL, 162449215LL, + 390380814LL, 168114820LL, 405119201LL, 173582002LL, 421322856LL, 180042297LL, + 436364959LL, 185218587LL, 453864592LL, 192235495LL, 474692324LL, 201784590LL, + 487027329LL, 203683818LL, 543514182LL, 243154512LL, 582683068LL, 266624880LL, + 301558861LL, 15377733LL, 1688292395LL, 1197067573LL, 1419257460LL, 931246785LL, + 1467375848LL, 943141065LL, 1533485973LL, 969632150LL, 1555819320LL, 957492175LL, + 1586617768LL, 952406440LL, 1614118783LL, 944125022LL, 1639127087LL, 933414936LL, + 1665246434LL, 923418051LL, 1689845880LL, 911861645LL, 1714299192LL, 899957960LL, + 1738252671LL, 887410289LL, 1761747194LL, 874267365LL, 1784824257LL, 860577394LL, + 1807276942LL, 846175069LL, 1829095387LL, 831068202LL, 1850220014LL, 815222158LL, + 1870740194LL, 798730888LL, 1890646895LL, 781601992LL, 1910030779LL, 763928397LL, + 1928884092LL, 745716660LL, 1947199151LL, 726973454LL, 1964918545LL, 707662974LL, + 1982083996LL, 687835377LL, 1998638252LL, 667455099LL, 2014623204LL, 646572535LL, + 2030031577LL, 625194953LL, 2044856181LL, 603329731LL, 2059139718LL, 581026958LL, + 2072925531LL, 558336179LL, 2086207792LL, 535263786LL, 2099030555LL, 511858864LL, + 2111338890LL, 488084743LL, 2123176999LL, 463990683LL, 2134539907LL, 439582786LL, + 2145372910LL, 414824641LL, 2147483647LL, 389765766LL, 2147483647LL, 364412517LL, + 2147483647LL, 338728734LL, 2147483647LL, 312764186LL, 2147483647LL, 286482881LL, + 2147483647LL, 259934751LL, 2147483647LL, 233126564LL, 2147483647LL, 206022565LL, + 2147483647LL, 178715522LL, 2147483647LL, 151169181LL, 2147483647LL, 123390608LL, + 2147483647LL, 95386941LL, 2147483647LL, 67207984LL, 2147483647LL, 38817765LL, + 2147483647LL, 10266218LL, 2147483647LL, -18482499LL, 2147483647LL, -47378323LL, + 2147483647LL, -76414377LL, 2147483647LL, -105583727LL, 2147483647LL, -134921981LL, + 2147483647LL, -164378842LL, 2147483647LL, -193947203LL, 2147483647LL, -223619908LL, + 2147483647LL, -253347152LL, 2147483647LL, -283164928LL, 2147483647LL, -313065938LL, + 2147483647LL, -343042836LL, 2147483647LL, -373045632LL, 2147483647LL, -403110142LL, + 2147483647LL, -433186296LL, 2147483647LL, -463267237LL, 2147483647LL, -493388668LL, + 2147483647LL, -523500414LL, 2147483647LL, -553595512LL, 2147483647LL, -583666974LL, + 2147483647LL, -613707779LL, 2147483647LL, -643710884LL, 2147483647LL, -673669220LL, + 2147483647LL, -703575695LL, 2147483647LL, -733423194LL, 2147105689LL, -763204582LL, + 2136689924LL, -792870108LL, 2125789689LL, -822455853LL, 2114405332LL, -851954638LL, + 2102537304LL, -881359267LL, 2090235972LL, -910619937LL, 2077452751LL, -939772681LL, + 2064188408LL, -968810278LL, 2050493624LL, -997682901LL, 2036320132LL, -1026426565LL, + 2021718825LL, -1054991439LL, 2006641647LL, -1083413538LL, 1991139701LL, -1111643033LL, + 1975165146LL, -1139715942LL, 1958769300LL, -1167582445LL, 1941904535LL, -1195278573LL, + 1924622385LL, -1222754519LL, 1906875437LL, -1250046332LL, 1888715442LL, -1277104228LL, + 1870095205LL, -1303964280LL, 1851066692LL, -1330576732LL, 1831582929LL, -1356977688LL, + 1811696099LL, -1383117427LL, 1791409251LL, -1408989496LL, 1770675731LL, -1434630065LL, + 1749548050LL, -1459989480LL, 1728029580LL, -1485061364LL, 1706073993LL, -1509881965LL, + 1683734124LL, -1534401717LL, 1661013670LL, -1558614330LL, 1637866628LL, -1582556150LL, + 1614346157LL, -1606177711LL, 1590456280LL, -1629472830LL, 1566201123LL, -1652435368LL, + 1541584916LL, -1675059228LL, 1516562192LL, -1697380955LL, 1491186643LL, -1719351292LL, + 1465462823LL, -1740964277LL, 1439395388LL, -1762213995LL, 1412989100LL, -1783094588LL, + 1386199017LL, -1803642847LL, 1359079359LL, -1823809768LL, 1331635203LL, -1843589654LL, + 1303871729LL, -1862976864LL, 1275794218LL, -1881965820LL, 1247408052LL, -1900551009LL, + 1218718714LL, -1918726981LL, 1189731787LL, -1936488356LL, 1160452951LL, -1953829819LL, + 1130838183LL, -1970788726LL, 1100942612LL, -1987316656LL, 1070772221LL, -2003408505LL, + 1040333089LL, -2019059247LL, 1009631393LL, -2034263934LL, 978673402LL, -2049017698LL, + 947465480LL, -2063315753LL, 916014085LL, -2077153395LL, 884325765LL, -2090526008LL, + 852407161LL, -2103429061LL, 820265003LL, -2115858114LL, 787906112LL, -2127808815LL, + 755337394LL, -2139276907LL, 722565845LL, -2147483648LL, 689598545LL, -2147483648LL, + 656442658LL, -2147483648LL, 623105435LL, -2147483648LL, 589594205LL, -2147483648LL, + 555916380LL, -2147483648LL, 522079452LL, -2147483648LL, 488090990LL, -2147483648LL, + 453958640LL, -2147483648LL, 419690126LL, -2147483648LL, 385293244LL, -2147483648LL, + 350775861LL, -2147483648LL, 316145919LL, -2147483648LL, 281411427LL, -2147483648LL, + 246580462LL, -2147483648LL, 211661169LL, -2147483648LL, 176661756LL, -2147483648LL, + 141590495LL, -2147483648LL, 106455719LL, -2147483648LL, 71265822LL, -2147483648LL, + 36029253LL, -2147483648LL, 754519LL, -2147483648LL, -34549817LL, -2147483648LL, + -69875144LL, -2147483648LL, -105212798LL, -2147483648LL, -140554065LL, -2147483648LL, + -175890189LL, -2147483648LL, -211212364LL, -2147483648LL, -246511745LL, -2147483648LL, + -281779447LL, -2147483648LL, -317006544LL, -2147483648LL, -352184075LL, -2147483648LL, + -387303046LL, -2147483648LL, -422354431LL, -2147483648LL, -457329171LL, -2147483648LL, + -492218185LL, -2147483648LL, -527012362LL, -2147483648LL, -561702570LL, -2147483648LL, + -596279659LL, -2147483648LL, -630734456LL, -2147483648LL, -665057775LL, -2147483648LL, + -699240418LL, -2144831948LL, -733273172LL, -2133102132LL, -767146820LL, -2120818381LL, + -800852136LL, -2107982187LL, -834379891LL, -2094595196LL, -867720856LL, -2080659207LL, + -900865804LL, -2066176176LL, -933805511LL, -2051148219LL, -966530760LL, -2035577603LL, + -999032343LL, -2019466758LL, -1031301067LL, -2002818269LL, -1063327750LL, -1985634881LL, + -1095103230LL, -1967919499LL, -1126618365LL, -1949675184LL, -1157864034LL, -1930905160LL, + -1188831145LL, -1911612809LL, -1219510631LL, -1891801673LL, -1249893459LL, -1871475456LL, + -1279970629LL, -1850638020LL, -1309733177LL, -1829293390LL, -1339172182LL, -1807445749LL, + -1368278761LL, -1785099442LL, -1397044081LL, -1762258974LL, -1425459354LL, -1738929011LL, + -1453515845LL, -1715114378LL, -1481204873LL, -1690820060LL, -1508517814LL, -1666051202LL, + -1535446103LL, -1640813110LL, -1561981240LL, -1615111244LL, -1588114789LL, -1588951228LL, + -1613838383LL, -1562338842LL, -1639143730LL, -1535280021LL, -1664022608LL, -1507780862LL, + -1688466876LL, -1479847613LL, -1712468472LL, -1451486680LL, -1736019420LL, -1422704626LL, + -1759111828LL, -1393508164LL, -1781737894LL, -1363904161LL, -1803889912LL, -1333899640LL, + -1825560267LL, -1303501770LL, -1846741446LL, -1272717874LL, -1867426035LL, -1241555421LL, + -1887606727LL, -1210022032LL, -1907276322LL, -1178125471LL, -1926427728LL, -1145873649LL, + -1945053969LL, -1113274623LL, -1963148185LL, -1080336589LL, -1980703635LL, -1047067889LL, + -1997713699LL, -1013477001LL, -2014171885LL, -979572542LL, -2030071826LL, -945363268LL, + -2045407288LL, -910858068LL, -2060172170LL, -876065967LL, -2074360507LL, -840996117LL, + -2087966475LL, -805657803LL, -2100984390LL, -770060438LL, -2113408716LL, -734213559LL, + -2125234063LL, -698126829LL, -2136455192LL, -661810030LL, -2147067017LL, -625273066LL, + -2147483648LL, -588525959LL, -2147483648LL, -551578841LL, -2147483648LL, -514441964LL, + -2147483648LL, -477125686LL, -2147483648LL, -439640472LL, -2147483648LL, -401996896LL, + -2147483648LL, -364205633LL, -2147483648LL, -326277459LL, -2147483648LL, -288223247LL, + -2147483648LL, -250053964LL, -2147483648LL, -211780672LL, -2147483648LL, -173414519LL, + -2147483648LL, -134966742LL, -2147483648LL, -96448660LL, -2147483648LL, -57871673LL, + -2147483648LL, -19247258LL, -2147483648LL, 19413035LL, -2147483648LL, 58097582LL, + -2147483648LL, 96794693LL, -2147483648LL, 135492614LL, -2147483648LL, 174179529LL, + -2147483648LL, 212843564LL, -2147483648LL, 251472793LL, -2147483648LL, 290055233LL, + -2147483648LL, 328578862LL, -2147483648LL, 367031608LL, -2147483648LL, 405401361LL, + -2147483648LL, 443675976LL, -2147483648LL, 481843273LL, -2147483648LL, 519891044LL, + -2147483648LL, 557807057LL, -2143491658LL, 595579057LL, -2132294659LL, 633194773LL, + -2120424057LL, 670641922LL, -2107881585LL, 707908207LL, -2094669200LL, 744981332LL, + -2080789087LL, 781848994LL, -2066243658LL, 818498898LL, -2051035554LL, 854918753LL, + -2035167646LL, 891096280LL, -2018643035LL, 927019216LL, -2001465051LL, 962675317LL, + -1983637258LL, 998052364LL, -1965163448LL, 1033138167LL, -1946047650LL, 1067920567LL, + -1926294121LL, 1102387443LL, -1905907353LL, 1136526716LL, -1884892071LL, 1170326352LL, + -1863253233LL, 1203774370LL, -1840996029LL, 1236858842LL, -1818125881LL, 1269567900LL, + -1794648448LL, 1301889739LL, -1770569616LL, 1333812625LL, -1745895507LL, 1365324895LL, + -1720632473LL, 1396414965LL, -1694787098LL, 1427071335LL, -1668366195LL, 1457282587LL, + -1641376810LL, 1487037399LL, -1613826214LL, 1516324546LL, -1585721909LL, 1545132901LL, + -1557071624LL, 1573451443LL, -1527883314LL, 1601269263LL, -1498165157LL, 1628575566LL, + -1467925558LL, 1655359677LL, -1437173142LL, 1681611044LL, -1405916756LL, 1707319246LL, + -1374165466LL, 1732473994LL, -1341928556LL, 1757065139LL, -1309215526LL, 1781082671LL, + -1276036091LL, 1804516733LL, -1242400176LL, 1827357616LL, -1208317919LL, 1849595768LL, + -1173799664LL, 1871221803LL, -1138855963LL, 1892226494LL, -1103497569LL, 1912600789LL, + -1067735439LL, 1932335810LL, -1031580726LL, 1951422859LL, -995044781LL, 1969853421LL, + -958139148LL, 1987619171LL, -920875561LL, 2004711974LL, -883265940LL, 2021123898LL, + -845322394LL, 2036847205LL, -807057209LL, 2051874370LL, -768482852LL, 2066198074LL, + -729611963LL, 2079811213LL, -690457356LL, 2092706903LL, -651032009LL, 2104878482LL, + -611349070LL, 2116319515LL, -571421842LL, 2127023800LL, -531263788LL, 2136985367LL, + -490888525LL, 2146198490LL, -450309816LL, 2147483647LL, -409541571LL, 2147483647LL, + -368597840LL, 2147483647LL, -327492809LL, 2147483647LL, -286240798LL, 2147483647LL, + -244856251LL, 2147483647LL, -203353740LL, 2147483647LL, -161747950LL, 2147483647LL, + -120053683LL, 2147483647LL, -78285850LL, 2147483647LL, -36459463LL, 2147483647LL, + 5410364LL, 2147483647LL, 47308424LL, 2147483647LL, 89219424LL, 2147483647LL, + 131127985LL, 2147483647LL, 173018649LL, 2147483647LL, 214875890LL, 2147483647LL, + 256684110LL, 2147483647LL, 298427653LL, 2147483647LL, 340090806LL, 2147483647LL, + 381657806LL, 2147483647LL, 423112846LL, 2147483647LL, 464440081LL, 2142219254LL, + 505623633LL, 2132435162LL, 546647598LL, 2121847243LL, 587496052LL, 2110457141LL, + 628153057LL, 2098266812LL, 668602667LL, 2085278532LL, 708828935LL, 2071494897LL, + 748815918LL, 2056918826LL, 788547685LL, 2041553557LL, 828008323LL, 2025402656LL, + 867181942LL, 2008470011LL, 906052684LL, 1990759835LL, 944604728LL, 1972276668LL, + 982822297LL, 1953025376LL, 1020689664LL, 1933011150LL, 1058191163LL, 1912239510LL, + 1095311187LL, 1890716305LL, 1132034205LL, 1868447707LL, 1168344762LL, 1845440218LL, + 1204227487LL, 1821700666LL, 1239667102LL, 1797236205LL, 1274648428LL, 1772054317LL, + 1309156391LL, 1746162807LL, 1343176030LL, 1719569805LL, 1376692504LL, 1692283764LL, + 1409691100LL, 1664313458LL, 1442157234LL, 1635667984LL, 1474076470LL, 1606356759LL, + 1505434513LL, 1576389513LL, 1536217228LL, 1545776297LL, 1566410640LL, 1514527474LL, + 1596000941LL, 1482653719LL, 1624974503LL, 1450166017LL, 1653317877LL, 1417075660LL, + 1681017808LL, 1383394247LL, 1708061236LL, 1349133677LL, 1734435304LL, 1314306148LL, + 1760127367LL, 1278924156LL, 1785124999LL, 1243000490LL, 1809415996LL, 1206548227LL, + 1832988389LL, 1169580734LL, 1855830445LL, 1132111656LL, 1877930676LL, 1094154921LL, + 1899277848LL, 1055724730LL, 1919860983LL, 1016835556LL, 1939669371LL, 977502137LL, + 1958692571LL, 937739473LL, 1976920422LL, 897562824LL, 1994343046LL, 856987699LL, + 2010950859LL, 816029859LL, 2026734572LL, 774705305LL, 2041685198LL, 733030277LL, + 2055794064LL, 691021244LL, 2069052808LL, 648694906LL, 2081453395LL, 606068180LL, + 2092988114LL, 563158201LL, 2103649588LL, 519982311LL, 2113430779LL, 476558055LL, + 2122324994LL, 432903175LL, 2130325891LL, 389035604LL, 2137427475LL, 344973456LL, + 2143624138LL, 300735023LL, 2147483647LL, 256338768LL, 2147483647LL, 211803314LL, + 2147483647LL, 167147441LL, 2147483647LL, 122390077LL, 2147483647LL, 77550290LL, + 2147483647LL, 32647284LL, 2147483647LL, -12299615LL, 2147483647LL, -57270964LL, + 2147483647LL, -102247208LL, 2147483647LL, -147208690LL, 2147483647LL, -192135663LL, + 2145864842LL, -237008295LL, 2139958256LL, -281806675LL, 2133108471LL, -326510826LL, + 2125315797LL, -371100712LL, 2116581018LL, -415556248LL, 2106905292LL, -459857306LL, + 2096290240LL, -503983728LL, 2084737906LL, -547915329LL, 2072250771LL, -591631916LL, + 2058831754LL, -635113287LL, 2044484214LL, -678339247LL, 2029211952LL, -721289615LL, + 2013019210LL, -763944235LL, 1995910675LL, -806282984LL, 1977891479LL, -848285782LL, + 1958967201LL, -889932603LL, 1939143864LL, -931203483LL, 1918427940LL, -972078534LL, + 1896826347LL, -1012537949LL, 1874346448LL, -1052562013LL, 1850996056LL, -1092131117LL, + 1826783427LL, -1131225763LL, 1801717264LL, -1169826578LL, 1775806713LL, -1207914322LL, + 1749061365LL, -1245469901LL, 1721491250LL, -1282474371LL, 1693106840LL, -1318908956LL, + 1663919046LL, -1354755054LL, 1633939211LL, -1389994248LL, 1603179117LL, -1424608316LL, + 1571650972LL, -1458579242LL, 1539367415LL, -1491889227LL, 1506341510LL, -1524520696LL, + 1472586741LL, -1556456312LL, 1438117011LL, -1587678986LL, 1402946638LL, -1618171884LL, + 1367090349LL, -1647918439LL, 1330563276LL, -1676902363LL, 1293380956LL, -1705107654LL, + 1255559318LL, -1732518608LL, 1217114685LL, -1759119828LL, 1178063765LL, -1784896235LL, + 1138423646LL, -1809833076LL, 1098211792LL, -1833915936LL, 1057446035LL, -1857130745LL, + 1016144569LL, -1879463791LL, 974325943LL, -1900901727LL, 932009055LL, -1921431579LL, + 889213146LL, -1941040761LL, 845957791LL, -1959717077LL, 802262891LL, -1977448735LL, + 758148666LL, -1994224354LL, 713635648LL, -2010032974LL, 668744673LL, -2024864063LL, + 623496867LL, -2038707525LL, 577913646LL, -2051553712LL, 532016701LL, -2063393429LL, + 485827990LL, -2074217943LL, 439369729LL, -2084018989LL, 392664381LL, -2092788781LL, + 345734651LL, -2100520018LL, 298603468LL, -2107205889LL, 251293982LL, -2112840086LL, + 203829548LL, -2117416802LL, 156233720LL, -2120930748LL, 108530236LL, -2123377151LL, + 60743008LL, -2124751763LL, 12896114LL, -2125050870LL, -34986219LL, -2124271294LL, + -82879623LL, -2122410400LL, -130759604LL, -2119466100LL, -178601550LL, -2115436861LL, + -226380745LL, -2110321707LL, -274072384LL, -2104120225LL, -321651583LL, -2096832568LL, + -369093392LL, -2088459460LL, -416372807LL, -2079002201LL, -463464787LL, -2068462665LL, + -510344262LL, -2056843312LL, -556986151LL, -2044147183LL, -603365373LL, -2030377906LL, + -649456861LL, -2015539697LL, -695235574LL, -1999637364LL, -740676516LL, -1982676305LL, + -785754744LL, -1964662515LL, -830445387LL, -1945602580LL, -874723656LL, -1925503682LL, + -918564862LL, -1904373602LL, -961944426LL, -1882220711LL, -1004837898LL, -1859053978LL, + -1047220968LL, -1834882966LL, -1089069484LL, -1809717832LL, -1130359461LL, -1783569324LL, + -1171067101LL, -1756448780LL, -1211168807LL, -1728368127LL, -1250641192LL, -1699339878LL, + -1289461102LL, -1669377127LL, -1327605625LL, -1638493550LL, -1365052106LL, -1606703397LL, + -1401778164LL, -1574021491LL, -1437761706LL, -1540463223LL, -1472980940LL, -1506044549LL, + -1507414391LL, -1470781980LL, -1541040915LL, -1434692582LL, -1573839712LL, -1397793966LL, + -1605790344LL, -1360104288LL, -1636872746LL, -1321642233LL, -1667067242LL, -1282427018LL, + -1696354557LL, -1242478378LL, -1724715835LL, -1201816561LL, -1752132646LL, -1160462319LL, + -1778587009LL, -1118436901LL, -1804061397LL, -1075762043LL, -1828538756LL, -1032459960LL, + -1852002515LL, -988553334LL, -1874436602LL, -944065307LL, -1895825454LL, -899019470LL, + -1916154033LL, -853439849LL, -1935407835LL, -807350901LL, -1953572906LL, -760777496LL, + -1970635850LL, -713744909LL, -1986583847LL, -666278805LL, -2001404658LL, -618405231LL, + -2015086640LL, -570150598LL, -2027618758LL, -521541674LL, -2038990592LL, -472605564LL, + -2049192353LL, -423369699LL, -2058214888LL, -373861826LL, -2066049695LL, -324109986LL, + -2072688929LL, -274142505LL, -2078125412LL, -223987977LL, -2082352645LL, -173675248LL, + -2085364813LL, -123233400LL, -2087156796LL, -72691739LL, -2087724175LL, -22079775LL, + -2087063243LL, 28572797LL, -2085171007LL, 79236107LL, -2082045200LL, 129880130LL, + -2077684287LL, 180474706LL, -2072087467LL, 230989556LL, -2065254684LL, 281394296LL, + -2057186628LL, 331658461LL, -2047884744LL, 381751518LL, -2037351232LL, 431642889LL, + -2025589054LL, 481301967LL, -2012601938LL, 530698135LL, -1998394380LL, 579800785LL, + -1982971645LL, 628579337LL, -1966339772LL, 677003263LL, -1948505575LL, 725042096LL, + -1929476644LL, 772665462LL, -1909261345LL, 819843089LL, -1887868820LL, 866544835LL, + -1865308989LL, 912740704LL, -1841592548LL, 958400866LL, -1816730967LL, 1003495678LL, + -1790736489LL, 1047995705LL, -1763622126LL, 1091871739LL, -1735401661LL, 1135094818LL, + -1706089638LL, 1177636251LL, -1675701362LL, 1219467633LL, -1644252896LL, 1260560870LL, + -1611761052LL, 1300888195LL, -1578243387LL, 1340422189LL, -1543718200LL, 1379135807LL, + -1508204519LL, 1417002391LL, -1471722102LL, 1453995691LL, -1434291420LL, 1490089892LL, + -1395933657LL, 1525259623LL, -1356670697LL, 1559479987LL, -1316525115LL, 1592726574LL, + -1275520167LL, 1624975483LL, -1233679780LL, 1656203344LL, -1191028542LL, 1686387331LL, + -1147591689LL, 1715505185LL, -1103395093LL, 1743535236LL, -1058465249LL, 1770456411LL, + -1012829262LL, 1796248266LL, -966514835LL, 1820890992LL, -919550252LL, 1844365441LL, + -871964366LL, 1866653137LL, -823786580LL, 1887736300LL, -775046835LL, 1907597859LL, + -725775590LL, 1926221469LL, -676003808LL, 1943591527LL, -625762938LL, 1959693190LL, + -575084896LL, 1974512385LL, -524002047LL, 1988035828LL, -472547186LL, 2000251046LL, + -420753520LL, 2011146354LL, -368654646LL, 2020710975LL, -316284533LL, 2028934840LL, + -263677499LL, 2035808859LL, -210868192LL, 2041324939LL, -157891565LL, 2045474858LL, + -104782860LL, 2048253636LL, -51577580LL, 2049658843LL, 1688534LL, 2049655780LL, + 54979520LL, 2048310531LL, 108259226LL, 2045550461LL, 161491329LL, 2041403742LL, + 214639360LL, 2035866305LL, 267666733LL, 2028936689LL, 320536762LL, 2020616743LL, + 373212694LL, 2010908275LL, 425657729LL, 1999814200LL, 477835048LL, 1987338529LL, + 529707840LL, 1973486123LL, 581239326LL, 1958262907LL, 632392787LL, 1941675770LL, + 683131591LL, 1923732596LL, 733419216LL, 1904442268LL, 783219284LL, 1883814659LL, + 832495582LL, 1861860637LL, 881212092LL, 1838592064LL, 929333017LL, 1814021796LL, + 976822810LL, 1788163677LL, 1023646202LL, 1761032541LL, 1069768227LL, 1732644203LL, + 1115154252LL, 1703015459LL, 1159770004LL, 1672164073LL, 1203581595LL, 1640108783LL, + 1246555555LL, 1606869282LL, 1288658856LL, 1572466218LL, 1329858938LL, 1536921182LL, + 1370123741LL, 1500256700LL, 1409421726LL, 1462496224LL, 1447721910LL, 1423664119LL, + 1484993884LL, 1383785653LL, 1521207848LL, 1342886983LL, 1556334631LL, 1300995143LL, + 1590345723LL, 1258138030LL, 1623213293LL, 1214344388LL, 1654910226LL, 1169643794LL, + 1685410136LL, 1124066641LL, 1714687402LL, 1077644120LL, 1742717185LL, 1030408201LL, + 1769475457LL, 982391622LL, 1794939022LL, 933627855LL, 1819085540LL, 884151103LL, + 1841893553LL, 833996264LL, 1863342504LL, 783198919LL, 1883412760LL, 731795305LL, + 1902085636LL, 679822294LL, 1919343411LL, 627317369LL, 1935169354LL, 574318594LL, + 1949547740LL, 520864601LL, 1962463871LL, 466994550LL, 1973904096LL, 412748113LL, + 1983855824LL, 358165439LL, 1992307546LL, 303287134LL, 1999248852LL, 248154224LL, + 2004670441LL, 192808135LL, 2008564144LL, 137290654LL, 2010922932LL, 81643906LL, + 2011740933LL, 25910320LL, 2011013443LL, -29867402LL, 2008736940LL, -85646317LL, + 2004909093LL, -141383271LL, 1999528773LL, -197034937LL, 1992596062LL, -252557842LL, + 1984112262LL, -307908404LL, 1974079905LL, -363042967LL, 1962502753LL, -417917832LL, + 1949385810LL, -472489295LL, 1934735324LL, -526713682LL, 1918558790LL, -580547380LL, + 1900864956LL, -633946879LL, 1881663821LL, -686868803LL, 1860966637LL, -739269949LL, + 1838785909LL, -791107321LL, 1815135395LL, -842338168LL, 1790030099LL, -892920022LL, + 1763486274LL, -942810730LL, 1735521412LL, -991968497LL, 1706154241LL, -1040351917LL, + 1675404716LL, -1087920013LL, 1643294015LL, -1134632275LL, 1609844526LL, -1180448693LL, + 1575079841LL, -1225329796LL, 1539024741LL, -1269236689LL, 1501705185LL, -1312131088LL, + 1463148297LL, -1353975356LL, 1423382354LL, -1394732542LL, 1382436764LL, -1434366412LL, + 1340342057LL, -1472841489LL, 1297129860LL, -1510123084LL, 1252832885LL, -1546177336LL, + 1207484901LL, -1580971239LL, 1161120720LL, -1614472684LL, 1113776173LL, -1646650486LL, + 1065488084LL, -1677474422LL, 1016294246LL, -1706915258LL, 966233400LL, -1734944789LL, + 915345202LL, -1761535861LL, 863670203LL, -1786662407LL, 811249811LL, -1810299477LL, + 758126270LL, -1832423264LL, 704342625LL, -1853011140LL, 649942692LL, -1872041673LL, + 594971024LL, -1889494663LL, 539472877LL, -1905351163LL, 483494178LL, -1919593508LL, + 427081490LL, -1932205334LL, 370281972LL, -1943171610LL, 313143344LL, -1952478651LL, + 255713849LL, -1960114145LL, 198042217LL, -1966067174LL, 140177618LL, -1970328227LL, + 82169631LL, -1972889229LL, 24068195LL, -1973743548LL, -34076427LL, -1972886015LL, + -92213695LL, -1970312940LL, -150292832LL, -1966022123LL, -208262869LL, -1960012871LL, + -266072688LL, -1952286003LL, -323671068LL, -1942843863LL, -381006732LL, -1931690329LL, + -438028388LL, -1918830819LL, -494684779LL, -1904272300LL, -550924731LL, -1888023286LL, + -606697194LL, -1870093847LL, -661951295LL, -1850495608LL, -716636382LL, -1829241753LL, + -770702075LL, -1806347016LL, -824098311LL, -1781827688LL, -876775393LL, -1755701604LL, + -928684039LL, -1727988143LL, -979775430LL, -1698708222LL, -1030001256LL, -1667884282LL, + -1079313769LL, -1635540281LL, -1127665824LL, -1601701683LL, -1175010937LL, -1566395445LL, + -1221303321LL, -1529649999LL, -1266497944LL, -1491495241LL, -1310550571LL, -1451962508LL, + -1353417809LL, -1411084563LL, -1395057161LL, -1368895571LL, -1435427063LL, -1325431079LL, + -1474486939LL, -1280727991LL, -1512197238LL, -1234824542LL, -1548519484LL, -1187760274LL, + -1583416316LL, -1139576002LL, -1616851536LL, -1090313791LL, -1648790148LL, -1040016919LL, + -1679198399LL, -988729848LL, -1708043824LL, -936498186LL, -1735295282LL, -883368655LL, + -1760922999LL, -829389052LL, -1784898602LL, -774608209LL, -1807195158LL, -719075956LL, + -1827787211LL, -662843080LL, -1846650818LL, -605961279LL, -1863763578LL, -548483119LL, + -1879104668LL, -490461992LL, -1892654875LL, -431952068LL, -1904396625LL, -373008246LL, + -1914314009LL, -313686105LL, -1922392815LL, -254041859LL, -1928620550LL, -194132300LL, + -1932986466LL, -134014749LL, -1935481582LL, -73747004LL, -1936098706LL, -13387283LL, + -1934832454LL, 47005826LL, -1931679267LL, 107373427LL, -1926637430LL, 167656367LL, + -1919707083LL, 227795296LL, -1910890236LL, 287730726LL, -1900190781LL, 347403087LL, + -1887614496LL, 406752786LL, -1873169061LL, 465720272LL, -1856864053LL, 524246090LL, + -1838710958LL, 582270945LL, -1818723170LL, 639735763LL, -1796915987LL, 696581755LL, + -1773306614LL, 752750472LL, -1747914156LL, 808183874LL, -1720759611LL, 862824388LL, + -1691865865LL, 916614973LL, -1661257677LL, 969499181LL, -1628961669LL, 1021421218LL, + -1595006312LL, 1072326007LL, -1559421908LL, 1122159252LL, -1522240572LL, 1170867496LL, + -1483496211LL, 1218398185LL, -1443224502LL, 1264699727LL, -1401462865LL, 1309721557LL, + -1358250438LL, 1353414188LL, -1313628048LL, 1395729281LL, -1267638178LL, 1436619694LL, + -1220324935LL, 1476039548LL, -1171734016LL, 1513944278LL, -1121912667LL, 1550290693LL, + -1070909648LL, 1585037028LL, -1018775189LL, 1618143002LL, -965560948LL, 1649569869LL, + -911319966LL, 1679280468LL, -856106618LL, 1707239277LL, -799976567LL, 1733412462LL, + -742986711LL, 1757767923LL, -685195132LL, 1780275340LL, -626661040LL, 1800906221LL, + -567444716LL, 1819633944LL, -507607460LL, 1836433799LL, -447211524LL, 1851283025LL, + -386320056LL, 1864160854LL, -324997036LL, 1875048542LL, -263307210LL, 1883929406LL, + -201316029LL, 1890788856LL, -139089579LL, 1895614427LL, -76694511LL, 1898395805LL, + -14197977LL, 1899124852LL, 48332445LL, 1897795636LL, 110828821LL, 1894404446LL, + 173222936LL, 1888949817LL, 235446363LL, 1881432541LL, 297430543LL, 1871855689LL, + 359106857LL, 1860224617LL, 420406703LL, 1846546980LL, 481261574LL, 1830832736LL, + 541603136LL, 1813094155LL, 601363301LL, 1793345817LL, 660474314LL, 1771604612LL, + 718868824LL, 1747889739LL, 776479967LL, 1722222702LL, 833241444LL, 1694627293LL, + 889087600LL, 1665129592LL, 943953507LL, 1633757944LL, 997775035LL, 1600542948LL, + 1050488941LL, 1565517433LL, 1102032937LL, 1528716441LL, 1152345777LL, 1490177197LL, + 1201367331LL, 1449939084LL, 1249038663LL, 1408043611LL, 1295302104LL, 1364534382LL, + 1340101332LL, 1319457058LL, 1383381447LL, 1272859317LL, 1425089039LL, 1224790815LL, + 1465172266LL, 1175303140LL, 1503580927LL, 1124449767LL, 1540266522LL, 1072286005LL, + 1575182333LL, 1018868949LL, 1608283485LL, 964257419LL, 1639527009LL, 908511911LL, + 1668871914LL, 851694528LL, 1696279242LL, 793868926LL, 1721712131LL, 735100241LL, + 1745135871LL, 675455029LL, 1766517968LL, 615001191LL, 1785828185LL, 553807905LL, + 1803038606LL, 491945549LL, 1818123678LL, 429485626LL, 1831060263LL, 366500687LL, + 1841827677LL, 303064250LL, 1850407738LL, 239250716LL, 1856784798LL, 175135287LL, + 1860945788LL, 110793881LL, 1862880243LL, 46303042LL, 1862580340LL, -18260146LL, + 1860040920LL, -82818151LL, 1855259519LL, -147293085LL, 1848236380LL, -211606797LL, + 1838974482LL, -275680965LL, 1827479547LL, -339437196LL, 1813760057LL, -402797116LL, + 1797827260LL, -465682472LL, 1779695174LL, -528015230LL, 1759380593LL, -589717667LL, + 1736903078LL, -650712478LL, 1712284962LL, -710922872LL, 1685551330LL, -770272670LL, + 1656730013LL, -828686405LL, 1625851572LL, -886089424LL, 1592949275LL, -942407987LL, + 1558059075LL, -997569365LL, 1521219587LL, -1051501936LL, 1482472048LL, -1104135292LL, + 1441860295LL, -1155400327LL, 1399430717LL, -1205229340LL, 1355232215LL, -1253556128LL, + 1309316164LL, -1300316084LL, 1261736355LL, -1345446286LL, 1212548947LL, -1388885595LL, + 1161812413LL, -1430574738LL, 1109587475LL, -1470456408LL, 1055937047LL, -1508475341LL, + 1000926163LL, -1544578406LL, 944621912LL, -1578714693LL, 887093362LL, -1610835584LL, + 828411484LL, -1640894842LL, 768649076LL, -1668848684LL, 707880672LL, -1694655852LL, + 646182464LL, -1718277689LL, 583632212LL, -1739678206LL, 520309149LL, -1758824147LL, + 456293888LL, -1775685054LL, 391668328LL, -1790233321LL, 326515549LL, -1802444258LL, + 260919713LL, -1812296137LL, 194965959LL, -1819770245LL, 128740295LL, -1824850928LL, + 62329492LL, -1827525633LL, -4179032LL, -1827784948LL, -70697320LL, -1825622633LL, + -137136995LL, -1821035654LL, -203409373LL, -1814024203LL, -269425581LL, -1804591728LL, + -335096679LL, -1792744944LL, -400333778LL, -1778493848LL, -465048160LL, -1761851731LL, + -529151403LL, -1742835177LL, -592555503LL, -1721464069LL, -655172996LL, -1697761578LL, + -716917083LL, -1671754158LL, -777701753LL, -1643471534LL, -837441909LL, -1612946675LL, + -896053489LL, -1580215781LL, -953453590LL, -1545318246LL, -1009560594LL, -1508296634LL, + -1064294288LL, -1469196633LL, -1117575983LL, -1428067018LL, -1169328638LL, -1384959603LL, + -1219476978LL, -1339929188LL, -1267947612LL, -1293033505LL, -1314669147LL, -1244333154LL, + -1359572305LL, -1193891539LL, -1402590032LL, -1141774798LL, -1443657611LL, -1088051727LL, + -1482712770LL, -1032793701LL, -1519695784LL, -976074591LL, -1554549582LL, -917970675LL, + -1587219842LL, -858560547LL, -1617655092LL, -797925018LL, -1645806796LL, -736147016LL, + -1671629451LL, -673311485LL, -1695080676LL, -609505270LL, -1716121264LL, -544817012LL, + -1734715353LL, -479337026LL, -1750830314LL, -413157185LL, -1764437044LL, -346370796LL, + -1775510045LL, -279072473LL, -1784026474LL, -211358013LL, -1789969164LL, -143324257LL, + -1793326057LL, -75068960LL, -1794059572LL, -6690651LL, -1792223825LL, 61711502LL, + -1787753717LL, 130037840LL, -1780675917LL, 198188353LL, -1770991703LL, 266062826LL, + -1758707667LL, 333560989LL, -1743836341LL, 400582660LL, -1726393250LL, 467027903LL, + -1706397919LL, 532797170LL, -1683873864LL, 597791461LL, -1658848354LL, 661912471LL, + -1631352586LL, 725062742LL, -1601421573LL, 787145821LL, -1569094145LL, 848066406LL, + -1534412916LL, 907730505LL, -1497424235LL, 966045578LL, -1458178153LL, 1022920699LL, + -1416728364LL, 1078266697LL, -1373132151LL, 1131996305LL, -1327450323LL, 1184024312LL, + -1279747148LL, 1234267702LL, -1230090273LL, 1282645798LL, -1178550646LL, 1329080403LL, + -1125202426LL, 1373495939LL, -1070122895LL, 1415819579LL, -1013392358LL, 1455981378LL, + -955094034LL, 1493914406LL, -895313954LL, 1529554867LL, -834140840LL, 1562842225LL, + -771665989LL, 1593719316LL, -707983144LL, 1622132466LL, -643188365LL, 1648031595LL, + -577379896LL, 1671370322LL, -510658018LL, 1692106061LL, -443124913LL, 1710200118LL, + -374884511LL, 1725617777LL, -306042334LL, 1738328382LL, -236705344LL, 1748305414LL, + -166981781LL, 1755526561LL, -96980997LL, 1759973781LL, -26813290LL, 1761633365LL, + 43410268LL, 1760495982LL, 113578001LL, 1756556728LL, 183577810LL, 1749815165LL, + 253297346LL, 1740275347LL, 322624194LL, 1727945849LL, 391446053LL, 1712839784LL, + 459650920LL, 1694974807LL, 527127274LL, 1674373125LL, 593764262LL, 1651061485LL, + 659451885LL, 1625071167LL, 724081183LL, 1596437957LL, 787544424LL, 1565202126LL, + 849735287LL, 1531408388LL, 910549048LL, 1495105861LL, 969882763LL, 1456348015LL, + 1027635455LL, 1415192610LL, 1083708291LL, 1371701631LL, 1138004761LL, 1325941217LL, + 1190430860LL, 1277981573LL, 1240895254LL, 1227896883LL, 1289309460LL, 1175765216LL, + 1335588009LL, 1121668415LL, 1379648612LL, 1065691989LL, 1421412317LL, 1007924994LL, + 1460803673LL, 948459905LL, 1497750874LL, 887392482LL, 1532185910LL, 824821632LL, + 1564044706LL, 760849261LL, 1593267262LL, 695580119LL, 1619797780LL, 629121645LL, + 1643584787LL, 561583794LL, 1664581258LL, 493078874LL, 1682744723LL, 423721360LL, + 1698037372LL, 353627718LL, 1710426153LL, 282916215LL, 1719882862LL, 211706726LL, + 1726384225LL, 140120536LL, 1729911967LL, 68280143LL, 1730452887LL, -3690955LL, + 1727998909LL, -75668460LL, 1722547133LL, -147527492LL, 1714099875LL, -219142804LL, + 1702664700LL, -290388998LL, 1688254443LL, -361140744LL, 1670887220LL, -431273005LL, + 1650586437LL, -500661258LL, 1627380781LL, -569181718LL, 1601304207LL, -636711566LL, + 1572395910LL, -703129173LL, 1540700294LL, -768314321LL, 1506266928LL, -832148437LL, + 1469150489LL, -894514808LL, 1429410703LL, -955298807LL, 1387112269LL, -1014388115LL, + 1342324775LL, -1071672938LL, 1295122610LL, -1127046222LL, 1245584856LL, -1180403867LL, + 1193795181LL, -1231644938LL, 1139841715LL, -1280671865LL, 1083816921LL, -1327390651LL, + 1025817456LL, -1371711062LL, 965944019LL, -1413546821LL, 904301197LL, -1452815796LL, + 840997300LL, -1489440173LL, 776144181LL, -1523346634LL, 709857057LL, -1554466523LL, + 642254321LL, -1582736003LL, 573457338LL, -1608096207LL, 503590242LL, -1630493384LL, + 432779726LL, -1649879034LL, 361154816LL, -1666210030LL, 288846654LL, -1679448741LL, + 215988258LL, -1689563136LL, 142714288LL, -1696526887LL, 69160804LL, -1700319452LL, + -4534984LL, -1700926156LL, -78234964LL, -1698338260LL, -151800382LL, -1692553016LL, + -225092102LL, -1683573714LL, -297970866LL, -1671409714LL, -370297557LL, -1656076477LL, + -441933476LL, -1637595568LL, -512740598LL, -1615994661LL, -582581852LL, -1591307527LL, + -651321391LL, -1563574010LL, -718824853LL, -1532839992LL, -784959645LL, -1499157344LL, + -849595202LL, -1462583865LL, -912603261LL, -1423183216LL, -973858122LL, -1381024829LL, + -1033236914LL, -1336183814LL, -1090619853LL, -1288740849LL, -1145890499LL, -1238782062LL, + -1198936009LL, -1186398899LL, -1249647380LL, -1131687977LL, -1297919694LL, -1074750929LL, + -1343652351LL, -1015694241LL, -1386749300LL, -954629068LL, -1427119260LL, -891671052LL, + -1464675934LL, -826940115LL, -1499338216LL, -760560252LL, -1531030386LL, -692659314LL, + -1559682302LL, -623368770LL, -1585229580LL, -552823476LL, -1607613755LL, -481161420LL, + -1626782451LL, -408523471LL, -1642689516LL, -335053105LL, -1655295170LL, -260896143LL, + -1664566120LL, -186200460LL, -1670475674LL, -111115705LL, -1673003847LL, -35793008LL, + -1672137437LL, 39615327LL, -1667870108LL, 114956114LL, -1660202442LL, 190075605LL, + -1649141991LL, 264819796LL, -1634703306LL, 339034742LL, -1616907952LL, 412566883LL, + -1595784520LL, 485263357LL, -1571368605LL, 556972325LL, -1543702785LL, 627543295LL, + -1512836581LL, 696827444LL, -1478826398LL, 764677941LL, -1441735455LL, 830950267LL, + -1401633698LL, 895502534LL, -1358597699LL, 958195805LL, -1312710541LL, 1018894402LL, + -1264061687LL, 1077466218LL, -1212746829LL, 1133783020LL, -1158867735LL, 1187720750LL, + -1102532068LL, 1239159811LL, -1043853199LL, 1287985362LL, -982950007LL, 1334087586LL, + -919946654LL, 1377361966LL, -854972362LL, 1417709544LL, -788161166LL, 1455037168LL, + -719651660LL, 1489257739LL, -649586726LL, 1520290433LL, -578113257LL, 1548060926LL, + -505381863LL, 1572501593LL, -431546572LL, 1593551706LL, -356764516LL, 1611157610LL, + -281195606LL, 1625272890LL, -205002207LL, 1635858521LL, -128348795LL, 1642883006LL, + -51401610LL, 1646322493LL, 25671698LL, 1646160884LL, 102702428LL, 1642389920LL, + 179521195LL, 1635009254LL, 255958304LL, 1624026507LL, 331844118LL, 1609457302LL, + 407009445LL, 1591325289LL, 481285909LL, 1569662143LL, 554506341LL, 1544507548LL, + 626505157LL, 1515909164LL, 697118742LL, 1483922576LL, 766185833LL, 1448611219LL, + 833547896LL, 1410046292LL, 899049506LL, 1368306646LL, 962538722LL, 1323478663LL, + 1023867449LL, 1275656106LL, 1082891809LL, 1224939960LL, 1139472494LL, 1171438248LL, + 1193475119LL, 1115265832LL, 1244770557LL, 1056544201LL, 1293235279LL, 995401229LL, + 1338751673LL, 931970934LL, 1381208355LL, 866393204LL, 1420500471LL, 798813515LL, + 1456529983LL, 729382633LL, 1489205945LL, 658256302LL, 1518444759LL, 585594911LL, + 1544170427LL, 511563155LL, 1566314774LL, 436329680LL, 1584817663LL, 360066713LL, + 1599627196LL, 282949681LL, 1610699883LL, 205156824LL, 1618000812LL, 126868793LL, + 1621503781LL, 48268236LL, 1621191428LL, -30460618LL, 1617055327LL, -109132383LL, + 1609096070LL, -187560955LL, 1597323329LL, -265559946LL, 1581755892LL, -342943129LL, + 1562421687LL, -419524886LL, 1539357768LL, -495120654LL, 1512610295LL, -569547381LL, + 1482234484LL, -642623975LL, 1448294533LL, -714171752LL, 1410863530LL, -784014891LL, + 1370023338LL, -851980875LL, 1325864453LL, -917900937LL, 1278485843LL, -981610493LL, + 1227994767LL, -1042949576LL, 1174506564LL, -1101763257LL, 1118144433LL, -1157902059LL, + 1059039175LL, -1211222366LL, 997328931LL, -1261586809LL, 933158886LL, -1308864658LL, + 866680960LL, -1352932182LL, 798053476LL, -1393673008LL, 727440811LL, -1430978461LL, + 655013029LL, -1464747887LL, 580945494LL, -1494888955LL, 505418469LL, -1521317953LL, + 428616696LL, -1543960050LL, 350728964LL, -1562749548LL, 271947658LL, -1577630107LL, + 192468304LL, -1588554958LL, 112489089LL, -1595487080LL, 32210384LL, -1598399361LL, + -48165757LL, -1597274741LL, -128436095LL, -1592106317LL, -208396718LL, -1582897435LL, + -287843560LL, -1569661749LL, -366572919LL, -1552423258LL, -444381986LL, -1531216316LL, + -521069372LL, -1506085611LL, -596435635LL, -1477086125LL, -670283816LL, -1444283060LL, + -742419956LL, -1407751739LL, -812653630LL, -1367577480LL, -880798461LL, -1323855444LL, + -946672637LL, -1276690452LL, -1010099414LL, -1226196778LL, -1070907619LL, -1172497916LL, + -1128932133LL, -1115726316LL, -1184014369LL, -1056023099LL, -1236002736LL, -993537745LL, + -1284753086LL, -928427753LL, -1330129146LL, -860858281LL, -1372002935LL, -791001757LL, + -1410255166LL, -719037474LL, -1444775603LL, -645151157LL, -1475463477LL, -569534512LL, + -1502227702LL, -492384749LL, -1524987327LL, -413904099LL, -1543671834LL, -334299297LL, + -1558220750LL, -253781059LL, -1568585780LL, -172563538LL, -1574730619LL, -90863771LL, + -1576611510LL, -8901107LL, -1574252330LL, 73103373LL, -1567609814LL, 154927446LL, + -1556708541LL, 236348347LL, -1541566056LL, 317143374LL, -1522212522LL, 397090502LL, + -1498691104LL, 475968995LL, -1471056043LL, 553560025LL, -1439373226LL, 629647288LL, + -1403720077LL, 704017623LL, -1364185282LL, 776461622LL, -1320868734LL, 846774239LL, + -1273881277LL, 914755391LL, -1223344489LL, 980210552LL, -1169390412LL, 1042951333LL, + -1112161255LL, 1102796056LL, -1051809062LL, 1159570309LL, -988495352LL, 1213107485LL, + -922390732LL, 1263249312LL, -853674471LL, 1309846353LL, -782534056LL, 1352758490LL, + -709164713LL, 1391855393LL, -633768905LL, 1427016949LL, -556555803LL, 1458133685LL, + -477740736LL, 1485107145LL, -397544612LL, 1507850257LL, -316193327LL, 1526287653LL, + -233917145LL, 1540355976LL, -150950064LL, 1550004134LL, -67529167LL, 1555193545LL, + 16106047LL, 1555898324LL, 99714340LL, 1552105452LL, 183053425LL, 1543814902LL, + 265880668LL, 1531039725LL, 347953795LL, 1513806105LL, 429031600LL, 1492153373LL, + 508874668LL, 1466133981LL, 587246086LL, 1435813437LL, 663912163LL, 1401270202LL, + 738643142LL, 1362595552LL, 811213906LL, 1319893388LL, 881404682LL, 1273280019LL, + 949001729LL, 1222883903LL, 1013798019LL, 1168845343LL, 1075593903LL, 1111316153LL, + 1134197755LL, 1050459282LL, 1189426608LL, 986448397LL, 1241106765LL, 919467443LL, + 1289074381LL, 849710150LL, 1333176031LL, 777379522LL, 1373269246LL, 702687282LL, + 1409223019LL, 625853290LL, 1440918284LL, 547104932LL, 1468248363LL, 466676477LL, + 1491119375LL, 384808409LL, 1509450612LL, 301746734LL, 1523174881LL, 217742261LL, + 1532238800LL, 133049867LL, 1536603059LL, 47927735LL, 1536242641LL, -37363417LL, + 1531146993LL, -122561127LL, 1521320167LL, -207401992LL, 1506780898LL, -291622481LL, + 1487562657LL, -374959756LL, 1463713640LL, -457152495LL, 1435296725LL, -537941725LL, + 1402389373LL, -617071645LL, 1365083483LL, -694290460LL, 1323485209LL, -769351194LL, + 1277714718LL, -842012511LL, 1227905906LL, -912039512LL, 1174206073LL, -979204527LL, + 1116775541LL, -1043287891LL, 1055787239LL, -1104078695LL, 991426234LL, -1161375523LL, + 923889225LL, -1214987162LL, 853383990LL, -1264733286LL, 780128800LL, -1310445110LL, + 704351779LL, -1351966013LL, 626290245LL, -1389152131LL, 546190003LL, -1421872907LL, + 464304604LL, -1450011611LL, 380894576LL, -1473465810LL, 296226623LL, -1492147805LL, + 210572800LL, -1505985015LL, 124209655LL, -1514920324LL, 37417361LL, -1518912373LL, + -49521190LL, -1517935802LL, -136321291LL, -1511981452LL, -222697352LL, -1501056499LL, + -308363836LL, -1485184549LL, -393036207LL, -1464405671LL, -476431882LL, -1438776381LL, + -558271190LL, -1408369562LL, -638278314LL, -1373274340LL, -716182255LL, -1333595897LL, + -791717762LL, -1289455226LL, -864626268LL, -1240988842LL, -934656807LL, -1188348420LL, + -1001566912LL, -1131700396LL, -1065123495LL, -1071225506LL, -1125103703LL, -1007118267LL, + -1181295741LL, -939586417LL, -1233499676LL, -868850301LL, -1281528198LL, -795142199LL, + -1325207348LL, -718705624LL, -1364377208LL, -639794559LL, -1398892546LL, -558672660LL, + -1428623419LL, -475612415LL, -1453455729LL, -390894267LL, -1473291722LL, -304805697LL, + -1488050447LL, -217640278LL, -1497668147LL, -129696702LL, -1502098607LL, -41277767LL, + -1501313432LL, 47310640LL, -1495302271LL, 135760598LL, -1484072981LL, 223763215LL, + -1467651723LL, 311009704LL, -1446082998LL, 397192468LL, -1419429620LL, 482006201LL, + -1387772617LL, 565148974LL, -1351211073LL, 646323333LL, -1309861904LL, 725237383LL, + -1263859559LL, 801605867LL, -1213355673LL, 875151230LL, -1158518634LL, 945604661LL, + -1099533103LL, 1012707117LL, -1036599465LL, 1076210326LL, -969933214LL, 1135877745LL, + -899764281LL, 1191485504LL, -826336309LL, 1242823297LL, -749905861LL, 1289695241LL, + -670741582LL, 1331920682LL, -589123304LL, 1369334966LL, -505341106LL, 1401790143LL, + -419694326LL, 1429155627LL, -332490525LL, 1451318797LL, -244044422LL, 1468185529LL, + -154676786LL, 1479680677LL, -64713291LL, 1485748480LL, 25516648LL, 1486352900LL, + 115681069LL, 1481477899LL, 205446676LL, 1471127631LL, 294480073LL, 1455326572LL, + 382448998LL, 1434119568LL, 469023578LL, 1407571811LL, 553877577LL, 1375768736LL, + 636689647LL, 1338815840LL, 717144566LL, 1296838430LL, 794934471LL, 1249981283LL, + 869760073LL, 1198408240LL, 941331845LL, 1142301717LL, 1009371191LL, 1081862143LL, + 1073611581LL, 1017307324LL, 1133799648LL, 948871734LL, 1189696248LL, 876805739LL, + 1241077476LL, 801374745LL, 1287735627LL, 722858290LL, 1329480111LL, 641549067LL, + 1366138302LL, 557751890LL, 1397556334LL, 471782597LL, 1423599825LL, 383966912LL, + 1444154533LL, 294639249LL, 1459126941LL, 204141472LL, 1468444768LL, 112821618LL, + 1472057394LL, 21032578LL, 1469936216LL, -70869241LL, 1462074909LL, -162525296LL, + 1448489607LL, -253576300LL, 1429218998LL, -343663626LL, 1404324329LL, -432430734LL, + 1373889319LL, -519524588LL, 1338019986LL, -604597086LL, 1296844383LL, -687306471LL, + 1250512238LL, -767318741LL, 1199194514LL, -844309031LL, 1143082870LL, -917962977LL, + 1082389038LL, -987978052LL, 1017344114LL, -1054064859LL, 948197766LL, -1115948387LL, + 875217351LL, -1173369226LL, 798686964LL, -1226084720LL, 718906399LL, -1273870065LL, + 636190047LL, -1316519365LL, 550865714LL, -1353846557LL, 463273384LL, -1385686365LL, + 373763906LL, -1411895125LL, 282697644LL, -1432351258LL, 190443055LL, -1446956706LL, + 97375234LL, -1455637337LL, 3874416LL, -1458335312LL, -89675564LL, -1455040411LL, + -182888830LL, -1445734608LL, -275379058LL, -1430447954LL, -366761073LL, -1409227711LL, + -456652469LL, -1382146433LL, -544675220LL, -1349301992LL, -630457300LL, -1310816568LL, + -713634279LL, -1266836566LL, -793850913LL, -1217532174LL, -870762707LL, -1163096749LL, + -944037439LL, -1103746213LL, -1013356660LL, -1039718274LL, -1078417135LL, -971271577LL, + -1138932245LL, -898684749LL, -1194633317LL, -822255353LL, -1245270907LL, -742298749LL, + -1290615993LL, -659146869LL, -1330461107LL, -573146911LL, -1364621375LL, -484659953LL, + -1392935471LL, -394059491LL, -1415266482LL, -301729921LL, -1431502671LL, -208064944LL, + -1441558134LL, -113465928LL, -1445373360LL, -18340217LL, -1442915672LL, 76900602LL, + -1434179559LL, 171842465LL, -1419186892LL, 266070627LL, -1397987017LL, 359171476LL, + -1370656734LL, 450734357LL, -1337300149LL, 540353400LL, -1298048409LL, 627629349LL, + -1253059308LL, 712171372LL, -1202516780LL, 793598854LL, -1146630258LL, 871543157LL, + -1085633927LL, 945649350LL, -1019785847LL, 1015577887LL, -949366974LL, 1081006233LL, + -874680052LL, 1141630429LL, -796048414LL, 1197166591LL, -713814668LL, 1247352324LL, + -628339283LL, 1291948064LL, -539999092LL, 1330738315LL, -449185692LL, 1363532795LL, + -356303773LL, 1390167486LL, -261769367LL, 1410505552LL, -166008030LL, 1424438166LL, + -69452963LL, 1431885198LL, 27456920LL, 1432795785LL, 124278967LL, 1427148773LL, + 220568798LL, 1414953017LL, 315882342LL, 1396247559LL, 409777896LL, 1371101655LL, + 501818182LL, 1339614666LL, 591572415LL, 1301915812LL, 678618347LL, 1258163778LL, + 762544299LL, 1208546181LL, 842951162LL, 1153278900LL, 919454349LL, 1092605259LL, + 991685708LL, 1026795080LL, 1059295368LL, 956143602LL, 1121953515LL, 880970264LL, + 1179352094LL, 801617369LL, 1231206422LL, 718448622LL, 1277256702LL, 631847555LL, + 1317269432LL, 542215841LL, 1351038709LL, 449971511LL, 1378387401LL, 355547066LL, + 1399168201LL, 259387511LL, 1413264544LL, 161948310LL, 1420591384LL, 63693263LL, + 1421095822LL, -34907663LL, 1414757596LL, -133380570LL, 1401589400LL, -231249885LL, + 1381637062LL, -328040665LL, 1354979549LL, -423280906LL, 1321728819LL, -516503864LL, + 1282029508LL, -607250372LL, 1236058447LL, -695071145LL, 1184024025LL, -779529045LL, + 1126165389LL, -860201324LL, 1062751477LL, -936681804LL, 994079904LL, -1008583002LL, + 920475693LL, -1075538176LL, 842289850LL, -1137203293LL, 759897806LL, -1193258898LL, + 673697723LL, -1243411881LL, 584108659LL, -1287397120LL, 491568622LL, -1324979015LL, + 396532510LL, -1355952873LL, 299469939LL, -1380146122LL, 200862984LL, -1397419517LL, + 101203835LL, -1407668063LL, 992376LL, -1410820546LL, -99266296LL, -1406844847LL, + -199064398LL, -1395739898LL, -297894026LL, -1377544395LL, -395249755LL, -1352332161LL, + -490631230LL, -1320213254LL, -583545777LL, -1281333683LL, -673510981LL, -1235874793LL, + -760057246LL, -1184052619LL, -842730309LL, -1126117019LL, -921093694LL, -1062350612LL, + -994731103LL, -993067546LL, -1063248719LL, -918612095LL, -1126277418LL, -839357072LL, + -1183474862LL, -755702091LL, -1234527489LL, -668071663LL, -1279152348LL, -576913152LL, + -1317098810LL, -482694582LL, -1348150111LL, -385902324LL, -1372124735LL, -287038659LL, + -1388877625LL, -186619232LL, -1398301208LL, -85170420LL, -1400326228LL, 16773391LL, + -1394922391LL, 118672591LL, -1382098799LL, 219985189LL, -1361904179LL, 320169690LL, + -1334426905LL, 418688002LL, -1299794801LL, 515008346LL, -1258174735LL, 608608164LL, + -1209771994LL, 698977000LL, -1154829444LL, 785619346LL, -1093626487LL, 868057429LL, + -1026477796LL, 945833932LL, -953731858LL, 1018514625LL, -875769311LL, 1085690896LL, + -793001091LL, 1146982163LL, -705866399LL, 1202038160LL, -614830489LL, 1250541071LL, + -520382294LL, 1292207507LL, -423031899LL, 1326790316LL, -323307873LL, 1354080199LL, + -221754474LL, 1373907141LL, -118928738LL, 1386141630LL, -15397477LL, 1390695665LL, + 88265816LL, 1387523541LL, 191484119LL, 1376622404LL, 293680088LL, 1358032567LL, + 394279290LL, 1331837596LL, 492713458LL, 1298164140LL, 588423732LL, 1257181526LL, + 680863885LL, 1209101108LL, 769503500LL, 1154175361LL, 853831094LL, 1092696749LL, + 933357158LL, 1024996340LL, 1007617100LL, 951442198LL, 1076174076LL, 872437538LL, + 1138621686LL, 788418676LL, 1194586520LL, 699852756LL, 1243730535LL, 607235285LL, + 1285753260LL, 511087481LL, 1320393789LL, 411953447LL, 1347432575LL, 310397186LL, + 1366692997LL, 206999469LL, 1378042687LL, 102354585LL, 1381394620LL, -2933030LL, + 1376707938LL, -108252243LL, 1363988521LL, -212988754LL, 1343289282LL, -316528675LL, + 1314710191LL, -418262136LL, 1278398018LL, -517586908LL, 1234545804LL, -613912009LL, + 1183392043LL, -706661277LL, 1125219593LL, -795276893LL, 1060354313LL, -879222824LL, + 989163426LL, -957988164LL, 912053621LL, -1031090367LL, 829468907LL, -1098078330LL, + 741888212LL, -1158535319LL, 649822757LL, -1212081717LL, 553813210LL, -1258377573LL, + 454426631LL, -1297124930LL, 352253236LL, -1328069931LL, 247902981LL, -1351004668LL, + 142002002LL, -1365768766LL, 35188920LL, -1372250704LL, -71888965LL, -1370388839LL, + -178579573LL, -1360172136LL, -284229994LL, -1341640599LL, -388190503LL, -1314885383LL, + -489818567LL, -1280048604LL, -588482870LL, -1237322819LL, -683567283LL, -1186950199LL, + -774474795LL, -1129221378LL, -860631354LL, -1064473998LL, -941489595LL, -993090941LL, + -1016532449LL, -915498266LL, -1085276586LL, -832162852LL, -1147275682LL, -743589765LL, + -1202123483LL, -650319364LL, -1249456644LL, -552924149LL, -1288957326LL, -452005387LL, + -1320355529LL, -348189512LL, -1343431139LL, -242124346LL, -1358015681LL, -134475135LL, + -1363993758LL, -25920446LL, -1361304165LL, 82852063LL, -1349940664LL, 191149968LL, + -1329952420LL, 298280480LL, -1301444073LL, 403554887LL, -1264575469LL, 506293006LL, + -1219561016LL, 605827630LL, -1166668694LL, 701508928LL, -1106218699LL, 792708773LL, + -1038581741LL, 878824972LL, -964176993LL, 959285364LL, -883469706LL, 1033551763LL, + -796968503LL, 1101123710LL, -705222355LL, 1161542020LL, -608817273LL, 1214392088LL, + -508372723LL, 1259306929LL, -404537777LL, 1295969934LL, -297987050LL, 1324117324LL, + -189416412LL, 1343540267LL, -79538527LL, 1354086657LL, 30921758LL, 1355662529LL, + 141232157LL, 1348233102LL, 250657776LL, 1331823427LL, 358466013LL, 1306518655LL, + 463931482LL, 1272463890LL, 566340940LL, 1229863643LL, 664998172LL, 1178980881LL, + 759228816LL, 1120135669LL, 848385074LL, 1053703414LL, 931850294LL, 980112715LL, + 1009043382LL, 899842834LL, 1079423012LL, 813420795LL, 1142491599LL, 721418127LL, + 1197799019LL, 624447279LL, 1244946029LL, 523157713LL, 1283587375LL, 418231710LL, + 1313434552LL, 310379909LL, 1334258200LL, 200336606LL, 1345890115LL, 88854849LL, + 1348224848LL, -23298644LL, 1341220889LL, -135348713LL, 1324901412LL, -246517088LL, + 1299354577LL, -356027795LL, 1264733378LL, -463112595LL, 1221255035LL, -567016422LL, + 1169199932LL, -667002775LL, 1108910090LL, -762359038LL, 1040787204LL, -852401669LL, + 965290228LL, -936481242LL, 882932534LL, -1013987292LL, 794278662LL, -1084352923LL, + 699940665LL, -1147059155LL, 600574090LL, -1201638967LL, 496873606LL, -1247681006LL, + 389568308LL, -1284832932LL, 279416736LL, -1312804365LL, 167201623LL, -1331369424LL, + 53724435LL, -1340368814LL, -60200289LL, -1339711453LL, -173750741LL, -1329375624LL, + -286103750LL, -1309409627LL, -396440763LL, -1279931930LL, -503953839LL, -1241130812LL, + -607851631LL, -1193263487LL, -707365292LL, -1136654712LL, -801754281LL, -1071694897LL, + -890312008LL, -998837699LL, -972371284LL, -918597138LL, -1047309535LL, -831544232LL, + -1114553723LL, -738303181LL, -1173584956LL, -639547120LL, -1223942735LL, -535993464LL, + -1265228802LL, -428398885LL, -1297110559LL, -317553943LL, -1319324033LL, -204277414LL, + -1331676345LL, -89410352LL, -1334047672LL, 26190070LL, -1326392673LL, 141656903LL, + -1308741371LL, 256119894LL, -1281199462LL, 368712050LL, -1243948063LL, 478576227LL, + -1197242872LL, 584871724LL, -1141412765LL, 686780797LL, -1076857805LL, 783515067LL, + -1004046699LL, 874321765LL, -923513696LL, 958489753LL, -835854955LL, 1035355293LL, + -741724400LL, 1104307495LL, -641829091LL, 1164793414LL, -536924137LL, 1216322742LL, + -427807187LL, 1258472061LL, -315312546LL, 1290888612LL, -200304937LL, 1313293552LL, + -83672978LL, 1325484662LL, 33677596LL, 1327338478LL, 150830907LL, 1318811828LL, + 266868055LL, 1299942752LL, 380874329LL, 1270850782LL, 491946455LL, 1231736592LL, + 599199815LL, 1182880994LL, 701775596LL, 1124643293LL, 798847793LL, 1057458996LL, + 889630021LL, 981836899LL, 973382071LL, 898355557LL, 1049416163LL, 807659161LL, + 1117102833LL, 710452854LL, 1175876408LL, 607497505LL, 1225240018LL, 499603991LL, + 1264770099LL, 387627022LL, 1294120349LL, 272458544LL, 1313025088LL, 155020785LL, + 1321301996LL, 36258989LL, 1318854203LL, -82866109LL, 1305671692LL, -201386007LL, + 1281832013LL, -318332290LL, 1247500275LL, -432744567LL, 1202928428LL, -543678406LL, + 1148453818LL, -650213223LL, 1084497022LL, -751460042LL, 1011558974LL, -846569067LL, + 930217403LL, -934737007LL, 841122588LL, -1015214072LL, 744992480LL, -1087310603LL, + 642607201LL, -1150403252LL, 534802984LL, -1203940667LL, 422465572LL, -1247448637LL, + 306523150LL, -1280534622LL, 187938841LL, -1302891648LL, 67702845LL, -1314301516LL, + -53175728LL, -1314637285LL, -173677263LL, -1303865008LL, -292780218LL, -1282044696LL, + -409469790LL, -1249330486LL, -522746615LL, -1205970012LL, -631635415LL, -1152302967LL, + -735193517LL, -1088758863LL, -832519177LL, -1015853998LL, -922759631LL, -934187646LL, + -1005118794LL, -844437499LL, -1078864548LL, -747354381LL, -1143335540LL, -643756280LL, + -1197947431LL, -534521746LL, -1242198536LL, -420582690LL, -1275674795LL, -302916656LL, + -1298054021LL, -182538614LL, -1309109387LL, -60492356LL, -1308712111LL, 62158451LL, + -1296833296LL, 184339470LL, -1273544912LL, 304975074LL, -1239019894LL, 422997835LL, + -1193531345LL, 537358028LL, -1137450842LL, 647033064LL, -1071245853LL, 751036774LL, + -995476268LL, 848428460LL, -910790076LL, 938321617LL, -817918208LL, 1019892260LL, + -717668591LL, 1092386762LL, -610919444LL, 1155129142LL, -498611888LL, 1207527712LL, + -381741905LL, 1249081032LL, -261351735LL, 1279383103LL, -138520763LL, 1298127741LL, + -14355984LL, 1305112082LL, 110017874LL, 1300239188LL, 233468481LL, 1283519698LL, + 354866207LL, 1255072516LL, 473094493LL, 1215124509LL, 587060202LL, 1164009212LL, + 695703851LL, 1102164535LL, 798009631LL, 1030129482LL, 893015120LL, 948539906LL, + 979820587LL, 858123324LL, 1057597806LL, 759692827LL, 1125598286LL, 654140139LL, + 1183160836LL, 542427871LL, 1229718381LL, 425581041LL, 1264803961LL, 304677924LL, + 1288055852LL, 180840318LL, 1299221729LL, 55223304LL, 1298161856LL, -70995405LL, + 1284851217LL, -196626431LL, 1259380600LL, -320479911LL, 1221956577LL, -441376790LL, + 1172900385LL, -558160123LL, 1112645701LL, -669706264LL, 1041735318LL, -774935848LL, + 960816745LL, -872824459LL, 870636758LL, -962412856LL, 772034936LL, -1042816688LL, + 665936252LL, -1113235559LL, 553342755LL, -1172961385LL, 435324430LL, -1221385919LL, + 313009312LL, -1258007389LL, 187572936LL, -1282436160LL, 60227226LL, -1294399346LL, + -67791082LL, -1293744339LL, -195232362LL, -1280441179LL, -320846277LL, -1254583745LL, + -443394059LL, -1216389745LL, -561660815LL, -1166199469LL, -674467696LL, -1104473330LL, + -780683837LL, -1031788186LL, -879237925LL, -948832467LL, -969129295LL, -856400150LL, + -1049438413LL, -755383614LL, -1119336664LL, -646765457LL, -1178095305LL, -531609311LL, + -1225093514LL, -411049772LL, -1259825423LL, -286281514LL, -1281906058LL, -158547683LL, + -1291076111LL, -29127706LL, -1287205493LL, 100675397LL, -1270295595LL, 229548055LL, + -1240480246LL, 356179424LL, -1198025314LL, 479274763LL, -1143326966LL, 597568774LL, + -1076908571LL, 709838762LL, -999416261LL, 814917497LL, -911613195LL, 911705609LL, + -814372557LL, 999183423LL, -708669349LL, 1076422062LL, -595571047LL, 1142593733LL, + -476227216LL, 1196981051LL, -351858160LL, 1238985307LL, -223742738LL, 1268133577LL, + -93205438LL, 1284084583LL, 38397141LL, 1286633231LL, 169690278LL, 1275713767LL, + 299295444LL, 1251401486LL, 425844789LL, 1213912985LL, 547995664LL, 1163604907LL, + 664445003LL, 1100971209LL, 773943433LL, 1026638926LL, 875308943LL, 941362496LL, + 967439966LL, 846016659LL, 1049327727LL, 741588011LL, 1120067719LL, 629165273LL, + 1178870161LL, 509928374LL, 1225069333LL, 385136445LL, 1258131656LL, 256114848LL, + 1277662419LL, 124241361LL, 1283411079LL, -9068335LL, 1275275029LL, -142375719LL, + 1253301811LL, -274234891LL, 1217689703LL, -403208254LL, 1168786663LL, -527882260LL, + 1107087633LL, -646883049LL, 1033230198LL, -758891789LL, 947988632LL, -862659572LL, + 852266388LL, -957021674LL, 747087082LL, -1040911027LL, 633584065LL, -1113370734LL, + 512988673LL, -1173565484LL, 386617276LL, -1220791728LL, 255857257LL, -1254486480LL, + 122152064LL, -1274234632LL, -13014518LL, -1279774689LL, -148134686LL, -1271002831LL, + -281693373LL, -1247975243LL, -412185246LL, -1210908664LL, -538131749LL, -1160179130LL, + -658098014LL, -1096318898LL, -770709439LL, -1020011573LL, -874667737LL, -932085466LL, + -968766268LL, -833505237LL, -1051904482LL, -725361905LL, -1123101272LL, -608861313LL, + -1181507100LL, -485311166LL, -1226414715LL, -356106773LL, -1257268347LL, -222715646LL, + -1273671230LL, -86661113LL, -1275391364LL, 50494872LL, -1262365420LL, 187169527LL, + -1234700721LL, 321777461LL, -1192675259LL, 452749092LL, -1136735713LL, 578549064LL, + -1067493484LL, 697694433LL, -985718749LL, 808772420LL, -892332602LL, 910457510LL, + -788397339LL, 1001527681LL, -675104980LL, 1080879580LL, -553764152LL, 1147542429LL, + -425785458LL, 1200690501LL, -292665495LL, 1239653991LL, -155969698LL, 1263928134LL, + -17314192LL, 1273180442LL, 121653132LL, 1267255953LL, 259272109LL, 1246180397LL, + 393890123LL, 1210161231LL, 523882030LL, 1159586485LL, 647669949LL, 1095021429LL, + 763742657LL, 1017203056LL, 870674381LL, 927032439LL, 967142719LL, 825565017LL, + 1051945484LL, 713998906LL, 1124016237LL, 593661365LL, 1182438319LL, 465993542LL, + 1226457175LL, 332533690LL, 1255490808LL, 194899017LL, 1269138215LL, 54766401LL, + 1267185666LL, -86147830LL, 1249610732LL, -226108790LL, 1216583979LL, -363384358LL, + 1168468288LL, -496266684LL, 1105815769LL, -623093584LL, 1029362291LL, -742269586LL, + 940019657LL, -852286337LL, 838865506LL, -951742114LL, 727131031LL, -1039360197LL, + 606186651LL, -1114005830LL, 477525785LL, -1174701565LL, 342746919LL, -1220640769LL, + 203534170LL, -1251199090LL, 61636570LL, -1265943725LL, -81153669LL, -1264640339LL, + -223023653LL, -1247257525LL, -362162785LL, -1213968706LL, -496785936LL, -1165151443LL, + -625156512LL, -1101384108LL, -745609124LL, -1023439948LL, -856571549LL, -932278577LL, + -956585711LL, -829034979LL, -1044327376LL, -715006139LL, -1118624311LL, -591635433LL, + -1178472634LL, -460494976LL, -1223051130LL, -323266114LL, -1251733322LL, -181718303LL, + -1264097102LL, -37686632LL, -1259931789LL, 106951731LL, -1239242457LL, 250301877LL, + -1202251476LL, 390475962LL, -1149397192LL, 525618152LL, -1081329739LL, 653929398LL, + -998904000LL, 773691683LL, -903169777LL, 883291440LL, -795359276LL, 981241791LL, + -676872025LL, 1066203319LL, -549257420LL, 1137003063LL, -414195083LL, 1192651467LL, + -273473286LL, 1232357025LL, -128965702LL, 1255538399LL, 17393227LL, 1261833825LL, + 163633968LL, 1251107626LL, 307778317LL, 1223453736LL, 447866173LL, 1179196131LL, + 581982343LL, 1118886130LL, 708282973LL, 1043296571LL, 825021280LL, 953412903LL, + 930572180LL, 850421269LL, 1023455499LL, 735693727LL, 1102357405LL, 610770760LL, + 1166149752LL, 477341296LL, 1213907044LL, 337220487LL, 1244920757LL, 192325518LL, + 1258710778LL, 44649762LL, 1255033785LL, -103764362LL, 1233888395LL, -250853493LL, + 1195516984LL, -394561984LL, 1140404107LL, -532870734LL, 1069271505LL, -663825783LL, + 983069719LL, -785566266LL, 882966405LL, -896351323LL, 770331453LL, -994585576LL, + 646719114LL, -1078842784LL, 513847322LL, -1147887336LL, 373574497LL, -1200693226LL, + 227874113LL, -1236460234LL, 78807380LL, -1254627023LL, -71505594LL, -1254880958LL, + -220915765LL, -1237164430LL, -367275829LL, -1201677589LL, -508471155LL, -1148877376LL, + -642450558LL, -1079472835LL, -767256441LL, -994416739LL, -881053874LL, -894893583LL, + -982158174LL, -782304102LL, -1069060547LL, -658246481LL, -1140451425LL, -524494496LL, + -1195241101LL, -382972882LL, -1232577337LL, -235730240LL, -1251859655LL, -84909862LL, + -1252750049LL, 67281122LL, -1235179927LL, 218603833LL, -1199353134LL, 366820522LL, + -1145744952LL, 509727738LL, -1075097067LL, 645189319LL, -988408506LL, 771168687LL, + -886922654LL, 885759977LL, -772110474LL, 987217504LL, -645650165LL, 1073983116LL, + -509403499LL, 1144710991LL, -365389164LL, 1198289471LL, -215753486LL, 1233859577LL, + -62738930LL, 1250829871LL, 91349161LL, 1248887414LL, 244177099LL, 1228004587LL, + 393418155LL, 1188441635LL, 536788098LL, 1130744845LL, 672080420LL, 1055740321LL, + 797200719LL, 964523416LL, 910199684LL, 858443918LL, 1009304169LL, 739087179LL, + 1092945847LL, 608251423LL, 1159786967LL, 467921537LL, 1208742795LL, 320239726LL, + 1239000329LL, 167473429LL, 1250032974LL, 11980981LL, 1241610884LL, -143824481LL, + 1213806756LL, -297512308LL, 1166996955LL, -446672277LL, 1101857859LL, -588952563LL, + 1019357459LL, -722097167LL, 920742271LL, -843982186LL, 807519719LL, -952650354LL, + 681436211LL, -1046343266LL, 544451207LL, -1123530763LL, 398707647LL, -1182936962LL, + 246499167LL, -1223562481LL, 90234582LL, -1244702466LL, -67599811LL, -1245960060LL, + -224479545LL, -1227255070LL, -377882286LL, -1188827607LL, -525328490LL, -1131236607LL, + -664421768LL, -1055353175LL, -792888286LL, -962348817LL, -908614558LL, -853678666LL, + -1009682998LL, -731059949LL, -1094404620LL, -596445955LL, -1161348315LL, -451995907LL, + -1209366188LL, -300041156LL, -1237614494LL, -143048236LL, -1245569770LL, 16420670LL, + -1233039839LL, 175749222LL, -1200169452LL, 332309710LL, -1147440400LL, 483506443LL, + -1075666040LL, 626819025LL, -985980239LL, 759844796LL, -879820887LL, 880339729LL, + -758908154LL, 986257055LL, -625217823LL, 1075782979LL, -480950069LL, 1147368814LL, + -328494164LL, 1199758976LL, -170389655LL, 1232014312LL, -9284630LL, 1243530296LL, + 152108264LL, 1234049756LL, 311057312LL, 1203669808LL, 464857999LL, 1152842852LL, + 610879250LL, 1082371511LL, 746608868LL, 993397547LL, 869697378LL, 887384862LL, + 977999500LL, 766096810LL, 1069612516LL, 631568141LL, 1142910822LL, 486071999LL, + 1196576040LL, 332082482LL, 1229622093LL, 172233369LL, 1241414765LL, 9273673LL, + 1231685337LL, -153979240LL, 1200537982LL, -314688167LL, 1148450726LL, -470045409LL, + 1076269872LL, -617322067LL, 985197923LL, -753916432LL, 876775115LL, -877400613LL, + 752854835LL, -985564547LL, 615573267LL, -1076456598LL, 467313746LL, -1148419969LL, + 310666385LL, -1200124241LL, 148383634LL, -1230591423LL, -16667471LL, -1239215974LL, + -181555581LL, -1225778366LL, -343336925LL, -1190451888LL, -499107939LL, -1133802465LL, + -646057678LL, -1056781422LL, -781519061LL, -960711243LL, -903018024LL, -847264495LL, + -1008319651LL, -718436217LL, -1095470422LL, -576510200LL, -1162835754LL, -424019691LL, + -1209132105LL, -263703185LL, -1233452975LL, -98456041LL, -1235288279LL, 68721241LL, + -1214536627LL, 234777160LL, -1171510234LL, 396664822LL, -1106932254LL, 551397999LL, + -1021926513LL, 696106607LL, -917999740LL, 828090575LL, -797016526LL, 944871089LL, + -661167400LL, 1044238217LL, -512930537LL, 1124293997LL, -355027720LL, 1183490118LL, + -190375337LL, 1220659435LL, -22031251LL, 1235040648LL, 146861499LL, 1226295600LL, + 313133136LL, 1194518784LL, 473646663LL, 1140238781LL, 625357325LL, 1064411514LL, + 765370911LL, 968405341LL, 890999748LL, 853978178LL, 999815322LL, 723246988LL, + 1089696457LL, 578650138LL, 1158872091LL, 422903243LL, 1205957765LL, 258949284LL, + 1229985042LL, 89903872LL, 1230423209LL, -81003331LL, 1207192760LL, -250489953LL, + 1160670283LL, -415283870LL, 1091684572LL, -572186571LL, 1001503929LL, -718135709LL, + 891814791LL, -850265600LL, 764692010LL, -965964490LL, 622561257LL, -1062927401LL, + 468154194LL, -1139203493LL, 304457216LL, -1193236935LL, 134654685LL, -1223900397LL, + -37932279LL, -1230520442LL, -209910308LL, -1212894177LL, -377880337LL, -1171296778LL, + -538504921LL, -1106479585LL, -688574973LL, -1019658728LL, -825074589LL, -912494380LL, + -945242646LL, -787060944LL, -1046629896LL, -645808667LL, -1127150356LL, -491517342LL, + -1185125897LL, -327242948LL, -1219323049LL, -156258202LL, -1228981184LL, 18011829LL, + -1213831410LL, 192057824LL, -1174105677LL, 362356671LL, -1110535788LL, 525442889LL, + -1024342238LL, 677979566LL, -917212951LL, 816827360LL, -791272272LL, 939110124LL, + -649040699LL, 1042275772LL, -493386094LL, 1124151074LL, -327467270LL, 1182989184LL, + -154671032LL, 1217508820LL, 21456109LL, 1226924207LL, 197280187LL, 1210965034LL, + 369154552LL, 1169885894LL, 533495619LL, 1104464897LL, 686858042LL, 1015991344LL, + 826007715LL, 906242588LL, 947991060LL, 777450461LL, 1050199090LL, 632257813LL, + 1130424832LL, 473665997LL, 1186912839LL, 304974276LL, 1218399620LL, 129712351LL, + 1224144049LL, -48432646LL, 1203946973LL, -225693207LL, 1158159478LL, -398300953LL, + 1087679494LL, -562566935LL, 993936690LL, -714961000LL, 878865829LL, -852188536LL, + 744869017LL, -971262889LL, 594767543LL, -1069571861LL, 431744206LL, -1144936776LL, + 259277283LL, -1195662745LL, 81067450LL, -1220578943LL, -99040821LL, -1219067896LL, + -277141758LL, -1191083016LL, -449352913LL, -1137153864LL, -611900100LL, -1058378868LL, + -761200774LL, -956405521LL, -893944016LL, -833398336LL, -1007165314LL, -691995119LL, + -1098314433LL, -535252396LL, -1165314783LL, -366581051LL, -1206612884LL, -189673508LL, + -1221216688LL, -8423960LL, -1208721806LL, 173156661LL, -1169324871LL, 351029133LL, + -1103823624LL, 521215880LL, -1013603534LL, 679890397LL, -900611116LL, 823464148LL, + -767314361LL, 948668955LL, -616651056LL, 1052632958LL, -451965976LL, 1132948372LL, + -276938272LL, 1187729377LL, -95500572LL, 1215658746LL, 88248466LL, 1216021984LL, + 270136220LL, 1188728078LL, 446010755LL, 1134316204LL, 611835905LL, 1053948079LL, + 763784626LL, 949385973LL, 898328441LL, 822956695LL, 1012320869LL, 677502232LL, + 1103072847LL, 516318025LL, 1168418290LL, 343080154LL, 1206768167LL, 161762992LL, + 1217151681LL, -23450858LL, 1199243460LL, -208266355LL, 1153375935LL, -388375351LL, + 1080536461LL, -559557190LL, 982349051LL, -717778233LL, 861040982LL, -859287943LL, + 719394872LL, -980709229LL, 560687189LL, -1079120860LL, 388614487LL, -1152129883LL, + 207208982LL, -1197932225LL, 20745327LL, -1215359893LL, -166359269LL, -1203913478LL, + -349649302LL, -1163779037LL, -524737144LL, -1095828732LL, -687408616LL, -1001605046LL, + -833725413LL, -883288743LL, -960121883LL, -743651154LL, -1063493740LL, -585991766LL, + -1141276490LL, -414062431LL, -1191511528LL, -231979888LL, -1212898166LL, -44128586LL, + -1204830150LL, 144943957LL, -1167415593LL, 330636771LL, -1101479640LL, 508407415LL, + -1008549598LL, 673883616LL, -890822680LL, 822971792LL, -751116953LL, 951959778LL, + -592806515LL, 1057611128LL, -419742294LL, 1137248580LL, -236160280LL, 1188824468LL, + -46579312LL, 1210976194LL, 144309158LL, 1203065186LL, 331756664LL, 1165198189LL, + 511075870LL, 1098230132LL, 677758317LL, 1003748296LL, 827588823LL, 884037939LL, + 956753607LL, 742030049LL, 1061939336LL, 581232305LL, 1140420493LL, 405644810LL, + 1190132695LL, 219662540LL, 1209729954LL, 27966838LL, 1198624217LL, -164591424LL, + 1157005971LL, -353114129LL, 1085845164LL, -532780589LL, 986872185LL, -698971433LL, + 862539149LL, -847388532LL, 715962253LL, -974167817LL, 550846469LL, -1075982007LL, + 371394303LL, -1150130458LL, 182200799LL, -1194613672LL, -11862652LL, -1208190327LL, + -205772806LL, -1190415164LL, -394484218LL, -1141656483LL, -573060723LL, -1063092587LL, + -736805329LL, -956686980LL, -881385086LL, -825142745LL, -1002947598LL, -671837044LL, + -1098225999LL, -500737225LL, -1164629485LL, -316300548LL, -1200316836LL, -123359981LL, + -1204250770LL, 73001071LL, -1176231463LL, 267581896LL, -1116908092LL, 455202013LL, + -1027767826LL, 630839503LL, -911102298LL, 789766426LL, -769952193LL, 927677667LL, + -608031172LL, 1040809671LL, -429630947LL, 1126045733LL, -239509840LL, 1181004861LL, + -42767646LL, 1204111588LL, 155289962LL, 1194644637LL, 349293928LL, 1152762847LL, + 533957418LL, 1079507398LL, 704220576LL, 976779976LL, 855390474LL, 847297206LL, + 983272364LL, 694522316LL, 1084288509LL, 522575629LL, 1155581183LL, 336126117LL, + 1195096803LL, 140266770LL, 1201648643LL, -59622964LL, 1174956140LL, -258023999LL, + 1115659420LL, -449429722LL, 1025308336LL, -628499230LL, 906326042LL, -790207428LL, + 761947798LL, -929987743LL, 596136441LL, -1043863374LL, 413476607LL, -1128563258LL, + 219050455LL, -1181619292LL, 18298139LL, -1201441864LL, -183133162LL, -1187371276LL, + -379547549LL, -1139703339LL, -565361616LL, -1059688090LL, -735264016LL, -949501355LL, + -884368818LL, -812189644LL, -1008358190LL, -651589637LL, -1103610191LL, -472224271LL, + -1167307830LL, -279178127LL, -1197526029LL, -77955457LL, -1193293716LL, 125675248LL, + -1154628967LL, 325845835LL, -1082545841LL, 516757531LL, -979032394LL, 692849616LL, + -847000156LL, 848962797LL, -690206205LL, 980492464LL, -513149797LL, 1083527231LL, + -320946271LL, 1154968519LL, -119181666LL, 1192627460LL, 86247908LL, 1195295988LL, + 289307592LL, 1162789717LL, 484000841LL, 1095961016LL, 664547080LL, 996681515LL, + 825554662LL, 867794228LL, 962183944LL, 713036323LL, 1070295492LL, 536934524LL, + 1146578819LL, 344675921LL, 1188657563LL, 141957770LL, 1195167672LL, -65179449LL, + 1165805922LL, -270530916LL, 1101346958LL, -467913021LL, 1003627956LL, -651350083LL, + 875501004LL, -815256577LL, 720754244LL, -954609296LL, 544003811LL, -1065104101LL, + 350559517LL, -1143292279LL, 146268057LL, -1186692126LL, -62661719LL, -1193872025LL, + -269846323LL, -1164502145LL, -468922339LL, -1099372792LL, -653742386LL, -1000378445LL, + -818566321LL, -870467574LL, -958241700LL, -713559377LL, -1068367765LL, -534429619LL, + -1145437686LL, -338568770LL, -1186954337LL, -132016512LL, -1191515706LL, 78822485LL, + -1158866885LL, 287375991LL, -1089916626LL, 487108794LL, -986717504LL, 671728117LL, + -852409901LL, 835383376LL, -691131119LL, 972853939LL, -507892115LL, 1079718788LL, + -308425343LL, 1152502487LL, -99008234LL, 1188792549LL, 113732398LL, 1187324111LL, + 323028977LL, 1148028831LL, 522188308LL, 1072046021LL, 704806427LL, 961695198LL, + 864976252LL, 820410483LL, 997481255LL, 652638504LL, 1097968751LL, 463702660LL, + 1163096951LL, 259637736LL, 1190650700LL, 46999874LL, 1179621777LL, -167342227LL, + 1130250700LL, -376428295LL, 1044028242LL, -573432608LL, 923656100LL, -751887909LL, + 772967533LL, -905899758LL, 596810100LL, -1030344171LL, 400893895LL, -1121041831LL, + 191609878LL, -1174902856LL, -24176051LL, -1190036979LL, -239346695LL, -1165825093LL, + -446767723LL, -1102949293LL, -639524671LL, -1003379965LL, -811154915LL, -870319791LL, + -955866813LL, -708106069LL, -1068738509LL, -522074091LL, -1145889493LL, -318385725LL, + -1184618813LL, -103828527LL, -1183504884LL, 114408167LL, -1142463065LL, 328972907LL, + -1062758547LL, 532599600LL, -946973576LL, 718354498LL, -798929593LL, 879874286LL, + -623566391LL, 1011587050LL, -426781922LL, 1108908373LL, -215237747LL, 1168405543LL, + 3863580LL, 1187923868LL, 223021900LL, 1166670279LL, 434695444LL, 1105250860LL, + 631560763LL, 1005660429LL, 806767624LL, 871223974LL, 954179983LL, 706491399LL, + 1068594484LL, 517088676LL, 1145928594LL, 309530071LL, 1183371450LL, 90997543LL, + 1179491695LL, -130905366LL, 1134297987LL, -348416809LL, 1049249514LL, -553888044LL, + 927215523LL, -740053495LL, 772384703LL, -900289924LL, 590127010LL, -1028855403LL, + 386812279LL, -1121099376LL, 169591554LL, -1173635994LL, -53851532LL, -1184474107LL, + -275570795LL, -1153098759LL, -487639560LL, -1080500690LL, -682434762LL, -969152155LL, + -852912913LL, -822929302LL, -992867896LL, -646983253LL, -1097161048LL, -447563932LL, + -1161914905LL, -231802457LL, -1184663117LL, -7459472LL, -1164450587LL, 217351833LL, + -1101879582LL, 434458219LL, -999099479LL, 635923953LL, -859739865LL, 814342562LL, + -688788744LL, 963112050LL, -492419686LL, 1076683252LL, -277773665LL, 1150771864LL, + -52703086LL, 1182525896LL, 174512967LL, 1170641810LL, 395472070LL, 1115424435LL, + 601959331LL, 1018787752LL, 786254310LL, 884195824LL, 941422502LL, 716545339LL, + 1061580277LL, 521993483LL, 1142123056LL, 307736915LL, 1179907693LL, 81749579LL, + 1173381659LL, -147511280LL, 1122653524LL, -371420195LL, 1029501355LL, -581507970LL, + 897317977LL, -769783426LL, 730994427LL, -929040146LL, 536745278LL, -1053136350LL, + 321881818LL, -1137236928LL, 94541113LL, -1178007905LL, -136619180LL, -1173755342LL, + -362748955LL, -1124502642LL, -575144401LL, -1032002590LL, -765584401LL, -899682844LL, + -926651578LL, -732526209LL, -1052025352LL, -536889546LL, -1136735302LL, -320267602LL, + -1177364512LL, -91010301LL, -1172194354LL, 141996045LL, -1121284367LL, 369671586LL, + -1026483323LL, 583096697LL, -891370209LL, 773862907LL, -721126630LL, 934407153LL, + -522344818LL, 1058315998LL, -302778078LL, 1140587405LL, -71042850LL, 1177839232LL, + 163716357LL, 1168455503LL, 392186300LL, 1112663919LL, 605254547LL, 1012540676LL, + 794374623LL, 871941545LL, 951912066LL, 696361073LL, 1071457291LL, 492724710LL, + 1148092286LL, 269121398LL, 1178599831LL, 34486702LL, 1161606123LL, -201751329LL, + 1097650205LL, -430049665LL, 989176545LL, -641136156LL, 840450111LL, -826388140LL, + 657396496LL, -978188301LL, 447372717LL, -1090242970LL, 218877230LL, -1157849403LL, + -18789663LL, -1178100442LL, -255901661LL, -1150017430LL, -482703515LL, -1074605014LL, + -689813151LL, -954824662LL, -868612270LL, -795487002LL, -1011609128LL, -603066480LL, + -1112758046LL, -385445106LL, -1167721862LL, -151595120LL, -1174065661LL, 88786927LL, + -1131372873LL, 325679940LL, -1041277938LL, 549155540LL, -907413160LL, 749795508LL, + -735270969LL, 919091829LL, -531986390LL, 1049812252LL, -306047945LL, 1136315488LL, + -66948420LL, 1174802088LL, 175210436LL, 1163489582LL, 410142958LL, 1102703490LL, + 627816617LL, 994879352LL, 818882510LL, 844474588LL, 975080774LL, 657792914LL, + 1089603210LL, 442727787LL, 1157396998LL, 208434960LL, 1175395695LL, -35052575LL, + 1142666661LL, -277251312LL, 1060467527LL, -507677623LL, 932208158LL, -716302553LL, + 763318636LL, -893991279LL, 561027904LL, -1032907880LL, 334061657LL, -1126867323LL, + 92271762LL, -1171618599LL, -153787356LL, -1165045770LL, -393317352LL, -1107277090LL, + -615749829LL, -1000696286LL, -811214673LL, -849854342LL, -970982056LL, -661284478LL, + -1087858162LL, -443227402LL, -1156516495LL, -205277954LL, -1173749216LL, 42032027LL, + -1138626324LL, 287696748LL, -1052554463LL, 520725248LL, -919231492LL, 730634279LL, + -744497627LL, 907923194LL, -536088624LL, 1044509187LL, -303300967LL, 1134102794LL, + -56583171LL, 1172505906LL, 192929141LL, 1157817860LL, 433913932LL, 1090539138LL, + 655376832LL, 973566717LL, 847155269LL, 812079984LL, 1000389487LL, 613321126LL, + 1107938432LL, 386278806LL, 1164720731LL, 141288500LL, 1167964157LL, -110433083LL, + 1117350975LL, -357298810LL, 1015051174LL, -587884038LL, 865640725LL, -791457222LL, + 675907270LL, -958483503LL, 454550936LL, -1081077499LL, 211793007LL, -1153383577LL, + -41090371LL, -1171864911LL, -292288474LL, -1135486707LL, -530006476LL, -1045783710LL, + -743020560LL, -906807417LL, -921211520LL, -724954056LL, -1056051359LL, -508680031LL, + -1141019251LL, -268116965LL, -1171926261LL, -14603445LL, -1147132271LL, 239845266LL, + -1067643459LL, 483104968LL, -937084252LL, 703521021LL, -761543571LL, 890470022LL, + -549301261LL, 1034877447LL, -310446427LL, 1129665854LL, -56404794LL, 1170111162LL, + 200603153LL, 1154088685LL, 448147821LL, 1082195692LL, 674192048LL, 957743030LL, + 867679435LL, 786614674LL, 1019080623LL, 577000451LL, 1120870308LL, 339013488LL, + 1167910798LL, 84209731LL, 1157722149LL, -174968042LL, 1090624232LL, -425795266LL, + 969742191LL, -655890458LL, 800873373LL, -853829246LL, 592220663LL, -1009717039LL, + 354003853LL, -1115691395LL, 97966911LL, -1166328272LL, -163195533LL, -1158930727LL, + -416464804LL, -1093684258LL, -649147153LL, -973669375LL, -849512792LL, -804729078LL, + -1007392729LL, -595196148LL, -1114702812LL, -355492323LL, -1165867633LL, -97618055LL, + -1158121629LL, 165442628LL, -1091670626LL, 420372972LL, -969703929LL, 654197652LL, + -798254549LL, 854946137LL, -585912880LL, 1012271264LL, -343406714LL, 1117990822LL, + -83067538LL, 1166523425LL, 181790824LL, 1155195010LL, 437550256LL, 1084398590LL, + 670988755LL, 957597276LL, 869967219LL, 781168493LL, 1024066824LL, 564095589LL, + 1125143281LL, 317521004LL, 1167768087LL, 54182634LL, 1149532370LL, -212238609LL, + 1071195791LL, -467826954LL, 936670817LL, -699159203LL, 752841208LL, -894013413LL, + 529222297LL, -1042021309LL, 277479074LL, -1135229273LL, 10825863LL, -1168537175LL, + -256662003LL, -1139990275LL, -510788999LL, -1050906926LL, -737993899LL, -905833319LL, + -926077844LL, -712325566LL, -1064866714LL, -480568731LL, -1146771523LL, -222851248LL, + -1167215492LL, 47078777LL, -1124903210LL, 314742146LL, -1021915447LL, 565703739LL, + -863622395LL, 786352922LL, -658417859LL, 964646951LL, -417286661LL, 1090776561LL, + -153226821LL, 1157716561LL, 119443745LL, 1161630014LL, 385859466LL, 1102102146LL, + 631416946LL, 982189103LL, 842578372LL, 808276659LL, 1007624182LL, 589754351LL, + 1117312894LL, 338520796LL, 1165410482LL, 68345499LL, 1149058408LL, -205879220LL, + 1068957927LL, -468955976LL, 929358202LL, -706225079LL, 737846515LL, -904385594LL, + 504949925LL, -1052248584LL, 243568403LL, -1141379486LL, -31730762LL, -1166592259LL, + -305519263LL, -1126265691LL, -562370532LL, -1022461901LL, -787730886LL, -860837946LL, + -968749825LL, -650353045LL, -1095021869LL, -402785604LL, -1159196663LL, -132085099LL, + -1157420990LL, 146405932LL, -1089585412LL, 416817399LL, -959359048LL, 663655727LL, + -774007959LL, 872694531LL, -544004956LL, 1031803874LL, -282450816LL, 1131664530LL, + -4338061LL, 1166306616LL, 274301977LL, 1133559164LL, 537320730LL, 1035063669LL, + 769389850LL, 876349202LL, 956900101LL, 666461071LL, 1088768745LL, 417480575LL, + 1157107038LL, 143841839LL, 1157707006LL, -138498378LL, 1090316720LL, -412985853LL, + 958685267LL, -663439043LL, 770372016LL, -875006924LL, 536328605LL, -1035057264LL, + 270275712LL, -1133942288LL, -12090839LL, -1165594464LL, -294019389LL, -1127914989LL, + -558693808LL, -1022929252LL, -790238466LL, -856697158LL, -974676726LL, -638980751LL, + -1100784782LL, -382686159LL, -1160788166LL, -103110782LL, -1150856994LL, 182961229LL, + -1071367549LL, 458262274LL, -926911542LL, 706083789LL, -726049438LL, 911295021LL, + -480819778LL, 1061275800LL, -206031502LL, 1146705320LL, 81620056LL, 1162156979LL, + 364561463LL, 1106460460LL, 625413312LL, 982806015LL, 848060959LL, 798581423LL, + 1018657785LL, 564948454LL, 1126498133LL, 296181885LL, 1164704270LL, 8809179LL, + 1130682433LL, -279398163LL, 1026316834LL, -550520576LL, 857886318LL, -787606412LL, + 635705579LL, -975738422LL, 373510064LL, -1102983301LL, 87620113LL, -1161163278LL, + -204065734LL, -1146399050LL, -483186829LL, -1059387047LL, -732076690LL, -905390330LL, + -934886685LL, -693940204LL, -1078605415LL, -438264049LL, -1153907668LL, -154472426LL, + -1155776762LL, 139445576LL, -1083857779LL, 424756888LL, -942515822LL, 683177795LL, + -740591993LL, 898050181LL, -490869158LL, 1055424818LL, -209278427LL, 1144980731LL, + 86105508LL, 1160719283LL, 376217659LL, 1101385307LL, 642231621LL, 970584680LL, + 866785033LL, 776587016LL, 1035121695LL, 531822563LL, 1136074763LL, 252102456LL, + 1162824700LL, -44389942LL, 1113379593LL, -338273211LL, 990742857LL, -610232351LL, + 802753534LL, -842291316LL, 561605807LL, -1019009681LL, 283075547LL, -1128523322LL, + -14498048LL, -1163358190LL, -311411477LL, -1120960358LL, -587898468LL, -1003903613LL, + -825447750LL, -819756819LL, -1008052789LL, -580615857LL, -1123303301LL, -302327454LL, + -1163223360LL, -3453377LL, -1124929110LL, 295958390LL, -1010706164LL, 575714859LL, + -828050730LL, 816842257LL, -589114167LL, 1002881044LL, -309936329LL, 1121022886LL, + -9384104LL, 1163010270LL, 292116282LL, 1125734492LL, 573962943LL, 1011487467LL, + 816787649LL, 827845955LL, 1003797513LL, 587191692LL, 1121949631LL, 305896083LL, + 1162855415LL, 3221670LL, 1123486196LL, -299987081LL, 1006261911LL, -582735496LL, + 819086988LL, -825334929LL, 574751667LL, -1010782472LL, 290101575LL, -1125966955LL, + -15107991LL, -1162614827LL, -319575545LL, -1117906513LL, -601935807LL, -994715974LL, + -842261986LL, -801452079LL, -1023481606LL, -551508157LL, -1132604274LL, -262353923LL, + -1161672696LL, 45670234LL, -1108365744LL, 350774584LL, -976206620LL, 631258482LL, + -774356454LL, 867057617LL, -517003084LL, 1041189615LL, -222383919LL, 1140993224LL, + 88491418LL, 1159069677LL, 393330397LL, 1093854877LL, 670154024LL, 949776739LL, + 898886399LL, 736981279LL, 1062822178LL, 470642089LL, 1149863997LL, 169898275LL, + 1153437077LL, -143506398LL, 1073010452LL, -446787571LL, 914181989LL, -717775777LL, + 688315711LL, -936543256LL, 411752620LL, -1086882405LL, 104647892LL, -1157525357LL, + -210484386LL, -1143011699LL, -510414994LL, -1044135983LL, -772912496LL, -867936849LL, + -978399075LL, -627223001LL, -1111425494LL, -339665705LL, -1161853125LL, -26520156LL, + -1125651244LL, 288933290LL, -1005245271LL, 583114771LL, -809384426LL, 833910062LL, + -552532931LL, 1022343022LL, -253824846LL, 1134028249LL, 64343814LL, 1160291633LL, + 377983596LL, 1098870011LL, 663317359LL, 954131792LL, 898587736LL, 736795995LL, + 1065728678LL, 463165025LL, 1151771855LL, 153923879LL, 1149877142LL, -167407643LL, + 1059903652LL, -476255240LL, 888471895LL, -748868990LL, 648506110LL, -964157330LL, + 358285815LL, -1105334080LL, 40073967LL, -1161248889LL, -281577049LL, -1127294161LL, + -581713943LL, -1005812890LL, -836920890LL, -805969643LL, -1027157134LL, -543088236LL, + -1137348941LL, -237501457LL, -1158608191LL, 87002944LL, -1088977394LL, 405022843LL, + -933636786LL, 691527532LL, -704550649LL, 923833824LL, -419574039LL, 1083416167LL, + -101084161LL, 1157405369LL, 225760702LL, 1139653160LL, 535000677LL, 1031272655LL, + 801937231LL, 840605277LL, 1005115709LL, 582609847LL, 1128067703LL, 277715780LL, + 1160670499LL, -49774029LL, 1100009608LL, -373607614LL, 950668854LL, -667684427LL, + 724417620LL, -908164347LL, 439313331LL, -1075414514LL, 118284919LL, -1155634050LL, + -212693798LL, -1142020620LL, -526696879LL, -1035378223LL, -798037447LL, -844109799LL, + -1004379081LL, -583587824LL, -1128593234LL, -274947017LL, -1160206866LL, 56608548LL, + -1096316046LL, 383850302LL, -941883610LL, 679757368LL, -709388822LL, 919753586LL, + -417850223LL, 1083763881LL, -91295372LL, 1157916819LL, 243201734LL, 1135747251LL, + 557756909LL, 1018792559LL, 826001855LL, 816525310LL, 1025306097LL, 545619935LL, + 1138706749LL, 228607021LL, 1156380042LL, -107978814LL, 1076524851LL, -435807233LL, + 905576374LL, -727134163LL, 657723747LL, -957157551LL, 353764205LL, -1106146434LL, + 19383321LL, -1161159235LL, -316998790LL, -1117199707LL, -626636345LL, -977704837LL, + -882918419LL, -754314834LL, -1063670356LL, -465936291LL, -1153096021LL, -137170650LL, + -1143188924LL, 203764081LL, -1034483813LL, 527444767LL, -836075664LL, 805782751LL, + -564895401LL, 1014472613LL, -244296877LL, 1135135818LL, 97930694LL, 1156968562LL, + 431957330LL, 1077743786LL, 728508110LL, 904071746LL, 961440162LL, 650887325LL, + 1110065671LL, 340199882LL, 1160983686LL, -793011LL, 1109446970LL, -342068878LL, + 959620519LL, -653417099LL, 724508232LL, -907118333LL, 424736246LL, -1080428731LL, + 86806658LL, -1157645052LL, -259224344LL, -1131561107LL, -582413175LL, -1004177738LL, + -853697119LL, -786593611LL, -1048521808LL, -498076767LL, -1149088477LL, -164390758LL, + -1146012702LL, 184482400LL, -1039238081LL, 517023558LL, -838112532LL, 803023598LL, + -560610343LL, 1016339534LL, -231760540LL, 1137307218LL, 118584450LL, 1154586174LL, + 458443523LL, 1066260813LL, 756623393LL, 880088048LL, 985591366LL, 612858248LL, + 1124039187LL, 288917722LL, 1158897439LL, -62020919LL, 1086607489LL, -407586483LL, + 913524013LL, -715730093LL, 655400238LL, -957705462LL, 335992770LL, -1110770931LL, + -15094333LL, -1160357619LL, -365133709LL, -1101494409LL, -681318455LL, -939347183LL, + -933843333LL, -688810942LL, -1098733656LL, -373181824LL, -1160151830LL, -22023256LL, + -1111957029LL, 331581618LL, -958361183LL, 654138149LL, -713608006LL, 914918097LL, + -400693895LL, 1088905472LL, -49241178LL, 1159226393LL, 307283116LL, 1118824387LL, + 634744279LL, 971211423LL, 901612344LL, 730211427LL, 1082016050LL, 418708798LL, + 1158281047LL, 66510675LL, 1122700753LL, -292481048LL, 978358970LL, -623522246LL, + 738912956LL, -894392897LL, 427345538LL, -1078550959LL, 73795519LL, -1157763616LL, + -287332633LL, -1123952367LL, -620705367LL, -980061734LL, -893520694LL, -739854505LL, + -1078753882LL, -426640723LL, -1157865532LL, -71052879LL, -1122697942LL, 291924308LL, + -976362107LL, 626384350LL, -733015164LL, 899054715LL, -416537013LL, 1082625621LL, + -58224782LL, 1158517279LL, 306276367LL, 1118802322LL, 640507961LL, 967080757LL, + 910849372LL, 718206858LL, 1089919592LL, 396881972LL, 1159383742LL, 35240766LL, + 1111873624LL, -330336832LL, 951817206LL, -662873855LL, 695079710LL, -928544662LL, + 367438445LL, -1100136692LL, 2032758LL, -1159844632LL, -363962854LL, -1101267220LL, + -693111334LL, -929957503LL, -951549733LL, -663136901LL, -1112496357LL, -327907107LL, + -1159063055LL, 41436904LL, -1086073907LL, 406891153LL, -900690126LL, 730648109LL, + -621761967LL, 979016611LL, -277959638LL, 1125953612LL, 95136830LL, 1155834444LL, + 458697523LL, 1065162665LL, 774678562LL, 863028453LL, 1009815360LL, 570252017LL, + 1139153128LL, 217286323LL, 1148737250LL, -158915019LL, 1037169470LL, -518746613LL, + 815851604LL, -824118450LL, 507875140LL, -1042503502LL, 145658340LL, -1150434311LL, + -232432682LL, -1136069669LL, -586130613LL, -1000546316LL, -877556688LL, -757956461LL, + -1075296703LL, -433937003LL, -1157822987LL, -63005205LL, -1115886090LL, 315087478LL, + -953605808LL, 659601933LL, -688127906LL, 933206434LL, -347866465LL, 1106045797LL, + 30494330LL, 1159038893LL, 405927630LL, 1086036377LL, 737503469LL, 894589603LL, + 988861329LL, 605229965LL, 1132226244LL, 249319669LL, 1151522043LL, -134307316LL, + 1044228392LL, -503559132LL, 821761743LL, -817700411LL, 508320372LL, -1041862093LL, + 138302900LL, -1150946006LL, -247430323LL, -1132483586LL, -606051070LL, -988118216LL, + -897520486LL, -733529393LL, -1089081438LL, -396788474LL, -1158979846LL, -15311243LL, + -1098988204LL, 368267628LL, -915433116LL, 710847287LL, -628593118LL, 973712488LL, + -270515204LL, 1126937720LL, 118521778LL, 1152839792LL, 494511925LL, 1048075839LL, + 814694800LL, 824131982LL, 1042434745LL, 506127659LL, 1151448787LL, 130051947LL, + 1128891501LL, -261270690LL, 976929392LL, -623037818LL, 712605720LL, -913601240LL, + 365990864LL, -1099286151LL, -23188821LL, -1158337220LL, -410071907LL, -1083524640LL, + -749822185LL, -883091956LL, -1002836451LL, -579915697LL, -1139393937LL, -208953224LL, + -1143198134LL, 186743835LL, -1013383532LL, 561001544LL, -764733690LL, 869910027LL, + -426063624LL, 1076996532LL, -36934964LL, 1157573658LL, 356928529LL, 1101739902LL, + 708998605LL, 915661636LL, 977447725LL, 620964060LL, 1130149867LL, 252280836LL, + 1148575743LL, -146767999LL, 1030104653LL, -528708912LL, 788457699LL, -847858327LL, + 452178027LL, -1065806697LL, 61317185LL, -1156082942LL, -337295155LL, -1107428272LL, + -695644692LL, -925268021LL, -970323608LL, -631182120LL, -1127820357LL, -260414420LL, + -1148660133LL, 142300280LL, -1029878673LL, 528104028LL, -785507966LL, 849938315LL, + -444990757LL, 1068304555LL, -49693244LL, 1156155288LL, 352078890LL, 1102305617LL, + 710966120LL, 912927592LL, 982627883LL, 610920850LL, 1133254779LL, 233211259LL, + 1143831227LL, -173712280LL, 1012604932LL, -559489525LL, 755434747LL, -876120823LL, + 403948279LL, -1083962512LL, 1713105LL, -1156709488LL, -401123044LL, -1084893621LL, + -754069285LL, -877005590LL, -1012632443LL, -558755739LL, -1143964376LL, -169858851LL, + -1131094686LL, 240842938LL, -975196478LL, 621487515LL, -695574451LL, 923745577LL, + -327349616LL, 1108984796LL, 82892053LL, 1153260479LL, 482956114LL, 1050481105LL, + 821670317LL, 813321550LL, 1055448856LL, 471740666LL, 1153946303LL, 69264665LL, + 1104062535LL, -342511851LL, 911762299LL, -710519135LL, 601448054LL, -987060468LL, + 212938120LL, -1136030991LL, -203586100LL, -1137692147LL, -594030534LL, -991363123LL, + -907411944LL, -715653412LL, -1102543330LL, -346176667LL, -1153501501LL, 68984772LL, + -1053144443LL, 475496161LL, -814192438LL, 819869712LL, -467701244LL, 1056521508LL, + -59097910LL, 1153852967LL, 357724941LL, 1098539831LL, 727495794LL, 897438009LL, + 1000903393LL, 576824285LL, 1141213105LL, 179041227LL, 1129267941LL, -243036540LL, + 966185374LL, -632999877LL, 673360535LL, -938445096LL, 289743148LL, -1118048961LL, + -133277457LL, -1147219674LL, -538717020LL, -1021543637LL, -871664986LL, -757535066LL, + -1086746685LL, -390554519LL, -1154362148LL, 29854576LL, -1064836921LL, 446606895LL, + -829893137LL, 802810609LL, -481207497LL, 1049551746LL, -66219049LL, 1152660597LL, + 358269942LL, 1097517999LL, 733845024LL, 891216039LL, 1008528717LL, 561743269LL, + 1144017796LL, 154271554LL, 1121095601LL, -274975299LL, 942445499LL, -666448119LL, + 632442639LL, -965537279LL, 233916927LL, -1130228969LL, -197696261LL, -1137074717LL, + -602028993LL, -984617275LL, -922221275LL, -693761200LL, -1112950042LL, -304999438LL, + -1146908942LL, 127150383LL, -1018804158LL, 541746598LL, -746270367LL, 880008398LL, + -367539942LL, 1093677533LL, 63841670LL, 1151964071LL, 486535884LL, 1046068595LL, + 840117991LL, 790605436LL, 1073738052LL, 421686035LL, 1153491639LL, -8102269LL, + 1067424484LL, -437136606LL, 827421110LL, -803574082LL, 467667298LL, -1054284856LL, + 39868208LL, -1152610400LL, -394122509LL, -1083806846LL, -771221289LL, -857353978LL, + -1036299211LL, -505755880LL, -1150293876LL, -79966613LL, -1096048056LL, 357929550LL, + -880991288LL, 743741991LL, -536232414LL, 1020594997LL, -112154035LL, 1147362646LL, + 328882106LL, 1104859736LL, 721673481LL, 898845638LL, 1007825204LL, 559357499LL, + 1144480203LL, 136428202LL, 1110819470LL, -307215973LL, 911335241LL, -705423601LL, + 575348891LL, -998488750LL, 152801143LL, -1142150896LL, -293097078LL, -1114361129LL, + -695283534LL, -918768900LL, -992936166LL, -584363988LL, -1140718554LL, -161282107LL, + -1115767582LL, 286635588LL, -921334771LL, 691437180LL, -586487004LL, 991373505LL, + -161865476LL, 1140365203LL, 287895407LL, 1115165385LL, 693966967LL, 919092752LL, + 993864249LL, 581720966LL, 1141109718LL, 154524048LL, 1112521434LL, -296898500LL, + 911970693LL, -702855437LL, 569984939LL, -1000328592LL, 139208257LL, -1142805874LL, + -313623356LL, -1107641210LL, -717981864LL, -899764212LL, -1010539386LL, -551116374LL, + -1145139188LL, -115851345LL, -1100168105LL, 337997606LL, -882139704LL, 739114050LL, + -524878231LL, 1024115037LL, -84380008LL, 1147623004LL, 369885400LL, 1089584414LL, + 765896097LL, 858641194LL, 1040510432LL, 490971487LL, 1149595105LL, 44730996LL, + 1075215537LL, -409069013LL, 828702545LL, -797832050LL, 449054301LL, -1059008260LL, + -3124940LL, -1150205924LL, -455225781LL, -1056239900LL, -834266028LL, -791665471LL, + -1078696135LL, -398768286LL, -1148465156LL, 59152726LL, -1031690413LL, 507895526LL, + -746804068LL, 874357195LL, -339772319LL, 1098475145LL, 123216441LL, 1143148700LL, + 566449631LL, 1000493226LL, 917057108LL, 693354998LL, 1117029820LL, 271780572LL, + 1132902888LL, -195036372LL, 961473779LL, -630052875LL, 630560539LL, -961085154LL, + 194615038LL, -1132833432LL, -274139800LL, -1116213162LL, -697623461LL, -913403706LL, + -1004906413LL, -557719283LL, -1144147009LL, -108262063LL, -1091439357LL, 359806882LL, + -855046210LL, 767793637LL, -474247897LL, 1046715164LL, -12937623LL, 1149030581LL, + 451014562LL, 1056854664LL, 838873920LL, 785217157LL, 1084427922LL, 379754207LL, + 1145368508LL, -90840878LL, 1010700717LL, -546380059LL, 702861459LL, -908823942LL, + 274121608LL, -1115689296LL, -202177981LL, -1130911719LL, -644107484LL, -951260552LL, + -975234349LL, -607144667LL, -1137895139LL, -157602652LL, -1103340423LL, 319722841LL, + -876951252LL, 741943128LL, -497559299LL, 1035325820LL, -30918916LL, 1148238574LL, + 441596133LL, 1060351282LL, 837145624LL, 786437838LL, 1085971538LL, 374044615LL, + 1143784018LL, -104636846LL, 999771916LL, -565327231LL, 678768196LL, -926477863LL, + 237116401LL, -1123749380LL, -247102502LL, -1121573494LL, -687809587LL, -919703784LL, + -1006228746LL, -553526385LL, -1145030385LL, -88000477LL, -1078768667LL, 393761226LL, + -818692864LL, 805284342LL, -410999341LL, 1072274002LL, 71238730LL, 1146109965LL, + 541079997LL, 1012830827LL, 913363283LL, 695925245LL, 1120185040LL, 252349324LL, + 1123386662LL, -237585793LL, 921738078LL, -684684585LL, 551441099LL, -1007102655LL, + 79780605LL, -1145393623LL, -406992473LL, -1073590475LL, -819385535LL, -804235045LL, + -1081139387LL, -386355970LL, -1143418234LL, 103315256LL, -994059216LL, 574343876LL, + -660105783LL, 939270778LL, -203073612LL, 1129900117LL, 292254998LL, 1110154681LL, + 733491896LL, 883056387LL, 1037879912LL, 490454994LL, 1147890287LL, 5469542LL, + 1042228171LL, -481022922LL, 740117519LL, -877376009LL, 297976104LL, -1108472952LL, + -200980625LL, -1130065384LL, -662319057LL, -937396897LL, -998250466LL, -566404086LL, + -1144401753LL, -87177927LL, -1072279066LL, 409158281LL, -794988316LL, 827722068LL, + -365035488LL, 1088033356LL, 135464810LL, 1139585012LL, 610377251LL, 971792985LL, + 967990656LL, 616338796LL, 1138786288LL, 141360787LL, 1089077378LL, -361476883LL, + 827821186LL, -794610329LL, 405196214LL, -1073521527LL, -96875824LL, -1143322837LL, + -580505945LL, -989709666LL, -950895409LL, -642068142LL, -1134971488LL, -168034145LL, + -1095928950LL, 339527234LL, -840760571LL, 780644032LL, -419204789LL, 1067940313LL, + 85783232LL, 1144035628LL, 574246409LL, 993159571LL, 948980187LL, 644601923LL, + 1134930213LL, 167213245LL, 1094353135LL, -344051806LL, 834654223LL, -786948641LL, + 407241711LL, -1072402610LL, -102478786LL, -1142519413LL, -592058722LL, -982486854LL, + -962568175LL, -623891072LL, -1138645273LL, -138673601LL, -1083959983LL, 375156446LL, + -808893653LL, 813248555LL, -368776707LL, 1086121013LL, 147068306LL, 1137541836LL, + 633345851LL, 956285212LL, 990257616LL, 578773330LL, 1144052190LL, 81951790LL, + 1062410604LL, -432250546LL, 761429838LL, -857769914LL, 302659437LL, -1106314653LL, + -219312897LL, -1125801662LL, -696262344LL, -911450192LL, -1028755331LL, -507135148LL, + -1146949718LL, 3398952LL, -1025470694LL, 513747158LL, -688980089LL, 916970261LL, + -207461111LL, 1128049272LL, 318215554LL, 1101945362LL, 777321095LL, 843402736LL, + 1072600255LL, 406323076LL, 1140977825LL, -117280695LL, 967208664LL, -616530485LL, + 587484059LL, -985131421LL, 82104710LL, -1144072074LL, -441344761LL, -1058715784LL, + -870829254LL, -746555015LL, -1113875161LL, -273852384LL, -1117609185LL, 258242079LL, + -880456129LL, 735230330LL, -452868267LL, 1053900048LL, 73202940LL, 1144755647LL, + 583942814LL, 987352435LL, 968255694LL, 615114127LL, 1141994849LL, 108457828LL, + 1066543392LL, -422411734LL, 757611208LL, -861395986LL, 282200991LL, -1111922541LL, + -255731096LL, -1118321070LL, -737895947LL, -878396869LL, -1057677433LL, -444320505LL, + -1143809351LL, 88503016LL, -976444785LL, 602260753LL, -591955520LL, 982741197LL, + -75257915LL, 1144795287LL, 458770809LL, 1051559265LL, 890758951LL, 723064733LL, + 1123562433LL, 232179005LL, 1104253976LL, -311363397LL, 836371874LL, -785384786LL, + 379548357LL, -1082733629LL, -163548933LL, -1135623786LL, -670154253LL, -931290566LL, + -1025128263LL, -515304458LL, -1147216616LL, 18358725LL, -1007835708LL, 548384081LL, + -638002451LL, 953637363LL, -121679428LL, 1140910781LL, 423098413LL, 1066527769LL, + 871118674LL, 746763000LL, 1118802287LL, 254542083LL, 1108295722LL, -296979613LL, + 841209581LL, -780312377LL, 378692288LL, -1083104995LL, -172340642LL, -1134383092LL, + -683776673LL, -921399232LL, -1036065059LL, -493047568LL, -1146260195LL, 51115768LL, + -987750732LL, 583841837LL, -596937717LL, 979890194LL, -65133537LL, 1145544788LL, + 482581030LL, 1040973522LL, 916693761LL, 690056038LL, 1133932737LL, 175200687LL, + 1082000133LL, -381795742LL, 772407371LL, -848452937LL, 278207299LL, -1113139399LL, + -283013366LL, -1111924054LL, -776979626LL, -844255561LL, -1084851682LL, -373570534LL, + -1131944157LL, 187494505LL, -906072314LL, 703902562LL, -460966755LL, 1050690324LL, + 96247892LL, 1143316307LL, 630659089LL, 958488947LL, 1012181753LL, 540293494LL, + 1147312491LL, -10050903LL, 1002252191LL, -558494971LL, 611631445LL, -970738571LL, + 70526250LL, -1145187342LL, -488470537LL, -1038184719LL, -927647496LL, -675207764LL, + -1138151577LL, -145094223LL, -1067150666LL, 421471618LL, -731361528LL, 884063538LL, + -213417358LL, 1127351713LL, 358223963LL, 1090026137LL, 841009344LL, 780511968LL, + 1113855396LL, 275386663LL, 1107674576LL, -299309948LL, 823129882LL, -799378574LL, + 330993765LL, -1098641553LL, -245186495LL, -1120926691LL, -759942261LL, -859712407LL, + -1082594510LL, -380306476LL, -1130564433LL, 196203329LL, -890761112LL, 723357191LL, + -423446308LL, 1066501261LL, 152620905LL, 1137308512LL, 690175518LL, 916763263LL, + 1051051160LL, 460568206LL, 1141808956LL, -114627466LL, 938176094LL, -660854922LL, + 491842643LL, -1036837355LL, -82354774LL, -1144638166LL, -635768662LL, -955413810LL, + -1024359283LL, -517440149LL, -1146285952LL, 55892184LL, -968837018LL, 615215038LL, + -537518212LL, 1014025709LL, 35298858LL, 1147156061LL, 599425863LL, 978744300LL, + 1006157820LL, 552210511LL, 1147563794LL, -20613952LL, 985365654LL, -588573626LL, + 561618406LL, -1000992003LL, -11864643LL, -1147734373LL, -582777074LL, -988857592LL, + -998681983LL, -565804614LL, -1147801748LL, 9071917LL, -989299670LL, 582105017LL, + -564789010LL, 999300068LL, 12254061LL, 1147807633LL, 586578226LL, 986692343LL, + 1002837357LL, 558546508LL, 1147700656LL, -21427814LL, 980956060LL, -596169322LL, + 547007037LL, -1009202811LL, -36607117LL, -1147335559LL, -610800609LL, -971931621LL, + -1018221165LL, -530057654LL, -1146472482LL, 57799428LL, -959381860LL, 630339827LL, + -507546869LL, 1029629741LL, 84999537LL, 1144776458LL, 654593888LL, 942994809LL, + 1043074306LL, 479291324LL, 1141817332LL, -118180876LL, 922388579LL, -683300669LL, + 445084982LL, -1058104188LL, -157284269LL, -1137070415LL, -716119026LL, -897118268LL, + -1074166996LL, -404711015LL, -1129918289LL, 202204145LL, -866685251LL, 752617287LL, + -357956608LL, 1090603356LL, 252772283LL, 1119654269LL, 792260548LL, 830549308LL, + 1106642243LL, 304630863LL, 1105488138LL, -308739205LL, 788144039LL, -834397249LL, + 244585961LL, -1121397569LL, -369753484LL, -1086554857LL, -878245655LL, -738896079LL, + -1133866884LL, -177741685LL, -1061927037LL, 435339342LL, -682248562LL, 922881023LL, + -104113249LL, 1142933131LL, 504873132LL, 1030632009LL, 967224447LL, 617689270LL, + 1147370584LL, 23842261LL, 991674364LL, -577559488LL, 544783750LL, -1010034586LL, + -62769628LL, -1145856189LL, -652408252LL, -944064782LL, -1049903704LL, -463213519LL, + -1136987622LL, 155225103LL, -886855905LL, 728213538LL, -372819198LL, 1085259649LL, + 252794668LL, 1119309410LL, 803536681LL, 819185789LL, 1114375628LL, 273648060LL, + 1091348431LL, -354480752LL, 740329218LL, -876695135LL, 166005028LL, -1135389715LL, + -458984435LL, -1051659932LL, -945759742LL, -649756717LL, -1146336140LL, -50505571LL, + -998884935LL, 564677291LL, -547200554LL, 1008563048LL, 71871675LL, 1145190262LL, + 669581407LL, 931819450LL, 1062721592LL, 432726323LL, 1129928968LL, -199735498LL, + 849495264LL, -771361109LL, 306807840LL, -1105675089LL, -331239605LL, -1098607697LL, + -867330344LL, -751271217LL, -1134745327LL, -170402095LL, -1049454654LL, 464051493LL, + -636932824LL, 954479928LL, -25019922LL, 1147217169LL, 595337879LL, 980981750LL, + 1029528884LL, 506796804LL, 1140443324LL, -127213069LL, 892110495LL, -721772405LL, + 361815619LL, -1089003800LL, -283511858LL, -1111973428LL, -839571617LL, -782309477LL, + -1129349457LL, -203675592LL, -1059706449LL, 440411172LL, -651738171LL, 944565156LL, + -34880521LL, 1147072735LL, 593776609LL, 982063447LL, 1032305476LL, 501389671LL, + 1138920084LL, -141188700LL, 878175297LL, -738856132LL, 333222759LL, -1098221207LL, + -320249235LL, -1102086454LL, -870379993LL, -748077238LL, -1137816306LL, -150271500LL, + -1034450573LL, 497137664LL, -592899067LL, 982715972LL, 43281366LL, 1146914380LL, + 665889061LL, 934827926LL, 1070084753LL, 415036703LL, 1121943868LL, -242082389LL, + 803228754LL, -819884331LL, 218287948LL, -1126837029LL, -439652519LL, -1060255310LL, + -952074190LL, -641104153LL, -1147789540LL, -7932875LL, -960456682LL, 628514547LL, + -451559171LL, 1055284604LL, 209262174LL, 1128611652LL, 800416009LL, 822747070LL, + 1122603230LL, 239508128LL, 1066247376LL, -425138071LL, 649223167LL, -946656709LL, + 11744732LL, -1147839562LL, -630353064LL, -959350181LL, -1058523877LL, -444127638LL, + -1126042903LL, 223101387LL, -808700032LL, 814724571LL, -214004204LL, 1127829536LL, + 454748697LL, 1054052505LL, 967710380LL, 617564508LL, 1147533942LL, -32277981LL, + 931043615LL, -671610760LL, 391959437LL, -1079026764LL, -283667338LL, -1112426208LL, + -861320299LL, -759022656LL, -1139387511LL, -140760537LL, -1019819295LL, 527272205LL, + -543215686LL, 1011431957LL, 124382694LL, 1141331635LL, 748924788LL, 870202418LL, + 1110288460LL, 292288037LL, 1080089258LL, -389374712LL, 667781258LL, -933973711LL, + 18331474LL, -1148014107LL, -638275783LL, -954416401LL, -1068291032LL, -420827255LL, + -1117575913LL, 263439722LL, -767312382LL, 854191801LL, -141754069LL, 1139453210LL, + 535328869LL, 1015828293LL, 1020439397LL, 526520849LL, 1138025151LL, -153155230LL, + 844434526LL, -778155155LL, 244710401LL, -1121940114LL, -444430542LL, -1058844804LL, + -972598833LL, -610541324LL, -1146758802LL, 60763307LL, -902176583LL, 710538142LL, + -327075695LL, 1100839701LL, 368592002LL, 1087661007LL, 929434691LL, 674579985LL, + 1148386159LL, 12540493LL, 943526903LL, -654787511LL, 389330546LL, -1080487760LL, + -309789725LL, -1105941032LL, -894481693LL, -720431673LL, -1146637111LL, -66239503LL, + -971103964LL, 613325016LL, -432191442LL, 1064174997LL, 269248811LL, 1116607225LL, + 870253972LL, 749676539LL, 1144277686LL, 100186918LL, 986924368LL, -587743931LL, + 456324464LL, -1054175709LL, -247680455LL, -1121708883LL, -858358005LL, -763451568LL, + -1143074401LL, -114370168LL, -992249755LL, 578969439LL, -462144015LL, 1051787313LL, + 245453815LL, 1122344689LL, 859578941LL, 762301794LL, 1143778969LL, 108756203LL, + 987494576LL, -587362414LL, 449693464LL, -1057355966LL, -262691628LL, -1118619075LL, + -873922171LL, -746102774LL, -1146115814LL, -83221849LL, -972184587LL, 612753505LL, + -418607956LL, 1070272857LL, 299280699LL, 1109621176LL, 900597524LL, 714050679LL, + 1148761732LL, 37572872LL, 944960948LL, -654400380LL, 368159830LL, -1088935298LL, + -354794344LL, -1093425030LL, -937945064LL, -664723117LL, -1149321390LL, 28343834LL, + -903637942LL, 710866748LL, -297395312LL, 1110677193LL, 428322608LL, 1067120846LL, + 983306281LL, 596221273LL, 1144309894LL, -114430006LL, 845327692LL, -779828852LL, + 205369908LL, -1131685390LL, -518215746LL, -1026899031LL, -1032861000LL, -506410444LL, + -1129172283LL, 220024856LL, -766660104LL, 857825164LL, -91496638LL, 1146932315LL, + 621748744LL, 968220100LL, 1081458084LL, 393279505LL, 1098376590LL, -343496798LL, + 664125468LL, -939979371LL, -43990797LL, -1150170800LL, -734736441LL, -886112762LL, + -1122493393LL, -255437516LL, -1045637642LL, 481755631LL, -534576139LL, 1019746046LL, + 199461721LL, 1134052796LL, 851140639LL, 775646296LL, 1147898332LL, 92754392LL, + 964326741LL, -629725040LL, 375904489LL, -1088751739LL, -371234792LL, -1090446233LL, + -962748995LL, -632617586LL, -1148332034LL, 92870907LL, -848132967LL, 779846821LL, + -187904103LL, 1136828917LL, 552904851LL, 1011029036LL, 1059023786LL, 454473188LL, + 1113668259LL, -296668704LL, 692011529LL, -921726480LL, -26732711LL, -1152360077LL, + -734768998LL, -888228588LL, -1127264111LL, -241447182LL, -1033881696LL, 510189887LL, + -493434307LL, 1042070507LL, 261368141LL, 1123056799LL, 903506154LL, 716541900LL, + 1153213771LL, -2166024LL, 900394822LL, -720698974LL, 253870390LL, -1125097672LL, + -504506186LL, -1037280641LL, -1042314771LL, -494206859LL, -1122354296LL, 266769814LL, + -707887477LL, 911003278LL, 19634933LL, 1153618121LL, 739248946LL, 885958634LL, + 1131785514LL, 225095417LL, 1021739133LL, -536520224LL, 456510956LL, -1060002423LL, + -313082558LL, -1110942770LL, -943476931LL, -665039736LL, -1151665543LL, 79437707LL, + -842776603LL, 789046520LL, -154186385LL, 1144256241LL, 604713534LL, 983693413LL, + 1091091652LL, 378275557LL, 1083734756LL, -399176257LL, 584385150LL, -996279774LL, + -181380840LL, -1140808758LL, -865316179LL, -765404117LL, -1154687995LL, -39885860LL, + -915727231LL, 704717266LL, -256348545LL, 1126837899LL, 521650831LL, 1031339910LL, + 1060190232LL, 460531837LL, 1109823016LL, -323581431LL, 645979394LL, -958879350LL, + -117945491LL, -1150287926LL, -827958941LL, -807402756LL, -1153254795LL, -88132653LL, + -940763175LL, 673115196LL, -288076944LL, 1120487768LL, 500389476LL, 1043292493LL, + 1054800263LL, 476044650LL, 1113460593LL, -315920892LL, 647059348LL, -959842592LL, + -125717170LL, -1150897956LL, -839883582LL, -797093143LL, -1156283101LL, -64540191LL, + -923102054LL, 699596566LL, -249653347LL, 1131204977LL, 543857887LL, 1023020197LL, + 1078009549LL, 425027484LL, 1095719039LL, -377563872LL, 586752978LL, -999638646LL, + -205470744LL, -1140938052LL, -899468431LL, -731652190LL, -1159193559LL, 32060713LL, + -857294144LL, 781154161LL, -138564319LL, 1151672855LL, 648486420LL, 961981669LL, + 1120120025LL, 302761903LL, 1044715887LL, -505262110LL, 457402493LL, -1066718593LL, + -355172397LL, -1105142377LL, -993975368LL, -599898762LL, -1143483368LL, 201709477LL, + -728212957LL, 904609918LL, 48093071LL, 1160460922LL, 801453160LL, 840845864LL, + 1157215704LL, 102784261LL, 936811120LL, -687356773LL, 248394566LL, -1135224353LL, + -565114253LL, -1015597585LL, -1096217941LL, -386595652LL, -1077122306LL, 437394946LL, + -515637189LL, 1042104493LL, 306691848LL, 1121677584LL, 974898253LL, 634154373LL, + 1149875599LL, -175282279LL, 741152214LL, -896656450LL, -45199690LL, -1162592334LL, + -809423416LL, -835981960LL, -1160911653LL, -81783745LL, -918310645LL, 715183229LL, + -204163901LL, 1146071903LL, 615822014LL, 988086447LL, 1119417388LL, 320702983LL, + 1045502827LL, -513098924LL, 430422094LL, -1082354826LL, -408623786LL, -1090962071LL, + -1036313717LL, -532588518LL, -1125037984LL, 303841837LL, -626697419LL, 982712206LL, + 200026186LL, 1148439650LL, 922929504LL, 712451096LL, 1161979412LL, -98276013LL, + 789734562LL, -858288753LL, 480725LL, -1166524721LL, -790018658LL, -858602210LL, + -1163060926LL, -95484553LL, -919228710LL, 719280140LL, -186133208LL, 1152485956LL, + 647116818LL, 971927233LL, 1135771398LL, 271968117LL, 1017088342LL, -574476030LL, + 352664843LL, -1113855465LL, -502197370LL, -1055180569LL, -1087646935LL, -428018755LL, + -1086726322LL, 431015914LL, -497929987LL, 1058013161LL, 361565890LL, 1112284652LL, + 1025772901LL, 562388513LL, 1132437033LL, -294386569LL, 621460904LL, -991691212LL, + -229927938LL, -1147775041LL, -956475082LL, -675277506LL, -1158888444LL, 168557495LL, + -724018983LL, 920771115LL, 110568971LL, 1166355322LL, 885165992LL, 767904004LL, + 1170735049LL, -56191157LL, 807179082LL, -850188029LL, -5595640LL, -1172562616LL, + -816308528LL, -842109291LL, -1172343137LL, -41095451LL, -872968878LL, 783944029LL, + -83800843LL, 1170547643LL, 753460143LL, 900032992LL, 1167610906LL, 122472046LL, + 923571382LL, -725175610LL, 157086751LL, -1163929999LL, -699365519LL, -943842899LL, + -1159862513LL, -187642728LL, -961089849LL, 676264577LL, -214151326LL, 1155725313LL, + 656071229LL, 975533077LL, 1151794651LL, 236631610LL, 987368725LL, -638951562LL, + 255106130LL, -1148306528LL, -625041864LL, -996765584LL, -1145456192LL, -269597366LL, + -1003861977LL, 614450791LL, -280123823LL, 1143397687LL, 607262054LL, 1008763126LL, + 1142244363LL, 286696827LL, 1011539953LL, -603536575LL, 289318970LL, -1142069293LL, + -603313100LL, -1012228287LL, -1142904589LL, -287983315LL, -1010827508LL, 606608128LL, + -282672301LL, 1144740451LL, 613416232LL, 1007299441LL, 1147525085LL, 273357276LL, + 1001568748LL, -623709858LL, 259999870LL, -1151164584LL, -637437329LL, -993523851LL, + -1155521507LL, -242554271LL, -983017186LL, 654520098LL, -220969151LL, 1160413225LL, + 674850530LL, 969865804LL, 1165611452LL, 195190210LL, 953853859LL, -698289337LL, + 165164914LL, -1170842008LL, -724661039LL, -934735942LL, -1175783407LL, -130848245LL, + -912239749LL, 753748957LL, -92207991LL, 1180065380LL, 785290872LL, 886070069LL, + 1183269834LL, 49230794LL, 855912217LL, -818979070LL, 1929365LL, -1184914874LL, + -854435772LL, -821447654LL, -1184539376LL, 49645969LL, -782337659LL, 891244457LL, + 105400150LL, 1181537105LL, 928907061LL, 738270174LL, 1175328355LL, -165185585LL, + 688933613LL, -966863534LL, -228788632LL, -1165281572LL, -1004479062LL, -634047898LL, + -1150736421LL, 295919256LL, -573372461LL, 1041043506LL, 366200830LL, 1131011265LL, + 1075770700LL, 506720355LL, 1105414762LL, -439159925LL, 433974745LL, -1107800003LL, + -514215309LL, -1073259447LL, -1136198663LL, -355106596LL, -1033876568LL, 590668026LL, + -270192050LL, 1159967068LL, 667694150LL, 986633846LL, 1178048316LL, 179430815LL, + 930957129LL, -744339259LL, 83165990LL, -1189341143LL, -819514459LL, -866354613LL, + -1192715825LL, 18096454LL, -792442688LL, 891995912LL, 123670038LL, 1187034640LL, + 960429434LL, 708974315LL, 1171178046LL, -232671610LL, 615870290LL, -1023339878LL, + -344006910LL, -1144075665LL, -1079145448LL, -513251705LL, -1104741511LL, 456359966LL, + -401472104LL, 1126178729LL, 568188261LL, 1052314231LL, 1162715885LL, 281149080LL, + 986102702LL, -677724200LL, 153194686LL, -1187013843LL, -782983631LL, -905635485LL, + -1197355190LL, -18842159LL, -810712368LL, 881783707LL, 120333698LL, 1192101753LL, + 971772297LL, 701457325LL, 1169757397LL, -262403828LL, 578371748LL, -1050469466LL, + -405081631LL, -1129038618LL, -1115321383LL, -442384755LL, -1068950979LL, 545732260LL, + -294897061LL, 1163768096LL, 681397748LL, 988870303LL, 1193326062LL, 137815824LL, + 888626749LL, -808839573LL, -26422424LL, -1201684198LL, -924599938LL, -768587772LL, + -1186811343LL, 194845361LL, -629735075LL, 1025083995LL, 363959748LL, 1147073514LL, + 1106664586LL, 473731487LL, 1081358370LL, -529790707LL, 302973146LL, -1165808547LL, + -687948042LL, -989201554LL, -1199222332LL, -120620368LL, -870908343LL, 833723107LL, + 69399730LL, 1204014816LL, 962218764LL, 727664410LL, 1177873635LL, -262424141LL, + 561628683LL, -1068512081LL, -453123043LL, -1119248110LL, -1147847313LL, -375998922LL, + -1027529681LL, 635612257LL, -175039858LL, 1195856337LL, 803613367LL, 903220708LL, + 1208801641LL, -35934450LL, 748081418LL, -950661751LL, -250631294LL, -1183832420LL, + -1070359859LL, -565241466LL, -1119241149LL, 461911029LL, -359261436LL, 1156671896LL, + 661986209LL, 1014707360LL, 1204253118LL, 136131684LL, 871513674LL, -842689284LL, + -96802415LL, -1208800503LL, -995805522LL, -692714551LL, -1167406790LL, 331000754LL, + -483236811LL, 1113465561LL, 556982774LL, 1078899442LL, 1188588044LL, 249893579LL, + 944138324LL, -764682622LL, 1293956LL, -1215333608LL, -943871003LL, -766259189LL, + -1189672198LL, 252362877LL, -550787635LL, 1084719642LL, 499628179LL, 1109656957LL, + 1178350170LL, 305697831LL, 976000407LL, -728275979LL, 41244883LL, -1217486620LL, + -925895347LL, -792284279LL, -1197073876LL, 230308668LL, -565140659LL, 1080594523LL, + 495169208LL, 1114865587LL, 1181783854LL, 304241120LL, 971917678LL, -738659711LL, + 22082681LL, -1220995205LL, -946028264LL, -772936173LL, -1192682854LL, 266454084LL, + -526424398LL, 1103387811LL, 544783991LL, 1094943353LL, 1198740322LL, 244583265LL, + 930084741LL, -795522247LL, -57071511LL, -1223018715LL, -1001583926LL, -704971213LL, + -1171065777LL, 360397001LL, -431074740LL, 1147425183LL, 645613958LL, 1042460294LL, + 1220349405LL, 124179002LL, 842095356LL, -892570288LL, -196299412LL, -1211778290LL, + -1082216195LL, -580415420LL, -1118371965LL, 508381267LL, -273232604LL, 1198200201LL, + 788959567LL, 942875153LL, 1228465337LL, -58931767LL, 694567792LL, -1015530940LL, + -391999870LL, -1166700130LL, -1168114116LL, -389212142LL, -1013485763LL, 699960531LL, + -48417872LL, 1231207976LL, 956887257LL, 776982117LL, 1195609384LL, -301608578LL, + 473012139LL, -1139220135LL, -631907713LL, -1059890480LL, -1228129235LL, -124438797LL, + -831333821LL, 913116170LL, 240215795LL, 1211735877LL, 1118163397LL, 526145186LL, + 1086941827LL, -588886391LL, 168808865LL, -1225090382LL, -888708866LL, -860613067LL, + -1219710876LL, 209480319LL, -549891310LL, 1109197015LL, 573281355LL, 1097803712LL, + 1225571535LL, 181465853LL, 866522778LL, -886132240LL, -210270947LL, -1221892502LL, + -1114287386LL, -544746757LL, -1093608584LL, 586143101LL, -162169086LL, 1230614127LL, + 906006299LL, 849139569LL, 1218213823LL, -242951818LL, 510161104LL, -1133137865LL, + -627309116LL, -1073291666LL, -1238752610LL, -110366411LL, -806813286LL, 947084765LL, + 307363033LL, 1206103358LL, 1163086809LL, 444565403LL, 1033587333LL, -695248551LL, + 25384042LL, -1245915358LL, -1006020910LL, -736314848LL, -1180486621LL, 402478737LL, + -345715840LL, 1198887099LL, 786627228LL, 969221709LL, 1245331969LL, -93037362LL, + 633280182LL, -1076944369LL, -525739639LL, -1133934029LL, -1232430640LL, -211396763LL, + -873384030LL, 895627520LL, 243841896LL, 1227547289LL, 1150931743LL, 493029404LL, + 1057079090LL, -672088804LL, 40531088LL, -1252549711LL, -1013115622LL, -738599893LL, + -1180710029LL, 423404244LL, -311850475LL, 1215530681LL, 832802952LL, 939481899LL, + 1245107405LL, -165283019LL, 558146690LL, -1125836991LL, -624004371LL, -1091367074LL, + -1254593353LL, -88806047LL, -771137618LL, 994316479LL, 399872878LL, 1193669656LL, + 1215939600LL, 328120042LL, 946030959LL, -832239478LL, -171973720LL, -1248777864LL, + -1137382601LL, -544797730LL, -1081103386LL, 650446379LL, -50147942LL, 1261257403LL, + 1027765678LL, 733758649LL, 1177151107LL, -458734737LL, 259143355LL, -1237087255LL, + -895846705LL, -892421860LL, -1236891463LL, 265473480LL, -449833511LL, 1182981952LL, + 749784261LL, 1020314577LL, 1264377127LL, -77415962LL, 619035435LL, -1105832623LL, + -596795999LL, -1118631885LL, -1264466039LL, -100326869LL, -765294215LL, 1012278371LL, + 442970009LL, 1189794020LL, 1242373232LL, 264192860LL, 888566542LL, -908407138LL, + -293202554LL, -1237036719LL, -1203316353LL, -411995232LL, -989892445LL, 799572191LL, + 151232674LL, 1264054576LL, 1152255482LL, 542702120LL, 1071082203LL, -690307744LL, + -19744770LL, -1274710235LL, -1093719818LL, -656199414LL, -1134436166LL, 584320390LL, + -99486785LL, 1272809203LL, 1031708829LL, 753055591LL, 1182507132LL, -484537834LL, + 205432567LL, -1261939093LL, -969653011LL, -834305987LL, -1217908384LL, 393192506LL, + -297639208LL, 1245361878LL, 910418963LL, 901261539LL, 1243165699LL, -311927192LL, + 376068520LL, -1225952785LL, -856344476LL, -955349649LL, -1260608428LL, 241905485LL, + -440952136LL, 1206170592LL, 809291156LL, 997982609LL, 1272293007LL, -183922040LL, + 492665748LL, -1188053947LL, -770704320LL, -1030456479LL, -1279951629LL, 138500462LL, + -531624438LL, 1173228785LL, 741672101LL, 1053870839LL, 1284959034LL, -105980466LL, + 558198979LL, -1162925394LL, -722977664LL, -1069072005LL, -1288311162LL, 86584704LL, + -572652199LL, 1157991713LL, 715140064LL, 1076608521LL, 1290610599LL, -80471210LL, + 575094372LL, -1158906053LL, -718440498LL, -1076704210LL, -1292055110LL, 87761730LL, + -565457030LL, 1165777106LL, 732931674LL, 1069237916LL, 1292427142LL, -108554278LL, + 543485353LL, -1178339059LL, -758428830LL, -1053739689LL, -1291083843LL, 142908350LL, + -508750209LL, 1195930562LL, 794481753LL, 1029393433LL, 1286948973LL, -190813262LL, + 460681806LL, -1217470779LL, -840328227LL, -995061356LL, -1278509952LL, 252125671LL, + -398627550LL, 1241421992LL, 894830705LL, 949320319LL, 1263825198LL, -326490662LL, + 321936866LL, -1265758954LL, -956399869LL, -890531063LL, -1240548632LL, 413231121LL, + -230075279LL, 1287935327LL, 1022911000LL, 816928318LL, 1205979678LL, -511226473LL, + 122768734LL, -1304875894LL, -1091621741LL, -726757401LL, -1157147896LL, 618771041LL, + -177026LL, 1312963847LL, 1159102628LL, 618440906LL, 1090941502LL, -733413873LL, + -136907883LL, -1308194642LL, -1221194570LL, -490780646LL, -1004288107LL, 851852002LL, + 286846753LL, 1286090143LL, 1273009973LL, 343240361LL, 894394035LL, -969784945LL, + -446933919LL, -1242064233LL, -1308996310LL, -176200464LL, -759045185LL, 1081853791LL, + 613192379LL, 1171574617LL, 1323082265LL, -8718183LL, 596967509LL, -1181642685LL, + -780207624LL, -1070490289LL, -1308926876LL, 208340044LL, -408238050LL, 1261767907LL, + 941031814LL, 935520431LL, 1260290450LL, -417651665LL, 194727648LL, -1314106425LL, + -1087197297LL, -764742895LL, -1171541300LL, 629573705LL, 39456981LL, 1330175512LL, + 1208885272LL, 558196007LL, 1038302524LL, -834858734LL, -287581137LL, -1301709037LL, + -1295299201LL, -318514874LL, -858226133LL, 1022163185LL, 540009242LL, 1221431184LL, + 1335290097LL, 51536448LL, 631855913LL, -1178381289LL, -784140181LL, -1084036117LL, + -1318267479LL, 233203127LL, -363505394LL, 1289300662LL, 1004654523LL, 887320450LL, + 1235401162LL, -522210437LL, 62035727LL, -1340648069LL, -1184179261LL, -633391126LL, + -1081072372LL, 798147072LL, 258623521LL, 1319535017LL, 1304456871LL, 329793270LL, + 854468688LL, -1040468988LL, -579399518LL, -1216271754LL, -1348058729LL, 9635084LL, + -561141936LL, 1226708797LL, 876645385LL, 1026416879LL, 1300604934LL, -364435478LL, + 214273065LL, -1334475232LL, -1123525589LL, -752848344LL, -1153346243LL, 707982134LL, + 164670576LL, 1344131170LL, 1292318392LL, 407529369LL, 905839097LL, -1008954077LL, + -546223515LL, -1241991513LL, -1357615754LL, -12577591LL, -568318473LL, 1233967267LL, + 894463738LL, 1023711947LL, 1300234427LL, -399802211LL, 163268342LL, -1351371688LL, + -1170015752LL, -697386513LL, -1111450579LL, 788922647LL, 274366884LL, 1335999952LL, + 1334543132LL, 285720036LL, 796955469LL, -1109048775LL, -698862344LL, -1174403299LL, + -1356493937LL, 173435148LL, -379735412LL, 1314724486LL, 1057676724LL, 869818213LL, + 1217523004LL, -628877011LL, -99043018LL, -1367714895LL, -1297804225LL, -445850280LL, + -918635121LL, 1020701509LL, 582042369LL, 1244833587LL, 1374163975LL, -52309054LL, + 484743593LL, -1287936704LL, -1001317619LL, -945425168LL, -1259077885LL, 560276147LL, + 33866015LL, 1378684510LL, 1287566346LL, 496820991LL, 951232181LL, -1001280657LL, + -564591480LL, -1261505007LL, -1382377310LL, 44136005LL, -481970875LL, 1297450598LL, + 1020999945LL, 935945077LL, 1251763733LL, -595215773LL, -83438845LL, -1384554681LL, + -1316648045LL, -439488117LL, -898256520LL, 1059529989LL, 651560442LL, 1227881453LL, + 1382713203LL, -151928687LL, 368164126LL, -1342455635LL, -1114449555LL, -835756204LL, + -1186325592LL, 732033969LL, 249352403LL, 1372524827LL, 1370297187LL, 266552119LL, + 745173037LL, -1181630693LL, -833696539LL, -1122168180LL, -1347871902LL, 374619408LL, + -133430189LL, 1393590020LL, 1254920077LL, 622803187LL, 1029404464LL, -951767146LL, + -525175317LL, -1300986989LL, -1403653361LL, 31506365LL, -465181582LL, 1325789856LL, + 1079023583LL, 901508043LL, 1222799723LL, -696192942LL, -226701797LL, -1389771350LL, + -1383068965LL, -270058614LL, -732324692LL, 1205190327LL, 879645462LL, 1103628764LL, + 1339575270LL, -447567508LL, 37713097LL, -1412932263LL, -1316487175LL, -517393923LL, + -934365368LL, 1063411307LL, 685188082LL, 1239942470LL, 1399383545LL, -227447283LL, + 255721397LL, -1395595466LL, -1230666230LL, -708251166LL, -1078594830LL, 925135170LL, + 515176439LL, 1325488756LL, 1422357244LL, -48101819LL, 423239863LL, -1359915137LL, + -1146751020LL, -846493057LL, -1175566760LL, 807909754LL, 381714148LL, 1375520444LL, + 1426066702LL, 84752540LL, 540956247LL, -1323368289LL, -1080008002LL, -938408307LL, + -1235752831LL, 723212255LL, 291591241LL, 1402923448LL, 1423972324LL, 169197941LL, + 611366538LL, -1298333694LL, -1040459045LL, -989954357LL, -1267324223LL, 677932329LL, + 248323481LL, 1416753960LL, 1424803365LL, 204846910LL, 636588924LL, -1292273589LL, + -1033726312LL, -1004906347LL, -1274803346LL, 675674374LL, 253679979LL, 1421464675LL, + 1432339351LL, 191309752LL, 617004132LL, -1307977862LL, -1061600154LL, -983785978LL, + -1258327107LL, 717493360LL, 308442866LL, 1416483253LL, 1445233936LL, 127520753LL, + 550728662LL, -1343533809LL, -1122049011LL, -923489970LL, -1213390799LL, 801854895LL, + 412260733LL, 1395996629LL, 1456747212LL, 12004479LL, 433967697LL, -1391916494LL, + -1208599091LL, -817655445LL, -1131122584LL, 923771737LL, 562555042LL, 1349018266LL, + 1454494866LL, -155861727LL, 262341423LL, -1440332331LL, -1309223472LL, -657911341LL, + -999302475LL, 1073238740LL, 752555453LL, 1260015921LL, 1420542821LL, -373591155LL, + 33279491LL, -1469672373LL, -1405093310LL, -436222112LL, -804447359LL, 1233278240LL, + 968697164LL, 1110528214LL, 1332361621LL, -632455572LL, -250490917LL, -1454643696LL, + -1469772893LL, -148513130LL, -535323766LL, 1378144276LL, 1187845977LL, 882299298LL, + 1165319233LL, -913812133LL, -576523004LL, -1365375734LL, -1469730698LL, 200370271LL, + -188177876LL, 1472580390LL, 1375208444LL, 562472125LL, 897503037LL, -1185644929LL, + -917882391LL, -1171526451LL, -1367393520LL, 590727366LL, 226385598LL, 1473512755LL, + 1484401269LL, 151109761LL, 517514617LL, -1400812284LL, -1229454842LL, -849926906LL, + -1128179313LL, 982347697LL, 675870291LL, 1335992466LL, 1461830202LL, -329588339LL, + 35059634LL, -1499420912LL, -1447932368LL, -396125153LL, -732475573LL, 1311810335LL, + 1100311301LL, 1025005134LL, 1257666237LL, -826775549LL, -507698999LL, -1418270729LL, + -1499028101LL, 161670664LL, -191754186LL, 1496806010LL, 1413115902LL, 533177051LL, + 844412628LL, -1253841434LL, -1028740602LL, -1109423451LL, -1315088402LL, 750763767LL, + 435237022LL, 1451774016LL, 1513690869LL, -98963318LL, 240705841LL, -1499029553LL, + -1409882887LL, -566776828LL, -863452034LL, 1251972839LL, 1034209715LL, 1116861387LL, + 1315657676LL, -768116841LL, -467158138LL, -1451454307LL, -1519093763LL, 146009148LL, + -180188171LL, 1516745595LL, 1445841522LL, 496549942LL, 789121557LL, -1310861435LL, + -1118990528LL, -1045466871LL, -1255152562LL, 879672823LL, 604089144LL, 1410114122LL, + 1504893984LL, -304593887LL, 5881301LL, -1536745016LL, -1505655260LL, -314385248LL, + -608495930LL, 1414137610LL, 1267081538LL, 876813561LL, 1109355799LL, -1071401106LL, + -835664838LL, -1297897095LL, -1436200487LL, 569676608LL, 284033268LL, 1520159997LL, + 1547849896LL, 10320039LL, 302520293LL, -1519485942LL, -1437306795LL, -582185793LL, + -839770426LL, 1305386862LL, 1129393752LL, 1066863630LL, 1256429343LL, -916303325LL, + -674085878LL, -1402979204LL, -1502678344LL, 411378038LL, 137153985LL, 1553385916LL, + 1554634627LL, 139592697LL, 410146453LL, -1507554332LL, -1414746569LL, -666337135LL, + -900770124LL, 1280118995LL, 1108689042LL, 1107014933LL, 1279749681LL, -906365499LL, + -679716848LL, -1414859788LL, -1509491178LL, 435735629LL, 181607145LL, 1562060620LL, + 1572226789LL, 75510872LL, 328691843LL, -1540825911LL, -1469776822LL, -571421726LL, + -797754322LL, 1361961554LL, 1221087458LL, 1002438458LL, 1181015890LL, -1051536282LL, + -858205699LL, -1329889227LL, -1446360396LL, 646349083LL, 421418528LL, 1528641649LL, + 1575841470LL, -188914937LL, 45751357LL, -1587927757LL, -1565671295LL, -277386115LL, + -501120589LL, 1510573379LL, 1424781194LL, 712503730LL, 907576513LL, -1310994029LL, + -1172363621LL, -1082927732LL, -1235731562LL, 1012392229LL, 834831341LL, 1363768147LL, + 1465428417LL, -643583158LL, -442606966LL, -1539704222LL, -1586165474LL, 235832661LL, + 27082778LL, 1604926618LL, 1596604298LL, 179996385LL, 381993832LL, -1562267730LL, + -1503383714LL, -575782376LL, -758556592LL, 1421758522LL, 1319478247LL, 927860913LL, + 1081608196LL, -1198848658LL, -1062336014LL, -1218088912LL, -1335971842LL, 912510460LL, + 751992828LL, 1434297623LL, 1512465902LL, -583405137LL, -409325558LL, -1570216560LL, + -1607606187LL, 232248788LL, 54551887LL, 1624981266LL, 1622948781LL, 121534824LL, + 293951564LL, -1602344580LL, -1564200571LL, -460827179LL, -620491976LL, 1509712063LL, + 1440205608LL, 771486208LL, 912564259LL, -1357107346LL, -1261912661LL, -1042694303LL, + -1161054270LL, 1156158198LL, 1041396171LL, 1267025213LL, 1360182142LL, -919170551LL, + -790995725LL, -1440282159LL, -1507250768LL, 658338377LL, 522602174LL, 1561167501LL, + 1602250804LL, -385114513LL, -247115740LL, -1630841827LL, -1647387970LL, 109751453LL, + -25932788LL, 1652427252LL, 1646573195LL, 158995306LL, 288600362LL, -1630499680LL, + -1604926451LL, -414017784LL, -534620977LL, 1570606343LL, 1528313672LL, 649884456LL, + 759380454LL, -1478832916LL, -1422948385LL, -862773810LL, -959816056LL, 1361435941LL, + 1295055969LL, 1050339929LL, 1134253660LL, -1224546492LL, -1150617198LL, -1211534090LL, + -1282219538LL, 1073945468LL, 995173496LL, 1346403757LL, 1404230169LL, -914905126LL, + -833703304LL, -1455885088LL, -1501591050LL, 752089471LL, 670543673LL, 1541601675LL, + 1576196939LL, -589503953LL, -509366137LL, -1605677556LL, -1630359445LL, 430485375LL, + 353178000LL, 1650570046LL, 1666645277LL, -277722788LL, -204361904LL, -1678924770LL, + -1687748790LL, 133301612LL, 64723957LL, 1693454047LL, 1696357152LL, 1236218LL, + 64452119LL, -1696837955LL, -1695160131LL, -124821798LL, -182284936LL, 1691646988LL, + 1686594511LL, 236783619LL, 288285236LL, -1680284213LL, -1672983506LL, -336770649LL, + -382233230LL, 1664944822LL, 1656406265LL, 424677554LL, 464117651LL, -1647590353LL, + -1638703155LL, -500574467LL, -534073398LL, 1629935027LL, 1621461216LL, 564643272LL, + 592315413LL, -1613441310LL, -1606018825LL, -617121556LL, -639091973LL, 1599322081LL, + 1593465001LL, 658254984LL, 674636449LL, -1588546728LL, -1584651387LL, -688258283LL, + -699137231LL, 1581848879LL, 1580195513LL, 707284788LL, 712707136LL, -1579733635LL, + -1580491273LL, -715404254LL, -715369243LL, 1582482656LL, 1585708571LL, 712588664LL, + 707042902LL, -1590155773LL, -1595796445LL, -698705821LL, -687544652LL, 1602588356LL, + 1610474865LL, 673520761LL, 656590455LL, -1619384133LL, -1629228373LL, -636705253LL, + -613812359LL, 1639903707LL, 1651289929LL, 587855947LL, 558778530LL, -1663249630LL, + -1675627367LL, -526521908LL, -491028325LL, 1688249446LL, 1700923694LL, 452242392LL, + 410113124LL, -1713438731LL, -1725563381LL, -364595643LL, -315653101LL, 1737046728LL, + 1747618256LL, 263259298LL, 207401429LL, -1756987680LL, -1764845037LL, -148082532LL, + -85324147LL, 1770861465LL, 1774690207LL, 19169558LL, -50312887LL, -1775967512LL, + -1774313920LL, 123026750LL, 198844358LL, 1769336324LL, 1760630402LL, -277603243LL, + -359102628LL, -1747783142LL, -1730375907LL, 443100292LL, 529309506LL, 1707988341LL, + 1680202790LL, -617395811LL, -706974071LL, -1646608991LL, -1606809393LL, 797606134LL, + 888798860LL, 1560425357LL, 1507103931LL, -980002382LL, -1070609019LL, -1446524954LL, + -1378408770LL, 1159953145LL, 1247311870LL, 1302524700LL, 1218699950LL, -1331906466LL, + -1412904907LL, -1126828701LL, -1026881511LL, 1489425829LL, 1560543799LL, 918915073LL, + 803081957LL, -1625295845LL, -1682689554LL, -679640019LL, -548961458LL, 1731712990LL, + 1771346271LL, 411541436LL, 268005847LL, -1800574748LL, -1818403948LL, -119117792LL, + 34217329LL, 1823876390LL, 1816090037LL, -190948338LL, -349876879LL, -1794218171LL, + -1757530675LL, 509658541LL, 668806725LL, 1705416587LL, 1637407525LL, -825699474LL, + -978589734LL, -1553201533LL, -1452687045LL, 1125619435LL, 1264837534LL, 1335966547LL, + 1203379264LL, -1394222173LL, -1511707187LL, -1055522125LL, -893268397LL, 1615213117LL, + 1702682580LL, 717783248LL, 530535322LL, -1772119768LL, -1821633864LL, -333303357LL, + -128177042LL, 1849485944LL, 1854138659LL, -82448729LL, -295887123LL, -1834307775LL, + -1789014626LL, 509180992LL, 719133413LL, 1717638276LL, 1619965911LL, -922347610LL, + -1115276576LL, -1496239805LL, -1347199168LL, 1294282481LL, 1455705534LL, 1174115080LL, + 978816511LL, -1595941667LL, -1711528127LL, -763705465LL, -531759404LL, 1799235679LL, + 1856165629LL, 286519237LL, 32061252LL, -1879849492LL, -1868348843LL, 227048340LL, + 485817126LL, 1820352467LL, 1735267582LL, -738908963LL, -980745208LL, -1613301616LL, + -1455530903LL, 1205624100LL, 1407856958LL, 1263952528LL, 1041515521LL, -1581919145LL, + -1722612988LL, -792127722LL, -520634993LL, 1825239013LL, 1885770992LL, 232769886LL, + -64932514LL, -1901029501LL, -1868847966LL, 365252994LL, 660441204LL, 1788224556LL, + 1659452789LL, -942402330LL, -1202915139LL, -1484223440LL, -1265690455LL, 1433877497LL, + 1627573771LL, 1008493875LL, 718733523LL, -1776956805LL, -1875935540LL, -403888338LL, + -72677818LL, 1919657847LL, 1904776818LL, -265135979LL, -599005131LL, -1829687940LL, + -1694724092LL, 917907780LL, 1210708975LL, 1502295452LL, 1256962133LL, -1466561081LL, + -1675331428LL, -965428819LL, -636452821LL, 1828042121LL, 1917304378LL, 280659840LL, + -89734773LL, -1937727888LL, -1886284387LL, 461297351LL, 819833378LL, 1762604174LL, + 1569184899LL, -1150919753LL, -1440495550LL, -1311493505LL, -997945077LL, 1675490129LL, + 1844462979LL, 639746322LL, 250596631LL, -1938225948LL, -1950415708LL, 153754030LL, + 556083879LL, 1877982860LL, 1721564242LL, -938400280LL, -1282740162LL, -1485707003LL, + -1178917124LL, 1572038910LL, 1791029183LL, 813511302LL, 405259486LL, -1927124604LL, + -1971238636LL, 27184248LL, 463052914LL, 1918486633LL, 1768719630LL, -880417289LL, + -1257280031LL, -1526842322LL, -1202875102LL, 1572764319LL, 1808336605LL, 811731026LL, + 372692895LL, -1948993966LL, -1984340917LL, 91407244LL, 555284663LL, 1909479052LL, + 1725636446LL, -992533028LL, -1377128533LL, -1440472558LL, -1068008717LL, 1685027657LL, + 1895764219LL, 628153694LL, 145817797LL, -1993941353LL, -1970509940LL, 350363822LL, + 829648893LL, 1823728170LL, 1559707881LL, -1261067985LL, -1615461025LL, -1192472405LL, + -743477612LL, 1867542335LL, 1997850461LL, 240581550LL, -283512948LL, -1994432375LL, + -1854115470LL, 793276485LL, 1252724162LL, 1583236516LL, 1197724584LL, -1627993076LL, + -1889948505LL, -722474474LL, -189996493LL, 2016620221LL, 1995263483LL, -361615068LL, + -891292804LL, -1823848523LL, -1511809433LL, 1358026415LL, 1724101087LL, 1079927897LL, + 559287868LL, -1958294151LL, -2038758824LL, 10689661LL, 585042069LL, 1955324220LL, + 1710965552LL, -1116719426LL, -1560451436LL, -1322248196LL, -818622557LL, 1876720002LL, + 2035491527LL, 240539277LL, -363540138LL, -2019352380LL, -1825712849LL, 941052459LL, + 1439872969LL, 1467801174LL, 974258470LL, -1813111170LL, -2023726848LL, -387262553LL, + 240754552LL, 2048508678LL, 1880978334LL, -851585905LL, -1386577493LL, -1532850265LL, + -1033789616LL, 1792338722LL, 2026288146LL, 429361515LL, -222757301LL, -2061454484LL, + -1889978822LL, 858044828LL, 1411438243LL, 1524852098LL, 999570052LL, -1824085682LL, + -2049853536LL, -365586116LL, 312325414LL, 2060863237LL, 1851375844LL, -962441026LL, + -1513612997LL, -1439469408LL, -866157482LL, 1903184365LL, 2084419472LL, 191861865LL, + -509546167LL, -2032557002LL, -1748678516LL, 1158616581LL, 1679311199LL, 1260777448LL, + 621699340LL, -2008119609LL, -2102206389LL, 96021560LL, 808018563LL, 1945523104LL, + 1551983513LL, -1427859742LL, -1877637091LL, -965096395LL, -253853335LL, 2098092753LL, + 2056950916LL, -494863243LL, -1186608872LL, -1754249080LL, -1223761033LL, 1731276281LL, + 2055093151LL, 530053469LL, -238727192LL, -2111113902LL, -1886678270LL, 981648454LL, + 1598125465LL, 1406607660LL, 731409658LL, -2001728402LL, -2132770657LL, 49589902LL, + 829548783LL, 1967811452LL, 1524507576LL, -1498515421LL, -1959056876LL, -860807210LL, + -68235945LL, 2140898931LL, 2012348446LL, -740113975LL, -1445436865LL, -1586583061LL, + -921528632LL, 1940761082LL, 2147483647LL, 112932912LL, -718730169LL, -2029222564LL, + -1597836740LL, 1445876730LL, 1953461322LL, 914873099LL, 83174642LL, -2147483648LL, + -2020503853LL, 767727908LL, 1501444265LL, 1557876324LL, 839060506LL, -1996695292LL, + -2147483648LL, 22535469LL, 886518239LL, 1980900881LL, 1460659877LL, -1608076717LL, + -2062444628LL, -689435808LL, 205156439LL, 2147483647LL, 1897916708LL, -1070531381LL, + -1754938961LL, -1295327688LL, -459988096LL, 2134397349LL, 2135959916LL, -463111020LL, + -1309138535LL, -1752857827LL, -1048250460LL, 1922781703LL, 2147483647LL, 146215712LL, + -789077584LL, -2047545728LL, -1523013887LL, 1582760189LL, 2082094165LL, 706558258LL, + -250509800LL, -2147483648LL, -1869504050LL, 1165614956LL, 1859490301LL, 1185631365LL, + 263654602LL, -2147483648LL, -2090211073LL, 716903715LL, 1559972070LL, 1568181028LL, + 724634085LL, -2092219228LL, -2147483648LL, 272875426LL, 1220506505LL, 1852657873LL, + 1116760543LL, -1919513763LL, -2147483648LL, -140682804LL, 871643793LL, 2047246684LL, + 1435124057LL, -1703224578LL, -2147483648LL, -507859441LL, 536473906LL, 2147483647LL, + 1682679390LL, -1468861267LL, -2079500736LL, -820986357LL, 230902361LL, 2147483647LL, + 1867393914LL, -1236871993LL, -1965465687LL, -1078550662LL, -35268439LL, 2147483647LL, + 1999784802LL, -1022660976LL, -1846084892LL, -1283082496LL, -256893594LL, 2147483647LL, + 2090992504LL, -837195208LL, -1735245884LL, -1439283130LL, -431999921LL, 2147483647LL, + 2147483647LL, -687877209LL, -1643456741LL, -1552514842LL, -560459856LL, 2147483647LL, + 2147483647LL, -579452313LL, -1578215145LL, -1627673322LL, -642921391LL, 2147483647LL, + 2147483647LL, -514808680LL, -1544416984LL, -1668405339LL, -680020557LL, 2147483647LL, + 2147483647LL, -495594185LL, -1544699132LL, -1676610584LL, -671868452LL, 2147483647LL, + 2147483647LL, -522609569LL, -1579641952LL, -1652169039LL, -617800840LL, 2147483647LL, + 2147483647LL, -595946814LL, -1647775455LL, -1592859181LL, -516395762LL, 2147483647LL, + 2147483647LL, -714839763LL, -1745354076LL, -1494472885LL, -365790216LL, 2147483647LL, + 2128044652LL, -877197553LL, -1865902521LL, -1351179763LL, -164344062LL, 2147483647LL, + 2040106599LL, -1078815259LL, -1999594005LL, -1156230616LL, 88307530LL, 2147483647LL, + 1905766400LL, -1312306874LL, -2132596741LL, -903099862LL, 389811741LL, 2147483647LL, + 1711876024LL, -1565880572LL, -2147483648LL, -587138971LL, 733338398LL, 2147483647LL, + 1445841197LL, -1822166519LL, -2147483648LL, -207743400LL, 1105678171LL, 2051045622LL, + 1097989236LL, -2057402527LL, -2147483648LL, 229074833LL, 1485498607LL, 1802743966LL, + 664663583LL, -2147483648LL, -2147483648LL, 707966075LL, 1842196891LL, 1445509003LL, + 151877054LL, -2147483648LL, -2014016895LL, 1201818828LL, 2135932772LL, 973190067LL, + -420873838LL, -2147483648LL, -1654298049LL, 1670306599LL, 2147483647LL, 393635672LL, + -1017350082LL, -2123433560LL, -1143536174LL, 2060338366LL, 2147483647LL, -266008259LL, + -1582996460LL, -1750495852LL, -494738536LL, 2147483647LL, 2147483647LL, -955190329LL, + -2046606124LL, -1186456869LL, 251655421LL, 2147483647LL, 1748361490LL, -1598993791LL, + -2147483648LL, -455360086LL, 1023427064LL, 2140824013LL, 1103365586LL, -2102727213LL, + -2147483648LL, 380548096LL, 1718047409LL, 1644250791LL, 271875346LL, -2147483648LL, + -2046340805LL, 1218066862LL, 2147483647LL, 883982669LL, -650520731LL, -2147483648LL, + -1416924301LL, 1920122516LL, 2147483647LL, -60880303LL, -1519551844LL, -1844159292LL, + -511178705LL, 2147483647LL, 2147483647LL, -1047656157LL, -2147483648LL, -1033936134LL, + 539449829LL, 2147483647LL, 1484537216LL, -1882894188LL, -2147483648LL, 26143608LL, + 1531945859LL, 1848886484LL, 466417011LL, -2147483648LL, -2120811210LL, 1132982465LL, + 2147483647LL, 918473952LL, -710033378LL, -2147483648LL, -1316406068LL, 2018133139LL, + 2147483647LL, -283843937LL, -1758293955LL, -1652292991LL, -128756249LL, 2147483647LL, + 1923169246LL, -1462382262LL, -2147483648LL, -515042126LL, 1146625905LL, 2130115944LL +}; diff --git a/test/cmocka/src/audio/eq_fir/debug_files_plot.m b/test/cmocka/src/audio/eq_fir/debug_files_plot.m new file mode 100644 index 000000000..c8cd62998 --- /dev/null +++ b/test/cmocka/src/audio/eq_fir/debug_files_plot.m @@ -0,0 +1,56 @@ +% debug_files_plot() - plot optional debug output + +% SPDX-License-Identifier: BSD-3-Clause +% +% Copyright(c) 2022 Intel Corporation. All rights reserved. + +load ../../../../../build_ut/test/cmocka/src/audio/eq_fir/fir_test_16.txt; +iref = fir_test_16(:,1); +iout = fir_test_16(:,2); +ref = reshape(iref, size(iref, 1)/2, 2); +out = reshape(iout, size(iout, 1)/2, 2); +figure; +subplot(2,1,1); +plot(ref) +hold on +plot(out) +hold off +grid on +title('16 bit FIR'); +subplot(2,1,2); +plot(ref - out); +grid on + +load ../../../../../build_ut/test/cmocka/src/audio/eq_fir/fir_test_24.txt; +iref = fir_test_24(:,1); +iout = fir_test_24(:,2); +ref = reshape(iref, size(iref, 1)/2, 2); +out = reshape(iout, size(iout, 1)/2, 2); +figure; +subplot(2,1,1); +plot(ref) +hold on +plot(out) +hold off +grid on +title('24 bit FIR'); +subplot(2,1,2); +plot(ref - out); +grid on + +load ../../../../../build_ut/test/cmocka/src/audio/eq_fir/fir_test_32.txt; +iref = fir_test_32(:,1); +iout = fir_test_32(:,2); +ref = reshape(iref, size(iref, 1)/2, 2); +out = reshape(iout, size(iout, 1)/2, 2); +figure; +subplot(2,1,1); +plot(ref) +hold on +plot(out) +hold off +grid on +title('32 bit FIR'); +subplot(2,1,2); +plot(ref - out); +grid on diff --git a/test/cmocka/src/audio/eq_fir/eq_fir_process.c b/test/cmocka/src/audio/eq_fir/eq_fir_process.c new file mode 100644 index 000000000..0097a2cf1 --- /dev/null +++ b/test/cmocka/src/audio/eq_fir/eq_fir_process.c @@ -0,0 +1,510 @@ +// SPDX-License-Identifier: BSD-3-Clause +// +// Copyright(c) 2022 Intel Corporation. All rights reserved. + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../../util.h" +#include "../../../include/cmocka_chirp_2ch.h" +#include "cmocka_fir_ref.h" +#include "cmocka_fir_coef_2ch.h" + +/* Allow some small error for fixed point */ +#define ERROR_TOLERANCE_S16 1 +#define ERROR_TOLERANCE_S24 2 +#define ERROR_TOLERANCE_S32 4 + +/* Thresholds for frames count jitter for rand() function */ +#define THR_RAND_PLUS_ONE ((RAND_MAX >> 1) + (RAND_MAX >> 2)) +#define THR_RAND_MINUS_ONE ((RAND_MAX >> 1) - (RAND_MAX >> 2)) + +/* Export optionally data to files for easier debug */ +#undef DEBUG_FILES +#ifdef DEBUG_FILES +FILE *debug_fh_16; +FILE *debug_fh_24; +FILE *debug_fh_32; +#endif + +struct buffer_fill { + int idx; +} buffer_fill_data; + +struct buffer_verify { + int idx; +} buffer_verify_data; + +struct test_parameters { + uint32_t channels; + uint32_t frames; + uint32_t buffer_size_mult; + uint32_t source_format; + uint32_t sink_format; +}; + +struct test_data { + struct comp_dev *dev; + struct comp_buffer *sink; + struct comp_buffer *source; + struct test_parameters *params; + struct processing_module *mod; + bool continue_loop; +}; + +static int setup_group(void **state) +{ + sys_comp_init(sof_get()); + sys_comp_module_eq_fir_interface_init(); + return 0; +} + +static struct sof_ipc_comp_process *create_eq_fir_comp_ipc(struct test_data *td) +{ + struct sof_ipc_comp_process *ipc; + struct sof_eq_fir_config *eq; + size_t ipc_size = sizeof(struct sof_ipc_comp_process); + struct sof_abi_hdr *blob = (struct sof_abi_hdr *)fir_coef_2ch; + const struct sof_uuid uuid = { + .a = 0x43a90ce7, .b = 0xf3a5, .c = 0x41df, + .d = {0xac, 0x06, 0xba, 0x98, 0x65, 0x1a, 0xe6, 0xa3} + }; + + ipc = calloc(1, ipc_size + blob->size + SOF_UUID_SIZE); + memcpy_s(ipc + 1, SOF_UUID_SIZE, &uuid, SOF_UUID_SIZE); + eq = (struct sof_eq_fir_config *)((char *)(ipc + 1) + SOF_UUID_SIZE); + ipc->comp.hdr.size = ipc_size + SOF_UUID_SIZE; + ipc->comp.type = SOF_COMP_EQ_FIR; + ipc->config.hdr.size = sizeof(struct sof_ipc_comp_config); + ipc->size = blob->size; + ipc->comp.ext_data_length = SOF_UUID_SIZE; + memcpy_s(eq, blob->size, blob->data, blob->size); + return ipc; +} + +static void prepare_sink(struct test_data *td, struct processing_module *mod) +{ + struct test_parameters *parameters = td->params; + struct module_data *md = &mod->priv; + size_t size; + size_t free; + + /* allocate new sink buffer */ + size = parameters->frames * get_frame_bytes(parameters->sink_format, parameters->channels) * + parameters->buffer_size_mult; + + md->mpd.out_buff_size = parameters->frames * get_frame_bytes(parameters->sink_format, + parameters->channels); + + td->sink = create_test_sink(td->dev, 0, parameters->sink_format, + parameters->channels, size); + free = audio_stream_get_free_bytes(&td->sink->stream); + assert_int_equal(free, size); +} + +static void prepare_source(struct test_data *td, struct processing_module *mod) +{ + struct test_parameters *parameters = td->params; + struct module_data *md = &mod->priv; + size_t size; + size_t free; + + md->mpd.in_buff_size = parameters->frames * get_frame_bytes(parameters->source_format, + parameters->channels); + + size = parameters->frames * get_frame_bytes(parameters->source_format, + parameters->channels) * parameters->buffer_size_mult; + + td->source = create_test_source(td->dev, 0, parameters->source_format, + parameters->channels, size); + free = audio_stream_get_free_bytes(&td->source->stream); + assert_int_equal(free, size); +} + +static int setup(void **state) +{ + struct test_parameters *params = *state; + struct processing_module *mod; + struct test_data *td; + struct sof_ipc_comp_process *ipc; + struct comp_dev *dev; + int ret; + + td = test_malloc(sizeof(*td)); + if (!td) + return -EINVAL; + + td->params = test_malloc(sizeof(*params)); + if (!td->params) + return -EINVAL; + + memcpy_s(td->params, sizeof(*td->params), params, sizeof(*params)); + ipc = create_eq_fir_comp_ipc(td); + buffer_fill_data.idx = 0; + buffer_verify_data.idx = 0; + + dev = comp_new((struct sof_ipc_comp *)ipc); + free(ipc); + if (!dev) + return -EINVAL; + + td->dev = dev; + dev->frames = params->frames; + mod = comp_get_drvdata(dev); + + prepare_sink(td, mod); + prepare_source(td, mod); + + /* allocate intermediate buffers */ + mod->input_buffers = test_malloc(sizeof(struct input_stream_buffer)); + mod->input_buffers[0].data = &td->source->stream; + mod->output_buffers = test_malloc(sizeof(struct output_stream_buffer)); + mod->output_buffers[0].data = &td->sink->stream; + mod->stream_params = test_malloc(sizeof(struct sof_ipc_stream_params)); + mod->stream_params->channels = params->channels; + mod->period_bytes = get_frame_bytes(params->source_format, params->channels) * 48000 / 1000; + + ret = module_prepare(mod); + if (ret) + return ret; + + td->continue_loop = true; + + *state = td; + return 0; +} + +static int teardown(void **state) +{ + struct test_data *td = *state; + struct processing_module *mod = comp_get_drvdata(td->dev); + + test_free(mod->input_buffers); + test_free(mod->output_buffers); + test_free(mod->stream_params); + test_free(td->params); + free_test_source(td->source); + free_test_sink(td->sink); + comp_free(td->dev); + test_free(td); + return 0; +} + +#if CONFIG_FORMAT_S16LE +static void fill_source_s16(struct test_data *td, int frames_max) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int16_t *x; + int bytes_total; + int samples; + int frames; + int i; + int samples_processed = 0; + + sb = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list); + ss = &sb->stream; + frames = MIN(audio_stream_get_free_frames(ss), frames_max); + samples = frames * ss->channels; + for (i = 0; i < samples; i++) { + x = audio_stream_write_frag_s16(ss, i); + *x = sat_int16(Q_SHIFT_RND(chirp_2ch[buffer_fill_data.idx++], 31, 15)); + samples_processed++; + if (buffer_fill_data.idx == CHIRP_2CH_LENGTH) { + td->continue_loop = false; + break; + } + } + + if (samples_processed > 0) { + bytes_total = samples_processed * audio_stream_sample_bytes(ss); + comp_update_buffer_produce(sb, bytes_total); + } + + mod->input_buffers[0].size = samples_processed / ss->channels; +} + +static void verify_sink_s16(struct test_data *td) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int32_t delta; + int32_t ref; + int32_t out; + int16_t *x; + int samples; + int i; + + sb = list_first_item(&dev->bsink_list, struct comp_buffer, source_list); + ss = &sb->stream; + samples = mod->output_buffers[0].size >> 1; + for (i = 0; i < samples; i++) { + x = audio_stream_read_frag_s16(ss, i); + out = *x; + ref = sat_int16(Q_SHIFT_RND(fir_ref_2ch[buffer_verify_data.idx++], 31, 15)); + delta = ref - out; + if (delta > ERROR_TOLERANCE_S16 || delta < -ERROR_TOLERANCE_S16) + assert_int_equal(out, ref); +#ifdef DEBUG_FILES + fprintf(debug_fh_16, "%d %d\n", ref, out); +#endif + } +} +#endif /* CONFIG_FORMAT_S16LE */ + +#if CONFIG_FORMAT_S24LE +static void fill_source_s24(struct test_data *td, int frames_max) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int32_t *x; + int bytes_total; + int samples; + int frames; + int i; + int samples_processed = 0; + + sb = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list); + ss = &sb->stream; + frames = MIN(audio_stream_get_free_frames(ss), frames_max); + samples = frames * ss->channels; + for (i = 0; i < samples; i++) { + x = audio_stream_write_frag_s32(ss, i); + *x = sat_int24(Q_SHIFT_RND(chirp_2ch[buffer_fill_data.idx++], 31, 23)); + samples_processed++; + if (buffer_fill_data.idx == CHIRP_2CH_LENGTH) { + td->continue_loop = false; + break; + } + } + + if (samples_processed > 0) { + bytes_total = samples_processed * audio_stream_sample_bytes(ss); + comp_update_buffer_produce(sb, bytes_total); + } + + mod->input_buffers[0].size = samples_processed / ss->channels; +} + +static void verify_sink_s24(struct test_data *td) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int32_t delta; + int32_t ref; + int32_t out; + int32_t *x; + int samples; + int i; + + sb = list_first_item(&dev->bsink_list, struct comp_buffer, source_list); + ss = &sb->stream; + samples = mod->output_buffers[0].size >> 2; + for (i = 0; i < samples; i++) { + x = audio_stream_read_frag_s32(ss, i); + out = (*x << 8) >> 8; /* Make sure there's no 24 bit overflow */ + ref = sat_int24(Q_SHIFT_RND(fir_ref_2ch[buffer_verify_data.idx++], 31, 23)); + delta = ref - out; + if (delta > ERROR_TOLERANCE_S24 || delta < -ERROR_TOLERANCE_S24) + assert_int_equal(out, ref); +#ifdef DEBUG_FILES + fprintf(debug_fh_24, "%d %d\n", ref, out); +#endif + } +} +#endif /* CONFIG_FORMAT_S24LE */ + +#if CONFIG_FORMAT_S32LE +static void fill_source_s32(struct test_data *td, int frames_max) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int32_t *x; + int bytes_total; + int samples; + int frames; + int i; + int samples_processed = 0; + + sb = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list); + ss = &sb->stream; + frames = MIN(audio_stream_get_free_frames(ss), frames_max); + samples = frames * ss->channels; + for (i = 0; i < samples; i++) { + x = audio_stream_write_frag_s32(ss, i); + *x = chirp_2ch[buffer_fill_data.idx++]; + samples_processed++; + if (buffer_fill_data.idx == CHIRP_2CH_LENGTH) { + td->continue_loop = false; + break; + } + } + + if (samples_processed > 0) { + bytes_total = samples_processed * audio_stream_sample_bytes(ss); + comp_update_buffer_produce(sb, bytes_total); + } + + mod->input_buffers[0].size = samples_processed / ss->channels; +} + +static void verify_sink_s32(struct test_data *td) +{ + struct processing_module *mod = comp_get_drvdata(td->dev); + struct comp_dev *dev = td->dev; + struct comp_buffer *sb; + struct audio_stream *ss; + int64_t delta; + int32_t ref; + int32_t out; + int32_t *x; + int samples; + int i; + + sb = list_first_item(&dev->bsink_list, struct comp_buffer, source_list); + ss = &sb->stream; + samples = mod->output_buffers[0].size >> 2; + for (i = 0; i < samples; i++) { + x = audio_stream_read_frag_s32(ss, i); + out = *x; + ref = fir_ref_2ch[buffer_verify_data.idx++]; + delta = (int64_t)ref - (int64_t)out; + if (delta > ERROR_TOLERANCE_S32 || delta < -ERROR_TOLERANCE_S32) + assert_int_equal(out, ref); +#ifdef DEBUG_FILES + fprintf(debug_fh_32, "%d %d\n", ref, out); +#endif + } +} +#endif /* CONFIG_FORMAT_S32LE */ + +static int frames_jitter(int frames) +{ + int r = rand(); + + if (r > THR_RAND_PLUS_ONE) + return frames + 1; + else if (r < THR_RAND_MINUS_ONE) + return frames - 1; + else + return frames; +} + +static void test_audio_eq_fir(void **state) +{ + struct test_data *td = *state; + struct processing_module *mod = comp_get_drvdata(td->dev); + + struct comp_buffer *source = td->source; + struct comp_buffer *sink = td->sink; + int ret; + int frames; + + while (td->continue_loop) { + frames = frames_jitter(td->params->frames); + switch (source->stream.frame_fmt) { + case SOF_IPC_FRAME_S16_LE: + fill_source_s16(td, frames); + break; + case SOF_IPC_FRAME_S24_4LE: + fill_source_s24(td, frames); + break; + case SOF_IPC_FRAME_S32_LE: + fill_source_s32(td, frames); + break; + case SOF_IPC_FRAME_S24_3LE: + break; + default: + assert(0); + break; + } + + mod->input_buffers[0].consumed = 0; + mod->output_buffers[0].size = 0; + + ret = module_process(mod, mod->input_buffers, 1, mod->output_buffers, 1); + assert_int_equal(ret, 0); + + comp_update_buffer_consume(source, mod->input_buffers[0].consumed); + comp_update_buffer_produce(sink, mod->output_buffers[0].size); + + switch (sink->stream.frame_fmt) { + case SOF_IPC_FRAME_S16_LE: + verify_sink_s16(td); + break; + case SOF_IPC_FRAME_S24_4LE: + verify_sink_s24(td); + break; + case SOF_IPC_FRAME_S32_LE: + verify_sink_s32(td); + break; + default: + assert(0); + break; + } + + comp_update_buffer_consume(sink, mod->output_buffers[0].size); + } +} + +static struct test_parameters parameters[] = { +#if CONFIG_FORMAT_S16LE + { 2, 48, 2, SOF_IPC_FRAME_S16_LE, SOF_IPC_FRAME_S16_LE }, +#endif /* CONFIG_FORMAT_S16LE */ +#if CONFIG_FORMAT_S24LE + { 2, 48, 2, SOF_IPC_FRAME_S24_4LE, SOF_IPC_FRAME_S24_4LE }, +#endif /* CONFIG_FORMAT_S24LE */ + +#if CONFIG_FORMAT_S32LE + { 2, 48, 2, SOF_IPC_FRAME_S32_LE, SOF_IPC_FRAME_S32_LE }, +#endif /* CONFIG_FORMAT_S32LE */ +}; + +int main(void) +{ + int ret; + int i; + + struct CMUnitTest tests[ARRAY_SIZE(parameters)]; + + for (i = 0; i < ARRAY_SIZE(parameters); i++) { + tests[i].name = "test_audio_eq_fir"; + tests[i].test_func = test_audio_eq_fir; + tests[i].setup_func = setup; + tests[i].teardown_func = teardown; + tests[i].initial_state = ¶meters[i]; + } + + cmocka_set_message_output(CM_OUTPUT_TAP); + +#ifdef DEBUG_FILES + debug_fh_16 = fopen("fir_test_16.txt", "w"); + debug_fh_24 = fopen("fir_test_24.txt", "w"); + debug_fh_32 = fopen("fir_test_32.txt", "w"); +#endif + ret = cmocka_run_group_tests(tests, setup_group, NULL); + +#ifdef DEBUG_FILES + fclose(debug_fh_16); + fclose(debug_fh_24); + fclose(debug_fh_32); +#endif + return ret; +} diff --git a/tools/tune/eq/cmocka_data_eq_fir.m b/tools/tune/eq/cmocka_data_eq_fir.m new file mode 100644 index 000000000..eabe18bbb --- /dev/null +++ b/tools/tune/eq/cmocka_data_eq_fir.m @@ -0,0 +1,104 @@ +% Create a chirp waveform and export test EQ coefficients and reference output +% +% Usage: +% cmocka_data_eq_fir() + +% SPDX-License-Identifier: BSD-3-Clause +% +% Copyright (c) 2021, Intel Corporation. All rights reserved. + +function cmocka_data_eq_fir() + +% Output files and paths +chirp_fn = '../../../test/cmocka/include/cmocka_chirp_2ch.h'; +ref_fn = '../../../test/cmocka/src/audio/eq_fir/cmocka_fir_ref.h'; +coef_fn = '../../../test/cmocka/src/audio/eq_fir/cmocka_fir_coef_2ch.h'; + +% Input data +fs = 48e3; +t = 100e-3; +scale = 2^31; +[x, yi] = get_chirp(fs, t); +export_c_int32t(chirp_fn, 'chirp_2ch', 'CHIRP_2CH_LENGTH',yi) + +% Compute a test EQ +eq = test_response(coef_fn, 'fir_coef_2ch', fs); + +% Filter input data +ref(:,1) = filter(eq.b_fir, 1, x(:,1)); +ref(:,2) = filter(eq.b_fir, 1, x(:,2)); +refi = scale_saturate(ref, scale); +export_c_int32t(ref_fn, 'fir_ref_2ch', 'FIR_REF_2CH_LENGTH', refi) + +figure; +plot(yi/scale) +grid on; + +figure; +plot(ref) +grid on; + +figure; +plot(refi / scale) +grid on; + +end + + +function xi = scale_saturate(x, scale) + +imax = scale - 1; +imin = -scale; +xi = round(scale * x); +xi = min(xi, imax); +xi = max(xi, imin); + +end + +function [x, yi] = get_chirp(fs, t_chirp) + +channels = 2; +f0 = 100; +f1 = 20e3; +a = 1 + 1e-5; % Ensure max and min int values are produced +scale = 2^31; +imax = scale - 1; +imin = -scale; + +n = round(fs * t_chirp); +t = (0:(n - 1)) / fs; +x(:, 1) = a * chirp(t, f0, t_chirp, f1, 'logarithmic', 0); +x(:, 2) = a * chirp(t, f0, t_chirp, f1, 'logarithmic', 90); +x = min(x, 1.0); +x = max(x, -1.0); +yi = scale_saturate(x, scale); + +end + +%% ------------------- +%% EQ design functions +%% ------------------- + +function eq = test_response(fn, vn, fs) + +%% Get EQ +blob_fn = '../../ctl/eq_fir_loudness.txt'; +eq = eq_blob_plot(blob_fn, 'fir', fs, [], 0); + +%% Quantize and pack filter coefficients plus shifts etc. +bq = eq_fir_blob_quant(eq.b_fir); + +%% Build blob +channels_in_config = 2; % Setup max 2 channels EQ +assign_response = [0 0]; % Same response for L and R +num_responses = 1; % One response +bm = eq_fir_blob_merge(channels_in_config, ... + num_responses, ... + assign_response, ... + bq); + +%% Pack and write file +bp = eq_fir_blob_pack(bm); +export_c_eq_uint32t(fn, bp, vn, 0); + +end diff --git a/tools/tune/eq/eq_blob_plot.m b/tools/tune/eq/eq_blob_plot.m index 98fd37ae0..33f5a24ef 100644 --- a/tools/tune/eq/eq_blob_plot.m +++ b/tools/tune/eq/eq_blob_plot.m @@ -5,12 +5,19 @@ function eq = eq_blob_plot(blobfn, eqtype, fs, f, doplot) % Plot frequency response of IIR or FIR EQ coefficients blob % % Inputs +% blobfn - filename of the blob +% eqtype - 'iir' or 'fir', if omitted done via string search from blobfn +% fs - sample rate, defaults to 48 kHz if omitted +% f - frequency vector +% doplot - 0 or 1, don't plot if 0 % -% blobfn - filename of the blob -% eqtype - 'iir' or 'fir', if omitted done via string search from blobfn -% fs - sample rate, defaults to 48 kHz if omitted -% f - frequency vector -% dpplot +% Output +% eq.f - frequency vector +% eq.m - magnitude response +% eq.gd - group delay +% eq.b_fir - FIR coefficients +% eq.b - IIR numerator coefficients +% eq.a - IIR denominator coefficients % % Examples % eq_blob_plot('../../topology/topology1/m4/eq_iir_coef_loudness.m4', 'iir'); @@ -19,7 +26,7 @@ function eq = eq_blob_plot(blobfn, eqtype, fs, f, doplot) % SPDX-License-Identifier: BSD-3-Clause % -% Copyright (c) 2016-2020, Intel Corporation. All rights reserved. +% Copyright (c) 2016-2022, Intel Corporation. All rights reserved. % % Author: Seppo Ingalsuo @@ -68,11 +75,14 @@ switch lower(eqtype) hd = eq_fir_blob_decode(blob); eq.m = zeros(length(eq.f), hd.channels_in_config); for i = 1:hd.channels_in_config - teq = eq_fir_blob_decode(blob, hd.assign_response(i)); - h = freqz(teq.b, 1, eq.f, fs); + decoded_eq = eq_fir_blob_decode(blob, hd.assign_response(i)); + eq.b_fir = decoded_eq.b; + eq.b = 1; + eq.a = 1; + h = freqz(eq.b_fir, 1, eq.f, fs); eq.m(:,i) = 20*log10(abs(h)); if do_group_delay - gd = grpdelay(teq.b, 1, eq.f, fs) / fs; + gd = grpdelay(eq.b_fir, 1, eq.f, fs) / fs; eq.gd(:,i) = gd; end end @@ -81,8 +91,10 @@ switch lower(eqtype) hd = eq_iir_blob_decode(blob); eq.m = zeros(length(eq.f), hd.channels_in_config); for i = 1:hd.channels_in_config - teq = eq_iir_blob_decode(blob, hd.assign_response(i)); - h = freqz(teq.b, teq.a, eq.f, fs); + decoded_eq = eq_iir_blob_decode(blob, hd.assign_response(i)); + eq.b = decoded_eq.b; + eq.a = decodec_eq.a; + h = freqz(eq.b, eq.a, eq.f, fs); eq.m(:,i) = 20*log10(abs(h)); if do_group_delay gd = grpdelay(teq.b, teq.a, eq.f, fs) / fs;