-
Notifications
You must be signed in to change notification settings - Fork 0
/
testdata_test.go
926 lines (918 loc) · 65.8 KB
/
testdata_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
//
// Copyright (C) 2020 Diego Augusto Molina
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package goluhn
import "sync"
// The data was generated with a series of commands, run several times:
//
// $ od -N $(( 1024*8 )) -t u8 --width=$(( 1024**2 )) /dev/urandom |
// cut -d ' ' -f 2- | tr -d ' '
//
var (
load sync.Once
TestDataLen = 20000
TestDataGolden = new(string)
TestDataGoldenLen15 = new(string)
TestDataGoldenLen8 = new(string)
TestData = new(string)
)
func LoadTestData() {
*TestDataGolden = "9"
*TestDataGoldenLen15 = "" +
"11590902753269689233150354381598168285439884301653504702709135749498" +
"22820526042196002728182420349529088357204660417238306617986175398243" +
"89058554712658334950193476684346485852386700738414729056846925366303" +
"62186530999220939165398112443485846282565126446889215485922169115276" +
"72762886573112854272928955063932483874322489180776605196804422897630" +
"17009130122862100057041829713626115862227422963708715260840852588782" +
"85051085095780741691779453795860957436864788437560842706634070658603" +
"11801258157625497195450083198368121497776845752889847362389717181532" +
"94017253428754083728302129554704688980233210724889632594828451319374" +
"30325488580449623390654875620721033057099393741680150440451295099705" +
"47661228944935892397320904019770703970925028624254201914245034566850" +
"76388021687880012864626114540498026558832950522133770040535755233707" +
"36271891579853433710346507133087637874805837565953877339269317292363" +
"28912283344124555826595716153198549228791598363956484738948904701778" +
"69724290988561999530960542792517585278292775962234902737317978959021" +
"73951064995120343840035873180395550329781298628514241397500104528535" +
"06271723452757166747287007919137621166285583268351203953533220426945" +
"18393689279565684225062159428388289453935834152088448324000705401679" +
"46016676213778146757997995630714193823618448021657147002967924729451" +
"02240026767976137320036557075740734611868145575943645678853655303577" +
"03411200600303999092657351359064809231074486783941846352700020144754" +
"19593074980468265154763020303882176539884759908691887148822114628437" +
"63986316608719806108203036544191614914901626022054660489269490898614" +
"88425733753814728264877502946493868461533945169243201425291774025715" +
"83732161433411500361775357148754836244300323341850630351417283958058" +
"23530543481493279653144687079195714411288010158145294739293458554414" +
"47131732773693896800389308354042463756542892844380641340218425131361" +
"61512923476105261155311604817508920231980872259766451518542194935386" +
"30822427850960384299125697179150257374531070562259207412655010570238" +
"23883497989093177760883775431495283083471442202153387299130979845720" +
"65237917566960735788235947904581201970822328116461729123403864607424" +
"79568834458131371009690071968293324379422319451258233610065758511384" +
"41086529082748118914280582614412551185159825268976218256940579727560" +
"90112440557936062300080252841020236246477429154846263073489179254482" +
"46917486153875762053876403808615582491117620602102949592993181459914" +
"99775060290979492767869954908971164273210139229903349995264498017771" +
"71822233921028398862035910210159677112251330556956818370072126674606" +
"71093402287750541724427935650221680252684251614657530243802774574271" +
"08275150934723204654798993563683880595049022347848529284716790256636" +
"81589395082455166986885306685617479556834818715335922305937337388499" +
"47418395824044769354706594248316668002781517676319426646612745200009" +
"31331555769330022558924055862770013603161505560370163851665748110578" +
"76364138339158232910601191224641966768448897122017378670638342370348" +
"40434350210421864616183565884477875712173526235700259957533552385679" +
"33579203347172234057405387407347445207373277180715360584769085818689" +
"60160188230653377674985307274644269757009235426882865616891875710137" +
"13554587986521895282752139776541929240032650742426094687755193507728" +
"60424198111246690106990686005967705901621391694613551353809453044121" +
"24574042754963148397160128767605075301610569057702972608944171122133" +
"93970479457054246053239042387271349371412397067944960515777149204748" +
"72808522142839804682113616066726741611541158158842930406260200300284" +
"90465021671542272752989413303097644040031356067601880260755760066961" +
"77800414432147202715278033906480762711027461088154188742282964728718" +
"19938661383750756183387899312294861665092939050498648334481874355375" +
"81554462667086542868737267969650023942238446477081407674667823677045" +
"19561313521042851756797720830803269886670652080861136178567536341529" +
"50018576956555588816557980954221148275885079243584529979127150426362" +
"64982300430817847505876000384915083403988776046803001036420130130305" +
"20947270547691713659548339274888096165129531852256352394625480950913" +
"95343016246710918245175894498218582003781597209628800159246219911181" +
"95647326537013109016581779675944218999701079391896178209055566935517" +
"38760246607286450635287072642902414380277972658865897158200384845090" +
"85391614451914186366927142467348387169430161548971038121090077062786" +
"81171517272680044977537452016252448769297420048389375149644634168692" +
"98920686458113031048116635596290264785418157652818954188780726093416" +
"90123478002238621072885457252827331543599094490845819175582332924985" +
"96786198778187764330802543900143960327308715483140803940974049054197" +
"92848667295800244817457866069419997315125007152350037579982284453963" +
"03761358058805524447513509196667655210500698009413485140888963652987" +
"68635626938916256526344809192020410220769371924829341129352202874981" +
"51213201430560399617742982612017122458568013982959826790800364878013" +
"74965108029826674828147112779445591530518709947133685091424138328206" +
"02447389217537204242989622981507297239931436738346378524286032029296" +
"38509333499033541261117435584044606287415263755867296480588120300273" +
"44179774904809220852136160059105314059361009574138516025910402564348" +
"81803379863262168151228455719953283194868256568880207741279484973207" +
"05705739237601191085782115565842420864386316659901223636236933165507" +
"83481724050368856060611340204250446807615229267264753075308312236157" +
"17960518442677620988938945752329768094640359212401230448688417189867" +
"22402750329428243658806936235011153522802016740426021528524785359747" +
"71521813046617370287423799846522493596198983402315498987850165094450" +
"28702409429367685726718573961015436822227305185228290219570519017748" +
"41167221172858731043625299227222234432225727104020729072815147804002" +
"47621606219884390158464916888465215170707766101564417665739304461838" +
"93553781268277847336724618403909087934616395145668902715595958036458" +
"87318797999036979605635238081998385618675577100543012614915491339753" +
"85714740513137031199929516028772862628998750723119276107465385662461" +
"36261364830807991305612550246441341387804618550016178209474068304153" +
"18919392133759217649062534014117986807798577835355277897297614785044" +
"35570602159884923102402102805305303478643715897852401671534961832807" +
"76914132209994622212062633356775795800698808412371350379941256779698" +
"18230937824340272997504441807809427491033339408912329496479037482706" +
"41724610472136129507322168631177636319917806277485362121936259356168" +
"86089893856697251353699784834095074301243936164211758495193219831159" +
"65556429451397665924861700732036865466777911145297877719568287095429" +
"42084504643074891408163907096422328122761087215344549299991076566902" +
"81409448187311457189896673776388577065219750949614900343031924372128" +
"66027365976354171436270599098154015631193525392641987958315393750723" +
"96915416421170523391734402336333383261630676327013466054285559318102" +
"62683040581644243342223558210601705428927250551073413443398571943282" +
"19162001925461558728388863758758746285566256065735502615668554735033" +
"04621640377335186047929306178827395662771794365480585466884425176416" +
"07620623567441662292181366282448878106725660956230115285032264729767" +
"38993730191482039006668605544754399934208779074679287398210814617799" +
"48293248981922534214117760438278285414133803194283976033913029876739" +
"56026034799855437860519764464349130162588804449259053899082443405001" +
"68904414400480141905196834107987468673552739451322589325118335225934" +
"34628416628308996332907749005341519147692487967481126490211068280119" +
"64603736902817172132005069326513803483540352101472837751291569546144" +
"58679468249206469699115700533429072437848699033384068551494834893803" +
"03201495845280106417580425764016948543193537566696266592685524750489" +
"02701833984096455478626107305695388989452263592047546473903583103822" +
"31586554186758487958063740745775255198797847360229448693778351857563" +
"31265666587372935613049956985911564115720218317817534932490424131195" +
"72433254106633873652864701819705930947353024460398132247608698786105" +
"00784244261605967831705098265839149933561974660804087359782806589952" +
"84977135837535846488322767243755710501974169284142946262750421019746" +
"55840055265897907369353010329569395862558821205545057760041192262677" +
"37839797884992312660400164663551370625261733649445621868510399782816" +
"95700031887140597222787476738851363081039850451820779176824683120892" +
"60312122834980279497775040760331026631564460057744557562755917064224" +
"88090920970956724367208347662371995948240368968730344435233914556314" +
"91176281340760723411397451761103335712074883202544070281414765112286" +
"82186031112110090796531114629275665139934104213111145225182684651790" +
"31055916991295911044368007888641289473615669633710234952186852693038" +
"77516691124179054412844042645471565623481946012540260978736174019009" +
"77593769210748957835802988144947921771600212733487547110392268558748" +
"78177492746143051464617611173188127780884222217536480281702525804643" +
"99845199565914228105915557597470405057222582770565267318828595266198" +
"82857601857607587057096423239257675893770797853838674369806564338728" +
"10612516333533228666682333771541707058371089978190166974708338766147" +
"74814609217634154945472697910216929090078454321855146769399802845204" +
"97564956333019955044693669275013768808279835519513496945838216070967" +
"95459697117094722088916447832710336421244495764472631850760318002775" +
"85010778122676754254641806285696874782917274906894767925597376806028" +
"72120760894630136749842425920222676385713337095080036449279814145510" +
"34835101139217846574214423927445495277046201739457042871823657076714" +
"30796751895069723816241077116898523424973508115050577462668333513348" +
"13491127407062532638100467132817791520425956845404433923797671342109" +
"56955184136770033857712373258177978199154483172870791228529470349855" +
"57864318966631188725676340888826869116903219970896979056074120815408" +
"46460734204691601187064674879311136283102249801017265690883426181128" +
"97356185994543821588874673814531940061312605858233889444113281456769" +
"43941152620207187845421467958191787236538581918253479722693977308125" +
"56230863034930010480184029917649264930111140424500771773193718232057" +
"86618483044607299188233546875837037742666313455318263594692235457962" +
"19025521797339374889176233401832045457575234948700943460030291499838" +
"59235538397284847835898234427354839072005792286574469946486606722493" +
"35093104820955373557366880198075734239840529336076153567988908783642" +
"89683348120743675246380138592392752119429256495548087055556096401448" +
"24126211457907298066639013436541513519360968860307398940671288572265" +
"84502092203027825665764556319629768088235261024366813785833256116713" +
"10320911960821947590764929391627947459073819692479651778149462565840" +
"27942085346525310622039924345882062220717182958711660995639260719026" +
"89929610253243489474246270712073655657858765217485371188979462614819" +
"73653685021054985371019429791713078207477944594894227529759653776830" +
"96084245117741979165466367018342095309614175962896344654419992206058" +
"18064606352707996012663928867931326654549582247428999722937672094784" +
"92333709952147367081409583260871873226327672195773551175141071107411" +
"56974849385264954915125189735180280385224142227377838412135478035645" +
"82928848447143428828567208707693861983488232460995550020264767722091" +
"34499257843769201969402703060874883973310900286212449093982613557452" +
"11330621289284495740039152694253916102442137122908821538352051933553" +
"68895395663372285417301895005617570541879459839634455723245413133670" +
"08007777613945367940890257505594740703633881523227169784389567747935" +
"48014090886402733644236717084113270315184047866012960007974339035247" +
"15005141056745987823551837551510070793160309544444626234880731324841" +
"66289298459726141711136139610646085736282949791152607571361596060221" +
"69632617716872537488020941560697075237470412756208200798041330985462" +
"96727672012834891596437033177747207305528268645262599989067911847473" +
"85686898290888626260901969173608439301646720311540063143957440493340" +
"57862289508771438328621400669225081112785468357374542932396932573500" +
"66666087512327045669340913054887113793732307951065908706908854351392" +
"68149687149202777712606086465978489066521698422473696028280464706492" +
"13233013531811795493190075419401298768211356862312679438324714480774" +
"98796917365470842426179040137367910650034112015142834142734952637858" +
"71765725080617344613191534142396515685654048576042222911434474542149" +
"82285272168891040514505753355215837645570547065122752938662085724348" +
"31090485126777585746371544752917957083800799292345473352048148767003" +
"08222250941450703930186206400331218237317704685775354534294077336841" +
"72516436378625939981325194728058719343761535403104732739697778498682" +
"85114561260015935133937793693486095560127671119858866529125395050523" +
"56377196241378452233086178093047517454983031286852771034829570430283" +
"67205772938204961627984232436709158756184815165890867835806414239818" +
"42878105755586485051161778608663275979743433039827718786314856391354" +
"65117533112335976916577133281233396587940753108020042899268674717988" +
"92410894443394368056142865429471890649761669122711243791896902513419" +
"90309899521617217574875166897699821162161822752796232347968754678002" +
"84407655141203057206601606630583807585616572753848768032683504000425" +
"31734014335300133793321427447723672092121457564515421673403078361507" +
"88588772781648997406239241823371784564056934555706137255275569277946" +
"46030302219536684457542612041047119185194441926243336345737710492178" +
"73712023440009285011725903183737877425690488243851336371163241527552" +
"28840184317611154456659172044726833383918097687121410947598916753332" +
"45895115512951208189502398332156269797072574202044829482365411023414" +
"51242977099042369261370772796474324298600938563943721161238963148958" +
"78202512476457123000375923203241189267722399824276299764768638546137" +
"05562084660957425616733400270676896262163468068980991982977600059666" +
"08219274272392880997274581368768317414536319475674787769378276947277" +
"47770682711891788592072819155588512964927802323958490407916978634137" +
"83461118195404684495444852664276536808978368569987766685539313956884" +
"89293786131346616807649793567409395170330564897551219520823504450851" +
"49191818853531310922890662384130751406458018053538145913498676485306" +
"18283593411535659516964020853774526294674075089492208335556812475493" +
"72429013140918091380057801853406920507586171893631920606639678453341" +
"40042424968141024088791323612683681387684675295663449835111195840526" +
"50282758243756472532130043854339087425257401013596449621431066956102" +
"90258537253781937880590079862696843587922809252716895231143092933939" +
"23357951461384799382881003215987687128774389211123192025852189835945" +
"63565959678535186507100351111709830058639491386725266739481114624827" +
"53425864488524906846645351816574526466267657905224550880845179846125" +
"38228452521044324934849846542617634701971776029237663866279245030905" +
"36084196767612532797741738076004605950968439095810995658116863710905" +
"16354153417898409854453001921092299555307280805924860022144541177022" +
"81295897386551157764595262674003906680999002807271221332540842441711" +
"50039938173718599843232031439691276286820600468927426803070758968933" +
"42397477011907288718981992433746188510139391415484888375942725504144" +
"89893536796096993596501883754360949414012044978851467539939087498453" +
"16019491130135456565489282602702906730084064432422472990302374634378" +
"87721692133104795149573069488198484512811509067969597580657957588272" +
"79661925900075493637007544576039907279191359530118505670854143431943" +
"34631206522255260507591069381153332625267393103109642927974282511191" +
"58174400500848998313128647127096903042671665514196855321142810070201" +
"10751013599232549266503069634645724694854177495907763567105093394299" +
"85176915584080888451447582774189559107127486702488251529479634467058" +
"53873527328100914127828392794178403079859597670126495854698221002092" +
"83535921611966678816175381525861915389166422572596626987233006192403" +
"81282261457890014298529453102028030991313020238054260172676193233409" +
"00314139307472708673488929419532203014216446176265081234291568495800" +
"37053471789959636476322530374566506538371285015530228939833697251625" +
"93187817598508326061050130333210293428300638753710780583989140711548" +
"57689915766908378998605365415436965757190602716455039367982256243151" +
"64164523319380092294906379542412838824454602134332203717601318621993" +
"40499791837859137046780836388103760450467050993918140398508427975937" +
"32042246508022834826517436189880625577938804368861725860344919764433" +
"01862227259068197768266194768485246287043773777810868789279008394200" +
"86309973654543557578238305154629614579366281969410938356520374707959" +
"78921645435764899057380914797886724743195635966967865109538923926225" +
"87143092129870116477490867544484113563546352440614929631897371554634" +
"08814778831995783443111309669626942372610222100416622306857188859170" +
"00222600887743275458506169356522314091864083587599852145433748157353" +
"22539895118086892506899056487148281308942510691638619494928668972133" +
"51963722418611898441788312199117145643809726272886345314813149508517" +
"95153966590441634947658745719014796878546095326447454571142632684972" +
"54090793252604994158816129089472114391114476845704199065133900433878" +
"33583678819692955953031751335706905107847357326866525532558297805602" +
"94124931133679677614250404662987797881286859937303494819119683540212" +
"03849794942338155568193723695829411612519038076612233403029344572569" +
"10736464530754262667941996955472742585936940450317774150985324536992" +
"48179772193085084391809508255810362409680333470599808429911893210317" +
"69537040611959297167847335420974711334107553526157890441260052684255" +
"76712860526253603932510808502078106971536884149918565377492816242452" +
"64396130719657695579673866965567678332965823693027321923398988257502" +
"06248780173259326908156234687716513970016512341919112287077396555609" +
"17103753001926785983192805366140920253826288926163291471842129254802" +
"10863938814644916145358589481005397006378063488288853366736928530491" +
"91755357759344927842003536273224984609417779645564842019462895856750" +
"62554436040551150436090160130917235311861774695435662090655746577200" +
"34354981878775153051567743298461244479466369783485737216651688137549" +
"31791533413355377755666144127058995718333160956553596327611032876628" +
"18826486079429461546224665793035984164077808284482169476726205223792" +
"27652128969878789764813312139034364681460504456399703536149957769517" +
"16144583774663396587176280805915059517113487252630437463559161563746" +
"09885309991841655053478477247641144355514334327065144882677070277463" +
"70113010311767507194525024952554939869471068953146970854568003296513" +
"25525864199975303269782508055012283672733004892507434192888723952215" +
"05883952521709551811126605917904626654018954308885964719705573079063" +
"91536349810632963806301366270515275619104242480016050003475979209544" +
"80585501081947325811041788900586328872139672611570674425415224322084" +
"70342821166425811970007254990283589083052419239363340609853630471791" +
"11658545308172822825149805243099483481709577420545892558740531743834" +
"53713765000412160511029616740786964241409318370249809693420521726236" +
"28078286503255152563509248048000010213844804243980360147731533439773" +
"53212918805385340208679741583400989598742649196595590754223735217074" +
"02557400702592383477277077237991372758617677040949572647080280944428" +
"73430575469333430834106893562524639997998062271792361565665577770676" +
"67903854173481956781949724109198779297450875983045048365305457975068" +
"83744680908335374552316921896353005980779333853406443691550307168876" +
"44989935709882486269463680419925021094014858311521746097651964054567" +
"20198392979614119475469018216060336267940423878502230823690738007768" +
"74056376592516623827047310539896077400950855614411004362768909022275" +
"27690155482469757804075411909555284964802759584099615186418129343520" +
"92597149716285752936521557049246338063237359056622026462513223748095" +
"64327072283768128063996020411376006961427995612184165304203437698824" +
"23822345216444822866290814600281587027296522548607494971564577230082" +
"24935282389936012913216555177799328437126780582522288056027953630889" +
"21313148027823250894888136766854471102650545803395108689883575710280" +
"10150418636886876335642930709357968474895621173950060894440032398478" +
"02863818600312340725446765010404506946692983436689641380491346234805" +
"58582900393779991966055043645596324456592535665663520366453893887000" +
"11809332490310298882686110799837553085075202047320546416218573716257" +
"10812717045135152582275360873888063086624555512991223878010670612698" +
"64221148137000375092863431653824470542877498743289469857978539752862" +
"1454961041404852510392599609636029512428762255455108889975670"
*TestDataGoldenLen8 = "" +
"28742873767007294057071810004964973786046594707004284451766271324489" +
"19867832040836128569335378295658163369019060243824616140697283155007" +
"50855911830630734996373064430243995823583616774457426159594860450609" +
"98474809914761779808138228522262887253676431571512914699858685993380" +
"35055819095893834839117987915438013014365190595120108878608576572877" +
"77527609570583122853549043071551891071657456506180628576667481514314" +
"81645691422607667843701854517350745979183173391366664068688305965460" +
"35945283624852009970666596426812319049532685572991389339597350292153" +
"18153065471861935496504710481210597662367119365360736471729660794245" +
"14156407416045423640057200574497756019572500466678460229957196436846" +
"71622343326620980130597818515448248278690893357439081544097158398527" +
"81391894630276331448220229570484290545461327036695042825839402270215" +
"09914053669557758733754684912810294144154595588556375863737807100002" +
"02469312270660708606194524137667938295162706047175718556589794349946" +
"67256317110122661145396052308977476051284527927251395494791592653148" +
"88827243865915967836458943672959194667284752152170958409648109892770" +
"44069662415877543966375758034420897024724924793393532341726671096568" +
"88364975712387821965935083457126081883693837974378437712139374376187" +
"31540928827966684300260951411285022087770595331869684086981415130359" +
"68312178321698117720298001407428478336187141039874394201054063773032" +
"21926996261798730926166761524962351469653448136691213729436053652146" +
"15545289707639301641150001957875009545468433322478023582132758632589" +
"13091148398246715134204746610300368970093256162162859675023385362554" +
"16426271600526594563875586326626237984336519703504879082870127051633" +
"30213268922841218566661408638003505428111990555161892540351264351757" +
"69672048536296671208798905693787774369167573621759693260617584015307" +
"12991930189311578699064082325047506416530445085226968756672193822706" +
"46144524609587819523777012047444699302651267125525280969441839815150" +
"25399969914403847095053717847717510826472577385596571315471272879324" +
"52653799627635487085112240160667460418577553141193495886699028645862" +
"95284503013196504049074481388346870388336263900475822022016024711632" +
"39228871409152658523429987894490354503212435536156957828134718484591" +
"11671913239107920061571358687706985050996194639608611316613308493274" +
"02761686962197254225703266326839821753012658107695302925498217017623" +
"11651127356629671558642099495982535533641519556143991826203946945233" +
"89334929020315663385861600482707976207475300555657961916400572312271" +
"85791558392078072891099872067984084495033458919055620409856022456897" +
"37981901017349679537661888116606768707132922686019006713770641943110" +
"19232727891955776828232158540681148693912870268635450698243993399655" +
"65805351401673143178157225573220297812156896782674775551446047874122" +
"54256122377947930056912478477064624050334389104324278167018625420222" +
"11914272702470978770862458443507007508091767277004227401682881897476" +
"51787574371709144476173653612626033175846859740886168564008244983059" +
"47549046664261728509341133609657548309294293534023523970336229477434" +
"04312932082991624856133011174650009165702834546035484226702506499439" +
"59399238752601859390086940004442561061248433922455569970178949400952" +
"10569134670996333736384188972960436835380445479351518871268582208561" +
"02663394631457957947213812948820244976153156142720317574077135437849" +
"77553180926770892939135916943550298381084591056161231461063909530739" +
"65506170578464263454702314169175545300974773360688565201216984665419" +
"60120467912110814652110576820978073754454315188897214262036337728558" +
"08929186058972384709367634711004520907215115854306807445704322272833" +
"03159147150123355191721844516522854791836202609369449247738493883745" +
"89514467019447472094076397570172977300123090038812685587139158978877" +
"40549824546916422409936729154570505251403946029738698310745219544040" +
"98645264917955134691737964709557044741020072642572475614225456625724" +
"30318855049192499171376996101082359218405211634469264660841245356600" +
"81120621053117679307424646113498761790516149502276891846422793615914" +
"80076770943923228363954332304356167394218321485631797230266116771708" +
"21559092203752176349871043283004494316356915117022785522202585697445" +
"50233152908279213689758520672434233610148444594748960959219958422429" +
"81345700352105347427917415022575920870929388713277985899255904848910" +
"46055333195034532039616913439982325501625570359746309923277115707886" +
"30416273262382517308467057704229946563932072875618494602041793727300" +
"69691685090938993564770504150444633217371772408793268554989931797846" +
"44968685119857207583782139619274052215332978553408209731563812588271" +
"04544528692340741353297254519120176228974135998924014330558809723989" +
"10012695494696777238014899975530743109659311373993237042149237203428" +
"79510458538701210735896427951242182644461954275073235214114239435476" +
"92646222185685601296585175422311581920720228075951604998433767417473" +
"12954158099233841837941768814911681413566812877443047893956925603610" +
"83186714789826567965409714228052521384731052420063795205402794999658" +
"34524838701617190591600319170355762664312011071376481672770703108315" +
"43119747546839337517414379442268448710729262942376069874979849366234" +
"00582836768375709094138750056727093069428896538502411547898195752986" +
"79716290985365205310403936896426931887066507424511043942612838457729" +
"60033517731993863005807766193526420865281361109196829080557755484271" +
"27713472135041295337062661694047088325188130194789298035063633194346" +
"22710595435587247468899668071851780904243504080826867033163295152014" +
"01475189712399073042896729281952266101678213810439847763097971756822" +
"26085593414705798442510005842312137221076912052619234340285273161122" +
"41665524542486378739128389512424654203847878173842270714071343061893" +
"65079487799575446841369879810052903361278586052567467990718748471391" +
"23265313197985604402075605518403212794134455849193735910217372393643" +
"04752149893189739184248628156030520227627872569229908430562061072546" +
"86127444232863963799526085697485459967506816527595698411752442054806" +
"61350415858777013674890825338326664073821068912660456519821069776220" +
"21496823010230786343018674116280606615517291462560952780271998805408" +
"37174385714967182843103999902443145979776812444091480012189418774312" +
"10177416745673052470266740707903678814962680071881662496501132474370" +
"19955202399529351592752522024191616635581997733061794881329461784263" +
"90675581840229322338046282373297422007492053049233581494505346272322" +
"41875085054316938201554611453819145336231201049095578363402844346607" +
"24315465707980850896235593525864217702731603120197181212311400423649" +
"98126202698927425793491473430825442426165539593482300248204171730285" +
"47189117974972381605533722471507543892252391653841137474385573749311" +
"61089005458922531463656391117215447418733456740833462625052496258384" +
"79465044867202885282436287623926093829189236728526706317077961080689" +
"32441406720416380253540939726809364630706313544702679711127620877041" +
"31488480084749844962122784206058806467235718210430926205002643130402" +
"65098941701278495975771872615921401802630740099171696189027021304108" +
"91972162351096454196020097271640396051286264561681228378495351049064" +
"86833472866356199787409756192064126145488119693278588838890996708064" +
"64992638801018566491673668035052991921057044222459969815419957922596" +
"86414393021107936100372295575388692456132672372974628060746766938018" +
"62074277956737931966784023223162177178578528221215797695822035393535" +
"12255879418241503301620230904085677062254263979788146471547523664681" +
"46451625788072441624638697280087788119220035341634519016338915563472" +
"68041153592867956265865185224199661069898286097385363099215063430166" +
"21592349714943278374780027118489040941847089795562587964811880731944" +
"74541011831804630894062299717960543610802525722537410367876618347239" +
"94349861198970449772078293563229090011500354575852344956129608810641" +
"20939802743928195492181442122735533698768771278542919217521141572686" +
"44977192023067148132915246291981921618931952889066255573700762253588" +
"01771986275953966473846841453590048523332786316919476571231612520853" +
"56576053563640106840099178373696285582472936147934601926380088236160" +
"87134309253277393988257992037932610401344740221333962902977502750711" +
"51422477744784623652890996654012673224762530906976179835099341488005" +
"34141193666077875200920920978956103380526778291807316972887136077136" +
"30426858008262843261823550970120495746143303339947859539857873655510" +
"62624295637432206677186029308707046871994143493958483174822273881376" +
"71374127211327946030453717784661832751244211465224864390592926080398" +
"40036296710396036077201965547119913165840011843913408720184591970264" +
"36982914154752566241690254517606793698533567148761075000676728327211" +
"39713549064527830561292642330143235159086583649612376701350022581045" +
"37858222266955530869720317620390568326454491174041939566533652204983" +
"84713728611813377733463090268848973380775655507336876922872000937454" +
"53707639474495452368919804395826323247379277009521714270304165318319" +
"07388066200278575227137969026211761018376960256196155030964565983163" +
"48714198181050746285662566710335742749586741363674311556250959481711" +
"77948663087107183877091813093323063718551471111253309217816969262965" +
"30337442708104022785981883291779137785410017843714448653777310683696" +
"28285589231908340136019578435872811561555508497040434967560832093182" +
"82775946353511233109545162122630183435139860683389156879619385138062" +
"04795944236545211156292613787670790430597073634588851396521497204994" +
"57354998908355578536774426516347093855034323095438615876665516249479" +
"20239408816102343050269380369400510989319927774122183681717304726860" +
"71289044527313522925717980643597149453853478125123969534798036424902" +
"59497858992894473142019263048516304627930340976868921259825101703751" +
"22837973584278246276881061754364908718679351347642882589943795781623" +
"38016804468295257542995118890311509036407882141826962005422926473141" +
"22365648342423873856480633916609410761007880950204375579720235723985" +
"15917741895619683659640623600998385877284359608186585604735489778059" +
"67934502543209214569420767130599626322549318299034337006942302054816" +
"73962130637198322586906119418707381832496619042537209498135854354433" +
"01905862145690401550138784364605371040720264333527495694727333450045" +
"57815938401030381015732971912291893039220873705179189328042765465859" +
"05846826570765240404196043620113946320500911232479737754168128581092" +
"59423342104728639953231287391141490719066597189572870751438178740651" +
"08244934037532388244972273444780434147605070113493615247861977960893" +
"81834764997090531295016399161245540136028027089533654205762682287967" +
"86674109479846556737142699257485772612209181311338112946265624945280" +
"28922819995029509832531782495286398664698344458054547858905020166382" +
"76038008842181134283505238668728752926594180646459969979058561823386" +
"02365115011430970744858752068828478348933031179991129479061152596813" +
"42757505519720554620157878738399954719251146244037070355977473392236" +
"26658050233544327539778314091882016298729524862439352191965842045705" +
"65578442160213214496126263938838621473731693707900026049036747107311" +
"40413164674553183386852197530866664884089215439572700394144524693742" +
"72485588753247754537449419529357640027858289565339957041019647409159" +
"81969540946709210832756607706321813435219179583597037557059971009483" +
"78066205485790378326509948924632210777983770190826155385024278517361" +
"62232851164887539363141537733877526313256552385174597502265343306574" +
"30828286850836362297231446892352012444898785985454652625696941791390" +
"66037443098538403111154989784577021704201135590894016455467824471163" +
"23634806154465282001154520685870739831111404868681306925132012786199" +
"73673747409348114264711340048486397655219927906846952196874501183452" +
"73965377590749751369909414397563058145783024163338538768940826659433" +
"33018281085431077244517247498202498551135135134442825085015570439990" +
"66869656672453309638733035573352508677629002262124706414156462899102" +
"63338170175427648195566919307109430624777386616804119202275239215681" +
"90163159995921198939192795356982046656538158275014561243466699031950" +
"13867803784579965119615050463246281463966256263121095671625564122920" +
"84178553894994882758588353197297179835545120593386790105339119601640" +
"97701611417265354793365724307576894604807078814865094755181080585624" +
"85541871934188857591190627013138912819960603371333142503376163403597" +
"57283770699023205465970539939699813618741984801257571464963912783142" +
"66300945666740924472088360614067728281229889377505295623705915219549" +
"11644095416097413058364746951510702475235321969410018216919749313206" +
"77227405382869531152962528750998315225830841046753121671237159749211" +
"11249613761934839746832955658309785132348416836715972306288931803877" +
"53489616252298992354760663121233169746121979982360970494524817000891" +
"55168648063453040064453685602526942483213271478362790573024684755651" +
"82301146879198890797610396537905398474862112216952926454813687906149" +
"67741901148025395786695871155585218366273579534711721547477034185206" +
"74114858010810319647245054970177930903065428159327867883441930137868" +
"14596922554150696340593428680540823586512104887461228867427339618051" +
"09939504356175733182293373240253503546114406814737369028187613899204" +
"08544165641238047095475554365272595066487781414157483124131760810232" +
"40231001468627406487000552688614384223974042375286563957842144325971" +
"17746950001321507945819750301923538482478601521607860349160058822700" +
"80387829638801431504146976763370040590903971088631775885280512836263" +
"15950112855809788337091396725522985068175622676230545564307318990087" +
"97480119186843711059552350492895678023598316073148292679874598720748" +
"70677123617414180884214444038493022011728912383191591425189707832353" +
"99967811807768225394859555537931712772763200778099212099179854250142" +
"52474719744430967674475154003690024761990563776673236318730349055121" +
"41975586074113947126813774561512919269934138240041307953777599728967" +
"09978687821439990543352684016094453219696445664528419028476158938768" +
"99626250213599415922461134404869922944486571848606718443532863580295" +
"23211849189533237545961371771847219857637166124336021039873494326182" +
"93198535633278439502135511469051044366081112181942109318992922219640" +
"96421030561300412811839573576118414371242472980751004495285584259149" +
"71679997811650645533763679048536701652968055556545769191515824685045" +
"55985415722387454625490081453052454979158493240807041540980235353041" +
"71486178122300611465533232518847380535865069847517806611771778146286" +
"23158829108943765680619319027426400651131994770847588347277794820597" +
"00415523203210782615592740550836646494340932493399605935067453056566" +
"84372843414979928761791921595622481161202200896835613230358960343008" +
"04838147281948858407236521766478669450362444246414158336702603839699" +
"39152282327995254785852457797971414127074455445881129136543805898602" +
"78937057987801512500483390853791147269694999909466535138697763684598" +
"56637587355764084018243627387691673407368166373836764619407170212922" +
"76721554615893912149473236856278259726025639386167536944952337449770" +
"21648165042116881942925513730051094935010801500920091347121010141810" +
"54407170826175025485202484804005432063294893099946595058791966936935" +
"15710074811849906859897181732756953830549256418913024955694142041959" +
"31896022742289840626799837267949933938773058452154148401516607427282" +
"63243666023009259241487271303867933471023975352270286143153534885990" +
"32014860430523774712655532050265916449100171716589647619686771398569" +
"48336557719482662006466240159078017503617234283715910404848063489099" +
"77812398294313866945909011569564889102100068436424409927704254940444" +
"63641538010778186487523805209112140681360353500815470071321028940455" +
"35153424742198617110521941806447469164629046596954087306987845487491" +
"04314456806076836222059486351305982035147396977230715350971110218359" +
"11032226535504104245274241716152372043015150612931993135714351426919" +
"08741629797868210539397748019933627990307500713751112019856006366689" +
"04471958991177170037332584206513299938060343427596333626746568731290" +
"29610262578321087702826567659175069905787331751771854915733052004169" +
"88663820219993560755144056378455906097176819890803782249214357576850" +
"01403427989868165244920285379992806246530851015377917908662385945455" +
"88900784641052940466090532162635179072690439227259307569806403359035" +
"98763185475550400178295857283745924714009015728525142553931371796550" +
"66715569690962048544922454696917301525214354908468362169681491227965" +
"72939982221394982591971897110798385518669670541872067387072403729055" +
"11699860592583301916406025697165691375411965743427698264916118387596" +
"70319435912578021424366391658643403529646520641521343914587638699786" +
"89913227594784221325080399996799495133485945726823743713316945169703" +
"80013102220161118140663845183695860302003360983039167825112103873809" +
"16910189229963023252969907110606817513479567826313575637772711573730" +
"83224962398292506925514402152055906166174153415743868522995095564138" +
"16225952555515469688598633909283768638047548170418787246807725220230" +
"35026830194056655134905380039102437895411826239462248527124835070715" +
"91503408684810768920249119337842657448883286455935141051316494581887" +
"94739825737562737961881259403036493858788425266038226012487262947892" +
"60603376158823898641675650746247358967897250983621595126723700656639" +
"58929209645726794756703926078144727673149381775312150763509127160741" +
"34822018915378379111805623036348548880222125800569345603660403886057" +
"62710507865468315085786333153649201197308984850927611247412187610379" +
"90613855981911309343552544768073817046369819317240351245227046481171" +
"14828315370371408811748128996733818833831409463246313630952018742288" +
"38088126197853565649563219415042888178614305629223620484098589717431" +
"20869852810393670773316854239454743112493288845297970864732254972680" +
"38440396103866568808878392938700414607523828264868463494054402373026" +
"95418868705473588084583443224734231218536927825966993873478144877843" +
"93234388432346664481718333148453278071448101004331169651408571459588" +
"58070250701139509785899315247159991418252250074880642700887044145133" +
"42608289865988731130989961604455212133673652242384437611619032931439" +
"67328713788802351428386775620819493272683277010818255387484414910494" +
"61034758311720052970473711315332042192244465496120085112371150606133" +
"64309647954170072701675794701154037664857061936678943495415028019449" +
"95612735568664444049683561187587714320264198611325415483606140572781" +
"39678030837934209485312261210733152739490163747177319494750478614243" +
"46489116399679273332386088080296996769666246913528451388771666722547" +
"87583316854988322230354582890099148638833785951940345733158720816756" +
"72216436344331540451324504075570704341940822119615347239263328227285" +
"60856436634939774462029411091377699689592763679579473536728828204585" +
"86178686342091247901867997743204084814354460321105733360446221628485" +
"57571430961805926443608291597090302511467281045117029783017348678527" +
"41415710219015439917060167395901179533789299106079613054459630086392" +
"05387000342362177115204163287923824802738489643011210760775853981234" +
"58449618986494911317359972256357880251379733852848599674218823954600" +
"86175816031479794204465743033339580595572464133195240883989334892675" +
"37851044538795178709947030150907278702438686711804304089242054210072" +
"08967256075807878411959135973464324128614156773643852615125281628167" +
"56038113090859001515316738753840491950391406619364741444447873206579" +
"56631651011647487287615208425084872415783099673289283171412300649474" +
"13704838713683463782748494040163909356309947293346493408511884030279" +
"91061935623310033615077463149040268706406475514317747822171457329878" +
"50160772814174863482190943661729687541335625767682972266355368783290" +
"67623606386782575639959957967862263132524361072299714754202984538750" +
"87518741615723835924428951269503006542609019217199432204694880515362" +
"65077166653681660761405218673964955528362372031802307357302622115721" +
"66256443593722030079966601573266147326889996809623209210284116455892" +
"25882490816425068290308777787735514697224609852820058057216686616434" +
"48106373831443164934891744007574533410837015345382777459306790574968" +
"96451398149462478267211823733109223460224207963751432764159161993919" +
"02106237392638369941832649720590899108929538750125538348637218067599" +
"06773903169051311762019242494740878961742237238009102524765142715497" +
"89663433600742718554775932499594839800974745251351040107586394933489" +
"15926947661248713368167148048046424825088756509288305231738945983929" +
"99389721578334049999226157975248691907545886188793993451978113611768" +
"71982685796619268562564598155296490929083192242638443753350088447386" +
"07990807454542184644754516156215750617184213135561404151515320462090"
*TestData = "" +
"40032748140544346623623361117133525270172683740001601213624035129168" +
"99833281347467493458547968693478995805185547707190680343503042045920" +
"88162846445173577635853031248562084012741089444611341260782898988870" +
"75816956068114716137187065135354649594053144981023951967006969010012" +
"59370743707352104414764549346416967403944770024512534042368307522188" +
"27012850144341764020689048582864507212670169229564452623362555285015" +
"28570488298697953011613336570288795698252317449178766479211501030181" +
"11950587510275314749254191646830980104343851517897624351249741888098" +
"09073138715420153918857956634309453138880641067252216781754543245523" +
"33739848146115460800441822168850294557941581361997034047947696776680" +
"08388693187833179337632682410048751753546332011425924211174493137116" +
"08396918203546911894723012526805012188081662313873158594017614679128" +
"13929581757585287482467538804383099348064607594358474811169400773578" +
"85873564504220924663914407109921224552052721134371593838336868763130" +
"28789572545712290261863648664294492128763431636125614038457976010599" +
"49269516547930383600931581857298040618623134638097740592446071469578" +
"91494513070275335958002905451834223419933279695633913363920270472187" +
"78112129663967103579916147876945544357702011441939271389504073133236" +
"46350772452811122200686538808801488604577131474643291001199289729968" +
"08448796625480988288555713695742308226790913085796729977603801203918" +
"86792090357171555091294954445554167378792204970974299022823824407672" +
"85752364310488509315699496264113922722213539174333963250799096016979" +
"91039006445003025152256066624860278429737727045743294622183847251250" +
"21975833916372625143239131049161769331614521626943187818015193754374" +
"08139912752293154540469851599651294481637250867768282934340790012519" +
"77168514448008565393623015569048415321822847286085620220756853778977" +
"66701572678824732525987615589660322473930393288158664054267689632892" +
"99239185345054745622874050107395224079616849814942991798999576044837" +
"12101072162635044709221413992586007190139370134781729350645074448952" +
"64674098921680859623516010742259785562031869792138711798889973758226" +
"09661015414674012529857311937490425733889896169617905488933111461433" +
"37730833909461011610323876289672623013138565932704698337780871470595" +
"84719804487803515930133642160544702518308630831742842969203410956978" +
"65674829240883954662864228459393962042952880111836824655018727210457" +
"99460610492001576203235017129618728347482941178486827423365759569371" +
"09632702642914601657160933199176746330348018336268871457855366138721" +
"49047587407878502647481118613912889167926722575785157664757562173882" +
"23400842200142184569222610397218049470299445223827106031180791909334" +
"84696572073189500110123660670768227932628507513202577277306482665804" +
"61495527035517237181962293411734209994533240277983982029971839969681" +
"37553589346318600888926920915776695667572770926673642448111839898802" +
"62860612209881880886610375811687855394872056657732966328506514301491" +
"66351487131628279074232179294182888822358272314187906318198216021598" +
"28244313569845264335161675058482880419582098181908000920352069606760" +
"30255009813564638032279789914522515621292348495508855833844778160510" +
"57091390589230316550696413350917485728748888119057905755769377011114" +
"20364249562097008373957683300941738188425311073465928131464391621076" +
"94166855915151850349062914931549486056730987839132941148362587610989" +
"96317740021389875141365236611530567824177702185889119682671665562365" +
"20117402546316984383187423828760804026042333228750683331750616255948" +
"79975636341220923798937065761781559914511160240884410641737810207046" +
"08539501750548194344316616668649577401996931760771041614727151364029" +
"27792521176137326598891287802501151389981744184296980734595381809281" +
"05495860834081825047818380234010397327286424366542332359063812054597" +
"34963694385611400973430372832524154895960105674948315814187371115746" +
"74217696801233098165874112857332354694634389103925614508411385175489" +
"99130355800171349063162291171049714140372583059470667307860867119997" +
"58571641337263373630947469902745187053466447500336427567453188109418" +
"23967291793676144432766864350721596821801886729621335735009059314164" +
"18347063076594850250917855105686044334705611719706300671236922146109" +
"23801004294647162075165451529271926839434445773055831125721156980227" +
"33422105356066184580985981488038863392237601916134870735857086341796" +
"30105452273688862580922115451185287678833245040793143962791109954890" +
"87388140639971857744585185751452946748017605180907815330825745493439" +
"08302303897510217026125764593938683175044127226200006371708350939419" +
"67268181609876656157879689728067401800564452611427918163502103814636" +
"58326111659976287241322646286308273109750185012530253071746664272027" +
"51297021378524525659016615322321392995811797641316159786723270166811" +
"56688361008014422736139578864702708517086094793801622580702708180256" +
"22270103521336704559560170180495812466988352211120489054914997756319" +
"98074417188148537155604213005930695927379597876593890257471939954459" +
"04927865504233539231983335893465878659320878455454884751588921251619" +
"83876177639785561840664771940723663757174016258988697791185603861280" +
"07350131569851350866130068559489416173148293087050586401829284245818" +
"08652610154335701034645010142723365410570600875539976221614608382322" +
"09742008520328272512689751969759151623659589170503879835270050581009" +
"16475569572223664123906433813845351867493720263573088916970323462075" +
"28084792597250477658276044930763012774982192419090505445129004617728" +
"76744429458230414009853474131835108402962360967286550109127055675486" +
"16192139196667114577386221803921647123895788821265427677637167421233" +
"91091409928350357304182508894925717378309275223275903518324602436412" +
"62767311758636003445726984327831904359728678792072959772922025018247" +
"89679744495850119164754849121530771127146176530661237114622694484766" +
"46838636324874417243270445815806817095293819619971468923914705891709" +
"93135006564425851151975140924225120453674398134338041127732823317926" +
"78737829108989682968647107656865517920055828870046452975624975159348" +
"44048545319156372615880791913092815514147754046051953158907538078468" +
"28171906701621692729622233459670078119281231608906628049764658851014" +
"25449803311463654265274117620795414611301593733532441114392215335940" +
"03961378226054183735959887099875813330961841127182022177408046410417" +
"03369339992424710132149102472110224585402261138061389112085427629136" +
"79251411660284305182070241122858104530274951663357011974996082146146" +
"40667574570188874145080221953708679181703273109942301542017602574042" +
"45468136836952261659091126677909476793062161044707082876736566801256" +
"31099768732181941081993670502957767147373914625978946371714318297046" +
"99569072533827111708530746153098125064673285297262969724490359161016" +
"02447166006899079852123310096955143053256009458940466378250901415363" +
"28197268206620524941974419433981015449018540595974769276812961106877" +
"64107432735936191968784945301481342174324374481893729658287538772525" +
"16061759490960152814394165162962734382131276556485521886921597724800" +
"89633435923526107175427694372178610927820543349994357724239757374833" +
"28321276475953686736413079937902304149314327556743184378178267328815" +
"17611843173016148035231066041188306509760409148493648239460532322601" +
"66417015985479515473444162031254413426712138465813018933117793790422" +
"34922946123022790283705295729982356745351875478787018156647620131224" +
"85042045124066871808732925367930063154045188888892691745948835551116" +
"64410684490610143370954896299875224182389327988006020314762826103716" +
"48879780917930736213030352259769226960601201695644631379819988214593" +
"86791036469351604367403343097055179458719158430948006856989527692566" +
"09526549177726571401325924968344109383629167573457442081866273991825" +
"02831276985669873028713378048915360499546162862823501704324762557102" +
"37015404970379112708908014401013490363148750755999458078388327561530" +
"71225607963613997946610282887505314046525175528018257344549286043219" +
"00053402932514929662403646167508145053033293304068011551328543700206" +
"16981472652044464082185792349501116302485061257747876208841014154686" +
"07946372507973100888174152529499302829268136937052427110364999816631" +
"97222873050606532428650512883914023755607699112638247830166555351721" +
"47531276627300244971779234228178647592141352044084739111961294179219" +
"27159146471511386691965416580572657364934518510221737588915765210140" +
"76132216717489714832939723124339837842432574677560013173820510183091" +
"58140836200596715331730795674290851755338731211611071258591791910053" +
"19379753833203917460474004692498155699975631050191155712310331528055" +
"89521410051122069935888994285558233201838335628211893164386805315161" +
"53165391930558914481011921568007212231999995526226071582057608226764" +
"55631344636055176137191615391977738879644393106123516103366402731401" +
"53468473849415255818153722894765102557348085421011946910561318159507" +
"10193674207851912759741310110391236524417815869940589015900268552655" +
"02237084152391699630559437004136458090937446433308972979446575570550" +
"34312384233876435706588149648472852348121261148207823128926113110417" +
"35856975671562799137568952194406614690143031187531556116850402083487" +
"88769132303492492256585301693434256344307659568983819968849755172316" +
"19556470627708645224087768091250715733486809307444823770710410748502" +
"84611129413176706536512416096101134279483511087214095964091401693522" +
"45154755796481086017471733538588216223702043195288432502581215934755" +
"85564844391977210477831297886422185064031215150212927876740098169015" +
"54636460690585605559522548814474800940714532470713478394599515993140" +
"34107028868355720681118605494101413288899147192956785473331537833309" +
"53692861414297086421004359669571175835655617484464010893134449919813" +
"63911944739977042491897166314258748993952128998524219128516389984313" +
"81433724780542778837067559512473117656190289871304854700831225477633" +
"74316699232893353537828532113654006731474113212274788345233484101967" +
"83156630686238165919022844913755226440770099955090892850840746935401" +
"54289990120534078074226179649684774354014318806214702200965172119797" +
"20394654900886234824280328012543215497116489727120368369151553849040" +
"86581575716691070413708401221986092042231062133617671231708312110635" +
"27396494802211447820047400846745126945588963202886261581142104012899" +
"13981208599013032751512313059668749926212442170330808035337631031317" +
"89506591853286046486746278622415963652168876221402904116646642232774" +
"69826628173023444988784794425082962482773633300354323118969376669941" +
"00606829751616593456786674923416239265427592881460280654284321528497" +
"15427045391545398381142279470606781481158541732169807819821999493216" +
"35378039224382374850109497131943868228480354375946424363905156644100" +
"29040684169378236161486421980708754501157365156227460492088824900504" +
"48973366181794296495598062066400897238743953462237251389216833832212" +
"32855349645107022588857366916617210631839508954319710100611097941370" +
"40989683341709287006418152214319667333384098992953566082597548805518" +
"31475066481304967617850421636145128653118561067260966681987301193864" +
"79120737133933107548370968661133434304608859751594413752519524733415" +
"25517047688035094513757019709781780161760361844821124811212082869164" +
"23594334299246010720780722861425584654014245703961187097965757560631" +
"38874644524982891514008590691031157993711322796309042317230557349092" +
"13585764784117003082443190284295357828863646321301068074544745499017" +
"13860022347294811894431734634359134179360386073989257381142976809863" +
"53697441840788033539880870338464873173715387906648206890248449938104" +
"38103972173507456133973657099144675861339549791918538634515082964000" +
"57500997223268115474089245643512676958882886593143112126455799036472" +
"15468673871924870412304360210989000347822256399373109389560499371563" +
"27554381745799821941695607254555541460440768731779834803210511305466" +
"66196614776347139402154324494392000975850358019323838526643203549031" +
"33427123467087462978075351573348500132053973613734482399555806371082" +
"48894360974472777612276266474131273168534811755319453713338951459885" +
"42771199791972021911583212939176053990616906141223985547781925852008" +
"15611853269050215617065658107804683906431613810669762840941251075683" +
"58786156281305935439962938580935025508150396129614909465000327351635" +
"20148614409310601041592622014442503782943339831814868041127070000743" +
"19620464068377820457208779049248612687318803936426737001895890140220" +
"72628022640959136736597824493034218773017112465677502121775271297505" +
"92886590031825652219041511706297688599731509354149789506676768044912" +
"15861899652587736957423511589464230089618712202617234411519571508974" +
"24317623269594740317374796447414946698938844433072552178502261094361" +
"36085656506279583437729198645123505893345183694121709491364066288114" +
"83408405079097817477354639953491271914496612017311873347572038681074" +
"67544447313636250140671141220180043896539383752486701682002170711762" +
"37863694684911922011647230176277469789148245985030974484909492922163" +
"96174176486389710261224686001345701778678623376227950987726017877581" +
"80099230025539994031432014515101882238815984001213946358106129033560" +
"25578805667166993880755677517671375479888742334269621933710239868437" +
"71664711624775768975615939210800701739437131501311270980736736145189" +
"85801794403316325232898132589800472483772814555204112223669770665290" +
"93941723466146217335694448445013195701691415500047872508397429408087" +
"44776071415451647477026380610660811963113200224750887600899222495642" +
"30331919999312416068299013582256940315505113822968649755145586778612" +
"64350519224900300942308264917735846874136263194949043822869909287016" +
"48239073553904688678314794404298568472146001756068926974122562975237" +
"44673131119524531517191502963758801670917974342473497264706524079022" +
"82341782586839121164989685458898712552630280529894864231833453300374" +
"78078278506974564255666218850457252282909021287549872408422869053174" +
"52550411213893102492659274276371941058672740289875699101528668956671" +
"26472926841967742599458390331723514987068012808757256231237527684166" +
"30782303415966900756168018840803328412736440506711737485229690185223" +
"81307688247808230157615488266070698611714288581866430909961451976530" +
"73910763536457660276688354337118007830112220524441207147146446480321" +
"46973490633266894156120951484005850014990927838097456868855356244142" +
"64736726887648790184385183827854531609905143883895957839468078365172" +
"81945676608663839174558349491917654037132710354379569857173211691283" +
"49741610551111089369895838842863560673925338610338184763251959367135" +
"24725119670249672180385486431329391115091742368504388774133246136331" +
"18125464352141406898629078013065873219359259793281927053066428839860" +
"97377959143340787155396991887583619367962943694425208993430794317470" +
"76076108589396904982561472570225418668212574936948130557052455411739" +
"99262242389738118439462982013056819654725764885171458316842738150400" +
"39823611953537285867548264138360453999645254801740681809260638601616" +
"00374742333256876517971424743081337205872059049983656156198186694695" +
"22314631220554975127250569468386437173551179456731175886551202417335" +
"68725033281413937062957702453517181590348387581021371347361316580389" +
"35440373451498585180920897021186591832514164865005250138760644758418" +
"90103381303701719526088205636110155150273732495458569019119756094564" +
"63563422655726054421691481853012052184437064773507458329669963844240" +
"56920817635816202845397464697193756984820272876695314064692984893067" +
"05197151218465715602822010522559356665485129763995059181638151269671" +
"86571653396512669523329296833126880351395649866715839573403095748388" +
"44571670486089832890811786782497322492152252017338865746614189441088" +
"49484654684126416814059186585421096991352432558969517217442921197819" +
"32716663146500945957541743417092558014116705280036760429108726966898" +
"31525388631819965932148375091969879110030024253837246983643931433982" +
"21832622122045546970976269146319829511634999703292892998510672154339" +
"20622668313640378808373815940268553795381217410315283883414267945640" +
"99831720211301568291377190291430504602012373278235680295191126747249" +
"64100638764665861373474097310583212073722634793485945874619107090114" +
"76699508153791133118262043154405821369270783306362514839118266590553" +
"47061598123592909370230736017065721789563018173080924867369399693809" +
"51145703229996232935561326811821947113037172998255399221757540150035" +
"91981723496267014400013612747184755956296865478205536104446269215702" +
"74503449162776110005222621034977684104194531043740050981082007577797" +
"39450625579335141070406097139637631849162420611001647712281391255114" +
"97918611337521780158666096908900234261243082533018678859028532720859" +
"74650755717205197960992826313179756847170921502225623874393877536278" +
"66561040426463055276231504589954750712371308973237024510684270526238" +
"62483396428020578196467359199520899959541299163877887624027107342510" +
"94794176335080414461166857028363473164160091720992710678092826242119" +
"91637812650058999633414660369410506959136150719770032350308421371363" +
"04140478895518401381312823736378829211315342034297530832756719549055" +
"38749879879085370075377101588284009272392786220798487104240774711379" +
"37092242823471771616543419406066187614707025933915707883167095988616" +
"64388330172386378471191808941321041846737136072012226707844460775425" +
"11164836687051019811726300724415234440548702152188579912586210389849" +
"12955253913842265830873710725166302529178768276121598596028830490044" +
"21404168853813696856913372860296733179869507821038666288255131528565" +
"65108103037543378570922260755914568454297156669885180864692516025113" +
"41572469529218108954410782443349337224208140056075637085149721676451" +
"21594268278369295751802770726511240276751947748848269883965003427155" +
"81252553926985390846718280602964453120003184251590386271127901323298" +
"87469165514112408894998137293148677833334503039562846641190792316958" +
"33150989809843077911868240509134838452138319785212622089708617030612" +
"49600204803922085776427895681911828691647386652546316201785317077693" +
"96410624478347408644274146542253336047831113205753080429542801153300" +
"12891954438988296093734694883945415702868324920553317108307110479739" +
"02314105776898349324271311838995490360870669730372563024697471451505" +
"11879575225670202684648316694825120538627908674920213420670523558678" +
"57071532031072471857731311874071056736014721540094361016282931012994" +
"16778364512233146330980897468992414968805221678557482104047018118957" +
"81350126110472732481065481563624507745672302315225512437862208627280" +
"60251268879162615950914807192046666328289948801120764268553537456827" +
"09651108338210310683418311645415102102016416645803902487407792217608" +
"44330406071043413313313275135949562688050562954103853711941376880025" +
"02082934711140672359157911362943921014439867833378969832823700801052" +
"00682429423111757636856737825790336716383663658796820212074978722147" +
"83472471100157169645322814460494488610518935857907138670753437853688" +
"64947961406778449677452678242516378086577147239418137310093735282067" +
"58135671638420425059281130697127229216845685575918469373902411648303" +
"98422974730218393595066057662997169717800475092718381514278217805258" +
"58551343111074774137458117365239538281666608156850018072833724601821" +
"73105803816579511491224387273148329731145831148237816541693952314575" +
"21101915145651342294745997183280416627223832681500238549080812140821" +
"75107629528715552180022205384001885529500242089430791041149620984547" +
"21832700148478860967521914477992450669872314270790687880754734569333" +
"79976453453324367841766892996756713218375004967790531227120010385196" +
"93947199850057649245970775039278274127488962091220200464967310662217" +
"14091464614232919181042325290533756879101510208567923077885404871209" +
"19892772838019438007145011582453728914947638810792502483823903272434" +
"07051635120251531544246797601926191810902842852494211354141322795272" +
"09922023159579550611624717341739475945019255732810261894419476913725" +
"11674630282104688290382836532811861698813189694819029777948184211881" +
"51432917057992072589267403079910913293229377526950540477316017293052" +
"73958517890363468557400942369062751792610967438468547941264590091092" +
"10718339592125295391798082791188172849086191984216905945076641516303" +
"43182406884839051364164633420703210161402528013970247557615883314369" +
"34866360192274843412692460292956491815093908734775541932318178125903" +
"88235888753969162460510350158005931599465064464478079138113534261207" +
"61469141815705734122048271785716428543888975349508434455154358536751" +
"15707921354375018513939841583328579754854384880592989177566454617061" +
"42169929026174754854566610958381514088372093389947208751093772926293" +
"84990764641290506900421408297121074650523312701749774626823012134545" +
"90401625436878669554131700431933628807736564691962789147961600903989" +
"04915033"
}