€h˙˙˙˙ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙?ū˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙A0đ #íAĀ#Ą # €ûž # |úŸ # øž # €ž # m h ž #€Hž #– ž #€Îž #ž #€"ž # !"#$%Č ž #&'()€k"ž #*+Z$ž #,-./0€¸&ž #12P'ž #345678€ *ž #9:Œ ,ž #;<=€ø-ž #>Z/ž #?@ABC€ų1ž #DEĸ 2ž #FGHI€–4ž #J 6ž #KLMNOP€´9ž #QRSTU <ž #VWXY€å>ž #Z[˜@ž #\]^_€Až #`Cž #abcdef€UFž #ghHž #ijklm€Š Kž #nopq #Ą #c˙ė$ĸ  #rstuvwxzc#Ą #Ą #Ą #Ą #Ą #Ą #Ą #Ą #...test...makefilerunt10at10a.ct11at11a.c t11b t11b.c test0 test0.c test1test1.ctest10test10.ctest11test11.ctest2test2.ctest3test3.ctest4test4.ctest5test5.ctest6test6.ctest7test7.ctest8 test8.c!test9"test9.c$coret1t2t10dt10et10ft10gt10ht10it10j# To make 'test0', type: make f=test0 # To make 'test1', type: make f=test1 # To make 'test2', type: make f=test2 # Get the idea? l=/usr/lib CFLAGS = -I/usr/include -F file: $l/libc.a $f.s @asld -o $f $l/crtso.s $f.s $l/libc.a $l/end.s ./test0 ./test1 ./test2 ./test3 ./test4 ./test5 ./test6 ./test7 ./test8 ./test9 ./test10 ./test11 echo All tests completed. 0´"!´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow main() { exit(0); } 0Ŧ Œ’3Ŧ ‹Ü‹ƒÃ‹Á@ŅāÃŖŦ PSQčƒÄPčØ¸č ¸Ž P‹^˙7čxƒÄ…Āt ¸Pč§ƒÄ¸ŗ P‹^˙wčZƒÄ…Āt ¸Pč‰ƒÄ¸¸ P‹^˙wč<ƒÄ…Āt ¸PčkƒÄ¸Ŋ P‹^˙wčƒÄ…Āt ¸PčMƒÄ¸Â P‹^˙7čƒÄ…Āt ¸Pč0ƒÄ¸É P‹^˙wčãƒÄ…Āt ¸PčƒÄƒ~t ¸PčƒÄ¸čPFøP¸Pč׃Ä=t ¸PčáƒÄ€~øu€~ų t ¸Pč˃Äčn= u ¸P蚃Äč= t ¸P觃Äč(=u ¸ P蕃ÄčĀ=t ¸!P胃Ä+ĀP¸Đ PčAƒÄ…Ā} ¸"PčhƒÄ+ĀP¸Ķ Pč&ƒÄ…Ā} ¸#PčMƒÄ¸dPčTƒÄéÆ+Ā臋^€?u‹^€?u +Āë¸é§‹^Š˜‹^ŠšĶâĶú;Âuä˙F˙FëČ+ĀčJ˙v¸Ö Pč0ƒÄét+Āč5FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄéJ+Āč FP˙v˙6 čwƒÄ‹ ‹GŠ@tSčƒÄé¸čŪ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé΋^O¸˙˙ëđ¸ 耋ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčvƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčÃÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éū騸čhĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včĸ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč*‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æéõ¸čĩ‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åéK¸č ĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č°ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čnƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙é…‹^ĮG+Āëņ+Āč9+ĀPPPPP˙v¸P+ĀPč%ƒÄéY¸č+ĀPPPPPP¸/P+ĀPčƒÄ‰Fú…Ā}˜é2Ą<ë÷¸čė+ĀPPPPPP¸P+ĀPčڃĉFú…Ā}éĄ<ëø¸čÂ+ĀPPPPPP¸/P+ĀP调ĉFú˜éā¸č +ĀPPPPPP¸P+ĀP莃ĉFúéŋ+Āč˙v˙v¸P¸P譃Äéĸ¸čb+ĀPP˙vP˙v˙v¸P¸PčIƒÄ‰Fúéz+Āč;‹ž+öëF‹ßG€?u÷‹Æé_+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖ<‹F Ŗ>‹F Ŗ@‹FŖB‹FŖD‹FŖF˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰><‹FŖ>‹F Ŗ@žBƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖ:¸8P˙v訃ĉFúƒ~út‹Fúëƒ>:} Ą:÷ØŖP¸˙˙ëĄ:ëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&& r˙ãĮ:Į<Į>ĮB( ¸8P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]Ãt11aarg0arg1arg2springsummert1t2Error %d 8 8 B88ā ę ô Stack overflow main(argc, argv, envp) int argc; char *argv[], *envp[]; { /* See if arguments passed ok. */ char aa[4]; if (diff(argv[0], "t11a")) e(21); if (diff(argv[1], "arg0")) e(22); if (diff(argv[2], "arg1")) e(23); if (diff(argv[3], "arg2")) e(24); if (diff(envp[0], "spring")) e(25); if (diff(envp[1], "summer")) e(26); if (argc != 4) e(27); /* Now see if the files are ok. */ if (read(3, aa, 1000) != 2) e(28); if (aa[0] != 7 || aa[1] != 9) e(29); if (getuid() == 10) e(30); if (geteuid() != 10) e(31); if (getgid() == 20) e(32); if (getegid() != 20) e(33); if (open("t1", 0) < 0) e(34); if (open("t2", 0) < 0) e(35); exit(100); } diff(s1, s2) char *s1, *s2; { while (1) { if (*s1 == 0 && *s2 == 0) return(0); if (*s1 != *s2) return(1); s1++; s2++; } } e(n) int n; { printf("Error %d\n", n); } 0đ vĀ1đ ‹Ü‹ƒÃ‹Á@ŅāÃŖđ PSQčƒÄPčú+ĀčU¸ō P‹^˙7蛃Ä…Āt ¸Pčʃĸ÷ P‹^˙wč}ƒÄ…Āt ¸ PčŦƒÄ¸û P‹^˙wč_ƒÄ…Āt ¸!P莃ĸ P‹^˙wčAƒÄ…Āt ¸"PčpƒÄ‹^ƒt ¸#Pč]ƒÄƒ~t ¸$PčMƒÄ¸KPčTƒÄéč+Ā芋^€?u‹^€?u +Āë¸éÉ‹^Š˜‹^ŠšĶâĶú;Âuä˙F˙FëČ+Āčl˙v¸ Pč0ƒÄé–+ĀčWFP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄél+Āč-FP˙v˙6. čwƒÄ‹. ‹GŠ@tSčƒÄé@¸č‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čąƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúéđ‹^O¸˙˙ëđ¸ čĸ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPč˜ƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčåƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūéʸčŠĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včĉFęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPčL‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé¸č׋F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åém¸č,ĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čԃĉFú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7萃ĉFú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙é§‹^ĮG+Āëņ+Āč[+ĀPPPPP˙v¸P+ĀPčGƒÄé{+Āč;‹ž+öëF‹ßG€?u÷‹Æé_+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖj‹F Ŗl‹F Ŗn‹FŖp‹FŖr‹FŖt˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>j‹FŖl‹F Ŗnžpƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖh¸fP˙v訃ĉFúƒ~út‹Fúëƒ>h} Ąh÷ØŖ~¸˙˙ëĄhëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&T r˙ãĮhĮjĮlĮpV ¸fP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]Ãt11babcdefghijError %d f f Bff  " Stack overflow main(argc, argv) int argc; char *argv[]; { /* See if arguments passed ok. */ if (diff(argv[0], "t11b")) e(31); if (diff(argv[1], "abc")) e(32); if (diff(argv[2], "defghi")) e(33); if (diff(argv[3], "j")) e(34); if (argv[4] != 0) e(35); if (argc != 4) e(36); exit(75); } diff(s1, s2) char *s1, *s2; { while (1) { if (*s1 == 0 && *s2 == 0) return(0); if (*s1 != *s2) return(1); s1++; s2++; } } e(n) int n; { printf("Error %d\n", n); } 0†ĻD‹܋ƒÃ‹Á@ŅāÃŖÂPSQčƒÄPčč&¸ĐPčĨ ƒÄĮFúë č0č˙Fúƒ~ú|ņƒ>āu ¸ŲPč~ ƒÄë˙6ā¸ŨPčn ƒÄé¸:čÜĮâ¸˙P¸éPč#ƒÄ‰Fø=tP¸îPč> ƒÄ¸PčŪ ƒÄ¸˙P¸(PčøƒÄ‰Fö=t ¸Pčž ƒÄ¸˙P¸-PčØƒÄ‰Fô=˙˙t ¸Pčž ƒÄ˙vøč?ƒÄ…Āt ¸Pč‡ ƒÄ+ĀP¸/PčēƒÄ‰Fø=t ¸Pčh ƒÄ+ĀP¸4Pč›ƒÄ‰Fô=˙˙t ¸PčI ƒÄ˙vöčęƒÄ…Āt ¸Pč2 ƒÄĮFúë{¸˙P¸;PčEƒÄ‰Fö=tP¸APč` ƒÄ¸Pč ƒÄ+ĀP¸bPč3ƒÄ‰Fô=t ¸ Pčá ƒÄ˙vöč‚ƒÄ…Āt ¸ PčĘ ƒÄ˙vôčkƒÄ…Āt ¸ Pčŗ ƒÄ˙Fúƒ~ú}é|˙¸hPč-ƒÄ˙vøč>ƒÄ…Āt ¸ Pč† ƒÄĮFúé'ĮFđiĮFō¸˙P¸nPčŽƒÄ‰Fø=t ¸ PčT ƒÄ˙vøčõƒÄ…Āt ¸Pč= ƒÄ¸P¸sPčoƒÄ‰Fø=t ¸Pč ƒÄ¸P¸ÄP˙vøč¸ƒÄ=t ¸Pčũ ƒÄ¸P¸äP˙vøččƒÄ…Āt ¸PčŪ ƒÄ+ĀP+ŌRP˙vøčĖƒÄ…Ōu…Āt ¸Pčŧ ƒÄ¸P¸äP˙vøč§ƒÄ=t ¸Pčœ ƒÄ€>äu€>åu€>æu€>įt ¸Pčv ƒÄ+ĀP+ŌRP˙vøčdƒÄ…Ōu…Āt ¸PčT ƒÄ¸P+Ō¸RP˙vøč>ƒÄ…Ōu=t ¸Pč- ƒÄ¸P¸äP˙vøčƒÄ=t ¸Pč ƒÄ€>äu€>åu€>æu€>įt ¸Pčį ƒÄ+ĀP+Ō¸RP˙vøčŌƒÄ…Ōu=t ¸PčÁ ƒÄčs¸P¸ČP˙vøčYƒÄ=t ¸Pčž ƒÄ+ĀP+ŌRP˙vøčŒƒÄ…Ōu…Āt ¸Pč| ƒÄ¸ P¸äP˙vøčgƒÄ=t ¸Pč\ ƒÄ€>äu€>åu€>æ u€>įt ¸Pč6 ƒÄ+ĀP+Ō¸RP˙vøč!ƒÄ…Ōu=t ¸Pč ƒÄ¸P+Ō¸øRP˙vøčúƒÄ…Ōu=ūt ¸PčéƒÄ¸ P¸äP˙vøčԃąĀt ¸ PčĘƒÄ¸P+Ō+ĀRP˙vøčĩƒÄ…Ōu=ūt ¸!Pč¤ƒÄčV¸P¸ČP˙vøč<ƒÄ=t ¸"PčƒÄ¸P+Ō+ĀRP˙vøčlƒÄ…Ōu=t ¸#Pč[ƒÄ+ĀP+Ō¸øRP˙vøčFƒÄ…Ōu=øt ¸$Pč5ƒÄčį¸P¸äP˙vøčƒÄ= t ¸%PčƒÄ€>äu€>éu€>ę u€>í(t ¸&PčėƒÄ+ĀP+Ō¸˙'RP˙vøč׃ąŌu=˙'t ¸'PčÆƒÄ¸P¸ĖP˙vøčaƒÄ=t ¸(PčĻƒÄ¸Pē˙˙¸ū˙RP˙vøčƒÄ…Ōu=˙'t ¸)Pč~ƒÄ¸P¸äP˙vøčiƒÄ=t ¸*Pč^ƒÄ€>äu€>åt ¸+PčFƒÄ+ĀP+Ō¸ūwRP˙vøč1ƒÄ…Ōu=ūwt ¸,Pč ƒÄ¸P¸ÄP˙vøčģƒÄ=t ¸-PčƒÄ+ĀP+ŌRP˙vøčî ƒÄ…Ōu…Āt ¸.PčŪƒÄ¸Pē˙˙¸ú˙RP˙vøčĮ ƒÄ…Ōu=üwt ¸/PčļƒÄčh¸dP¸äP˙vøčžƒÄ=t ¸0Pč“ƒÄ€>äu€>åu€>įu€>ču€>ét ¸1PčfƒÄ+ĀP+Ō¸ NRP˙vøčQ ƒÄ…Ōu= Nt ¸2Pč@ƒÄ¸P¸ČP˙vøčÛƒÄ=t ¸3Pč ƒÄ¸Pē˙˙¸ü˙RP˙vøč ƒÄ…Ōu= Nt ¸4PčøƒÄ¸P¸äP˙vøč㠃Ä=t ¸5PčØƒÄ€>ä u€>åu€>æu€>į(t ¸6Pč˛ƒÄ˙vøčS ƒÄ…Āt ¸7Pč›ƒÄ¸˙P¸xPčĩ ƒÄ‰Fö=t ¸8Pč{ƒÄ˙vöč ƒÄ…Āt ¸9PčdƒÄ¸}Pčę ƒÄ˙Fúƒ~ú}éĐųéR¸čĮFúë ‹^úƇä˙Fúƒ~úd|īé1¸DčņĮâĮFúé+ĀPč} ƒÄ¸ÂP¸‚Pč' ƒÄ‰Fö…Ā} ¸PčîƒÄ¸ˆP¸…PčĒ ƒÄ…Ā} ¸PčŌƒÄ¸P¸ŽPč ƒÄ‰Fô…Ā} ¸PčŗƒÄĮFøë†ķūFø‹Ø‹Føˆ˙Fø~ø˙|č¸˙P†ķūP˙vöč. ƒÄ=˙t ¸PčsƒÄ¸˙P†ôũP˙vôč] ƒÄ=˙t ¸PčRƒÄĮFōĮFøë(†ķūFø‹ØŠ˜–ôũVø‹ÚŠšĶâĶú;Ât˙Fō˙Fø~ø˙|҃~ōt ¸PčƒÄ¸”Pč ƒÄ…Ā} ¸PčīƒÄ˙vöč ƒÄ…Ā} ¸PčØƒÄ˙vôčy ƒÄ…Ā} ¸ PčÁƒÄ+ĀP¸—Pčô ƒÄ‰Fô…Ā} ¸ PčŖƒÄ¸˙P†ôũP˙vôč ƒÄ=˙t ¸ Pč‚ƒÄĮFōĮFøë(†ķūFø‹ØŠ˜–ôũVø‹ÚŠšĶâĶú;Ât˙Fō˙Fø~ø˙|҃~ōt ¸ Pč7ƒÄ†ÖũP¸PčL ƒÄ…Ā} ¸ PčƒÄžÚũt ¸PčƒÄƒžÜũt ¸Pč÷ƒÄƒžæũužäũ˙t ¸PčŪƒÄ†¸ũP˙vôčT ƒÄ…Ā} ¸Pčƒċ†Öũ;†¸ũt ¸PčŽƒÄ‹†Øũ;†ēũt ¸PčšƒÄ‹†Úũ;†ŧũt ¸Pč†ƒÄ‹†Üũ;†žũt ¸PčrƒÄ‹†Ūũ;†Āũt ¸Pč^ƒÄ‹†āũ;†Âũt ¸PčJƒÄ‹†âũ;†Äũt ¸Pč6ƒÄ‹–æũ‹†äũ;–Čũu;†Æũt ¸PčƒÄ‹–ęũ‹†čũ;–Ėũu;†Ęũt ¸PčúƒÄ˙vôč›ƒÄ…Ā} ¸PčãƒÄ¸ŖPči ƒÄ…Ā} ¸Pč˃ĸ Pč1 ƒÄ¸˙P¸ŠPčۃĉFö…Ā} ¸PčĸƒÄ†ÖũP¸­Pčˇ ƒÄ…Ā} ¸Pč…ƒÄžÚũ߁t ¸PčsƒÄ¸ąPčų ƒÄ…Ā} ¸ Pč[ƒÄ˙vôčüƒÄ…Ā} ¸!PčDƒÄ¸˙P¸ĩPč^ƒÄ‰Fö…Ā} ¸"Pč%ƒÄ˙vöčÆƒÄ…Ā} ¸#PčƒÄ¸P¸šPč@ƒÄ‰Fö…Ā} ¸$PčīƒÄ˙vöč*ƒÄ‰Fô‹VöB;Ât ¸%Pč҃ĸ˙P†ķūP˙vöčk ƒÄ=˙t ¸&P调ĸP†ôũP˙vôčšƒÄ+ĀP+ŌRP˙vöčŒƒÄ…Ōu…Āt ¸'Pč|ƒÄ¸P†ôũP˙vôčfƒÄ‰Fø=˙t ¸(PčXƒÄ¸ŊPčŪƒÄ…Ā} ¸)Pč@ƒÄ˙vöčáƒÄ…Ā} ¸*Pč)ƒÄ˙vôčĘƒÄ…Ā} ¸+PčƒÄ˙Fúƒ~ú}éđúé +ĀčË ˙6L˙v˙6â¸ÁPč?ƒÄ¸ãPč;ƒÄ˙āéß +ĀčŸ FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé´ +Āču FP˙v˙6čwƒÄ‹‹GŠ@tSčƒÄéˆ ¸čH ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čųƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé8 ‹^O¸˙˙ëđ¸ čꋞ‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPč¤ƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčņƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūé¸čŌĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙vč ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRP蔉F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé_¸č‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åéĩ¸čtĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čØƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éī‹^ĮG+Āëņ+ĀčŖ˙v˙v¸P¸PčŅƒÄéÆ+Āč‡+ĀPPPPP˙v¸)P¸PčrƒÄéĻ+Āčg+ĀPPPPP˙v¸P+ĀPčSƒÄ釸čF+ĀPP˙vPP˙v¸P¸Pč/ƒÄ‰Fúé`+Āč!+ĀPPPPP˙v¸P¸Pč ƒÄé@+Āč+ĀP˙v˙vP˙včĖƒÄP˙včƒÄP¸ P¸PčØƒÄé ¸čĖ‹FŖR%‹V‹FŖX%‰Z%‹F ŖT%¸P¸Pč<ƒÄ‰Fú…Āt™éÔ‹Z%ĄX%ëô+Āč‹˙v˙v¸P¸PčšƒÄéŽ+Āčoƒ>L|ƒ>L"~ ¸P¸šëU˙vč]ƒÄP˙v¸Pč ƒÄ¸P¸ČP¸PčƒÄ‹LŅã˙ˇ*č-ƒÄP‹LŅã˙ˇ*¸PčéƒÄ¸P¸ËP¸Pč׃Äé/¸čīĮFúë˙Fú‹^˙F€?uō‹Fúé¸čÎ+ĀPP˙vP˙v˙v¸P¸PčĩƒÄ‰Fú鿏čĻ+ĀP˙v˙vPP˙včpƒÄP¸P¸P膃ĉFúéˇ+Āčw‹ž+öëF‹ßG€?u÷‹Æé›+Āč[+ĀPPPPP˙v¸<P¸PčFƒÄéz+Āč;˙v+ĀP¸ P¸PčiƒÄé^+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖR%‹F ŖT%‹F ŖV%‹FŖX%‹FŖZ%‹FŖ\%˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>R%‹FŖT%‹F ŖV%žX%ƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖP%¸N%P˙v訃ĉFúƒ~út‹Fúëƒ>P%} ĄP%÷ØŖL¸˙˙ëĄP%ëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&Îr˙ãĮP%ĮR%ĮT%ĮX%иN%P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]à ( Test 0 ok %d errors foopCreating a file returned file descriptor %d instead of 3 foop/foopnofileFile2creat yielded fd=%d, expected 4 File2File2foopfoopfoopfoopT3T3newT3newT3T3newT3newT3newT3T3aT3aT3aT3bT3bT3bSubtest %d, error %d errno=%d NNBN!N!äîøpx‚œŦÄÎčú (:J\h~œŽŊÍÜí&5D\iŽš¨Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow #include "stat.h" extern int errno; int errct; int testnr; extern long lseek(); #define NB 30L main() { int i; char let; printf("Test 0 "); for (i = 0; i < 4; i++) { test00(); test01(); } if (errct == 0) printf("ok\n"); else printf(" %d errors\n", errct); } char aa[100]; char b[4] = {0,1,2,3}, c[4] = {10,20,30,40}, d[4] = {6,7,8,9}; long t1; test00() { /* Test program for open(), close(), creat(), read(), write(), lseek(). */ int i, n, n1, n2; long t, time(), abuf[4]; struct stat s; testnr = 1; if ((n = creat("foop", 0777)) != 3) { printf("Creating a file returned file descriptor %d instead of 3\n",n); e(1); } if ((n1 = creat("foop", 0777)) != 4) e(2); if ((n2 = creat("/", 0777)) != -1) e(3); if (close(n) != 0) e(4); if ((n = open("foop", 0)) != 3) e(5); if ((n2 = open("nofile", 0)) != -1) e(6); if (close(n1) != 0) e(7); /* n is the only one open now. */ for (i = 0; i < 2; i++) { n1 = creat("File2", 0777); if (n1 != 4) {printf("creat yielded fd=%d, expected 4\n",n1); e(8);} if ((n2 = open("File2", 0)) != 5) e(9); if (close(n1) != 0) e(10); if (close(n2) != 0) e(11); } unlink("File2"); if (close(n) != 0) e(12); /* All files closed now.*/ for (i = 0; i < 2; i++) { t = 105L; if ((n = creat("foop", 0777)) != 3) e(13); if (close(n) != 0) e(14); if ((n = open("foop", 2)) != 3) e(15); /* read/write tests */ if (write(n, b, 4) != 4) e(16); if (read(n, aa, 4) != 0) e(17); if (lseek(n, 0L, 0) != 0L) e(18); if (read(n, aa, 4) != 4) e(19); if (aa[0] != 0 || aa[1] != 1 || aa[2] != 2 || aa[3] != 3) e(20); if (lseek(n, 0L, 0) != 0L) e(21); if (lseek(n, 2L, 1) != 2L) e(22); if (read(n, aa, 4) != 2) e(23); if (aa[0] != 2 || aa[1] != 3 || aa[2] != 2 || aa[3] != 3) e(24); if (lseek(n, 2L, 0) != 2L) e(25); clraa(); if (write(n, c, 4) != 4) e(26); if (lseek(n, 0L, 0) != 0L) e(27); if (read(n, aa, 10) != 6) e(28); if (aa[0] != 0 || aa[1] != 1 || aa[2] != 10 || aa[3] != 20) e(29); if (lseek(n, 16L, 0) != 16L) e(30); if (lseek(n, 2040L, 2) != 2046L) e(31); if (read(n, aa, 10) != 0) e(32); if (lseek(n, 0L, 1) != 2046L) e(33); clraa(); if (write(n, c, 4) != 4) e(34); if (lseek(n, 0L, 1) != 2050L) e(35); if (lseek(n, 2040L, 0) != 2040L) e(36); clraa(); if (read(n, aa, 20) != 10) e(37); if (aa[0] != 0 || aa[5] != 0 || aa[6] != 10 || aa[9] != 40) e(38); if (lseek(n, 10239L, 0) != 10239L) e(39); if (write(n, d, 2) != 2) e(40); if (lseek(n, -2L, 2) != 10239L) e(41); if (read(n, aa, 2) != 2) e(42); if (aa[0] != 6 || aa[1] != 7) e(43); if (lseek(n, NB*1024L-2L, 0) != NB*1024L-2L) e(44); if (write(n, b, 4) != 4) e(45); if (lseek(n, 0L, 0) != 0L) e(46); if (lseek(n, -6L, 2) != 1024L*NB-4) e(47); clraa(); if (read(n, aa, 100) != 6) e(48); if (aa[0] != 0 || aa[1] != 0 || aa[3] != 1 || aa[4] != 2 || aa[5] != 3) e(49); if (lseek(n, 20000L, 0) != 20000L) e(50); if (write(n, c, 4) != 4) e(51); if (lseek(n, -4L, 1) != 20000L ) e(52); if (read(n, aa, 4) != 4) e(53); if (aa[0] != 10 || aa[1] != 20 || aa[2] != 30 || aa[3] != 40) e(54); if (close(n) != 0) e(55); if ((n1 = creat("foop", 0777)) != 3) e(56); if (close(n1) != 0) e(57); unlink("foop"); /* Test clock. */ /* This test messes up the clock value t = 20L; stime(&t); t = 0L; t = time(&t); if (t < 20L || t > 70L) e(59); t = 200L; if (stime(&t) < 0) e(60); t = 0L; if (time(&t) < 200L || time(&t) > 205L) e(61); n1 = creat("timefile", 0777); abuf[0] = 03003L; abuf[1] = 03003L; if (utime("timefile", abuf) < 0) e(62); if (stat("timefile", &s) < 0) e(63); if (s.st_atime != 03003) e(64); abuf[0] = 06226; abuf[1] = 06226; if (utime("timefile", abuf) < 0) e(65); if (stat("timefile", &s) < 0) e(66); if (s.st_ctime != 06226) e(67); if (unlink("timefile") < 0) e(68); if (close(n1) < 0) e(69); if (times(abuf) < 0) e(70); */ } } static clraa() { int i; for (i = 0; i < 100; i++) aa[i] = 0; } test01() { /* Test link, unlink, stat, fstat, dup, umask, * mknod. */ int i, j, n, n1, flag; char a[255], b[255]; struct stat s, s1; testnr = 2; for (i=0; i < 2; i++) { umask(0); if ((n = creat("T3", 0702)) < 0) e(1); if (link("T3", "newT3") < 0) e(2); if ((n1 = open("newT3", 2)) < 0) e(3); for (j = 0; j < 255; j++) a[j] = j; if (write(n, a, 255) != 255) e(4); if (read(n1, b, 255) != 255) e(5); flag = 0; for (j = 0; j < 255; j++) if (a[j] != b[j]) flag++; if (flag) e(6); if (unlink("T3") < 0) e(7); if (close(n) <0) e(8); if (close(n1) < 0) e(9); if ((n1 = open("newT3", 0)) < 0) e(10); if (read(n1, b, 255) != 255) e(11); flag = 0; for (j = 0; j < 255; j++) if (a[j] != b[j]) flag++; if (flag) e(12); /* Now check out stat, fstat. */ if (stat("newT3", &s) < 0) e(13); if (s.st_mode != 0100702) e(14); if (s.st_nlink != 1) e(15); if (s.st_size != 255L) e(16); if (fstat(n1, &s1) < 0) e(17); if (s.st_dev != s1.st_dev) e(18); if (s.st_ino != s1.st_ino) e(19); if (s.st_mode != s1.st_mode) e(20); if (s.st_nlink != s1.st_nlink) e(21); if (s.st_uid != s1.st_uid) e(22); if (s.st_gid != s1.st_gid) e(23); if (s.st_rdev != s1.st_rdev) e(24); if (s.st_size != s1.st_size) e(25); if (s.st_atime != s1.st_atime) e(26); if (close(n1) < 0) e(27); if (unlink("newT3") < 0)e (28); umask(040); if ((n=creat("T3a", 0777)) < 0) e(29); if (stat("T3a", &s) < 0) e(30); if (s.st_mode != 0100737) e(31); if (unlink("T3a") < 0) e(32); if (close(n1) < 0) e(33); /* dup */ if ((n=creat("T3b", 0777)) < 0) e(34); if (close(n) < 0) e(35); if ((n=open("T3b", 2)) < 0) e(36); if ( (n1=dup(n)) != n+1) e(37); if (write(n, a, 255) != 255) e(38); read(n1, b, 20); if (lseek(n, 0L, 0) != 0L) e(39); if ((j=read(n1, b, 1024)) != 255) e(40); if (unlink("T3b") < 0) e(41); if (close(n) < 0) e(42); if (close(n1) < 0) e(43); } } e(n) int n; { printf("Subtest %d, error %d errno=%d ", testnr, n, errno); perror(""); errct++; } 0> Z@?> ‹Ü‹ƒÃ‹Á@ŅāÃŖ> PSQčƒÄP貸čĸ ¸@ PčĶƒÄĮFúë č9čĩ˙Fúƒ~ú|ņƒ>œu ¸I PčŦƒÄë˙6œ¸M PčœƒÄ+ĀPčeƒÄé ¸čO ĮFøĮFúë1čj‰Fö…Āt}¸Y PčhƒÄ¸Pč0ƒÄčë ˙vúč*ƒÄ˙Fú‹Fú;Fø|ĮéA ¸č čh‰FúFúPčČƒÄé( ¸čč čO‰Fú˙včæƒÄé ¸čĐ ĮFúë:Į˜čę‰Fø…Āt}¸n PččƒÄ¸Pč°ƒÄ˙vøčë˙vøčTƒÄ˙Fúƒ~ú|ĀéĀ ¸č€ ĮFúë˙Fú~úˆ|ö¸P˙vč­ƒÄ…Ā|īFúPč+ƒÄé‹ +ĀčL ˙˜˙šé{ +Āč< ¸uP¸PčYƒÄƒ>˜tų˙6šč*ƒÄéT +Āč ˙6ž˙v¸‚ Pč?ƒÄ¸˜ Pč…ƒÄ˙œé- +ĀčíFP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé +ĀčÍFP˙v˙6ē čwƒÄ‹ē ‹GŠ@tSčƒÄéָ薋^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čkƒÄ‰Fú‹^;GuĮG‹G‰G‹Fú醋^O¸˙˙ëđ¸ č8‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPč&ƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčsƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūé`¸č ĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včZ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPčâ‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé­¸čm‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé¸čÂĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čŒƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čJƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙é=‹^ĮG+Āëņ+Āčņ+ĀPPPPP˙v¸P+ĀPčƒÄé+ĀčŅ+ĀPPPPPP¸P+ĀPčãƒÄéķ+Āčŗ+ĀPPPP˙v˙v¸%P+ĀPčÁƒÄéŅ+Āč‘+ĀPPPPPP¸P+ĀPčŖƒÄéŗ+Āčsƒ>ž|ƒ>ž"~ ¸P¸oëU˙vč]ƒÄP˙v¸PčHƒÄ¸P¸~P¸Pč6ƒÄ‹žŅã˙ˇā č-ƒÄP‹žŅã˙ˇā ¸PčƒÄ¸P¸P¸Pč˙ƒÄé3¸čķĮFúë˙Fú‹^˙F€?uō‹Fúé¸čŌ‹FH‹ØŅ㋇¸‰Fø‹FH‹ØŅã‹F‰‡¸‹FŖ¤ƒ~tƒ~u‹Fë¸L ŖŽ¸0P+ĀPč7ƒÄ‰Fú…Ā}éē‹FøëøPSQRVWU‹Ü‹Ÿ‹ÃKۋŸ¸˙6ĸP˙ĶXĸ]_^ZY[X„Ī+ĀčC‹ž+öëF‹ßG€?u÷‹Æég¸č&+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ą¤‰‹Fúé:+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖ¤‹F ŖĻ‹F Ŗ¨‹FŖĒ‹FŖŦ‹FŖŽ˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>¤‹FŖĻ‹F Ŗ¨žĒƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖĸ¸ P˙v莃ĉFú…Āuƒ>ĸ|Ąĸë Ąĸ÷ØŖž¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&†r˙ãĮĸĮ¤ĮĻĮĒˆ¸ P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 1 ok %d errors Test 1 fork failed Test 1 fork failed Error %d errno=%d   B  š ¤ Ž & . 8 R b z „ ž ° Â Ō Ū đ 4FRdsƒ’ŖˇËÜëú5DP^Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow #include "signal.h" int glov, gct; extern int errno; int errct; extern long lseek(); char initstack[2048]; main() { int i; printf("Test 1 "); for (i = 0; i < 15; i++) { test10(); test11(); } if (errct == 0) printf("ok\n"); else printf(" %d errors\n", errct); exit(0); } test10() { int i, n, pid; n = 4; for (i = 0; i < n; i++) { if ( (pid=fork()) ) { if (pid < 0) { printf("\nTest 1 fork failed\n"); exit(1);} parent(); } else child(i); } } parent() { int n; n = getpid(); wait(&n); } child(i) int i; { int n; n = getpid(); exit(i); } test11() { int i, k; for (i = 0; i < 4; i++) { glov = 0; if ( (k=fork())) { if (k < 0){printf("Test 1 fork failed\n"); exit(1);} parent1(k); } else child1(k); } } parent1(childpid) int childpid; { int func(), n; for (n = 0; n < 5000; n++) ; while (kill(childpid, 2) < 0) /* null statement */ ; wait(&n); } func() { glov++; gct++; } child1(k) int k; { signal(2, func); while (glov == 0) ; exit(gct); } e(n) int n; { printf("\nError %d errno=%d ", n, errno); perror(""); errct++; } 0 ŠĐ := ‹Ü‹ƒÃ‹Á@ŅāÃŖ PSQčƒÄPčp ¸čä ¸čPč˙ƒÄčģ ‰Föč]č˛ ;Föučl …Āu+ĀP¸ņPčČƒÄ+ĀPč5 ƒÄč ;FöučG …Āu+ĀP¸öPčŖƒÄ+ĀPč ƒÄčh ;Föuč" …Āu+ĀP¸ûPč~ƒÄ+ĀPčë ƒÄčC ;Föučũ …Āu+ĀP¸PčYƒÄ+ĀPčÆ ƒÄĮFúëčQ %PčVƒÄ˙Fúƒ~ú<|ęĮFúë FøP蠃Ä˙Fúƒ~ú|íƒ>*u ¸PčƒÄë˙6*¸ Pč ƒÄčx+ĀPčb ƒÄé ¸čĐ čs ‰Fú…Āt FPčo ëC+ĀP‹^Ņã˙ˇĸčžƒÄ‰Fø˙*˙6Ū‹^Ņã˙ˇĸ¸Pč˛ƒÄč +ĀPč ƒÄ¸@PčœƒÄéŽ ¸čn +ĀP¸]Pčf ƒÄ‰Fú…Ā}¸bPčuƒÄ¸PčĪ ƒÄ¸°P¸,P˙vúčˆ ƒÄŖÜ¸@P¸sPčƒÄ¸xP¸xPčqƒÄ¸üP¸}PčcƒÄ¸ P¸‚PčUƒÄ¸` P¸‡PčGƒÄ¸¤P¸ŒPč9ƒÄ¸ÜP¸‘Pč+ƒÄ¸ P¸–PčƒÄ¸ĘP¸›PčƒÄ˙vúčr ƒÄéâ ¸čĸ ‹F™ŖD‰F¸íP˙včƒÄ‰Fú˙6ܸ,P˙vúčU ƒÄ˙vúč4 ƒÄé¤ +Āče ¸ Pčō ƒÄ¸ĨPčč ƒÄ¸ĒPčŪ ƒÄ¸¯PčÔ ƒÄ¸´PčĘ ƒÄ¸šPčĀ ƒÄ¸žPčļ ƒÄ¸ÃPčŦ ƒÄ¸ČPčĸ ƒÄéB +Āč FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé +ĀčŲ FP˙v˙6îčwƒÄ‹î‹GŠ@tSčƒÄéė ¸čŦ ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7č] ƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúéœ ‹^O¸˙˙ëđ¸ čN ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčüƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčIƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūév¸č6ĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙v萉FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ ÆéÃ¸čƒ‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé¸čØĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č~ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7č<ƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éS‹^ĮG+Āëņ+Āč˙v˙v¸P¸Pč5ƒÄé*+Āčë¸øPFP˙včKƒÄé¸čŅF‰Fú‹^úƒFúƒ?uô‹^ú˙7FP˙včƒÄéä+ĀčĨ¸øP˙v˙včƒÄéˏčŒĮ†îûĮ†ėû‹F‰†úû‹F‰†øûë˙†îû‹žúûƒ†úûƒ?tëė˙†ėû‹žøûƒ†øûƒ?uîĮ†čû‹†îû†ėû÷Žčû–üû‰†öû†îû†ėûVü;Âr$é苞ōûŠ˜‹žöûˆ˙†ōû˙†öûFü9†öûrHéĮ†üû‰†ôû‹Ø‹†îû‰ƒ†ôûĮ†đûë@†üû‹–öû+Љ–æû‹žôû‹Â‰ƒ†ôû‹^‹‰†ōûƒF‹žōû€?u‘‹žöûÆ˙†öû˙†đû‹†đû;†îû|ļ‹žôûĮƒ†ôûĮ†đûë`†üû‹–öû+Љ–æû‹žôû‹Â‰ƒ†ôû‹^‹‰†ōûƒF‹žōû€?t Š˜‹žöûˆ˙†ōû˙†öûFü9†öûrŨ¸ų˙ée‹žöûÆ˙†öû˙†đû‹†đû;†ėû|–‹žôûĮƒ†ôû†üû‹–öû+Đ–čûJ‹Â™‹Žčû÷ų÷鉆ęû+ĀP†üûP˙v+ĀP˙ļęû˙včĒƒÄP¸;P+ĀPčÁƒÄ뎸čļÆFøÆFųÆFúÆFû+ĀPFøP˙v+ĀP¸P˙včjƒÄP¸;P+ĀPčƒÄéĩ+Āču+ĀPPPPP˙v¸P+ĀPčaƒÄé•+ĀčU+ĀPPPPPP¸P+ĀPčCƒÄéw+Āč7+ĀPPPPP˙v¸P¸Pč"ƒÄéV+Āč+ĀPPPPPP¸P+ĀPčƒÄé9+Āčų˙v˙v¸P¸Pč'ƒÄé+ĀčŨēÆA¸mNRP˙6˙6č.90ƒŌâ˙Ŗ‰%˙+Ōéë¸čĒ+ĀPP˙vP˙v˙v¸P¸P葃ĉFúéÂ+Āčƒ‹ž+öëF‹ßG€?u÷‹Æé§+Āčg˙v+ĀP¸ P¸P蕃Ä銸čJ+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ąä‰‹Fúé^+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖä‹F Ŗæ‹F Ŗč‹FŖę‹FŖė‹FŖî˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>ä‹FŖæ‹F Ŗčžęƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖâ¸āP˙v訃ĉFúƒ~út‹Fúëƒ>â} Ąâ÷ØŖŪ¸˙˙ëĄâëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&r˙ãĮâĮäĮæĮę¸āP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ė‹F÷f‹Č‹F÷f ȋF÷fŅ]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃļģĀÅĘĪÔŲŪãt10at10bt10ct10dt10et10ft10gt10ht10it10jTest 10 t10at10bt10ct10dok %d errors Child execl didn't take. file=%s errno=%d Worse yet, EXIT didn't exit t10aCan't open t10a t10bt10ct10dt10et10ft10gt10ht10it10jt10bt10ct10dt10et10ft10gt10ht10it10jāāBāāÎØâStack overflow char *name[] = {"t10a","t10b","t10c","t10d","t10e","t10f","t10g","t10h","t10i","t10j"}; extern int errno; int errct; long prog[300]; int psize; main() { int i, n, pid; printf("Test 10 "); pid = getpid(); /* Create files t10b ... t10h */ mkfiles(); if (getpid() == pid) if (fork() == 0) {execl("t10a", 0); exit(0);} if (getpid() == pid) if (fork() == 0) {execl("t10b", 0); exit(0);} if (getpid() == pid) if (fork() == 0) {execl("t10c", 0); exit(0);} if (getpid() == pid) if (fork() == 0) {execl("t10d", 0); exit(0);} for (i = 0; i < 60; i++) { spawn( rand()&07); } for (i = 0; i < 4; i++) wait(&n); if (errct == 0) printf("ok\n"); else printf(" %d errors\n", errct); rmfiles(); exit(0); } spawn(n) int n; { int pid, k; if (pid =fork()) { wait(&n); /* wait for some child (any one) */ } else { k = execl(name[n], 0); errct++; printf("Child execl didn't take. file=%s errno=%d\n", name[n], errno); rmfiles(); exit(0); printf("Worse yet, EXIT didn't exit\n"); } } mkfiles() { int fd; fd = open("t10a",0); if (fd < 0) {printf("Can't open t10a\n"); exit(1);} psize = read(fd, prog, 300*4); cr_file("t10b", 1600); cr_file("t10c", 1400); cr_file("t10d", 2300); cr_file("t10e", 3100); cr_file("t10f", 2400); cr_file("t10g", 1700); cr_file("t10h", 1500); cr_file("t10i", 4000); cr_file("t10j", 2250); close(fd); } cr_file(name, size) char *name; int size; { int fd; prog[6] = (long) size; fd = creat(name, 0755); write(fd, prog, psize); close(fd); } rmfiles() { unlink("t10b"); unlink("t10c"); unlink("t10d"); unlink("t10e"); unlink("t10f"); unlink("t10g"); unlink("t10h"); unlink("t10i"); unlink("t10j"); } 0n˛~<n‹Ü‹ƒÃ‹Á@ŅāÃŖnPSQčƒÄPč ¸čŌ¸„Pč_ƒÄĮFúë č`čÍ˙Fúƒ~ú |ņƒ> u ¸Pč8ƒÄë˙6 ¸‘Pč(ƒÄ+ĀPčÍ ƒÄéŋ+Āč€˙6"˙v¸PčƒÄ¸ļPč ƒÄ˙ 阸 čXčˇ …Āt/FúPčú ƒÄ~údt ¸Pč´˙ƒÄ¸ˇPčà ƒÄ¸ēPčš é.¸P¸ P¸ŊPč•ƒÄ…Ā} ¸Pč€˙ƒÄ¸ļP¸ÂPč]ƒÄ¸pP+ĀP¸ĮPč˛ƒÄ¸m P¸ĖPč>ƒÄ¸€P¸ŅPčzƒÄ‰Fø=t ¸Pč3˙ƒÄ˙vøč§ ƒÄ…Ā} ¸Pč˙ƒÄ¸P¸ÔPč ƒÄ=t ¸Pč˙ūƒÄ¸cP¸ P¸×PčôƒÄ…Ā} ¸PčßūƒÄ¸0P¸ÚPčƒÄ‰Fø=t ¸PčŋūƒÄ˙vøč3 ƒÄ…Ā} ¸Pč¨ūƒÄ¸P¸ŨPč› ƒÄ=t ¸ Pč‹ūƒÄ¸P¸cP¸āPč€ƒÄ…Ā} ¸ PčkūƒÄ¸Pč ƒÄ…Ā} ¸ PčSūƒÄ¸Pč& ƒÄ…Ā} ¸ Pč;ūƒÄčŌ =t ¸ Pč)ūƒÄčT =t ¸PčūƒÄčl =t ¸PčūƒÄč =t ¸PčķũƒÄÆFđÆFņÆFōÆFķ ¸PFđP¸Pč2 ƒÄ=t ¸PčÂũƒÄ+ĀP+Ō¸RP¸Pčm ƒÄ¸pP+ĀP¸÷P¸ōP¸íP¸čP¸ãPč÷ƒÄ¸PčƒũƒÄ¸üP蒃ĸPč6 ƒÄé( ¸ čč čG …ĀtFúPčŠ ƒÄ~úKt6¸ë*ĮFđ ĮFōĮFôĮFöĮFøFđP¸PčšƒÄ¸PčũƒÄéŅ +Āč‘ FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄéĻ +Āčg FP˙v˙6DčwƒÄ‹D‹GŠ@tSčƒÄéz ¸č: ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čë ƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé* ‹^O¸˙˙ëđ¸ čÜ ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčŠ ƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPč׃ÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūé ¸čÄ ĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včū ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč† ‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ ÆéQ¸č‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|å駸čfĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čĘƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éá‹^ĮG+Āëņ+Āč•˙v˙v¸P¸PčÃÄé¸+Āčy+ĀPP˙v˙v˙v˙včAƒÄP¸P¸PčWƒÄé‹+ĀčK˙v˙v¸P¸PčyƒÄén+Āč/¸<PFP˙včKƒÄéU¸čF‰Fú‹^úƒFúƒ?uô‹^ú˙7FP˙včƒÄé(+Āčé¸<P˙v˙včƒÄé¸čĐĮ†îûĮ†ėû‹F‰†úû‹F‰†øûë˙†îû‹žúûƒ†úûƒ?tëė˙†ėû‹žøûƒ†øûƒ?uîĮ†čû‹†îû†ėû÷Žčû–üû‰†öû†îû†ėûVü;Âr$é苞ōûŠ˜‹žöûˆ˙†ōû˙†öûFü9†öûrHéĮ†üû‰†ôû‹Ø‹†îû‰ƒ†ôûĮ†đûë@†üû‹–öû+Љ–æû‹žôû‹Â‰ƒ†ôû‹^‹‰†ōûƒF‹žōû€?u‘‹žöûÆ˙†öû˙†đû‹†đû;†îû|ļ‹žôûĮƒ†ôûĮ†đûë`†üû‹–öû+Љ–æû‹žôû‹Â‰ƒ†ôû‹^‹‰†ōûƒF‹žōû€?t Š˜‹žöûˆ˙†ōû˙†öûFü9†öûrŨ¸ų˙銋žöûÆ˙†öû˙†đû‹†đû;†ėû|–‹žôûĮƒ†ôû†üû‹–öû+Đ–čûJ‹Â™‹Žčû÷ų÷鉆ęû+ĀP†üûP˙v+ĀP˙ļęû˙včîƒÄP¸;P+ĀPčƒÄ뎸čúÆFøÆFųÆFúÆFû+ĀPFøP˙v+ĀP¸P˙včŽƒÄP¸;P+ĀPčŃÄéų+Āčš+ĀPPPPP˙v¸P+ĀPčĨƒÄéŲ+Āč™+ĀPPPPPP¸P+ĀPč‡ƒÄéģ¸čz+ĀPPPPPP¸/P+ĀPčhƒÄ‰Fú…Ā}˜é”Ą(ë÷¸čN+ĀPPPPPP¸P+ĀPč<ƒÄ‰Fú…Ā}éiĄ(ëø¸č$+ĀPPPPPP¸/P+ĀPčƒÄ‰Fú˜éB+Āč+ĀPPPPP˙v¸P¸PčîƒÄé"¸čâ+ĀPPPPPP¸P+ĀPčĐƒÄ‰Fúé¸čĀ‹FŖ(‹V‹FŖ.‰0‹F Ŗ*¸P¸Pč0ƒÄ‰Fú…Āt™éČ‹0Ą.ëô+Āč˙v˙v¸P¸Pč­ƒÄéĸ+Āčcƒ>"|ƒ>""~ ¸P¸ųëU˙vč]ƒÄP˙v¸PčƒÄ¸P¸P¸PčƒÄ‹"Ņã˙ˇjč-ƒÄP‹"Ņã˙ˇj¸PčŨƒÄ¸P¸ P¸Pč˃Äé#¸čãĮFúë˙Fú‹^˙F€?uō‹Fúé+ĀčÃ+ĀPPPPP˙v¸.P+ĀP蝃Äéã+ĀčŖ+ĀPPPPP˙v¸P+ĀP菃ÄéÃ+Āčƒ‹ž+öëF‹ßG€?u÷‹Æé§+Āčg˙v+ĀP¸ P¸P蕃Ä銸čJ+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ą(‰‹Fúé^+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖ(‹F Ŗ*‹F Ŗ,‹FŖ.‹FŖ0‹FŖ2˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>(‹FŖ*‹F Ŗ,ž.ƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖ&¸$P˙v訃ĉFúƒ~út‹Fúëƒ>&} Ą&÷ØŖ"¸˙˙ëĄ&ëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&r˙ãĮ&Į(Į*Į.¸$P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]Ãv}springsummerTest 11 ok %d errors Error %d. errno = %d t1t2t11at11at11at11at1t1t1t2t2t2t11at11aarg0arg1arg2Can't exec t11a t11babcdefghijt11b$$B$$$.8°¸ÂÜė(:L\hzŠœ¨žĐÜîũ -AUfu„œŠŋÎÚčError 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow char *envp[3] = {"spring", "summer", 0}; extern errno; int errct; main() { int i; printf("Test 11 "); for (i = 0; i<9; i++) { test110(); test111(); } if (errct == 0) printf("ok\n"); else printf(" %d errors\n", errct); exit(0); } e(n) int n; { printf("\nError %d. errno = %d ",n, errno); perror(""); errct++; } test110() { /* Test exec */ int n, fd, fd1, i; char aa[4]; if (fork()) { wait(&n); if (n != 25600) e(1); unlink("t1"); unlink("t2"); } else { if (chown("t11a", 10, 20) < 0) e(2); chmod("t11a", 0666); /* The following call should fail because the mode has no X bits on. * If a bug lets it unexpectedly succeed, the child will print an * error message since the arguments are wrong. */ execl("t11a", 0, envp); /* should fail -- no X bits on */ /* Control should come here after the failed execl(). */ chmod("t11a", 06555); if ( (fd = creat("t1", 0600)) != 3) e(3); if (close(fd) < 0) e(4); if (open("t1", 2) != 3) e(5); if (chown("t1", 10, 99) < 0) e(6); if ( (fd = creat("t2", 0060)) != 4) e(7); if (close(fd) < 0) e(8); if (open("t2", 2) != 4) e(9); if (chown("t2", 99, 20) < 0) e(10); if (setgid(6) < 0) e(11); if (setuid(5) < 0) e(12); if (getuid() != 5) e(13); if (geteuid() != 5) e(14); if (getgid() != 6) e(15); if (getegid() != 6) e(16); aa[0] = 3; aa[1] = 5; aa[2] = 7; aa[3] = 9; if (write(3, aa, 4) != 4) e(17); lseek(3, 2L, 0); execle("t11a", "t11a", "arg0", "arg1", "arg2", 0, envp); e(18); printf("Can't exec t11a\n"); exit(3); } } test111() { int n; char *argv[5]; if (fork()) { wait(&n); if (n != (75<<8)) e(20); } else { /* Child tests execv. */ argv[0] = "t11b"; argv[1] = "abc"; argv[2] = "defghi"; argv[3] = "j"; argv[4] = 0; execv("t11b", argv); e(19); } }  ŧ °"Î2‹Ü‹ƒÃ‹Á@ŅāÃPSQčƒÄPčįë4¸ž PčwƒÄĮFúƒ~ú}č$˙Fúëō¸Į PčZƒÄ¸PčļƒÄé,¸čėëÄéœĮFîĮFęFøPčōƒÄ…Ā}˙6l¸Ë PčƒÄ¸PčxƒÄč’‰Fôƒ~ô}¸ã PčüƒÄ¸PčXƒÄƒ~ôué˜˙vøč„ƒÄĮFô~ô}‹Fô%˙‹^ôˆ‡l ˙FôëįĮFîƒ~î}2¸P¸l P˙vúčNƒÄ…Ā}˙6l¸đ Pč”ƒÄ¸PčđƒÄ˙FîëČ˙vúč ƒÄFîPčîƒÄ~î:t˙vî¸ Pč^ƒÄ¸PčēƒÄé¨˙vúčėƒÄĮFîƒ~î |釸P¸l P˙vøč}ƒÄ‰Fö~öt˙vö¸ PčƒÄ¸PčnƒÄĮFō‹Fō;Fö}B‹^ōЇl ˜%˙‹ŧ â˙;Ât"Ąŧ %˙P‹^ōЇl ˜%˙P˙vō¸? PčăÄë˙ŧ ˙Fōëļ˙Fîép˙¸:PčƒÄé…¸čEé[ū+Āč=+ĀPPPPP˙v¸P+ĀPčMƒÄé]+Āč+ĀPPPPPP¸P+ĀPč/ƒÄé?+Āč˙+ĀPPPPP˙v¸P¸PčƒÄé¸čŪ+ĀPPPPPP¸*P¸PčīƒÄ‰Fú…Ā|‹^Ąr‰Ąt‰G+Āéč‹Fúëø¸"čĸF‰Fôé#‹^€?%uKĮFú˙F‹^€?0}N‹Fô‰Fė‹^Š˜=cuéB~éĢ=Duéã=Ouéû=Xué ¸%Pč‡ƒÄ‹^˙FŠ˜PčwƒÄéŊ‹^€?9Ē‹Fúē ÷ꊚĶâĶúƒę0‰Fú넋^ô‹‰FøƒFô™‰Fî‰VđĮFö FāP˙vö˙vđ˙vîčƒƒÄ‰Fø‹Fú+Fø‰Fö…Āé5‹Fö˙Nö…Āué(¸ PčüƒÄëį‹^ô‹‰FøƒFô‰Fō+Ō‰Fî‰VđĮFöëŖ‹^ô‹‰FøƒFô‰Fō+Ō‰Fî‰VđĮFö녋^ė‹W‹‰Fî‰VđƒFėĮFö ‹Fė‰Fôée˙‹^ė‹W‹‰Fî‰VđƒFėĮFöëŪ‹^ė‹W‹‰Fî‰VđƒFėĮFöëŋ^ô‹‰FøƒFôPčYƒÄ霋^ô‹‰FۃFô‰FÜë ŠFۘPč:ƒÄ‹^Ū˙Fۊ˜ˆFۅĀuå˙F‹FŪ+FÜH‹Vú+ЉVø…Ō~]‹Fø˙Nø…ĀtS¸ PčƒÄëę=duéĨū=ouéôū=st“=xué˙éMū‹FøH‰FöëFāFö‹ØŠ˜PčÃÄ˙Nöƒ~ö}å˙F‹^€?téŌũčŌ韸č_ĮFôƒ~uƒ~u ‹^ Æ0¸é|ƒ~}ƒ~ u‹V‹F÷Ú÷؃ډF‰V˙FôĮFøë‹F Fø‹ØÆ˙Føƒ~ø |ėĮFøƒ~ uB+Ō¸ RP˙v˙v莋V Vø‹Úˆ+Ō¸ RP‹F Fø‹ØŠ˜™‹v‹^+ØōVSč"‰F‰Vƒ~u.‹V‹F%+Ō‹V Vø‹Úˆ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u.‹V‹F%+Ō‹V Vø‹Úˆ‹V‹FšŅúŅØâúâ˙‰F‰V˙Føƒ~téD˙ƒ~té;˙ĮFö‹FøH‰FúëK‹F Fú‹Ø€?uƒ~öu ‹F Fú‹ØÆ ë(‹F Fú‹Ø€? } ‹F Fú‹Ø€0ë ‹F Fú‹Ø€7˙Fö˙Núƒ~ú}¯ƒ~ôt‹FøF ‹ØÆ-˙Fø‹Føé}ū¸čŧ‹X ŠFˆ‡Z ˙X >X uč €~ učéĐ¸čƒ>X t1˙6X ¸Z P¸PčzƒÄĮFúë ‹^úƇZ ˙Fú~ú|îĮX 鏸čN+ĀPP˙vP˙v˙v¸P¸PčYƒÄ‰Fúéf¸č&+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ąr‰‹Fúé:+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖr‹F Ŗt‹F Ŗv‹FŖx‹FŖz‹FŖ|˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>r‹FŖt‹F Ŗvžxƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖp¸nP˙v莃ĉFú…Āuƒ>p|Ąpë Ąp÷ØŖl¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&Z r˙ãĮpĮrĮtĮx\ ¸nP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 2 ok pipe error. errno= %d fork failed write pipe err. errno=%d wrong exit code %d read yielded %d bytes, not 512 wrong data: %d %d %d Stack overflow extern errno; int kk=0; char buf[2048]; main() { int i; printf("Test 2 "); for (i = 0; i<19; i++) { test20(); } printf("ok\n"); exit(0); } test20() { /* Test pipes */ int fd[2]; int n, i, j, ij, q=0, nn, m=0, k; if (pipe(fd) <0) {printf("pipe error. errno= %d\n", errno); exit(0);} i = fork(); if (i <0) { printf("fork failed\n"); exit(0);} if (i != 0) { /* Parent code */ close(fd[0]); for (i=0; i<2048; i++) buf[i] = i & 0377; for (q=0; q<8; q++) { if(write(fd[1], buf, 2048)<0){ printf("write pipe err. errno=%d\n",errno); exit(0); } } close(fd[1]); wait(&q); if (q != 256*58) {printf("wrong exit code %d\n",q); exit(0);} } else { /* Child code */ close(fd[1]); for (q=0; q<32; q++) { n = read(fd[0], buf, 512); if (n!=512){printf("read yielded %d bytes, not 512\n",n); exit(0);} for (j=0; j2 t ¸P譃ă>4u ¸ PčéƒÄë˙64¸ PčŲƒÄéO ¸č čŖ,¸īP¸ Pč& ƒÄ訉Fø…Āt>ƒ>*tų¸ P˙vøč΃ąĀ} ¸PčCƒÄFúPčœ ƒÄƒ~ú t¸Pč)ƒÄë¸ P˙6,č–ƒÄčŦéŲ +Āčš ˙*˙.éÉ +ĀčŠ ˙v¸ Pč>ƒÄ˙4¸+ Pč ƒÄéĻ ¸ čf Į0¸—P¸ Pč}ƒÄFøPčƒÄčõ…Āt,˙vøč ƒÄë¸PFōP˙vúč( ƒÄƒ>0tčFöPčëë˙vøčŨƒÄ˙vúčÔƒÄ+ĀPčƒÄé1 +Āčō ˙0˙2é! ¸čá +ĀP¸Pč˙ƒÄ聅ĀtZčz…ĀtSčs…ĀtLčl…ĀtE¸P¸PčՃĸP+ĀPčŽƒÄFøPčjƒÄFøPč`ƒÄFøPčVƒÄFøPčLƒÄëčzé§ +Āčg FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé| +Āč= FP˙v˙6L čwƒÄ‹L ‹GŠ@tSčƒÄéP ¸č ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čåƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé ‹^O¸˙˙ëđ¸ 貋ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPč ƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčíƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūéÚ¸čšĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včÔ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč\‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé'¸čį‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé}¸č<ĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čăĉFú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙顋^ĮG+Āëņ+Āčk+ĀPPPPP˙v¸P+ĀPč{ƒÄé‹+ĀčK+ĀPPPPPP¸P+ĀPč]ƒÄém+Āč-+ĀPPPPP˙v¸P¸Pč<ƒÄéL+Āč +ĀPPPP˙v˙v¸%P+ĀPčƒÄé++Āčë+ĀPPPPPP¸P+ĀPčũƒÄé +Āč̓>N|ƒ>N"~ ¸P¸ëU˙vč]ƒÄP˙v¸PčĸƒÄ¸P¸P¸PčƒÄ‹NŅã˙ˇr č-ƒÄP‹NŅã˙ˇr ¸PčkƒÄ¸P¸P¸PčYƒÄ鍸čMĮFúë˙Fú‹^˙F€?uō‹Fúél¸č,+ĀPPPPPP¸*P¸Pč=ƒÄ‰Fú…Ā|‹^Ą:‰Ą<‰G+Āé6‹Fúëø+Āčņ+ĀPPPPPP¸P+ĀPčƒÄé¸čŌ‹FH‹ØŅ㋇P‰Fø‹FH‹ØŅã‹F‰‡P‹FŖ:ƒ~tƒ~u‹Fë¸ ŖD¸0P+ĀPč7ƒÄ‰Fú…Ā}éē‹FøëøPSQRVWU‹Ü‹Ÿ‹ÃKۋŸP˙68P˙ĶX8]_^ZY[XĪ+ĀčC‹ž+öëF‹ßG€?u÷‹Æég¸č&+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ą:‰‹Fúé:+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖ:‹F Ŗ<‹F Ŗ>‹FŖ@‹FŖB‹FŖD˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>:‹FŖ<‹F Ŗ>ž@ƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖ8¸6P˙v莃ĉFú…Āuƒ>8|Ą8ë Ą8÷ØŖN¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&r˙ãĮ8Į:Į<Į@¸6P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 3 ok %d errors Error %d 66B66, 6 @ ¸ Ā Ę ä ô 0BTdp‚’¤°ÆØäö$5I]n}Œ¤ąĮÖâđError 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow #include "signal.h" int parsigs, parpid, parcum; int sigct, cumsig, errct; main() { int i; printf("Test 3 "); for (i = 0; i < 9; i++) { test91(); test92(); } if (cumsig != 9) e(3); if (errct == 0) printf("ok\n"); else printf("%d errors\n", errct); } test90() { extern catch(); int n, pid; parpid = getpid(); signal(10, catch); if (pid = fork()) { while(parsigs == 0) ; if (kill(pid, 9) < 0) e(1); wait(&n); if (n != 9) e(2); } else { kill(parpid, 10); pause(); } } catch() { parsigs++; parcum++; } e(n) int n; { printf("Error %d ",n); errct++; perror(""); } test91() { int fd[2], n, sigpip(); char buf[4]; sigct = 0; signal(SIGPIPE, sigpip); pipe(fd); if (fork()) { /* Parent */ close(fd[0]); while (sigct == 0) { write(fd[1], buf,1); } wait(&n); } else { /* Child */ close(fd[0]); close(fd[1]); exit(0); } } sigpip() { sigct++; cumsig++; } test92() { int pid, n; signal(SIGQUIT, SIG_DFL); if (fork()) { if (fork()) { if (fork()) { if (fork()) { signal(SIGQUIT, SIG_IGN); kill(0, SIGQUIT); wait(&n); wait(&n); wait(&n); wait(&n); } else { pause(); } } else { pause(); } } else { pause(); } } else { pause(); } } 0ā ’* Ü7ā ‹Ü‹ƒÃ‹Á@ŅāÃŖā PSQčƒÄPčšëĮFú¸â PčēƒÄč¸ë Pč­ƒÄéC ¸č ëŲéH苪r …Āué3ƒ>r }č:čtŖt …Āuéƒ>t }č#č]Ŗv …Āué÷ƒ>v }č čFŖx …Ātrƒ>x }čøĮ| >| '}˙| ëō¸ P˙6v čTƒÄ¸ P˙6t čFƒÄ¸ P˙6r č8ƒÄ¸z PčƒÄ¸z PčƒÄ¸z PčüƒÄ¸z PčōƒÄëo¸P¸ī Pč‚ƒÄŖ~ ¸Pē¸PRPĄ€ ™RPč{ RP˙6~ čūƒÄĮ| ƒ>| }¸P¸‚ P˙6~ č[ƒÄ˙| ëá˙€ ˙6~ č‰ƒÄ¸PčAƒÄëčûëûëčôëûëčíëûéđ¸č°é¯ūë¸ø PčBƒÄ¸Pč ƒÄéθčŽëá+Āč‡FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄéœ+Āč]FP˙v˙6: čwƒÄ‹: ‹GŠ@tSčƒÄép¸č0‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čáƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé ‹^O¸˙˙ëđ¸ čŌ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčœƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčéƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūéú¸čēĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙vč‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPčœ‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ ÆéG¸č‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|å靸č\ĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čĀƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙é׋^ĮG+Āëņ+Āč‹+ĀPPPPP˙v¸P+ĀPčwƒÄéĢ+Āčk+ĀPPPPPP¸P+ĀPčYƒÄé+ĀčM+ĀPPPPP˙v¸P¸Pč8ƒÄél+Āč-+ĀPPPP˙v˙v¸%P+ĀPčƒÄéK¸č ‹FŖ†‹V‹FŖŒ‰Ž‹F Ŗˆ¸P¸PčzƒÄ‰Fú…Āt™é‹ŽĄŒëô+ĀčÉ+ĀPPPPPP¸P+ĀP衃Äéë+ĀčĢ˙v˙v¸P¸Pč؃ÄéθčŽ+ĀPP˙vP˙v˙v¸P¸PčuƒÄ‰FúéĻ+Āčg‹ž+öëF‹ßG€?u÷‹Æé‹¸čJ+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ą†‰‹Fúé^+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖ†‹F Ŗˆ‹F ŖŠ‹FŖŒ‹FŖŽ‹FŖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>†‹FŖˆ‹F ŖŠžŒƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖ„¸‚P˙v訃ĉFúƒ~út‹Fúëƒ>„} Ą„÷ØŖš¸˙˙륄ëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&` r˙ãĮ„Į†ĮˆĮŒb ¸‚P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ė‹F÷f‹Č‹F÷f ȋF÷fŅ]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 4 ok /dev/fd0Fork failed. Not enough memory. ‚‚B‚‚ $ . Stack overflow int pid0, pid1, pid2, pid3, s; int i, fd; int nextb; char buf[1024]; main() { int k = 0; printf("Test 4 "); subr(); printf("ok\n"); } subr() { if ( pid0 = fork()){ /* Parent 0 */ if (pid0 < 0) nofork(); if ( pid1 = fork()) { /* Parent 1 */ if (pid1 < 0) nofork(); if (pid2 = fork()) { /* Parent 2 */ if (pid2 < 0) nofork(); if ( pid3 = fork()) { /* Parent 3 */ if (pid3 < 0) nofork(); for (i= 0; i<10000; i++) ; kill(pid2, 9); kill(pid1, 9); kill(pid0, 9); wait(&s); wait(&s); wait(&s); wait(&s); } else { fd = open("/dev/fd0", 0); lseek(fd, 20480L*nextb, 0); for (i= 0; i<10; i++) read(fd,buf,1024); nextb++; close(fd); exit(0); } } else { while (1) getpid(); } } else { while (1) getpid(); } } else { while (1) getpid(); } } nofork() { printf("Fork failed. Not enough memory.\n"); exit(1); } 0$ļB\C$‹Ü‹ƒÃ‹Á@ŅāÃŖ$PSQčƒÄPčr ¸čˆ¸0Pč“ƒÄĮFúëčbčččRččPčõ˙Fúƒ~ú|åƒ>Úu ¸9Pč`ƒÄë˙6Ú¸=PčPƒÄ+ĀPč ƒÄéi+Āč*˙6â˙v¸HPč.ƒÄ˙ÚéL¸č ĮFöĮFôâë‹^ôƒ?tĮFöƒFô~ôârčƒ~öt +ĀPč­˙ƒÄ¸ëP¸PčöƒÄ…P¸ PčæƒÄ…Āč´ ‰Fúč´ ‰Fø…Āt }čl˙vøč,ë˙vú范Ä+ĀP¸PčąƒÄ…Ā+ĀP¸ PčĸƒÄ…ĀéŦ¸člĮFúë)¸P˙vč7 ƒÄ…Ā} ¸Pč˙ƒÄƒ>Ūtų˙Ū˙Fúƒ~ú|ŅFúPčƒÄ…Ā} ¸PčōūƒÄ~út ¸PčáūƒÄéD¸čĮFúë)ƒ>Ütų˙ܸ P˙včÄ ƒÄ…Ā} ¸ PčĢūƒÄ˙Fúƒ~ú|ҏPčĢ ƒÄéû+Āčŧ¸ëP¸PčŲ ƒÄ…Ā˙Üéß+Āč ¸P¸ PčŊ ƒÄ…Ā˙Ūéøčƒč„ ‰Fö…ĀuéŠ}č9čr ‰Fö…Āt{}č*čc ‰Fú…Ātg}č¸ P˙vúč% ƒÄ…Ā} ¸ Pč ūƒÄFøPčƒÄ…Ā} ¸ PčôũƒÄFøPčí ƒÄ…Ā} ¸PčÜũƒÄFøPčÕ ƒÄ…Ā}¸PčÄũë čø ëū+ĀPčĘ ƒÄé¸čÚčÕ ‰FúčĪ ;FúučÍ ‰Föƒ~ö}č…č¸ ;Fúučļ ‰Föƒ~ö}čnčĄ ;FúučŸ ‰Föƒ~ö}čWčŠ ;Fúue¸ P+ĀPčY ƒÄ…Ā} ¸Pč@ũƒÄFøPč9 ƒÄ…Ā} ¸Pč(ũƒÄFøPč! ƒÄ…Ā} ¸PčũƒÄFøPč ƒÄ…Ā}¸PčøüƒÄëč) éV¸čĮFøéœč ‰Fö…Āué€}čĸPčŊ ƒÄ‹^øŅã˙ˇ&˙vöčŋ ƒÄ…Ā}¸PčĻüƒÄ¸Pč¯ ƒÄFúPč• ƒÄ‰Fô…Ā} ¸PčüƒÄ‹Fú%?‹^øŅã;‡&t ¸PčfüƒÄ‹Fö;Fôt¸PčTüë čˆ +ĀPč\ ƒÄ˙Føƒ~ø}é[˙é  ¸č` ĮāĮFúë2¸ĢP¸Pčp ƒÄ¸Pč( ƒÄčB ‹Fú@9āt ¸PčøûƒÄ˙Fúƒ~ú|ČéR ¸č ¸4P¸Pč/ ƒÄ…Āč ‰Fú…ĀtS}čģ¸Pč´ ƒÄ¸P˙vúčģ ƒÄ…Ā} ¸PčĸûƒÄFúPč› ƒÄ…Ā} ¸PčŠûƒÄ+ĀP¸PčÔ ƒÄ…Āë*čŦ ‰Føƒ>âtĄâ÷Ø=t ¸PčXûƒÄ+ĀPčbƒÄé˛ +Āčs éĒ ¸čj čk‰Fô…Ā}č%ƒ~ôt.FúPč$ ƒÄ‹FúšĶø*ä‰Fú‹Fô*ä9Fúu騏PčũúéË螉FúčB‰Fø‹FúFø*ä‰FöPč‹ ƒÄ…Ā} ¸PčÎúƒÄčo;Föt ¸ PčŧúƒÄč;Föt ¸!PčĒúƒÄč‰Fúč‰Fø‹FúFø@*ä‰FöPčZ ƒÄ…Ā} ¸"Pč}úƒÄč`;Föt ¸#PčkúƒÄčâ;Föt ¸$PčYúƒÄč€*ä‰FúFøPčJ ƒÄ=˙˙t ¸%Pč8úƒÄ˙vúčBƒÄé’ +ĀčS ¸&PčúƒÄé€ ¸č@ ¸TP¸ Pč] ƒÄ¸P¸ PčO ƒÄč‰Fú¸ P˙vúčđƒÄ+ĀP¸ Pč/ ƒÄé; +Āčü ˙āé/ ¸ čī ¸4P¸Pč ƒÄ…ĀFōPčôƒÄčÖ‰Fú…Ātb}莸Pč‡ƒÄ¸P˙vúčŽƒÄ…Ā} ¸'PčuųƒÄFúPčn ƒÄ…Ā} ¸(Pč]ųƒÄ+ĀP¸Pč§ƒÄ…Ā˙vōčƒÄ˙vôčë+¸PFúP˙vōčŗƒÄ‰Føƒ>ât ¸*PčųƒÄ+ĀPč"ƒÄér +Āč3 ˙6â¸^Pč:ƒÄ¸PčƒÄéR +Āč FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé( +Āčé FP˙v˙6 čwƒÄ‹ ‹GŠ@tSčƒÄéü ¸čŧ ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7č‘ƒÄ‰Fú‹^;GuĮG‹G‰G‹FúéŦ ‹^O¸˙˙ëđ¸ č^ ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčLƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPč™ƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éū醸čFĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙v耉FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé͏蓋F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé)¸ččĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č˛ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čpƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éc‹^ĮG+Āëņ+Āč+ĀPPPPP˙v¸P+ĀPč'ƒÄé7+Āč÷+ĀPPPPPP¸P+ĀPč ƒÄé¸čØ+ĀPPPPPP¸/P+ĀPčęƒÄ‰Fú…Ā}˜éōĄč#ë÷¸čŦ+ĀPPPPPP¸P+ĀPčžƒÄ‰Fú…Ā}éĮĄč#ëø¸č‚+ĀPPPPPP¸/P+ĀPč”ƒÄ‰Fú˜é +Āča+ĀPPPPP˙v¸P¸PčpƒÄ逸č@+ĀPPPPPP¸P+ĀPčRƒÄ‰Fúé_+Āč+ĀPPPP˙v˙v¸%P+ĀPč-ƒÄé=+Āčũ+ĀPPPPPP¸P+ĀPčƒÄé¸čŪ+ĀPPPPPP¸*P¸PčīƒÄ‰Fú…Ā|‹^Ąč#‰Ąę#‰G+Āéč‹Fúëø¸čĸ+ĀPP˙vP˙v˙v¸P¸Pč­ƒÄ‰Fúéē+Āč{+ĀPPPPP˙v¸.P+ĀPč‹ƒÄé›+Āč[+ĀPPPPP˙v¸P+ĀPčkƒÄé{+Āč;ér+Āč3¸lP¸PčPƒÄ˙vč ƒÄč#éP+Āč+ĀPPPPP˙v¸P+ĀPč!ƒÄé1+Āčņ+ĀPPPPPP¸P+ĀPčƒÄé¸čŌ‹FH‹ØŅ㋇ü#‰Fø‹FH‹ØŅã‹F‰‡ü#‹FŖč#ƒ~tƒ~u‹Fë¸2Ŗō#¸0P+ĀPč7ƒÄ‰Fú…Ā}éē‹FøëøPSQRVWU‹Ü‹Ÿ‹ÃKۋŸü#˙6æ#P˙ĶXæ#]_^ZY[XÆĪ+ĀčC‹ž+öëF‹ßG€?u÷‹Æég¸č&+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ąč#‰‹Fúé:+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖč#‹F Ŗę#‹F Ŗė#‹FŖî#‹FŖđ#‹FŖō#˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>č#‹FŖę#‹F Ŗė#žî#ƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖæ#¸ä#P˙v莃ĉFú…Āuƒ>æ#|Ąæ#ë Ąæ#÷ØŖâ¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&Čr˙ãĮæ#Įč#Įę#Įî#ʸä#P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]à Test 5 ok %d errors Error %d. errno=%d Test 5. fork failed. Errno=%d ääBä䀊”Stack overflow #include "signal.h" #include "errno.h" extern int errno; int errct; int func1(), func10(), func8(), funcalrm(), func11(); int childsigs, parsigs, alarms; int zero[1024]; main() { int i; printf("Test 5 "); for (i = 0; i<1; i++) { test50(); test51(); test53(); test54(); test55(); test56(); } if (errct == 0) printf("ok\n"); else printf("%d errors\n",errct); exit(0); } e(n) int n; { printf("\nError %d. errno=%d\n", n, errno); errct++; } test50() { int parpid, childpid, flag, *zp; flag = 0; for (zp = &zero[0]; zp < &zero[1024]; zp++) if (*zp != 0) flag = 1; if (flag) e(0); /* check if bss is cleared to 0 */ if (signal(1, func1) < 0) e(1); if (signal(10, func10) < 0) e(2); parpid = getpid(); if (childpid=fork()) { if (childpid < 0) ex(); parent(childpid); } else { child(parpid); } if (signal(1, SIG_DFL) < 0) e(4); if (signal(10, SIG_DFL) < 0) e(5); } parent(childpid) int childpid; { int i; for (i = 0; i < 3; i++) { if (kill(childpid, 1) < 0) e(6); while(parsigs == 0) ; parsigs--; } if (wait(&i) < 0) e(7); if (i != 256*6) e(8); } child(parpid) int parpid; { int i; for (i = 0; i < 3; i++) { while(childsigs == 0) ; childsigs--; if (kill(parpid, 10) < 0) e(9); } exit(6); } func1() { if (signal(1, func1) < 0) e(10); childsigs++; } func10() { if (signal(10, func10) < 0) e(11); parsigs++; } test51() { int cpid, n, pid; if ( (pid=fork()) ) { if (pid < 0) ex(); if ( (pid = fork() )) { if (pid < 0) ex(); if (cpid=fork()) { if (cpid < 0) ex(); if (kill(cpid, 9) < 0) e(12); if (wait(&n) < 0) e(13); if (wait(&n) < 0) e(14); if (wait(&n) < 0) e(15); } else { pause(); while(1); } } else { exit(0); } } else { exit(0); } } test52() { int pid, n, k; pid = getpid(); if (getpid() == pid) k = fork(); /* only parent forks */ if (k < 0) ex(); if (getpid() == pid) k = fork(); /* only parent forks */ if (k < 0) ex(); if (getpid() == pid) k = fork(); /* only parent forks */ if (k < 0) ex(); if (getpid() == pid) { if (kill(0, 9) < 0) e(16); if (wait(&n) < 0) e(17); if (wait(&n) < 0) e(18); if (wait(&n) < 0) e(19); } else pause(); } int sigmap[5]= {9, 10, 11}; test53() { int n, i, pid, wpid; /* Test exit status codes for processes killed by signals. */ for (i = 0; i < 2; i++) { if (pid=fork()) { if (pid < 0) ex(); sleep(5); /* wait for child to pause */ if (kill(pid, sigmap[i]) < 0) {e(20); exit(1);} if ((wpid=wait(&n)) < 0) e(21); if ((n&077) != sigmap[i]) e(22); if (pid != wpid) e(23); } else { pause(); exit(0); } } } test54() { /* Test alarm */ int i; alarms = 0; for (i = 0; i < 8; i++) { signal(SIGALRM, funcalrm); alarm(1); pause(); if (alarms != i+1) e(24); } } test55() { /* When a signal knocks a processes out of WAIT or PAUSE, it is supposed to * get EINTR as error status. Check that. */ int n, j, i; if (signal(8, func8) < 0) e(25); if (n=fork()) { /* Parent must delay to give child a chance to pause. */ if (n < 0) ex(); sleep(1); if (kill(n, 8) < 0) e(26); if (wait(&n) < 0) e(27); if (signal(8, SIG_DFL) < 0) e(28); } else { j = pause(); if (errno != EINTR && -errno != EINTR) e(29); exit(0); } } func8() { } test56() { int i, j, k, n; n = fork(); if (n < 0) ex(); if (n) { wait(&i); i = (i >> 8) & 0377; if ( i != (n&0377)) e(30); } else { i = getgid(); j = getegid(); k = (i + j + 7) & 0377; if (setgid(k) < 0) e(31); if (getgid() != k) e(32); if (getegid() != k) e(33); i = getuid(); j = geteuid(); k = (i + j + 1) & 0377; if (setuid(k) < 0) e(34); if (getuid() != k) e(35); if (geteuid() != k) e(36); i = getpid() & 0377 ; if (wait(&j) != -1) e(37); exit(i); } } func11() { e(38); } test57() { int n; signal(11, func11); signal(11, SIG_IGN); n = getpid(); kill (n, 11); signal(11, SIG_DFL); } funcalrm() { alarms++; } test58() { /* When a signal knocks a processes out of PIPE, it is supposed to * get EINTR as error status. Check that. */ int n, j, i, fd[2]; if (signal(8, func8) < 0) e(38); pipe(fd); if (n=fork()) { /* Parent must delay to give child a chance to pause. */ if (n < 0) ex(); sleep(3); if (kill(n, 8) < 0) e(39); if (wait(&n) < 0) e(40); if (signal(8, SIG_DFL) < 0) e(41); close(fd[0]); close(fd[1]); } else { j = read(fd[0], &n, 1); if (errno != EINTR) e(42); exit(0); } } ex() { printf("Test 5. fork failed. Errno=%d\n", errno); exit(1); }  ā$d.‹Ü‹ƒÃ‹Á@ŅāÃPSQčƒÄPčÃëK¸ Pč/ƒÄĮFúƒ~úF}č_˙Fúëōƒ>u ¸) Pč ƒÄë˙6¸- PčûƒÄ¸Pč{ƒÄéy ¸č9 ë­ë˙v¸9 Pč׃ĸE Pč-ƒÄéU ¸č ëŪé=¸Pč“ƒÄ‰Fú¸Pč†ƒÄ‰FúĮFôƒ~ô }‹Fôē÷ęPčiƒÄ˙FôëæĮFôƒ~ô }‹Fôēų˙÷ęPčJƒÄ˙Fôëæ¸Pč;ƒÄ;Fút ¸Pčk˙ƒÄ¸Pč"ƒÄ˙vúčåƒÄ…Āt ¸PčJ˙ƒÄ¸PčƒÄ;Fút ¸Pč1˙ƒÄĮFō˙Fō‹FúFōPčŠƒÄ¸PčĶƒÄ‰Fø‹Fø;FútۋFø+Fú‰Fđ¸˙˙PčĩƒÄ¸PčĢƒÄ;Fút ¸PčÛūƒÄ˙vúč_ƒÄ¸Pč‰ƒÄ;Fút ¸PčšūƒÄĮFō˙Fō‹Fú+FōPč1ƒÄ¸Pč[ƒÄ‰Fö‹Fö;FútۋFú+Fö‰Fî¸Pč=ƒÄ¸Pč3ƒÄ;Fút ¸PčcūƒÄ˙vúčįƒÄ¸PčƒÄ;Fút ¸PčAūƒÄ‹Fđ;Fît ¸ Pč/ūƒÄ‹FđŅāFúP譃ĸPč׃Ä‹VđŅâVú;Ât ¸ PčūƒÄ‹Fđē÷ęP貃Ä‹Fđē÷ęFú‰Fė¸P蚃Ä;Fėt ¸ PčĘũƒÄ‹Fđēû˙÷ęPč|ƒÄ¸PčrƒÄ;Fút ¸ PčĸũƒÄé ¸čÍéēũ+ĀčÅ+ĀPPPPP˙v¸P+ĀPčÕƒÄéå¸č¤+ĀPP˙vPPP¸P+ĀPč´ƒÄ‰Fú…Āu ĄŖF +Āéĩ¸˙˙ëø¸čpĄF ‰Fø‹FF ‰FúPč˛˙ƒÄ…Āu‹Føé‰¸˙˙ëø¸čDč"‰Fú+ĀP˙vø˙vúPPP¸BP+ĀPčLƒÄé\ŒØÃ¸$ÃúW¸ +˙ŽĀ&Į¤Ĩ3Û&‹û¤Ĩu= uæ_ûÃ+Āčīƒ>|ƒ>"~ ¸P¸× ëU˙vč]ƒÄP˙v¸PčăĸP¸æ P¸Pč˛ƒÄ‹Ņã˙ˇH č-ƒÄP‹Ņã˙ˇH ¸PčƒÄ¸P¸é P¸Pč{ƒÄ鯸čoĮFúë˙Fú‹^˙F€?uō‹Fú鎸"čNF‰Fôé#‹^€?%uKĮFú˙F‹^€?0}N‹Fô‰Fė‹^Š˜=cuéB~éĢ=Duéã=Ouéû=Xué ¸%Pč‡ƒÄ‹^˙FŠ˜PčwƒÄéŊ‹^€?9Ē‹Fúē ÷ꊚĶâĶúƒę0‰Fú넋^ô‹‰FøƒFô™‰Fî‰VđĮFö FāP˙vö˙vđ˙vîčƒƒÄ‰Fø‹Fú+Fø‰Fö…Āé5‹Fö˙Nö…Āué(¸ PčüƒÄëį‹^ô‹‰FøƒFô‰Fō+Ō‰Fî‰VđĮFöëŖ‹^ô‹‰FøƒFô‰Fō+Ō‰Fî‰VđĮFö녋^ė‹W‹‰Fî‰VđƒFėĮFö ‹Fė‰Fôée˙‹^ė‹W‹‰Fî‰VđƒFėĮFöëŪ‹^ė‹W‹‰Fî‰VđƒFėĮFöëŋ^ô‹‰FøƒFôPčYƒÄ霋^ô‹‰FۃFô‰FÜë ŠFۘPč:ƒÄ‹^Ū˙Fۊ˜ˆFۅĀuå˙F‹FŪ+FÜH‹Vú+ЉVø…Ō~]‹Fø˙Nø…ĀtS¸ PčƒÄëę=duéĨū=ouéôū=st“=xué˙éMū‹FøH‰FöëFāFö‹ØŠ˜PčÃÄ˙Nöƒ~ö}å˙F‹^€?téŌũčŌéK¸č ĮFôƒ~uƒ~u ‹^ Æ0¸é(ƒ~}ƒ~ u‹V‹F÷Ú÷؃ډF‰V˙FôĮFøë‹F Fø‹ØÆ˙Føƒ~ø |ėĮFøƒ~ uB+Ō¸ RP˙v˙vč:‹V Vø‹Úˆ+Ō¸ RP‹F Fø‹ØŠ˜™‹v‹^+ØōVSčΉF‰Vƒ~u.‹V‹F%+Ō‹V Vø‹Úˆ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u.‹V‹F%+Ō‹V Vø‹Úˆ‹V‹FšŅúŅØâúâ˙‰F‰V˙Føƒ~téD˙ƒ~té;˙ĮFö‹FøH‰FúëK‹F Fú‹Ø€?uƒ~öu ‹F Fú‹ØÆ ë(‹F Fú‹Ø€? } ‹F Fú‹Ø€0ë ‹F Fú‹Ø€7˙Fö˙Núƒ~ú}¯ƒ~ôt‹FøF ‹ØÆ-˙Fø‹Føé}ū¸čh‹ė ŠFˆ‡î ˙ė >ė uč €~ učé|¸č<ƒ>ė t1˙6ė ¸î P¸Pč&ƒÄĮFúë ‹^úƇî ˙Fú~ú|îĮė é;+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖ‹F Ŗ‹F Ŗ ‹FŖ ‹FŖ‹FŖ˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>‹FŖ‹F Ŗ ž ƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖ¸P˙v莃ĉFú…Āuƒ>|Ąë Ą÷ØŖ¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&îr˙ãĮĮĮĮ đ¸P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 6 ok %d errors Error %d $Ž –   ē Ę â ė   * : F X h z † œ Ž ē Ė Û ë ú  3 D S b z ‡  Ŧ ¸ Æ Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow extern char *brk(), *sbrk(); extern int errno; int errct; main() { int i; printf("Test 6 "); for (i = 0; i < 70; i++) { test60(); } if (errct == 0) printf("ok\n"); else printf(" %d errors\n", errct); exit(0); } e(n) int n; { printf("\nError %d ", n); perror(""); } test60() { /* Test sbrk() and brk(). */ char *addr, *addr2, *addr3; int i, del, click, click2; addr = sbrk(0); addr = sbrk(0); /* force break to a click boundary */ for (i = 0; i < 10; i++) sbrk(7*i); for (i = 0; i < 10; i++) sbrk(-7*i); if (sbrk(0) != addr) e(1); sbrk(30); if (brk(addr) != 0) e(2); if (sbrk(0) != addr) e(3); del = 0; do { del++; brk(addr+del); addr2 = sbrk(0); } while (addr2 == addr); click = addr2 - addr; sbrk( (char*) -1); if (sbrk(0) != addr) e(4); brk(addr); if (sbrk(0) != addr) e(5); del = 0; do { del++; brk(addr-del); addr3 = sbrk(0); } while (addr3 == addr); click2 = addr - addr3; sbrk( (char*) 1); if (sbrk(0) != addr) e(6); brk(addr); if (sbrk(0) != addr) e(8); if (click != click2) e(9); brk(addr + 2*click); if (sbrk(0) != addr + 2*click) e(10); sbrk(3*click); if (sbrk(0) != addr + 5*click) e(11); sbrk(-5*click); if (sbrk(0) != addr) e(12); } 0, <N/ö\, ‹Ü‹ƒÃ‹Á@ŅāÃŖ, PSQčƒÄPčĘ¸č ¸. PčëƒÄĮFúëč.˙Fú~ú–|ķƒ>ju ¸7 P诃Äë˙6j¸; PčļƒÄéˆ ¸čH ¸P¸PčqƒÄĮFøĮFúë‹^úŅãƒŋlt˙Fø˙Fú~úˆ|įƒ~ø~ ¸PčƒÄ¸PčtPčNƒÄé. +Āčī˙6|5˙v˙6h¸F Pč?ƒÄ¸h PčgƒÄ˙jé +ĀčÍFP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄéØ+Āč™FP˙v˙6Š čwƒÄ‹Š ‹GŠ@tSčƒÄéŦ¸čl‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé\‹^O¸˙˙ëđ¸ 苞‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčQƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūé6¸čöĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙vč0‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRP踉F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æéƒ¸čC‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åéŲ¸č˜ĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č>ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čüƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙é‹^ĮG+Āëņ+ĀčĮ+ĀPPPPP˙v¸P+ĀPčŗƒÄéį+Āč§+ĀPPPP˙v˙v¸%P+ĀPč‘ƒÄéÅ+Āč…+ĀPPPPPP¸P+ĀPčsƒÄé§+Āčgƒ>|5|ƒ>|5"~ ¸P¸?ëU˙vč]ƒÄP˙v¸PčƒÄ¸P¸NP¸PčƒÄ‹|5Ņã˙ˇ° č-ƒÄP‹|5Ņã˙ˇ° ¸PčáƒÄ¸P¸QP¸Pč΃Äé'¸čįĮFúë˙Fú‹^˙F€?uō‹Fúé¸čÆ‹FH‹ØŅ㋇–=‰Fø‹FH‹ØŅã‹F‰‡–=‹FŖ‚=ƒ~tƒ~u‹Fë¸FŖŒ=¸0P+ĀPčƒÄ‰Fú…Ā}鎋FøëøPSQRVWU‹Ü‹ŸKۋŸ–=˙6€=˙Ķ€=]_^ZY[XTĪ+Āč;‹ž+öëF‹ßG€?u÷‹Æé_+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖ‚=‹F Ŗ„=‹F Ŗ†=‹FŖˆ=‹FŖŠ=‹FŖŒ=˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>‚=‹FŖ„=‹F Ŗ†=žˆ=ƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖ€=¸~=P˙v訃ĉFúƒ~út‹Fúëƒ>€=} Ą€=÷ØŖ|5¸˙˙륀=ëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&Vr˙ãĮ€=Į‚=Į„=Įˆ=X¸~=P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 7 ok %d errors Subtest %d, error %d errno=%d ~5~5B~9~9j t ~ ö ū  " 2 J T n € ’ ĸ Ž Ā Đ â î   " 4 C S b s ‡ › Ŧ ģ Ę â ī  .Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow #include "signal.h" extern int errno; int testnr; int errct; int zilch[5000]; main() { int i; printf("Test 7 "); for (i = 0; i < 150; i++) { test70(); } if (errct == 0) printf("ok\n"); else printf("%d errors\n", errct); } test70() { int i, err, pid; signal(SIGQUIT, SIG_IGN); err = 0; for (i=0; i<5000; i++) if (zilch[i] != 0) err++; if (err > 0) e(1); kill(getpid(), SIGQUIT); } e(n) int n; { printf("Subtest %d, error %d errno=%d ", testnr, n, errno); perror(""); errct++; } 0 HD; ‹Ü‹ƒÃ‹Á@ŅāÃŖ PSQčƒÄPč ¸č¸ĸPčŸƒÄĮFúëč˙Fúƒ~ú|ô¸ĢPč‚ƒÄé¸"čÔ ĮčĮFøé +ĀPč` ƒÄ¸¯PčF ƒÄ…Ā} ¸PčøƒÄ+ĀP¸ĀAP¸ąPč ƒÄ…Ā} ¸PčŲƒÄ¸ˇP¸ĩPčą ƒÄ…Ā} ¸PčŊƒÄ+ĀP¸˙P¸ŋPčÆ ƒÄ…Ā} ¸PčžƒÄ+ĀP¸˙P¸ÃPč§ ƒÄ…Ā} ¸PčƒÄ+ĀP¸˙P¸ĖPčˆ ƒÄ…Ā} ¸Pč`ƒÄ+ĀP¸ÔPč› ƒÄ‰Fú…Ā} ¸PčBƒÄ˙vúč˙ ƒÄ…Ā} ¸Pč+ƒÄ+ĀP¸ŨPčf ƒÄ‰Fú…Ā} ¸ Pč ƒÄ˙vúčĘ ƒÄ…Ā} ¸ PčöƒÄ¸åPč, ƒÄ…Ā} ¸ PčŪƒÄ+ĀP¸éPč ƒÄ‰Fú…Ā} ¸ PčĀƒÄ˙vúč} ƒÄ…Ā} ¸ PčŠƒÄ+ĀP¸íPčä ƒÄ‰Fú…Ā} ¸Pč‹ƒÄ˙vúčH ƒÄ…Ā} ¸PčtƒÄ+ĀP¸ôPč¯ ƒÄ‰Fú…Ā} ¸PčVƒÄ˙vúč ƒÄ…Ā} ¸Pč?ƒÄ¸SP¸PčƒÄ…Ā} ¸Pč#ƒÄFÚP¸>Pč ƒÄ…Ā} ¸PčƒÄ‹FŪ%˙=St ¸PčōƒÄ¸.P¸ZPč@ƒÄ…Ā} ¸PčփčFÚP¸oPčĖ ƒÄ…Ā} ¸PčēƒÄ‹FŪ%˙=.t ¸PčĨƒÄ¸P¸P¸vPč ƒÄ…Ā} ¸Pč…ƒÄFÚP¸‹Pč{ ƒÄ…Ā} ¸PčiƒÄƒ~ât ¸PčYƒÄƒ~ät ¸PčIƒÄ+ĀP¸’Pč„ƒÄ‰Fú…Ā| ¸Pč+ƒÄ+ĀP¸—PčfƒÄ‰Fú…Ā} ¸Pč ƒÄ˙vúčĘƒÄ…Ā} ¸PčöƒÄ¸P¸œPč ƒÄ…Ā} ¸PčڃĸP¸ĄPčđƒÄ…Ā} ¸ P螃ĸP¸ĒPčԃąĀ| ¸!PčĸƒÄ¸ŗPč ƒÄ…Ā} ¸"P芃ĸˇPčđƒÄ…Ā} ¸#PčrƒÄ¸ģPčØƒÄ…Ā} ¸$PčZƒÄ¸žPčƒÄ…Ā} ¸%PčBƒÄ¸ĀPč¨ƒÄ…Ā} ¸&Pč*ƒÄ¸ÄPčƒÄ…Ā} ¸'PčƒÄ˙Føƒ~ø}éíûéę +ĀčĢ ˙6ę˙v˙6č¸ÉPč;ƒÄ¸ëPčCƒÄéà +Āčƒ FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé˜ +ĀčY FP˙v˙6 čwƒÄ‹ ‹GŠ@tSčƒÄél ¸č, ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7čŨƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúé ‹^O¸˙˙ëđ¸ č΋ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčˆƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčÕƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūéö¸čļĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙včđ‰FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPčx‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ ÆéC¸č‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|å陸čXĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čūƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čŧƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éĶ‹^ĮG+Āëņ+Āč‡˙v˙v¸!P¸PčĩƒÄéĒ+Āčk˙v+ĀP¸ P¸Pč™ƒÄéŽ+ĀčO˙v˙v¸P¸Pč}ƒÄér+Āč3+ĀPP˙v˙v˙v˙včûƒÄP¸P¸PčƒÄéE+Āč+ĀPPPPP˙v¸P+ĀPčņƒÄé%+Āčå+ĀPPPPP˙v¸P¸PčĐƒÄé+ĀčÅ+ĀP˙v˙vP˙včƒÄP˙vč†ƒÄP¸ P¸PčœƒÄéĐ+Āč‘+ĀPP˙v˙v˙v˙včYƒÄP¸P¸PčoƒÄéŖ+Āčc˙v˙v¸P¸Pč‘ƒÄé†+ĀčGƒ>ę|ƒ>ę"~ ¸P¸ÁëU˙vč]ƒÄP˙v¸P踃ĸP¸ĐP¸P迃Ä‹ęŅã˙ˇ2č-ƒÄP‹ęŅã˙ˇ2¸PčÁƒÄ¸P¸ĶP¸P蝃Äé¸čĮĮFúë˙Fú‹^˙F€?uō‹Fú鿏čĻ+ĀP˙v˙vPP˙včpƒÄP¸P¸P膃ĉFúéˇ+Āčw‹ž+öëF‹ßG€?u÷‹Æé›+Āč[+ĀPPPPP˙v¸<P¸PčFƒÄéz+Āč;˙v+ĀP¸ P¸PčiƒÄé^+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖđ‹F Ŗō‹F Ŗô‹FŖö‹FŖø‹FŖú˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>đ‹FŖō‹F Ŗôžöƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖî¸ėP˙v訃ĉFúƒ~út‹Fúëƒ>î} Ąî÷ØŖę¸˙˙ëĄîëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&Ör˙ãĮîĮđĮōĮöظėP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃTest 8 ok /dir//dir/..T3a/dir/T3bdir/T3c/dir/T3bdir/T3cdirT3b../T3a../dir/../dir/../dir/../dir/../dir/T3c../dir/../dir/../dir/../dir/../T3a../dir/../dir/../dir/../T3a../dir/../dir/../T3a../T3a../dir/../dir/../T3a../T3a/T3c/T3a/T3a/dir/T3b/dir/T3dT3bT3c../dir/T3aSubtest %d, error %d errno=%d ėėBėėėöx€Š¤´ĖÖđ$0BRdp†˜¤ļÅÕäõ .=Ldq‡–ĸ°Error 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo childrenNo more processesNot enough corePermission deniedBad addressBlock device requiredMount device busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeMath argumentResult too largeInvalid errno : Stack overflow #include "stat.h" extern int errno; int testnr; extern long lseek(); main() { int i; printf("Test 8 "); for (i = 0; i < 4; i++) { test80(); } printf("ok\n"); } test80() { /* Test mknod, chdir, chmod, chown, access. */ int i, j; struct stat s; testnr = 0; for (j=0; j < 2; j++) { umask(0); if (chdir("/") < 0) e(1); if (mknod("dir", 040700, 0) < 0) e(2); if (link("/", "/dir/..") < 0) e(3); if ( mknod("T3a", 0777, 0) < 0) e(4); if (mknod("/dir/T3b", 0777, 0) < 0) e(5); if (mknod("dir/T3c", 0777, 0) < 0) e(6); if ((i=open("/dir/T3b",0)) < 0) e(7); if (close(i) < 0) e(8); if ((i=open("dir/T3c", 0)) < 0) e(9); if (close(i) < 0) e(10); if (chdir("dir") < 0) e(11); if ((i=open("T3b",0)) < 0) e(12); if (close(i) < 0) e(13); if ((i=open("../T3a", 0)) < 0) e(14); if (close(i) < 0 ) e(15); if ((i=open("../dir/../dir/../dir/../dir/../dir/T3c", 0)) < 0) e(16); if (close(i) < 0) e(17); if (chmod("../dir/../dir/../dir/../dir/../T3a", 0123) < 0) e(18); if (stat("../dir/../dir/../dir/../T3a", &s) < 0) e(19); if((s.st_mode & 077777) != 0123) e(20); if (chmod("../dir/../dir/../T3a", 0456) < 0) e(21); if (stat("../T3a", &s) < 0) e(22); if((s.st_mode & 077777) != 0456) e(23); if (chown("../dir/../dir/../T3a", 20,30) < 0) e(24); if (stat("../T3a", &s) < 0) e(25); if(s.st_uid != 20) e(26); if(s.st_gid != 30) e(27); if ((i=open("/T3c", 0)) >= 0) e(28); if ((i=open("/T3a", 0)) < 0) e(29); if (close(i) < 0) e(30); if (access("/T3a", 4) < 0) e(31); if (access("/dir/T3b", 4) < 0) e(32); if (access("/dir/T3d", 4) >= 0) e(33); if (unlink("T3b") < 0) e(34); if (unlink("T3c") < 0) e(35); if (unlink("..") < 0) e(36); if (chdir("/") < 0) e(37); if (unlink("dir") < 0) e(38); if (unlink("/T3a") < 0) e(39); } } e(n) int n; { printf("Subtest %d, error %d errno=%d ", testnr, n, errno); perror(""); } 0(8F æ9(‹Ü‹ƒÃ‹Á@ŅāÃŖ(PSQčƒÄPč ¸čF ¸4PčAƒÄĮFôëčŦčÍččLčmčĄ˙Fôƒ~ôd|åƒ>bt˙6b¸=Pč ƒÄ˙6bčŌ ƒÄŋFöPčiƒÄ…Āu*ŋ¸PFöPčfƒÄë ¸QPčŌƒÄ¸íPčČƒÄéú ƒ˙tîƒ˙t߸ËPčąƒÄ¸ëä+Āčĸ ˙b˙6`˙v¸ņP˙6(čdƒÄéĀ +Āč Į`ŋČčM˙Čt ¸PčÁ˙ƒÄéœ +Āč] Į`ŋČž,č&˙Čt ¸Pčš˙ƒÄū,t ¸PčŠ˙ƒÄée ¸č% Į`ŋČž,ĮFúčé˙Čt ¸Pč]˙ƒÄū,t ¸PčM˙ƒÄ~út ¸Pč<˙ƒÄé +ĀčØ Į`ŋĘ褁˙Ęt ¸Pč˙ƒÄéķ +Āč´ Į`ŋĘž.č}˙Ęt ¸PčņūƒÄū.t ¸PčáūƒÄéŧ ¸č| Į`ŋĘž.ĮFú’č@˙Ęt ¸Pč´ūƒÄū.t ¸Pč¤ūƒÄ~ú’t ¸Pč“ūƒÄén ¸č. Fûéb ¸ č" ĮFø’ĮFööĮFôZŋ žĮFú¸fPčy ƒÄ=véŅā“˙§*č¸˙‰Fō¸P¸fPčh ƒÄ¸ČPč-ūƒÄé ƒ˙ t ¸ PčūƒÄƒūt ¸ Pč ūƒÄƒ~út ¸ PčüũƒÄ~ø’t ¸PčëũƒÄ~ööt ¸PčÚũƒÄ~ôZt ¸PčÉũƒÄč6˙Ŗd‹Fō;dt ¸Pč°ũƒÄč†és˙ƒ˙ t ¸Pč›ũƒÄƒūt ¸PčŒũƒÄƒ~út ¸Pč|ũƒÄ~ø’t ¸PčkũƒÄ~ööt ¸PčZũƒÄ~ôZt ¸PčIũƒÄčļūŖd‹Fō;dt ¸Pč0ũƒÄč(éķūƒ˙ t ¸PčũƒÄƒūt ¸ Pč ũƒÄƒ~út ¸!PčüüƒÄ~ø’t ¸"PčëüƒÄ~ööt ¸#PčÚüƒÄ~ôZt ¸$PčÉüƒÄč6ūŖd‹Fō;dt ¸%Pč°üƒÄčõƒ˙ t ¸)PčžüƒÄƒūt ¸*PčüƒÄƒ~út ¸+PčüƒÄ~ø’t ¸,PčnüƒÄ~ööt ¸-Pč]üƒÄ~ôZt ¸.PčLüƒÄčšũŖd‹Fō;dué ū¸/éū¸dPč*üƒÄéđũ+ĀčÆžčŋpžČŋz¸P¸fPč9 ƒÄéã+Ā褞€ŋh‹Æ˜ˆčéÍ+Ā莞ŋi‹Æ˜ˆ¸P¸fPč ƒÄéŦ+Āčm¸P¸fPčė ƒÄé–+ĀčW¸øP¸Pč€ƒÄŋfëÆG˙evö¸PčIPč#ƒÄéc+Āč#FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé8+ĀčųFP˙v˙6&čwƒÄ‹&‹GŠ@tSčƒÄé ¸čĖ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7č}ƒÄ‰Fú‹^;GuĮG‹G‰G‹Fúéŧ‹^O¸˙˙ëđ¸ čn‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčdƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPčąƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éūé–¸čVĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙v萉FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æéã¸čŖ‹F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé9¸čøĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7čžƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7č\ƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙és‹^ĮG+Āëņ+Āč'+ĀPPPPP˙v¸P+ĀPčƒÄéG+Āč+ĀPPPP˙v˙v¸%P+ĀPčņƒÄé%+Āčå+ĀPPPPPP¸P+ĀPč̓Äé¸čÆ‹FH‹ØŅ㋇„‰Fø‹FH‹ØŅã‹F‰‡„‹FŖpƒ~tƒ~u‹Fë¸ü Ŗz¸0P+ĀPčƒÄ‰Fú…Ā}鎋FøëøPSQRVWU‹Ü‹ŸKۋŸ„˙6n˙Ķn]_^ZY[XLĪ+Āč;‹ž+öëF‹ßG€?u÷‹Æé_+Āč+ĀPP˙vP˙v˙v¸P¸PčƒÄé:ë5‹FŖp‹F Ŗr‹F Ŗt‹FŖv‹FŖx‹FŖz˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>p‹FŖr‹F Ŗtžvƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖn¸lP˙v訃ĉFúƒ~út‹Fúëƒ>n} Ąn÷ØŖ¤¸˙˙ëĄnëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&Nr˙ãĮnĮpĮrĮvP¸lP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]Ë܋‹_‰/‰g‰G3ĀÃ3Āčqū‹^‹F Āu@‹;Nt‹n íuôô‹~ū‹vü‹n‹g‹O‹Ü‰Ã{œœTest 9 %d errors detected WARNING: The setjmp/longjmp of this machine restore register variables to the value they had at the time of the "setjmp" Aha, I just found one last error ok Error %d in test %d llBllStack overflow /* Test setjmp with register variables. Author: Ceriel Jacobs */ # include "setjmp.h" # include "stdio.h" # include "signal.h" int whichtest; int nerrors; char *tmpa; main() { jmp_buf envm; register int i; int j; printf("Test 9 "); for (j = 0; j <100; j++) { test1(); test2(); test3(); test4(); test5(); test6(); } if (nerrors) { printf("%d errors detected\n", nerrors); exit(nerrors); } i = 1; if (setjmp(envm) == 0) { i = 2; longjmp(envm, 1); } else { if (i == 2) { /* correct */ } else if (i == 1) { printf("WARNING: The setjmp/longjmp of this machine restore register variables\n\ to the value they had at the time of the \"setjmp\"\n"); } else { printf("Aha, I just found one last error\n"); return 1; } } printf("ok\n"); } e(n) { nerrors++; fprintf(stderr,"Error %d in test %d\n",n,whichtest); } test1() { register p; whichtest = 1; p = 200; garbage(); if (p != 200) e(1); } test2() { register p,q; whichtest = 2; p = 200; q = 300; garbage(); if (p != 200) e(1); if (q != 300) e(2); } test3() { register p,q,r; whichtest = 3; p = 200; q = 300; r = 400; garbage(); if (p != 200) e(1); if (q != 300) e(2); if (r != 400) e(3); } char buf[512]; test4() { register char *p; whichtest = 4; p = &buf[100]; garbage(); if (p != &buf[100]) e(1); } test5() { register char *p,*q; whichtest = 5; p = &buf[100]; q = &buf[200]; garbage(); if (p != &buf[100]) e(1); if (q != &buf[200]) e(2); } test6() { register char *p,*q,*r; whichtest = 6; p = &buf[100]; q = &buf[200]; r = &buf[300]; garbage(); if (p != &buf[100]) e(1); if (q != &buf[200]) e(2); if (r != &buf[300]) e(3); } jmp_buf env; /* return address of local variable. This way we can check that the stack is not polluted. */ char * addr() { char a; return &a; } garbage() { register i,j,k; register char *p,*q,*r; char *a; int t; p = &buf[300]; q = &buf[400]; r = &buf[500]; i = 10; j = 20; k = 30; switch(setjmp(env)) { case 0: a = addr(); longjmp(env,1); break; case 1: if (i != 10) e(11); if (j != 20) e(12); if (k != 30) e(13); if (p != &buf[300]) e(14); if (q != &buf[400]) e(15); if (r != &buf[500]) e(16); tmpa = addr(); if (a != tmpa) e(17); level1(); break; case 2: if (i != 10) e(21); if (j != 20) e(22); if (k != 30) e(23); if (p != &buf[300]) e(24); if (q != &buf[400]) e(25); if (r != &buf[500]) e(26); tmpa = addr(); if (a != tmpa) e(27); level2(); break; case 3: if (i != 10) e(31); if (j != 20) e(32); if (k != 30) e(33); if (p != &buf[300]) e(34); if (q != &buf[400]) e(35); if (r != &buf[500]) e(36); tmpa = addr(); if (a != tmpa) e(37); hard(); case 4: if (i != 10) e(41); if (j != 20) e(42); if (k != 30) e(43); if (p != &buf[300]) e(44); if (q != &buf[400]) e(45); if (r != &buf[500]) e(46); tmpa = addr(); if (a != tmpa) e(47); return; break; default: e(100); } e(200); } level1() { register char *p; register i; i = 1000; p = &buf[10]; i = 200; p = &buf[20]; longjmp(env,2); } level2() { register char *p; register i; i = 0200; p = &buf[2]; *p = i; dolev(); } dolev() { register char *p; register i; i = 010; p = &buf[3]; *p = i; longjmp(env,3); } catch() { longjmp(env,4); } hard() { register char *p; signal(SIGHUP,catch); for(p = buf;p <= &buf[511]; p++) *p = 025; kill(getpid(),SIGHUP); } $‹܋ƒÃ‹Á@ŅāÃŖ$PSQčƒÄPčr ¸čˆ¸0Pč“ƒÄĮFúëčbčččRččPčõ˙Fúƒ~ú|åƒ>Úu ¸9Pč`ƒÄë˙6Ú¸=PčPƒÄ+ĀPč ƒÄéi+Āč*˙6â˙v¸HPč.ƒÄ˙ÚéL¸č ĮFöĮFôâë‹^ôƒ?tĮFöƒFô~ôârčƒ~öt +ĀPč­˙ƒÄ¸ëP¸PčöƒÄ…P¸ PčæƒÄ…Āč´ ‰Fúč´ ‰Fø…Āt }čl˙vøč,ë˙vú范Ä+ĀP¸PčąƒÄ…Ā+ĀP¸ PčĸƒÄ…ĀéŦ¸člĮFúë)¸P˙vč7 ƒÄ…Ā} ¸Pč˙ƒÄƒ>Ūtų˙Ū˙Fúƒ~ú|ŅFúPčƒÄ…Ā} ¸PčōūƒÄ~út ¸PčáūƒÄéD¸čĮFúë)ƒ>Ütų˙ܸ P˙včÄ ƒÄ…Ā} ¸ PčĢūƒÄ˙Fúƒ~ú|ҏPčĢ ƒÄéû+Āčŧ¸ëP¸PčŲ ƒÄ…Ā˙Üéß+Āč ¸P¸ PčŊ ƒÄ…Ā˙Ūéøčƒč„ ‰Fö…ĀuéŠ}č9čr ‰Fö…Āt{}č*čc ‰Fú…Ātg}č¸ P˙vúč% ƒÄ…Ā} ¸ Pč ūƒÄFøPčƒÄ…Ā} ¸ PčôũƒÄFøPčí ƒÄ…Ā} ¸PčÜũƒÄFøPčÕ ƒÄ…Ā}¸PčÄũë čø ëū+ĀPčĘ ƒÄé¸čÚčÕ ‰FúčĪ ;FúučÍ ‰Föƒ~ö}č…č¸ ;Fúučļ ‰Föƒ~ö}čnčĄ ;FúučŸ ‰Föƒ~ö}čWčŠ ;Fúue¸ P+ĀPčY ƒÄ…Ā} ¸Pč@ũƒÄFøPč9 ƒÄ…Ā} ¸Pč(ũƒÄFøPč! ƒÄ…Ā} ¸PčũƒÄFøPč ƒÄ…Ā}¸PčøüƒÄëč) éV¸čĮFøéœč ‰Fö…Āué€}čĸPčŊ ƒÄ‹^øŅã˙ˇ&˙vöčŋ ƒÄ…Ā}¸PčĻüƒÄ¸Pč¯ ƒÄFúPč• ƒÄ‰Fô…Ā} ¸PčüƒÄ‹Fú%?‹^øŅã;‡&t ¸PčfüƒÄ‹Fö;Fôt¸PčTüë čˆ +ĀPč\ ƒÄ˙Føƒ~ø}é[˙é  ¸č` ĮāĮFúë2¸ĢP¸Pčp ƒÄ¸Pč( ƒÄčB ‹Fú@9āt ¸PčøûƒÄ˙Fúƒ~ú|ČéR ¸č ¸4P¸Pč/ ƒÄ…Āč ‰Fú…ĀtS}čģ¸Pč´ ƒÄ¸P˙vúčģ ƒÄ…Ā} ¸PčĸûƒÄFúPč› ƒÄ…Ā} ¸PčŠûƒÄ+ĀP¸PčÔ ƒÄ…Āë*čŦ ‰Føƒ>âtĄâ÷Ø=t ¸PčXûƒÄ+ĀPčbƒÄé˛ +Āčs éĒ ¸čj čk‰Fô…Ā}č%ƒ~ôt.FúPč$ ƒÄ‹FúšĶø*ä‰Fú‹Fô*ä9Fúu騏PčũúéË螉FúčB‰Fø‹FúFø*ä‰FöPč‹ ƒÄ…Ā} ¸PčÎúƒÄčo;Föt ¸ PčŧúƒÄč;Föt ¸!PčĒúƒÄč‰Fúč‰Fø‹FúFø@*ä‰FöPčZ ƒÄ…Ā} ¸"Pč}úƒÄč`;Föt ¸#PčkúƒÄčâ;Föt ¸$PčYúƒÄč€*ä‰FúFøPčJ ƒÄ=˙˙t ¸%Pč8úƒÄ˙vúčBƒÄé’ +ĀčS ¸&PčúƒÄé€ ¸č@ ¸TP¸ Pč] ƒÄ¸P¸ PčO ƒÄč‰Fú¸ P˙vúčđƒÄ+ĀP¸ Pč/ ƒÄé; +Āčü ˙āé/ ¸ čī ¸4P¸Pč ƒÄ…ĀFōPčôƒÄčÖ‰Fú…Ātb}莸Pč‡ƒÄ¸P˙vúčŽƒÄ…Ā} ¸'PčuųƒÄFúPčn ƒÄ…Ā} ¸(Pč]ųƒÄ+ĀP¸Pč§ƒÄ…Ā˙vōčƒÄ˙vôčë+¸PFúP˙vōčŗƒÄ‰Føƒ>ât ¸*PčųƒÄ+ĀPč"ƒÄér +Āč3 ˙6â¸^Pč:ƒÄ¸PčƒÄéR +Āč FP˙v˙včĸƒÄ‹^‹GŠ@tSč2ƒÄé( +Āčé FP˙v˙6 čwƒÄ‹ ‹GŠ@tSčƒÄéü ¸čŧ ‹^‹GŠu‹GŠu+Āë0‹^ƒ~ķ˙w˙w˙7č‘ƒÄ‰Fú‹^;GuĮG‹G‰G‹FúéŦ ‹^O¸˙˙ëđ¸ č^ ‹ž‹véŒ=Dué =Oué$=Xué'=cué*˙v¸%Pč<ƒÄ˙v‹ßGŠ˜Pč,ƒÄéL€=9~邊˜-0÷nô‰F܋Føē ÷ęF܉Føé\G€=0}éd€=9~é\‹Föē ÷ꊚĶâĶúƒę0‰FöëԃÆ‹Dū™‰Fđ‰VōĮFú FßP˙vú˙vō˙vđčUƒÄ˙vFßPčLƒÄPŠFë˜P˙vö˙vøFßP鯃Æ‹Dū™‰Fđ‰Vō+Ō빃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFú뜃Æ‹Dū™‰Fđ‰Vō…Ō}+Ō‰Fđ‰VōĮFúé{˙ƒÆ‹Tū‹Düéd˙ƒÆ‹Tū‹Düë샯‹Tū‹DüëЃÆ‹DūˆFī˙vŠFī˜PčƒÄë(ƒÆ‹Dū‰Fė˙vPč™ƒÄPŠFë˜P˙vö˙vø˙vėč3ƒÄ G€=tt€=%té”ūĮFøĮFöĮFôÆFë G€=-uĮFô˙˙G€=0uÆFë0G€=0|évū€=.ué“ūŠ˜=dué´ūéū=ouéũū=suéq˙=uuéÜū=xué˙éū醸čFĮFėƒ~uƒ~u ‹^ Æ0ÆG錃~ uƒ~}‹V‹F÷Ú÷؃ډF‰V˙Fė+˙FđĮ‹ØÆGƒ˙ |đ+˙ƒ~ uN+Ō¸ RP˙v˙v耉FęFđĮ‹Ø‹FęˆFđĮ‹ØŠ˜™‰Fč‰Vę+Ō¸ RP‹V‹F+FčVęRPč‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰Vƒ~u-‹V‹F%+ŌVđ׋ڈ‹V‹FšŅúŅØâúâ˙‰F‰VGƒ~té<˙ƒ~té3˙ĮFîE˙‹đëDFđƋ؀?uƒ~îu FđÆ‹ØÆ ë%FđƋ؀? } FđƋ؀0ë FđƋ؀7˙FîN…ö}¸ƒ~ėt FđĮ‹ØÆ-GE˙‹đëFđƋ؊˜‹^ ˆ˙F N…ö}é‹^ Æé͏蓋F ‰Fúƒ~~‹F ;F~‹F‰Fú‹Fú‰Føƒ~ë8˙N˙vŠF ˜PčoƒÄ‹F;Fúįë‹Fú˙Nú…Āt˙v‹^˙FŠ˜PčHƒÄ‹^€?uۃ~})€~ 0u#˙v¸.Pč'ƒÄ˙Fë˙F˙vŠF ˜PčƒÄ‹Fø÷Ø9F|åé)¸ččĮFø‹^‹GŠtéĻ‹GŠu雋GŠt ¸PFP‹^˙7č˛ƒÄ‰Fú‹^ĮGëA‹^˙G‹GH‹ØŠFˆ‹^˙G‹G=|%‹GŠ€u˙w˙w˙7čpƒÄ‰Fú‹^‹G‰G˙Føƒ~øt7ƒ~ú~ ‹^‹G;Fútƒ~ú} ‹^Oë‹^O¸˙˙éc‹^ĮG+Āëņ+Āč+ĀPPPPP˙v¸P+ĀPč'ƒÄé7+Āč÷+ĀPPPPPP¸P+ĀPč ƒÄé¸čØ+ĀPPPPPP¸/P+ĀPčęƒÄ‰Fú…Ā}˜éōĄč#ë÷¸čŦ+ĀPPPPPP¸P+ĀPčžƒÄ‰Fú…Ā}éĮĄč#ëø¸č‚+ĀPPPPPP¸/P+ĀPč”ƒÄ‰Fú˜é +Āča+ĀPPPPP˙v¸P¸PčpƒÄ逸č@+ĀPPPPPP¸P+ĀPčRƒÄ‰Fúé_+Āč+ĀPPPP˙v˙v¸%P+ĀPč-ƒÄé=+Āčũ+ĀPPPPPP¸P+ĀPčƒÄé¸čŪ+ĀPPPPPP¸*P¸PčīƒÄ‰Fú…Ā|‹^Ąč#‰Ąę#‰G+Āéč‹Fúëø¸čĸ+ĀPP˙vP˙v˙v¸P¸Pč­ƒÄ‰Fúéē+Āč{+ĀPPPPP˙v¸.P+ĀPč‹ƒÄé›+Āč[+ĀPPPPP˙v¸P+ĀPčkƒÄé{+Āč;ér+Āč3¸lP¸PčPƒÄ˙vč ƒÄč#éP+Āč+ĀPPPPP˙v¸P+ĀPč!ƒÄé1+Āčņ+ĀPPPPPP¸P+ĀPčƒÄé¸čŌ‹FH‹ØŅ㋇ü#‰Fø‹FH‹ØŅã‹F‰‡ü#‹FŖč#ƒ~tƒ~u‹Fë¸2Ŗō#¸0P+ĀPč7ƒÄ‰Fú…Ā}éē‹FøëøPSQRVWU‹Ü‹Ÿ‹ÃKۋŸü#˙6æ#P˙ĶXæ#]_^ZY[XÆĪ+ĀčC‹ž+öëF‹ßG€?u÷‹Æég¸č&+ĀPPPPPP¸P+ĀPč8ƒÄ‰Fú‹^Ąč#‰‹Fúé:+Āčû+ĀPP˙vP˙v˙v¸P¸PčƒÄé+Āč׋FŖč#‹F Ŗę#‹F Ŗė#‹FŖî#‹FŖđ#‹FŖō#˙v˙včTƒÄéŪ+ĀčŸ˙v č}ƒÄ‹ø‰>č#‹FŖę#‹F Ŗė#žî#ƒ˙~ë‹^ Š˜‹ŪFˆ˙F ‹ĮO…Āuë˙v˙včƒÄ鐸čP‹FŖæ#¸ä#P˙v莃ĉFú…Āuƒ>æ#|Ąæ#ë Ąæ#÷ØŖâ¸˙˙éV+Ā苞+öëF‹ßG€?u÷Dé:[U‹ėWV+ā;&Čr˙ãĮæ#Įč#Įę#Įî#ʸä#P¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy ÷Û÷؃Û÷×čS…˙t÷Ú÷؃Ú_]ÂU‹ėW+˙‹V‹F‹^ ‹N…Ōy ÷Ú÷؃Ú÷ׅÛy÷Û÷؃Ûč‹Ķ‹Á…˙t÷Ú÷؃Ú_]Â…Ûu‹Ø‹Â+Ō÷ņ“÷ņ‹Ę‹Ķ+ÛÃUWV+˙„˙u&GWŠûŠŨŠé*ɋéŠč*ɊĊâŠÖ*öRPQ‹Í;Ķr ¸˙˙ë WWRP‹Â+Ō÷ķ‹č÷á_+øƒŌ‹ō‹Ã÷åƃŌ^+đƒŌX+Ây Mųķëô‹Ī‹Ū_…˙tŠÍŠëŠßŠø‹Å+Ō^_]ÃC Test 5 ok %d errors Error %d. errno=%d Test 5. fork failed. Errno=%d ääBä䀊”Stack overflow Test 5 y{|lä#`ęf` k%  kōČBlä#ĖÔBĖėBÍĖüB.ę ĖC>ĖČ%CCC&C4C;C./test5SHELL=/bin/shHOME=/PATH=/bin:/usr/bin:/etc 0´x´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´ü´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´ ´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´` ´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´¤´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´Ü´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´ ´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow 0´Ę´‹Ü‹ƒÃ‹Á@ŅāÃŖ´PSQčƒÄPč+Āč-+ĀPčƒÄé[+Āč+ĀPPPPP˙v¸P+ĀPčƒÄé;ë5‹FŖĖ‹F ŖÎ‹F ŖĐ‹FŖŌ‹FŖÔ‹FŖÖ˙v˙včeƒÄëé¸čÃëÃëK˙v 蔃Ä‹ø‰>Ė‹FŖÎ‹F ŖĐžŌƒ˙‹ĮO…Āt‹^ Š˜‹ŪFˆ˙F ëé˙v˙včƒÄë鎸čnë­ë=‹FŖĘ¸ČP˙v訃ĉFúƒ~út‹Fúëƒ>Ę} ĄĘ÷ØŖā¸˙˙ëĄĘëég¸č'ëģ닞ž‹ßG€?tFëõDëéC¸čëŪ[U‹ėWV+ā;&ļr˙ãĮĘĮĖĮÎĮŌ¸¸ČP¸PčÄéũ˙fü^_]Úé šéšéU‹ė‹†‹žÍ ]ÃStack overflow ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööE2˙