#ifndef RABIN_TABLES_H
#define RABIN_TABLES_H
#include <limb/int.h>
#define RABIN_WINDOW_SIZE 32
static struct {
u64 T[256];
u64 U[256];
} rabin_tables = { {
0ULL, 13827942727904890243ULL, 9209141382100228870ULL, 13847383506563929733ULL,
4646688091768732559ULL, 18418282764200457740ULL, 4589497290695549065ULL, 9248022939418307850ULL,
4548086706303466141ULL, 9293376183537465118ULL, 4671215262765932955ULL, 18389821454691363864ULL,
9178994581391098130ULL, 13872474804339788945ULL, 49301805127064084ULL, 13783723088868136855ULL,
9096173412606932282ULL, 13968654369411725497ULL, 140008293365378620ULL, 13697645939728147391ULL,
4485659674370133685ULL, 9342430525531865910ULL, 4723487651964868019ULL, 18332898835673176112ULL,
4693337148998094759ULL, 18357989162782196260ULL, 4534953362004776097ULL, 9298205534970026274ULL,
98603610254128168ULL, 13743006751583844779ULL, 9120702104026722094ULL, 13940196212404396717ULL,
4872485406381467639ULL, 18192346825213864564ULL, 4347093914495974641ULL, 9490564665113899378ULL,
280016586730757240ULL, 13548069301033521659ULL, 8948547805746743166ULL, 14107834197935999741ULL,
8971319348740267370ULL, 14080011446993228009ULL, 238116977354180204ULL, 13595046231760440303ULL,
4394630711393986277ULL, 9446975303929736038ULL, 4841840269215546851ULL, 18219053597636800608ULL,
4441272913864004301ULL, 9386674297996189518ULL, 4787294948947036619ULL, 18269234251854840904ULL,
9069906724009552194ULL, 13995059785443288257ULL, 149666996230500932ULL, 13687848784306683847ULL,
197207220508256336ULL, 13644260118911444435ULL, 9039269429458137942ULL, 14021771634513411797ULL,
4810060865537627103ULL, 18241404208053444188ULL, 4399372058942752985ULL, 9433648351099241818ULL,
4097061761524384365ULL, 9744970812762935278ULL, 5122526527230073195ULL, 17937949576718177512ULL,
8694187828991949282ULL, 14357842170245903457ULL, 534385256518247140ULL, 13298069953032646503ULL,
560033173461514480ULL, 13268479238923367795ULL, 8649394528357491702ULL, 14406569746831191669ULL,
5168435857949066111ULL, 17897095611493486332ULL, 4068026223473531001ULL, 9768924322162447866ULL,
5109252900731139927ULL, 17942638697480534740ULL, 4119323861271030865ULL, 9713278820276904402ULL,
476233954708360408ULL, 13365932622558560603ULL, 8743348389811328990ULL, 14316984640186325597ULL,
8789261422787972554ULL, 14276131645628465225ULL, 447206534149920460ULL, 13389891483483167567ULL,
4144965876933457477ULL, 9683680538431093702ULL, 5064458079674101059ULL, 17991363121564049600ULL,
8882545827728008602ULL, 14169341458345928729ULL, 326604522282827420ULL, 13505993675309822751ULL,
4267581128949538325ULL, 9574589897894073238ULL, 4968612946513855763ULL, 18091724430000130192ULL,
4925575273883098887ULL, 18139813448019104388ULL, 4293718070877275137ULL, 9543375497177024898ULL,
299333992461001864ULL, 13529316906856737035ULL, 8928953494903816078ULL, 14126872018474168845ULL,
394414441016512672ULL, 13447613786754473251ULL, 8841776164113337254ULL, 14218695490258224677ULL,
4973495624276863791ULL, 18078538858916275884ULL, 4235660326371356713ULL, 9596799195317271978ULL,
4208386369169795645ULL, 9620121731075254206ULL, 5019895448838156603ULL, 18036064342397336760ULL,
8798744117885505970ULL, 14266791801135832113ULL, 420552628488932020ULL, 13416402263661283127ULL,
8194123523048768730ULL, 14866918157251578201ULL, 1043197551816318940ULL, 12798269171274486367ULL,
3587967976203566933ULL, 10245053054460146390ULL, 5622309373242516563ULL, 17429155079726803408ULL,
5668153059635265095ULL, 17388375657983898564ULL, 3559007428260750657ULL, 10268940266782255298ULL,
1068770513036494280ULL, 12768744788610795595ULL, 8149395832355741390ULL, 14915571155987026765ULL,
1120066346923028960ULL, 12713097482813373539ULL, 8090214404137183974ULL, 14961115770974627685ULL,
5762105426466228847ULL, 17298789056714983404ULL, 3475209979042058601ULL, 10366395419952831722ULL,
3500786384821783421ULL, 10336871715898132222ULL, 5717385561207771259ULL, 17347447149277421048ULL,
8136052446947062002ULL, 14920329073552899441ULL, 1091104570615344116ULL, 12736981800331683447ULL,
3614653578697433901ULL, 10218505801462279854ULL, 5612792507343960107ULL, 17438533321251517864ULL,
8238647722542061730ULL, 14822251072776885537ULL, 979813566844257188ULL, 12861796316105920039ULL,
952467909416720816ULL, 12885185707350004787ULL, 8285121171407569590ULL, 14779707226937790261ULL,
5569689087391539775ULL, 17486696779622657980ULL, 3640865613862713657ULL, 10187225206663099578ULL,
5482514350769116695ULL, 17578522845575945108ULL, 3735943193405689105ULL, 10105519217547378834ULL,
894413068299840920ULL, 12938612308880203803ULL, 8333038893256783518ULL, 14718430009289227037ULL,
8289931753866914954ULL, 14766592514173460745ULL, 920617003152635788ULL, 12907326345376135695ULL,
3708603454438921989ULL, 10128916159348202118ULL, 5528989302877408259ULL, 17535982169418547584ULL,
5290867652594615991ULL, 17765091655456017204ULL, 3936569740447636913ULL, 9891938842982305842ULL,
653209044565654840ULL, 13183745368696811707ULL, 8565243276910093886ULL, 14500293120999091133ULL,
8535162257899076650ULL, 14525310012799234473ULL, 702435722078594860ULL, 13139591889365609135ULL,
3895234249284683685ULL, 9937225893027711526ULL, 5315329076278566051ULL, 17736704786290708768ULL,
3985942541400290189ULL, 9851150547766197774ULL, 5232506378461325451ULL, 17832882822328657160ULL,
8587436141754550274ULL, 14468388888438506881ULL, 640006920644498180ULL, 13188644461858070151ULL,
598667984922003728ULL, 13233930833294476435ULL, 8611889740003922454ULL, 14439996925446217621ULL,
5202431003033170591ULL, 17857906989807632156ULL, 4035170447278107033ULL, 9806999963238786074ULL,
788828882033025344ULL, 13048268519271181507ULL, 8448483499799394886ULL, 14616910184945891269ULL,
5372268252389710543ULL, 17683552328226674508ULL, 3838000129179320777ULL, 9990646906806897738ULL,
3885611916177005533ULL, 9946991248553727582ULL, 5341557470905909467ULL, 17710333644123000152ULL,
8471320652742713426ULL, 14589012856144883153ULL, 746854316924992340ULL, 13095311781452084951ULL,
8416772738339591290ULL, 14639190916227389945ULL, 793499388440956796ULL, 13035013644565660415ULL,
3797159031630852085ULL, 10039790897676313206ULL, 5440147474686342387ULL, 17625384611085121904ULL,
5462988347067117287ULL, 17597488235771011940ULL, 3755192566835295713ULL, 10086839528562112610ULL,
841105256977864040ULL, 12991350435755759851ULL, 8386060453613014638ULL, 14665969062442009581ULL
}, {
0ULL, 568999561260842924ULL, 1137999122521685848ULL, 589833262815396084ULL,
2275998245043371696ULL, 1761055125200617756ULL, 1179666525630792168ULL, 1709813571542236740ULL,
4551996490086743392ULL, 4093365957697716940ULL, 3522110250401235512ULL, 3964419511316364692ULL,
2359333051261584336ULL, 2835991227898739836ULL, 3419627143084473480ULL, 2923270271204541220ULL,
9103992980173486784ULL, 8769246759817692524ULL, 8186731915395433880ULL, 8536682337754266164ULL,
7044220500802471024ULL, 7360965568252689372ULL, 7928839022632729384ULL, 7632927380768113796ULL,
4718666102523168672ULL, 5087220157816518668ULL, 5671982455797479672ULL, 5283729429325956948ULL,
6839254286168946960ULL, 6416670280833615548ULL, 5846540542409082440ULL, 6252803552238418404ULL,
4848541058636740611ULL, 4948334975574230959ULL, 5513398027029317467ULL, 5433303080062040311ULL,
6691366354261935795ULL, 6573562385112938783ULL, 5987111374761032171ULL, 6121236340355548743ULL,
8962878867740132707ULL, 8901352301823769295ULL, 8334041934752250427ULL, 8380364299873535383ULL,
7203352090154466259ULL, 7210839806991352959ULL, 7799546963378373771ULL, 7771225820016360231ULL,
4404127935990301379ULL, 4250242530309684591ULL, 3662665828094967195ULL, 3832872504041521719ULL,
2489192475691547763ULL, 2697125423483274207ULL, 3261062918908085035ULL, 3072828667298659463ULL,
159151793960550307ULL, 418858545340760079ULL, 1008691531600494843ULL, 728151079873691479ULL,
2134868877968572691ULL, 1893180871797948095ULL, 1326995922814959179ULL, 1553480001977369063ULL,
4140017981295394181ULL, 4508440215577772585ULL, 3944784144731144925ULL, 3556663179771985265ULL,
2801718574537737013ULL, 2379248763918204057ULL, 2966544078196702317ULL, 3372692584055817153ULL,
459293339567948005ULL, 124626129572642633ULL, 690529550898757565ULL, 1040400653676232721ULL,
1858373128789327445ULL, 2175021559617438201ULL, 1585470133093138701ULL, 1289655368385576609ULL,
5126131060248446789ULL, 4667650181573556457ULL, 5253819664402282525ULL, 5695979512138221489ULL,
6392390533637765621ULL, 6868881429762295385ULL, 6304099938176337581ULL, 5807910037588162817ULL,
8649266140029483557ULL, 9218063236388832649ULL, 8629637504445252989ULL, 8081673800386034385ULL,
7466306151047333013ULL, 6951547869274028857ULL, 7518576848274586573ULL, 8048539296617972833ULL,
8808255871980602758ULL, 9068077127062600234ULL, 8500485060619369182ULL, 8219830414445200754ULL,
7325331656189934390ULL, 7083511588238509210ULL, 7665745008083043438ULL, 7892360908524862402ULL,
4978384951383095526ULL, 4824402668276991818ULL, 5394250846966548414ULL, 5564554159803643922ULL,
6522125837816170070ULL, 6730138104920816122ULL, 6145657334597318926ULL, 5957344072895841954ULL,
318303587921100614ULL, 256610050981413098ULL, 837717090681520158ULL, 884206736046997426ULL,
2017383063200989686ULL, 2025020193485504090ULL, 1456302159747382958ULL, 1427831362402795778ULL,
4269737755937145382ULL, 4369716270711127434ULL, 3786361743595896190ULL, 3706081958290735826ULL,
2653991845629918358ULL, 2535985721102287674ULL, 3106960003954738126ULL, 3241287434182311010ULL,
8280035962590788362ULL, 8434651392460768422ULL, 9016880431155545170ULL, 8847069596582984702ULL,
7889568289462289850ULL, 7680922806604282390ULL, 7113326359543970530ULL, 7301147211969348942ULL,
5603437149075474026ULL, 5342982678240115142ULL, 4758497527836408114ULL, 5038659764734477982ULL,
5933088156393404634ULL, 6175541371108706166ULL, 6745385168111634306ULL, 6519261745934350382ULL,
918586679135896010ULL, 817974673999609446ULL, 249252259145285266ULL, 329039360028524862ULL,
1381059101797515130ULL, 1499698648235884758ULL, 2080801307352465442ULL, 1946966629999427470ULL,
3716746257578654890ULL, 3779073216429081350ULL, 4350043119234876402ULL, 4304046226743934046ULL,
3170940266186277402ULL, 3162669645539458486ULL, 2579310736771153218ULL, 2607288849693819630ULL,
3576388832492159753ULL, 3910422620844113061ULL, 4497722316809239633ULL, 4147358460889842685ULL,
3329315614885313977ULL, 3013300674686894613ULL, 2449648983920476897ULL, 2745956432782572877ULL,
1047669660451831401ULL, 679880916799144389ULL, 90333870891925809ULL, 478947520005619357ULL,
1233962491836858585ULL, 1655798880813039477ULL, 2221706683288911745ULL, 1815065424287875117ULL,
5761796968237857225ULL, 5193633087362385509ULL, 4628855977429501585ULL, 5177312091034302781ULL,
5792750111264442233ULL, 6306875246004386005ULL, 6893049108879767585ULL, 6362594182541330317ULL,
8132924095840683177ULL, 8590771827482213125ULL, 9157805187066297329ULL, 8715152861335307357ULL,
8018671473238768153ULL, 7542813792598115765ULL, 6954392441770739009ULL, 7451074751904496365ULL,
5448463561577301647ULL, 5510623274259167523ULL, 4924167849500867031ULL, 4878337962643539579ULL,
6055420538959001663ULL, 6047299606370273171ULL, 6612358241812547431ULL, 6640186975897991371ULL,
8410230468549049327ULL, 8309803335859717187ULL, 8898506076770796727ULL, 8978108614461504283ULL,
7719974969369724255ULL, 7838412085284223731ULL, 7271097303269440007ULL, 7137464815938880939ULL,
3876251125767896143ULL, 3615910884025844707ULL, 4179843965010707223ULL, 4459891732314078395ULL,
3053103567622800127ULL, 3295424995704749395ULL, 2707843877443665319ULL, 2481852551154156043ULL,
783843403378688303ULL, 938362230970629763ULL, 372172866478145143ULL, 202458943404491227ULL,
1546209342646353823ULL, 1337642904492785715ULL, 1927471475775701191ULL, 2115213042961694571ULL,
636607175842201228ULL, 1094604286589387040ULL, 513220101962826196ULL, 70418087905312376ULL,
1675434181363040316ULL, 1199409495357210512ULL, 1768413472093994852ULL, 2265263028127875272ULL,
4034766126401979372ULL, 3466400055772462144ULL, 4050040386971008180ULL, 4598698930831246104ULL,
2912604319494765916ULL, 3426914017695679216ULL, 2855662724805591556ULL, 2325022925751762344ULL,
8539475511874290764ULL, 8171554672065395680ULL, 8739432541422254868ULL, 9128177977437734072ULL,
7572723487191792380ULL, 7994674345494234448ULL, 7412163916581471652ULL, 7005408428755565064ULL,
5307983691259836716ULL, 5642096764582741632ULL, 5071971442204575348ULL, 4721528541849172440ULL,
6213920007909476252ULL, 5897808155943712816ULL, 6482574868364622020ULL, 6778978919773194088ULL
} };
#endif /* RABIN_TABLES_H */