ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g@s ddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z z ddl Z Wne yrdZ Yn0z ddl Z Wne ydZ dZ Yn0e e jZ ddZddZGd d d eZGd d d ZGd ddeZGdddeejZGdddeejZGdddeejZGdddeejZGdddeejZGdddeejZGdddeejZGdddeejZGdd d ejZGd!d"d"ejZ Gd#d$d$eejZ!Gd%d&d&ejZ"gd'Z#e#D] Z$e%e$d(kre&e'e$qGd)d*d*ejZ(gd+Z)Gd,d-d-ejZ*Gd.d/d/ejZ+Gd0d1d1ejZ,Gd2d3d3ejZ-Gd4d5d5ejZ.gd6Z/e0ed7re/1d8e0ed9re/1d:d;gZ2Gdd?d?ejZ4Gd@dAdAejZ5GdBdCdCejZ6GdDdEdEeejZ7GdFdGdGeejZ8GdHdIdIejZ9GdJdKdKejZ:GdLdMdMejZ;gdNZZ>Wne ydZ>Yn0e<1dVdWdXge=dV<z ddl?Z?Wne yYn0e<1dYdZge=dY<Gd[d\d\ejZ@iZAd]d^ZBeCeBzdd_lDmEZEWne y@d`daZEYn0GdbdcdcejZFeGejHddkdeGdfdgdgejZIGdhdidiejZJGdjdkdkejZKGdldmdmejZLeMe dudnGdodpdpejZNGdqdrdrejZOGdsdtdtejZPeQdukreRdS)vN)mock)supportcsfdd}|S)Ncs||t|fdSN) assertEquallen)inputexpectcoderself//opt/python39/lib/python3.9/test/test_codecs.pycheckszcoding_checker..checkr )r r rr r rcoding_checkersrc sddlm}m}m}ddlm}mmmm }dddGfdddtj }|||||}|d |d f}|} ||d| S) Nr)POINTER WINFUNCTYPEWinDLL)BOOLBYTEWCHARUINTDWORD ics@eZdZdfdfdfdfdfdfgZdS)z'is_code_page_present..CPINFOEXWZ MaxCharSizeZ DefaultCharZLeadByteZUnicodeDefaultCharZCodePageZ CodePageNameN)__name__ __module__ __qualname__Z_fields_r rZMAX_DEFAULTCHARZ MAX_LEADBYTESZMAX_PATHrrr r CPINFOEXW&s   rZ GetCPInfoExWZkernel32) ctypesrrrZctypes.wintypesrrrrrZ Structure) cprrrrrrZ prototypeZ GetCPInfoExinfor rris_code_page_presents r#c@s&eZdZddZddZd ddZdS) QueuecCs ||_dSr_buffer)r bufferr r r__init__7szQueue.__init__cCs|j|7_dSrr%)r charsr r rwrite:sz Queue.writercCsH|dkr"|j}|jdd|_|S|jd|}|j|d|_|SdSNrr%)r sizesr r rread=sz Queue.readN)r)rrrr(r*r.r r r rr$3sr$c@seZdZddZddZdS)MixInCheckStateHandlingc Cstt|dD]}t|}||d|}|}||dt|ds||ddddf| ||d | ||t|}|||||dd}| |||qdS)NrT) rangercodecsgetincrementaldecoderdecodegetstateassertIsInstanceintsetstate assertTruer r encodingur-idZpart1stateZpart2r r rcheck_state_handling_decodeIs   z3MixInCheckStateHandling.check_state_handling_decodec Csztt|dD]d}t|}||d|}|}t|}|||||dd}||||qdS)Nr0T)r1rr2getincrementalencoderencoder5r8rr:r r rcheck_state_handling_encode_s   z3MixInCheckStateHandling.check_state_handling_encodeN)rrrr@rCr r r rr/Hsr/c@sXeZdZddZddZddZddZd d Zd d Zd dZ dZ ddZ ddZ dS)ReadTestc Cstd}t|j|}d}t||j|D]0\}}|t|g||7}| ||q.| |d| |j dt |j}d}t||j|D](\}}|| t|g7}| ||q| | ddd| |j d|d}t||j|D]*\}}|| t|g7}| ||q | | ddd| |j d||j} | |dtdd| D|jdS)NTcSsg|]}t|gqSr bytes.0cr r r rEz*ReadTest.check_partial..)r$r2 getreaderr;ziprBr*rHr.r bytebufferr3r4r'resetjoin iterdecode) r rZpartialresultsqrresultrKZ partialresultr>encodedr r r check_partialks8  zReadTest.check_partialc sfdddfdd }d}d}d}||d|||d |||dd |||d d |d }g}g}t|D]8\}} ||d d d | ||d d d q|d|dd||d|d d|tdD]} |D]} d | d| d}|} td D]6}| jdd| d| | jdddq4|} td D]2}| jd d| d| jd ddq|q qdS)Ncs"t|j}tj|SrioBytesIOrBr;r2rM)rstreamr r rrMsz)ReadTest.test_readline..getreaderTcs6|}g}|j||d}|s q,||q d|S)N)r,keepends|)readlineappendrQ)rr]r,readerlinesline)rMr r readallliness z,ReadTest.test_readline..readalllinesufoo bar baz spam
eggsufoo |bar |baz |spam
|eggszfoo|bar|baz|spam|eggsF )   u
uあrFr^Pazxxx r]xxx)TN)r enumerater`rQr1r_) r rdr-Z sexpectedZsexpectednoendsZlineendsZvwZvwor=Zlineendr,rar )rMr r test_readlinesP          zReadTest.test_readlinecs2gd}d|fdd}|}||d|d|dd|d|}||d|d|dd|dd|dt|ddddd|}||d||dd|d|}|jdd d dd |d d|d|}|jdd d dd |dd |dd|dd d |}|jdd d dd ||dd dg|dd|ddS) N)zHumpty Dumpty sat on a wall, z!Humpty Dumpty had a great fall. z-All the king's horses and all the king's men z#Couldn't put Humpty together again.rFcs"tj}tj|SrrX)r[datar r rrMsz8ReadTest.test_mixed_readline_and_read..getreaderrr0d()r,r)j)rQrr_r.r readlines)r rbrMfr rprtest_mixed_readline_and_reads: .*z%ReadTest.test_mixed_readline_and_readcCsVgd}td||j}t|j|}t|D]\}}||||q8dS)N)=z:<%!--=================================================== z, BLOG index page: show recent articles, z7 today's articles, or articles of a specific date. z>========================================================--%> z!<%@inputencoding="ISO-8859-1"%> z<%@pagetemplate=TEMPLATE.y%> z$<%@import=import frog.util, frog%> z!<%@import=import frog.objects%> z9<%@import=from frog.storageerrors import StorageError%> z<% rgzimport logging z+log=logging.getLogger("Snakelets.logger") rgrgzuser=self.SessionCtx.user z-storageEngine=self.SessionCtx.storageEngine rgrgz-def readArticlesFromDate(date, count=None): z2 entryids=storageEngine.listBlogEntries(date) z% entryids.reverse() # descending z if count: z# entryids=entryids[:count] z try: z\ return [ frog.objects.BlogEntry.load(storageEngine, date, Id) for Id in entryids ] z except StorageError,x: z6 log.error("Error loading articles: "+str(x)) z, self.abort("cannot load articles") rgzshowdate=None rgzarg=self.Request.getArg() zif arg=="today": z, #-------------------- TODAY'S ARTICLES z- self.write("

Today's articles

") z( showdate = frog.util.isodatestr() . entries = readArticlesFromDate(showdate) zelif arg=="active": z4 #-------------------- ACTIVE ARTICLES redirect z self.Yredirect("active.y") zelif arg=="login": z/ #-------------------- LOGIN PAGE redirect z self.Yredirect("login.y") zelif arg=="date": z7 #-------------------- ARTICLES OF A SPECIFIC DATE z2 showdate = self.Request.getParameter("date") zV self.write("

Articles written on %s

"% frog.util.mediumdatestr(showdate)) rzzelse: z+ #-------------------- RECENT ARTICLES z, self.write("

Recent articles

") z. dates=storageEngine.listBlogEntryDates() z if dates: z entries=[] z SHOWAMOUNT=10 z for showdate in dates: zW entries.extend( readArticlesFromDate(showdate, SHOWAMOUNT-len(entries)) ) z* if len(entries)>=SHOWAMOUNT: z break z rF) rYrZrQrBr;r2rMrnr)r r-r[rar=rcr r rtest_bug1175396s ?zReadTest.test_bug1175396cCsNtd}t|j|}t|j|}|d||jddd|d||jddd||jddd|d ||jddd ||jddd|d||jd dd|d||jd dd ||jd dd |d ||jd dd ||jd dd|d ||jd dd dS)NrEzfoo Frlfooz bar rFZbarZbazTrfzbar zfoo )r$r2 getwriterr;rMr*rr_)r rSwriterrar r rtest_readlinequeueFs*       zReadTest.test_readlinequeuecCs~d}d}d}||||j}t|}t|j|}|||||||||||ddS)NzAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy z`offending line: ladfj askldfj klasdj fskla dfzaskdj fasklfj laskd fjasklfzzzzaa%whereisthis!!! z next line. rFrBr;rYrZr2rMrr_)r s1s2s3r-r[rar r rtest_bug1098990_aas zReadTest.test_bug1098990_ac Csd}d}d}d}d}||||||j}t|}t|j|}|||||||||||||||||ddS)Nzaaaaaaaaaaaaaaaaaaaaaaaa zbbbbbbbbbbbbbbbbbbbbbbbb zstillokay:bbbbxx zbroken!!!!badbad z againokay. rFr) r rrrZs4Zs5r-r[rar r rtest_bug1098990_bns zReadTest.test_bug1098990_b�c Cs|tdj|j|d|jdd|j|d|jdd|j|d|jdd|j|d|jdd |j|d|jd d |j|d |jdd |j|d |jd d |jd|j}dD]\}}||jt|d}||jt|d}|d|}|||j|}|t|j|j|||jd||||jd||||jd|||||jd ||j |d dd|jD}|||jd|||qdS)Nu[]backslashreplacez[\udc80] namereplacexmlcharrefreplacez [�]ignore[]replacez[?][]z[??]rF))𐿿A)[])rr surrogatepasscss|]}d|VqdS)\x%02xNr )rJbr r r sz0ReadTest.test_lone_surrogates..) assertRaisesUnicodeEncodeErrorrBr;rrill_formed_sequenceUnicodeDecodeErrorr4ill_formed_sequence_replacerQ) r ZbombeforeZafterZbefore_sequenceZafter_sequenceZ test_stringZ test_sequencerr r rtest_lone_surrogatessr               zReadTest.test_lone_surrogatescCsd|jd}tdt|D]J}t|jd}|||d|d||||dddqd|jd}tdt|D]H}t|jd}|||d|d||||ddqdS)Nurr0rFTu)rBr;r1rr2r3rr4)r rqr=decr r rtest_incremental_surrogatepasssz'ReadTest.test_incremental_surrogatepassN) rrrrWroryr{rrrrrrr r r rrDjs+;0E ,rDc@sdeZdZdZejdkrdZndZdZdZddZ d d Z d d Z d dZ ddZ ddZddZdS) UTF32Testutf-32little܀s$spamspams$spamspamcCst|j\}}}}t}||}|d|d|}|||jkpV||j kt|}||}| | ddSNspamspamspam r2lookupr;rYrZr*getvaluer9spamlespamberr.r _rar~r-rxr>r r rtest_only_one_boms   zUTF32Test.test_only_one_bomcCsTtd}t|j|}|t|jtd}t|j|}|t|jdS)NsrYrZr2rMr;r UnicodeErrorr.r r-rxr r r test_badboms   zUTF32Test.test_badbomcCs|dgddS)N ÿĀ￿𐀀)rFrFrFrFrFrFrFrrrÿrrrÿĀrrrÿĀ￿rrrrrWr\r r r test_partialszUTF32Test.test_partialcCs0|dtddd|dtddddSN)rr0rT)rFr0rrr2 utf_32_decoder\r r r test_handlerss   zUTF32Test.test_handlerscCs|ttjddddSNstrictT)rrr2rr\r r r test_errors s zUTF32Test.test_errorscCs(||jd|j||jd|jdSNrr@r;rrr\r r rtest_decoder_state s zUTF32Test.test_decoder_statecCs8d}|dt|dd}|dt|ddS)Ns𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀𐀀rsr)r Z encoded_leZ encoded_ber r rtest_issue8941s  zUTF32Test.test_issue8941N)rrrr;sys byteorderrrrrrrrrrrr r r rrs  rc@s4eZdZdZdZddZddZddZd d Zd S) UTF32LETest utf-32-lercCs|dgddSNr)rFrFrFrrrrrrrrrrrrrrrrrrr\r r rr"szUTF32LETest.test_partialcCs|d|jddS)N𐈃srrBr;r\r r r test_simple=szUTF32LETest.test_simplecCs|ttjddddSr)rrr2utf_32_le_decoder\r r rr@s zUTF32LETest.test_errorscCsd}|dt|ddS)Nsrr)rr2rr rVr r rrDs zUTF32LETest.test_issue8941N rrrr;rrrrrr r r rrs rc@s4eZdZdZdZddZddZddZd d Zd S) UTF32BETest utf-32-bercCs|dgddSrrr\r r rrPszUTF32BETest.test_partialcCs|d|jddS)Nrsrr\r r rrkszUTF32BETest.test_simplecCs|ttjddddSr)rrr2utf_32_be_decoder\r r rrns zUTF32BETest.test_errorscCsd}|dt|ddS)Nsrr)rr2rrr r rrrs zUTF32BETest.test_issue8941Nrr r r rrLs rc@sdeZdZdZejdkrdZndZdZdZddZ d d Z d d Z d dZ ddZ ddZddZdS) UTF16Testutf-16r܀sspamspamsspamspamcCst|j\}}}}t}||}|d|d|}|||jkpV||j kt|}||}| | ddSrrrr r rrs   zUTF16Test.test_only_one_bomcCsTtd}t|j|}|t|jtd}t|j|}|t|jdS)Nsrrrr r rrs   zUTF16Test.test_badbomcCs|dgddS)Nr)rFrFrFrrrrrrrrrrrrr\r r rrszUTF16Test.test_partialcCs0|dtddd|dtddddSr)rr2 utf_16_decoder\r r rrs   zUTF16Test.test_handlerscCs|ttjddddSr)rrr2rr\r r rrs zUTF16Test.test_errorscCs(||jd|j||jd|jdSrrr\r r rrs zUTF16Test.test_decoder_statecCsd}||j}|tjtjttjd}||Wdn1sL0Ytdt f$t jtjd|jd}Wdn1s0Y| | | |Wdn1s0YdS)NzHello world wbrFUr;) rBr; addCleanuprunlinkTESTFNopenr*Zcheck_warningsDeprecationWarningr2rr.)r rr-fprar r rtest_bug691291s (2zUTF16Test.test_bug691291N)rrrr;rrrrrrrrrrrrr r r rrzs  rc@s,eZdZdZdZddZddZddZd S) UTF16LETest utf-16-lercCs|dgddSNr) rFrrrrrrrrrrrrr\r r rrszUTF16LETest.test_partialcCsBgd}|D]0\}}|ttj|dd||dd|q dS)N)rr)sAZA�)s ABCDZABCD�)sr)sAr)sA�A)sArrTzutf-16ler)rrr2utf_16_le_decoderr4r testsrawexpectedr r rrs   zUTF16LETest.test_errorscCs,|d|jd|d|jddS)NrsީrrBr;r4r\r r r test_nonbmps zUTF16LETest.test_nonbmpNrrrr;rrrrr r r rrs rc@s,eZdZdZdZddZddZddZd S) UTF16BETest utf-16-bercCs|dgddSrrr\r r rrszUTF16BETest.test_partialcCsBgd}|D]0\}}|ttj|dd||dd|q dS)N)r)sAr)s ABCDZr)sr)sr)sAr)sArrTzutf-16ber)rrr2utf_16_be_decoderr4rr r rrs   zUTF16BETest.test_errorscCs,|d|jd|d|jddS)Nrsrr\r r rr"s zUTF16BETest.test_nonbmpNrr r r rrs rcsTeZdZdZdZdZdZddZddZd d Z fd d Z d dZ ddZ Z S)UTF8Testutf-8su ���rEcCs|dgddS)Nÿ߿ࠀ￿𐀀)rrrrÿ߿rrÿ߿ࠀrr ÿ߿ࠀ￿rrrrrr\r r rr.szUTF8Test.test_partialcCs d}||j|||jdS)Nu€ÿĀ߿ࠀ￿􏿿)r@r;rB)r r<r r rrDs zUTF8Test.test_decoder_statec CsZdD]P\}}}|j|||d&|||j||Wdq1sJ0YqdS)N)[]rr)rru[��])rsurrogateescape[])rrz [\x80\xff]rq error_handlerr)subTestrr4r;r rqrrr r rtest_decode_errorIszUTF8Test.test_decode_errorcst|d|jd|jd|t}d|jdWdn1sT0Y|j}||j |j |j ddS)Nrrs[]u []u) superrrrBr;BOMrr exceptionobjectstartend)r cmexc __class__r rrUs  ,zUTF8Test.test_lone_surrogatescCs|d|jd|jd|d|jd|jd|d|jd|jd|d|jdd|d|jdd|td|t d|jdWdn1s0Y|t d |jdWdn1s0YdS) Nu abcdefrs abcdefu𐿿s𐿿rs[]sabcsabcz) rrBr;r r4r9r2 lookup_errorrrr\r r rtest_surrogatepass_handleras( , z#UTF8Test.test_surrogatepass_handlerc Csgd}dD]}dD]}|||qq |d|D]N}|j|d.t|j}|t|j|Wdq81s|0Yq8dS)N)r) ssssss)r)sssssssrq) r`extendrr2r3r;rrr4)r Zcasesprefixsuffixrqrr r rtest_incremental_errorsts z UTF8Test.test_incremental_errors)rrrr;rrr rrrrrr& __classcell__r r rrr(s rc@s8eZdZdZddZddZddZdd Zd d Zd S) UTF7Testutf-7cCsd}|||j|d||d|j|d}|||j|d||d|j||d|jd|d|jdd}|||j|d||d|j|dttttdt||d |}|||jd dS) NzGABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?asciiz !"#$%&*;<=>@[]^_`{|}za+bsa+-bz rF+sX+AAAAAQACAAMABAAFAAYABwAIAAsADAAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwBcAH4Afw-) rrBr;r4rQsortedsetrHr1)r Zset_dZset_owsZ other_asciir r r test_asciis"zUTF7Test.test_asciicCs|dgddS)Na+-bc€dĀe𐀀f) rkrka+za+-a+-br3r3r3r3za+-ba+-bcr4r4r4r4ua+-bc€ a+-bc€dr5r5r5r5u a+-bc€dĀ a+-bc€dĀer6r6r6r6r6r6r6ua+-bc€dĀe𐀀r1rr\r r rrszUTF7Test.test_partialc Csngd}|D]\\}}|j|d8|ttj|dd||dd|Wdq 1s^0Yq dS)N))sbu�b)saba�b)sabua��b)sa+IKa�)sa+IK-br7)sa+IK,br7)sa+IKxa€�)sa+IKx-ba€�b)sa+IKwgrr9)s a+IKwgr-br:)sa+IKwgr,r9)s a+IKwgr,-bu a€�-b)sa+IKwgrB a€€�)s a+IKwgrB-b a€€�b)s a+/,+IKw-ba�€b)s a+//,+IKw-br=)s a+///,+IKw-b a￿�€b)s a+////,+IKw-br>)sa+IKw-bua€b�)sa+IKwbr:)sa+@br7rrTr)r)rrrr2 utf_7_decoderr4rr r rrs  zUTF7Test.test_errorscCs|d|jd|d|jd|d|jd|d|jd|d|jd|d|jd|d|jd|d|jd |d |jd|d |jddS) Nu𐒠s+2AHcoA-us+2AHcoAu€𐒠s +IKzYAdyg-s +IKzYAdygu €€𐒠s +IKwgrNgB3KA-s +IKwgrNgB3KArr\r r rrs zUTF7Test.test_nonbmpc CsZgd}|D]H\}}|j|d$||dd|Wdq 1sJ0Yq dS)N) )sa+2AE-buab)sa+2AEbr7)sa+2AEr8)sa+2AEA-br7)sa+2AH-br7)s a+IKzYAQ-bua€b)s a+IKzYAQbr:)s a+IKzYAQA-br:)s a+IKzYAd-br:)s a+IKwgrNgB-bu a€€b)s a+IKwgrNgBbr<)s a+IKwgrNgBr;)s a+IKwgrNgBA-br<r?r)rrrr4rr r rrs zUTF7Test.test_lone_surrogatesN) rrrr;r0rrrrr r r rr(s 'r(c@seZdZddZddZdS) UTF16ExTestcCs|ttjdddddS)NrrrT)rrr2utf_16_ex_decoder\r r rrszUTF16ExTest.test_errorscCs|ttjdSr)r TypeErrorr2rCr\r r r test_bad_argsszUTF16ExTest.test_bad_argsN)rrrrrEr r r rrB srBc@s$eZdZddZddZddZdS)ReadBufferTestcCs&ddl}|t|ddddS)Nrrspam)rG)arrayrr2readbuffer_encode)r rIr r r test_arrays zReadBufferTest.test_arraycCs|tdddS)NrFrEr)rr2rJr\r r r test_emptyszReadBufferTest.test_emptycCs"|ttj|ttjddSN*)rrDr2rJr\r r rrE szReadBufferTest.test_bad_argsN)rrrrKrMrEr r r rrFsrFc@s>eZdZdZejZddZddZddZ dd Z d d Z d S) UTF8SigTest utf-8-sigcCs|dgddS)Nÿ߿ࠀ￿𐀀)rFrFrFrFrFurSÿrTÿ߿rUrU ÿ߿ࠀrVrVÿ߿ࠀ￿rWrWrWrRrr\r r rr(szUTF8SigTest.test_partialcCs|tddddS)NrQrFrstrr\r r rtest_bug1601501DszUTF8SigTest.test_bug1601501cCs,td}d}|||d|dS)NrQr)r2r3rr4rB)r r>r-r r rtest_bomHs zUTF8SigTest.test_bomc Csd}tjd}td}dgttddgdD]\}|t|}t}|durb||}n|}|spq|| |qN| }| ||q4dSNu ABC¡∀XYZs ABC¡∀XYZrQr0 )@r+ii) r2BOM_UTF8rMlistr1rYrZStringIOr.r*rr r Z unistringZ bytestringrasizehintZistreamZostreamrqZgotr r rtest_stream_bomMs     zUTF8SigTest.test_stream_bomc Csd}d}td}dgttddgdD]\}|t|}t}|dur\||}n|}|sjqv||qH| }| ||q.dSr]) r2rMrbr1rYrZrcr.r*rrrdr r rtest_stream_barecs    zUTF8SigTest.test_stream_bareN) rrrr;r2rar rr[r\rfrgr r r rrP$srPc@s,eZdZddZddZddZddZd S) EscapeDecodeTestcCs*|tdd|ttddS)NrErL)rr2 escape_decode bytearrayr\r r rrM{szEscapeDecodeTest.test_emptycCsFtj}tdD]2}t|g}|dkr|||d|ddfqdS)Nr`\0r)r2rir1rHrr r4rr r rtest_raws   zEscapeDecodeTest.test_rawc Cs&tj}t||}|dd|dd|dd|dd|d d |d d |d d|dd|dd|dd|dd|dd |dd|dd|dd|dd|d d!|d"d|d#d|d$d!td%d&D]}t|g}|d'vr8|t"|d(|d(|Wdn1s.0Y|t*|d(|d(|Wdq1st0Yq|t|d)d)Wdn1s0Y|t|d*d*Wdn1s0Y|t|d+d+Wdn1s0YdS),N[\ ][][\"]s["][\']s['][\\]s[\][\a]s[][\b]s[][\t]s[ ][\n]s[ ][\v]s[ ][\f]s[ ][\r]s[ ][\7][\78]s[8][\41]s[!][\418]s[!8][\101]s[A][\1010]s[A0]s[\501][\x41][\x410]a{sabfnrtvxrk\8\9\)r2rirr1rH assertWarnsrupperr r4rr=rr r r test_escapesF                        2 < * * zEscapeDecodeTest.test_escapecCstj}|t|d|t|d||ddd||ddd|t|d|t|d ||d dd ||d dd dS) Ns\xs[\x]s[\x]\xr)rprur)[?]?rus\x0s[\x0]s[\x0]\x0)rp)rr)r2rir ValueErrorr)r r4r r rrszEscapeDecodeTest.test_errorsN)rrrrMrnrrr r r rrhzs%rh))u"ليهمابتكلموشعربي؟segbpdaj6bu4bxfgehfvwxn)u他们为什么不说中文sihqwcrb4cv8a8dqg056pqjye)u他們爲什麽不說中文sihqwctvzc91f659drss3x8bo0yb)uPročprostěnemluvíčeskysProprostnemluvesky-uyb24dma41a)u,למההםפשוטלאמדבריםעבריתs4dbcagdahymbxekheh6e0a7fei0b)uZयहलोगहिन्दीक्योंनहींबोलसकतेहैंs,i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd)u6なぜみんな日本語を話してくれないのかs&n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa)uH세계의모든사람들이한국어를이해한다면얼마나좋을까sE989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c)u8почемужеонинеговорятпорусскиs b1abfaaepdrnnbgefbaDotcwatmq2g4l)u*PorquénopuedensimplementehablarenEspañols-PorqunopuedensimplementehablarenEspaol-fmd56a)u-TạisaohọkhôngthểchỉnóitiếngViệts,TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g)u3年B組金八先生s3B-ww4c5e180e575a65lsy2b)u"安室奈美恵-with-SUPER-MONKEYSs(-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n)u'Hello-Another-Way-それぞれの場所s(Hello-Another-Way--fc4qua05auwb3674vfr0b)uひとつ屋根の下2s2-u9tlzr9756bt3uc0v)uMajiでKoiする5秒前sMajiKoi5-783gue6qz075azm5e)uパフィーdeルンバsde-jg4avhby1noc0d)uそのスピードでsd9juau41awczczp)z -> $1.00 <-s -> $1.00 <--rc@s$eZdZddZddZddZdS) PunycodeTestcCs8tD].\}}|t|ddt|dqdSNpunycoder*)punycode_testcasesrrZrBlowerr Zunipunyr r r test_encode%s   zPunycodeTest.test_encodecCsFtD]<\}}|||d|dd}|||dqdSr)rrr4rBrr r r test_decode1s zPunycodeTest.test_decodec Csddtfdg}|D]j\}}}|j||dBt|trL|t|jd|n||d||Wdq1st0YqdS)Nxn--w&r)rrzxn-)rerrorsr)rr isinstance Exceptionrr4r)r Z testcasesrrrr r rtest_decode_invalid7s  z PunycodeTest.test_decode_invalidN)rrrrrrr r r rr$s r)-)s%foo­͏᠆᠋bar​⁠baz︀︈️s foobarbaz)sCAFEscafe)sßsss)sİsi̇)sŃͺsń ιNN)sǰ ªsǰ a)sᾷsᾶι)ǰr)ΐr)ΰr)ẖr)ὖr) r)s r)s N)s r)s​rE)s r)r)s…N)s᠎N)rXrE)s𝅵N)sN)s󱈴N)s􏈴N)s򏿾N)s􏿿N)sN)s�N)s⿵N)śś)s‎N)s‪N)s󠀁N)s󠁂N)sfoo־barN)s fooﵐbarN)s fooﹶbars foo َbar)sا1N)ا1بrr)sX­ßİ℡ǰ ªΰ sxssi̇telǰ aΰ )sXß㌖İ℡⒟㌀s*xssキロメートルi̇tel(d)アパートc@seZdZddZdS) NameprepTestc Csddlm}ttD]\}\}}|dur*qt|dd}|durN|t||qt|dd}z||||Wqty}z&t d|dt|fWYd}~qd}~00qdS)Nr)namepreprrz Test 3.%d: %sr0) Zencodings.idnarrnnameprep_testsrZrrrrrZ TestFailed)r rposZorigZpreppeder r r test_namepreps   zNameprepTest.test_nameprepN)rrrrr r r rrsrc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) IDNACodecTestcCsL|tddd|tddd|tddd|tddd dS) N python.orgidna python.org python.org. python.org.xn--pythn-mua.org pythön.orgxn--pythn-mua.org. pythön.org.rYr\r r rtest_builtin_decodesz!IDNACodecTest.test_builtin_decodecCsL|ddd|ddd|ddd|ddd dS) NrrrrrrrrrrrBr\r r rtest_builtin_encodesz!IDNACodecTest.test_builtin_encodecCsp|tdddWdn1s,0Y|tdddWdn1sb0YdS)Nztoo longsTxn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarsNxn--016caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)assertRaisesRegexrr4r\r r r test_builtin_decode_length_limits(z.IDNACodecTest.test_builtin_decode_length_limitcCs2tdtd}|d||ddS)NrabcrF)r2rMrYrZr.r)r rTr r r test_streams zIDNACodecTest.test_streamcCs<|dtdddDdd|dtdddDdd |dtd dd Ddd |dtd dd Ddd td}||dd||dd||dd||ddd|||dd||dd||dd||ddddS)NrFcss|]}t|gVqdSrrGrIr r rr rEz8IDNACodecTest.test_incremental_decode..rrrcss|]}t|gVqdSrrGrIr r rrrErrcss|]}t|gVqdSrrGrIr r rrrErrcss|]}t|gVqdSrrGrIr r rrrEsxn--xams ple-9ta.ou äxample.srgrETZorgsrg.zorg.)rrQr2rRr3r4rP)r decoderr r rtest_incremental_decode s4 z%IDNACodecTest.test_incremental_decodecCs|dtddd|dtddd|dtddd|dtdddtd}||d d||d d ||d d d|||d d||dd||d d ddS)NrErrrrrrruäxz ample.orgsxn--xample-9ta.rFTsorgz ample.org.sxn--xample-9ta.org.)rrQr2 iterencoderArBrP)r encoderr r rtest_incremental_encode(s0 z%IDNACodecTest.test_incremental_encodecCsJdddddddD](}|tdjd||tdjd|qdS)Nrrrr)rrrr)rBr4rrr rr r rrDs  zIDNACodecTest.test_errorsN) rrrrrrrrrrr r r rrsrc@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)CodecsModuleTestcCsx|tddd|ttj|tdd|ttjdd|tjdddd|tjd dd d d dS) Nlatin-1äöürabcrr*objr;[]rrr)rr2r4rrDrr\r r rrQszCodecsModuleTest.test_decodecCs|tddd|ttj|ttjdd|tdd|ttjdd |tjddd d|tjd d d d ddS)Nrrrr|__spam__rruÿffr*r[ÿ]rrrp)rr2rBrrD LookupErrorrr\r r rr^szCodecsModuleTest.test_encodecCs"|ttj|ttjddSrN)rrDr2registerr\r r r test_registerlszCodecsModuleTest.test_registercCs2|ttj|ttjd|ttjddS)Nr )rrDr2rrr\r r r test_lookuppszCodecsModuleTest.test_lookupcCs"|ttj|ttjddSNr)rrDr2 getencoderrr\r r rtest_getencoderusz CodecsModuleTest.test_getencodercCs"|ttj|ttjddSr)rrDr2 getdecoderrr\r r rtest_getdecoderysz CodecsModuleTest.test_getdecodercCs"|ttj|ttjddSr)rrDr2rMrr\r r rtest_getreader}szCodecsModuleTest.test_getreadercCs"|ttj|ttjddSr)rrDr2r}rr\r r rtest_getwriterszCodecsModuleTest.test_getwritercCslttj}|tjtj|zttjdWntjyN|dYn0td}||j ddS)Ntr_TRztest needs Turkish localeASCIIr*) locale setlocaleLC_CTYPErErrorskipTestr2rrname)r Z oldlocalerKr r rtest_lookup_issue1813s  z&CodecsModuleTest.test_lookup_issue1813cCs,d}||tjtjD]}tt|qdS)N),rBr4r CodecInfoCodecIncrementalEncoderIncrementalDecoder StreamReader StreamWriterrrrrAr3rMr}register_errorr strict_errorsreplace_errors ignore_errorsxmlcharrefreplace_errorsbackslashreplace_errorsnamereplace_errorsr EncodedFilerrRr BOM_BEBOM_LEra BOM_UTF16 BOM_UTF16_BE BOM_UTF16_LE BOM_UTF32 BOM_UTF32_BE BOM_UTF32_LEBOM32_BEBOM32_LEBOM64_BEBOM64_LEStreamReaderWriter StreamRecoder)ZassertCountEqualr2__all__getattr)r Zapir r rtest_alls zCodecsModuleTest.test_allc Cs|tjtjdD]l}||Nttj|d}||tjWdn1sX0YWdq1sv0YqdS)N)wrTzr+w+rkr2r*) rrrrrr2rr6r)r modefiler r r test_opens zCodecsModuleTest.test_opencCs~|ttjdd|ttjdd|ttjdd|ttjdddD],}|ttjdd||ttjdd|qLdS)NrZ undefinedrrFrE)rrrr)rrr2rBr4rr r rtest_undefineds  zCodecsModuleTest.test_undefinedc Cs~t}td|V}|t ttjddWdn1sF0Y|j Wdn1sp0YdS)Nz builtins.openZwtzinvalid-encoding) r mock_openpatchrrr2rrrcloseZ assert_called)r r rr r r'test_file_closes_if_lookup_error_raiseds  .z8CodecsModuleTest.test_file_closes_if_lookup_error_raisedN)rrrrrrrrrrrrrrrr r r r rrOs   rc@seZdZddZddZdS)StreamReaderTestcCstd|_td|_dS)Nr한 글)r2rMrarYrZr[r\r r rsetUps zStreamReaderTest.setUpcCs$||j}||ddgdS)Nu한 u글)rar[rrw)r rxr r rtest_readliness zStreamReaderTest.test_readlinesN)rrrrrr r r rr sr c@seZdZddZdS)EncodedFileTestcCs\td}t|dd}||dt}t|dd}|d||ddS)Nrrrs\ rü)rYrZr2rrr.r*rr rxZefr r r test_basics  zEncodedFileTest.test_basicN)rrrrr r r rrsr)er*big5 big5hkscscharmapcp037Zcp1006cp1026cp1125cp1140cp1250cp1251cp1252cp1253cp1254cp1255cp1256cp1257cp1258cp424cp437cp500Zcp720Zcp737cp775cp850cp852cp855Zcp856cp857cp858cp860cp861cp862cp863cp864cp865cp866cp869Zcp874Zcp875cp932cp949cp950 euc_jis_2004 euc_jisx0213euc_jpeuc_krgb18030gb2312gbk hp_roman8hzr iso2022_jp iso2022_jp_1 iso2022_jp_2iso2022_jp_2004 iso2022_jp_3iso2022_jp_ext iso2022_kr iso8859_1 iso8859_10 iso8859_11 iso8859_13 iso8859_14 iso8859_15 iso8859_16 iso8859_2 iso8859_3 iso8859_4 iso8859_5 iso8859_6 iso8859_7 iso8859_8 iso8859_9johabkoi8_rkoi8_tkoi8_ukz1048latin_1 mac_cyrillic mac_greek mac_iceland mac_latin2 mac_roman mac_turkishZpalmosptcp154rZraw_unicode_escape shift_jisshift_jis_2004shift_jisx0213tis_620Zunicode_escapeutf_16 utf_16_be utf_16_leutf_7utf_8Z mbcs_encodembcsZ oem_encodeZoemrc@sJeZdZddZejddZddZddZd d Z d d Z d dZ dS)BasicUnicodeTestc sd}tD]}t|j}|dr.|d7}n |dkr:d}||dd|ddt||\}}||t|d|t ||\}}|||d||t vrVt d}t ||}d} |D]6} | | |} |t| tut| | | 7} qt d}t||} d} | D]"} | t| g| | 7} q || |d||t vrzt|WntyYn0d} |D]} | | 7} q| dd 7} t|d} | D]} | t| g7} q| dd 7} || |d|dtt|||}|||d|dttd||}||d|d vrzt|d WntyYq0dfd d |D} t|d dfdd | D} || |d|qdS)Nabc123Z_codecr^r- encoding=%rrErFTrrorc3s|]}|VqdSrrBrI)rr rrrEz/BasicUnicodeTest.test_basics..c3s|]}t|gVqdSrr4rHrI)rr rrs)all_unicode_encodingsr2rrendswithrrrrrbroken_unicode_with_statefulr$r}r*r.r9typerHrMrArrBr3r4rQrRr)r r-r;rrr,r)rSr~ encodedresultrKchunkra decodedresultrUr )rrr test_basicsSs           zBasicUnicodeTest.test_basicsc s2d}tD]"}|tvrzt|Wnty6Yn|0d}|D]}||7}q@|dd7}t|d}|D]}|t|g7}qv|dd7}| ||d||dvrzt|dWntyYq0d fdd |D}t|dd fd d |D}| ||d|qdS) NrqrErFTrsrtrc3s|]}|VqdSrrurI)cencoderr rrrEz4BasicUnicodeTest.test_basics_capi..c3s|]}t|gVqdSrrvrI)cdecoderr rrs) rwry _testcapiZcodec_incrementalencoderrrBZcodec_incrementaldecoderr4rHrrQ)r r-r;r{rKr}r )rrrtest_basics_capis@     z!BasicUnicodeTest.test_basics_capicCsrdd}tD]`}|dkrq |tvr$q t|t||}tdD]$}|dd| }| ||qFq dS)Nz%s %s )AXabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123AXdef456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456def456rrtr) rwryr2rMrYrZrBr1seekr.r)r r-r;ratrqr r r test_seeks  zBasicUnicodeTest.test_seekcCs:tD]0}t|}|t||dvr|t|dqdS)N)rrrO)rwr2rrrD)r r;rr r rtest_bad_decode_argss   z%BasicUnicodeTest.test_bad_decode_argscCs$tD]}t|}|t|qdSr)rwr2rrrD)r r;rr r rtest_bad_encode_argss z%BasicUnicodeTest.test_bad_encode_argscCs&ddlm}t|j}|||dS)Nr)r) encodingsrrzZencoding_tabler)r rZ table_typer r r"test_encoding_map_type_initializeds  z3BasicUnicodeTest.test_encoding_map_type_initializedcCsBd}tD]4}|tvr||||||||||qdS)Nrq)rwryr@rBrC)r r<r;r r rrs z#BasicUnicodeTest.test_decoder_stateN) rrrr~rZ cpython_onlyrrrrrrr r r rrpRsM %rpc@s$eZdZddZddZddZdS) CharmapTestcCs|tdddd|tdddd|ttjddd|ttjddd|tdd dd |tdd dd |tdd dd |tdd dd |tdd dd|tdd ddttd}|t|d ddt|fdS)Nrrrr􏿿bcrrabuab￾ruab�rrzab\x02rrrrr`rF)rr2charmap_decoderrrHr1rr Zallbytesr r rtest_decode_with_string_mapsV             z'CharmapTest.test_decode_with_string_mapc Cs<|tddddddd|tdddd d dd |tddd dddd |tddddddd|ttjddddd|ttjdddddd|ttjdddddd|tdddddd|tddddddd|tddddddd|tdddddd|tddddddd|tddddddd|tdddddd|tddddddd|tdddddddttd}|t|didt|f|t dtjdddd dd|t dtjdddd dddS)NrrrkrrKrr0rrZAaZBbZCc)ZAaBbCcr􏿿rrFrrr0u￾rrrrrr`z.character mapping must be in range\(0x110000\)riɚ;) rr2rrrrHr1rrrDrr r rtest_decode_with_int2str_map(s               z(CharmapTest.test_decode_with_int2str_mapc Cstd}td}td}|tdd|||dd|tddd||dd |tddtj||dttjd d f|ttjddtjd ||d|t tjdd||d |t tjdd||dd|tdd||d d|tdd||ddd|tdd||d d|tdd||ddd|tdd||d d|tdd||ddddS)NrkrrKrrrrirZbcrr0rirrrrrr) ordrr2rr maxunicodechrrrDr)r rkrrKr r rtest_decode_with_int2int_maps       z(CharmapTest.test_decode_with_int2int_mapN)rrrrrrr r r rrs7trc@seZdZddZddZdS) WithStmtTestcCsXtd}t|dd }||dWdn1s>0Y||jdS)Nrrrr)rYrZr2rrr.r9closedrr r rtest_encodedfiles .zWithStmtTest.test_encodedfilecCs\td}td}t||j|jd }||dWdn1sN0YdS)Nrrrü) rYrZr2rr streamreader streamwriterrr.)r rxr"srwr r rtest_streamreaderwriters   z$WithStmtTest.test_streamreaderwriterN)rrrrrr r r rrsrc@seZdZddZddZdS) TypesTestc Csftjtjtjtjtjtjtjtjtj tj tj tj g }t tdrJ|tj|D]}|t|dqNdS)N mbcs_decoderm)r2r@ utf_8_decoderrrCrrrutf_32_ex_decodelatin_1_decode ascii_decoderhasattrr`rrrD)r Zdecodersrr r rtest_decode_unicodes"  zTypesTest.test_decode_unicodecCs|tdd|tdd|tdd|tdd|ttjd|tddd|tddd |ttjd|tddd|tddd dS) Nz\u1234)uሴrus\u1234 \U00110000z \U00110000rrrer)z(\x5c\x55\x30\x30\x31\x31\x30\x30\x30\x30re)rr2unicode_escape_decoderaw_unicode_escape_decoderrr\r r rtest_unicode_escape szTypesTest.test_unicode_escapeN)rrrrrr r r rrsrc@sLeZdZdZdZddZddZddZd d Zd d Z d dZ ddZ dS)UnicodeEscapeTestzunicode-escapeNcCs(|tdd|tdddSNrFrLrErFr)rr2unicode_escape_encoderr\r r rrM% szUnicodeEscapeTest.test_emptycCs@tj}tddD]*}|dkr||t|t|gdfqdS)N \r0)r2rr1rrrHr rBrr r rtest_raw_encode) sz!UnicodeEscapeTest.test_raw_encodecCsFtj}tdD]2}|dkr||t|gdt|ddfqdS)Nr`rrl0r)r2rr1rrHrrmr r rtest_raw_decode/ s z!UnicodeEscapeTest.test_raw_decodecCstj}t||}|dd|dd|dd|ddtd D]&}t|d vr@|t|d |q@td d D]}|t|d |qr|dd|dddS)N s\trfs\nrhs\r\s\\rz rrr`€\u20ac𝄠 \U0001d120)r2rrr1rrBr rBrrr r rtest_escape_encode5 s        z$UnicodeEscapeTest.test_escape_encodec CsDtj}t||}|dd|dd|dd|dd|d d |d d |d d|dd|dd|dd|dd|dd |dd|dd|dd|dd|d d!|d"d|d#d!|d$d%|d&d'td(d)D]}t|g}|d*vrF|t&|d+|d,t|Wdn1s<0Y|d-vr|t.|d+|d,t|d.Wdq1s0Yq|t|d/d0Wdn1s0Y|t|d1d2Wdn1s0Y|t|d3d4Wdn1s60YdS)5Nrorrqz["]rrz[']rsz[\]rtz[]ruz[]rvz[ ]rwz[ ]rxz[ ]ryz[ ]rzz[ ]r{r|z[8]r}z[!]r~z[!8]rz[A]rz[A0]rrrrrrrrs abfnrtuvxrkrsUNrrz\8rz\9ru\ú) r2rrr1rHrrrrrr r rtest_escape_decodeD sJ                         6  @ * * z$UnicodeEscapeTest.test_escape_decodec Cstj}dD]\}}t|D]}|t|d|d||t|d|d|dd|d|d|d|}|||ddt|f|||d d t|fqq |t|d ||d dd ||d d d dS)N))xrurHUrHrkrl[\]]\rrr[�]�rrFrer)r2rr1rrrrr r4rKr>r=rqr r rtest_decode_errorsk s"     z$UnicodeEscapeTest.test_decode_errorscCs|dgddS)N \ÿ￿𐀀) rFrFrFrr r r r \rrr \ÿrrrrr \ÿ￿rrrrrrrrrrrr\r r rr{ szUnicodeEscapeTest.test_partial rrrr;rrMrrrrrrr r r rr s'rc@sLeZdZdZdZddZddZddZd d Zd d Z d dZ ddZ dS)RawUnicodeEscapeTestzraw-unicode-escapeNcCs(|tdd|tdddSr)rr2raw_unicode_escape_encoderr\r r rrM szRawUnicodeEscapeTest.test_emptycCs6tj}tdD]"}||t|t|gdfqdS)Nr`r0)r2rr1rrrHrr r rr s z$RawUnicodeEscapeTest.test_raw_encodecCs>tj}tdD]*}||t|gdt|ddfqdS)Nr`rlrr)r2rr1rrHrrmr r rr s z$RawUnicodeEscapeTest.test_raw_decodecCsZtj}t||}tdD](}|dvr|dt|dt|gq|dd|dddS) Nr`uUrrkrrrr)r2rrr1rrHrr r rr s   z'RawUnicodeEscapeTest.test_escape_encodecCsZtj}t||}tdD](}|dvr|dt|gdt|q|dd|dddS) Nr`rrkrrrrr)r2rrr1rHr)r r4rrr r rr s   z'RawUnicodeEscapeTest.test_escape_decodec Cstj}dD]\}}t|D]}|t|d|d||t|d|d|dd|d|d|d|}|||ddt|f|||d d t|fqq |t|d ||d dd ||d d d dS)N)rrrkrlrrrrrrrrrr)r2rr1rrrrrr r rr s"     z'RawUnicodeEscapeTest.test_decode_errorscCs|dgddS)Nr)rrrrrrrrrrrrrrrrrrrrrrrr\r r rr sz!RawUnicodeEscapeTest.test_partialrr r r rr s  rc@seZdZddZdS)EscapeEncodeTestc Cs|gd}|D]F\}}|j|d"|t||Wdq 1sH0Yq |ttjd|ttjtddS)N))rErL)foobar)rru)s spameggs)s spam\x00eggs )sa'b)sa\'br)sb\c)sb\\cr)sc d)sc\ndr)sd e)sd\rer)sfg)sf\x7fgrr"rrG)rrr2 escape_encoderrDrj)r rrqoutputr r rr s  2z#EscapeEncodeTest.test_escape_encodeN)rrrrr r r rr src@s,eZdZddZddZddZddZd S) SurrogateEscapeTestcCsT|dddd|dddd|dddd|dddddS)Nfoobarrr foobarsu rr4rBr\r r r test_utf8 szSurrogateEscapeTest.test_utf8cCs,|dddd|dddddS)Nrr*rrrr\r r rr0 s zSurrogateEscapeTest.test_asciicCs,|dddd|dddddS)Nsfoobarz iso-8859-3ru foobarrr\r r r test_charmap s z SurrogateEscapeTest.test_charmapcCs|dddddS)Nurrsrr\r r r test_latin1% szSurrogateEscapeTest.test_latin1N)rrrrr0rrr r r rr s rc@seZdZddZdS)BomTestc Csd}d}|tjtj|D]~}tjtjd|d`}|||||d|| |d|d|| |dWdn1s0Ytjtjd|d\}||d| | d|d|||d|| |Wdn1s0Ytjtjd|dd}|j |d| |j d|j d|j ||d|| |Wdn1s0Ytjtjd|dP}|||| |||d|| |dWdn1s0Ytjtjd|dX}|j ||j |j |j ||d|| |dWdq1s0YqdS)NZ 1234567890)rrrrrrrrrr) rrrrr2rr*rrr.ZassertNotEqualtellr~)r rqrr;rxr r r test_seek0, sJ     2   0   0   4   zBomTest.test_seek0N)rrrrr r r rr+ sr) base64_codecuu_codec quopri_codec hex_codecbase64base_64uu)quopriquoted_printablequotedprintablehexrot13)rrrrrot_13 zlib_codecrNzlib bz2_codecbz2c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ e e dddZddZddZddZddZdS)TransformCodecTestc Csttd}tD]}|j|d`t||\}}||t|t||\}}||t||||Wdq1s0YqdS)Nr`r) rHr1bytes_transform_encodingsrr2rrrr)r Zbinputr;or,r=r r rr~ s zTransformCodecTest.test_basicsc CsntD]d}|j|dDtd|}t|t|}|}||dWdq1s^0YqdSNrr) rrr2rBrMrYrZr.rr r;sinraZsoutr r r test_read s  zTransformCodecTest.test_readc CsntD]d}|j|dDtd|}t|t|}|}||dWdq1s^0YqdSr) rrr2rBrMrYrZr_rrr r rro s  z TransformCodecTest.test_readlinec Csd}tD]}|j|dx|}t|}t||}t||}|||t|}t||}|||t||}|||Wdq1s0YqdS)Ns12345r)rr memoryviewr2rBrr4)r Zoriginalr;rqviewZ view_encodedZ view_decodedr r rtest_buffer_api_usage s      z(TransformCodecTest.test_buffer_api_usagec Csd}tD]}|j|dbd}||}|t|}||Wdn1sT0Y||jjWdq1s0YqdS)Nzbad input typerzM{!r} is not a text encoding; use codecs.encode\(\) to handle arbitrary codecs) rrformatrrrB assertIsNoner  __cause__)r bad_inputr;fmtmsgfailurer r r0test_text_to_binary_blacklists_binary_transforms s (zCTransformCodecTest.test_text_to_binary_blacklists_binary_transformscCs>d}|t|ddWdn1s00YdS)NzR^'rot_13' is not a text encoding; use codecs.encode\(\) to handle arbitrary codecszjust an example messager)rrrBr rr r r.test_text_to_binary_blacklists_text_transforms szATransformCodecTest.test_text_to_binary_blacklists_text_transformsc Csd}tD]}|j|dt||}d}||}|t|||Wdn1s`0Y|t|t||Wdn1s0YWdq1s0YqdS)Ns6encode first to ensure we meet any format restrictionsrzM{!r} is not a text encoding; use codecs.decode\(\) to handle arbitrary codecs) rrr2rBr rrr4rj)r rqr;Z encoded_datar rr r r0test_binary_to_text_blacklists_binary_transforms s  (zCTransformCodecTest.test_binary_to_text_blacklists_binary_transformsc CsdtdfD]x}|j|dXd}|t|}|dWdn1sN0Y||jjWdq 1sz0Yq dS)Ns immutablesmutable)r zR^'rot_13' is not a text encoding; use codecs.decode\(\) to handle arbitrary codecsr)rjrrrr4r r r )r r rrr r r.test_binary_to_text_blacklists_text_transforms s (zATransformCodecTest.test_binary_to_text_blacklists_text_transformszRequires zlib supportcCsVd}|t|}tddWdn1s20Y||jjt|jdS)Nz(^decoding with 'zlib_codec' codec failedhellorrrr2r4r6r r rzr rrr r r!test_custom_zlib_error_is_wrapped s * z4TransformCodecTest.test_custom_zlib_error_is_wrappedcCsVd}|t|}tddWdn1s20Y||jjt|jdS)Nz'^decoding with 'hex_codec' codec failedrrrrr r r test_custom_hex_error_is_wrapped s * z3TransformCodecTest.test_custom_hex_error_is_wrappedc CsptD]b\}}t|j}|D]H}|j|d(t|}||j|Wdq 1s^0Yq qdS)N)alias)transform_aliasesitemsr2rrrr)r codec_namealiasesZ expected_namerr"r r r test_aliases s   zTransformCodecTest.test_aliasescCs4tdd}||dd}|t|d|dS)Nsspace tab eol z quopri-codecsspace=20tab=09eol=20 sspace tab eol )r2rBrr4)r rVZ unescapedr r rtest_quopri_stateless s  z(TransformCodecTest.test_quopri_statelesscCs|ttjdddS)NrEzuu-codec)rrr2r4r\r r rtest_uu_invalid sz"TransformCodecTest.test_uu_invalidN)rrrr~rrorrrrrunittest skipUnlessrrrrr r!r r r rr s     rcCs t|Sr) _TEST_CODECSgetrr r r_get_test_codec sr') _forget_codeccCsdSrr r&r r rr( sr(c@seZdZddZddZddZejddZd d Z e fd d Z d dZ ddZ ddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%S)&ExceptionChainingTestcCs.t|tt|}t||_t|_dSr) reprrZidrnormalize_encodingrr RuntimeError obj_to_raise)r Z unique_idr r rr s  zExceptionChainingTest.setUpcCsDt|jdtj|jdzt|jWnty>Yn0dSr)r$poprr_cacher(KeyErrorr\r r rtearDown5 s  zExceptionChainingTest.tearDowncCs tj|||jd}|t|j<dS)N)r)r2rrr$)r rBr4Z codec_infor r r set_codec> szExceptionChainingTest.set_codecccsjd||j|j|}|||}|VWdn1s<0Y||jj|||jjjdS)Nz${} with {!r} codec failed \({}: {}\)) r rrrr6r r ZassertIsNotNone __traceback__)r Z operationexc_typerZfull_msgZcaughtr r r assertWrappedC s $z#ExceptionChainingTest.assertWrappedcOs |jdSrr.)r argskwdsr r r raise_objL szExceptionChainingTest.raise_objcCs||_||j|j|d||d|jWdn1sF0Y|d||td|jWdn1s0Y|d||d|jWdn1s0Y|d||td|jWdn1s0YdS)Nr; str_inputZdecoding bytes input)r.r3r:r6rBrr2r4)r r.rr5r r r check_wrappedP s*,*z#ExceptionChainingTest.check_wrappedcCs|tddS)NrFr=r-r\r r rtest_raise_by_type\ sz(ExceptionChainingTest.test_raise_by_typecCsd}|t||dS)NThis should be wrappedr>rr r rtest_raise_by_value_ sz)ExceptionChainingTest.test_raise_by_valuecCs*d}Gdddt}|||||dS)Nr@c@seZdZdZdS)zWExceptionChainingTest.test_raise_grandchild_subclass_exact_size..MyRuntimeErrorr N)rrr __slots__r r r rMyRuntimeErrore srCr-r=r rrCr r r)test_raise_grandchild_subclass_exact_sizec sz?ExceptionChainingTest.test_raise_grandchild_subclass_exact_sizecCs*d}Gdddt}|||||dS)Nr@c@s eZdZdS)zVExceptionChainingTest.test_raise_subclass_with_weakref_support..MyRuntimeErrorN)rrrr r r rrCk srCrDrEr r r(test_raise_subclass_with_weakref_supporti sz>ExceptionChainingTest.test_raise_subclass_with_weakref_supportcsfdd}||||t|d|jWdn1sF0Y|t|td|jWdn1s0Y|t|d|jWdn1s0Y|t|td|jWdn1s0YdS)NcsdSrr r8r9r7r rr:p sz:ExceptionChainingTest.check_not_wrapped..raise_obj str inputr<)r3rr-rBrr2r4)r r.rr:r r7rcheck_not_wrappedo s  *,*z'ExceptionChainingTest.check_not_wrappedcCs Gdddt}||ddS)Nc@seZdZddZdS)zKExceptionChainingTest.test_init_override_is_not_wrapped..CustomInitcSsdSrr r\r r rr(~ szTExceptionChainingTest.test_init_override_is_not_wrapped..CustomInit.__init__N)rrrr(r r r r CustomInit} srKrFr-rJ)r rKr r r!test_init_override_is_not_wrapped| sz7ExceptionChainingTest.test_init_override_is_not_wrappedcCs Gdddt}||ddS)NcseZdZfddZZS)zIExceptionChainingTest.test_new_override_is_not_wrapped..CustomNewcs t|Sr)r __new__)clsrr rrN szQExceptionChainingTest.test_new_override_is_not_wrapped..CustomNew.__new__)rrrrNr'r r rr CustomNew srPrFrL)r rPr r r test_new_override_is_not_wrapped sz6ExceptionChainingTest.test_new_override_is_not_wrappedcCs(d}t|}d|_||d|dS)NzThis should NOT be wrappedr0z^{}$)r-attrrJr )r rrr r r&test_instance_attribute_is_not_wrapped sz.encode_to_strc_sdS)N)not str!rr rHr r rdecode_to_bytes szUExceptionChainingTest.test_unflagged_non_text_codec_handling..decode_to_bytesrYr[zd^{!r} encoder returned 'str' instead of 'bytes'; use codecs.encode\(\) to encode to arbitrary types$r;zd^{!r} decoder returned 'bytes' instead of 'str'; use codecs.decode\(\) to decode to arbitrary types$r<) r3r2rBrrr4r rrD)r rZr\rVdecodedr rr r r&test_unflagged_non_text_codec_handling s    * z}t|r\|t |d d d |q2tjr2t d|q2|t dd ddS)Nrfi,i-i.i1i3i5iirrrr!z skipping cp=rO)u r) rverboserstdoutr*r1r#rr2rfprintrr r rtest_code_page_decode_flagsJ s  z(CodePageTest.test_code_page_decode_flagscCsttdddd}||dtdddd}||dtdddd}||d tdd dd}||d dS) NrirFrs)rrs)u騾騾rHrr)r2rfr)r r]r r rtest_incremental] s"   zCodePageTest.test_incrementalcCsJtjddd(td}||jdWdn1s<0YdS)Nz_winapi.GetACPr)Z return_valueZcp123ro)rr r2rrr)r codecr r rtest_mbcs_aliasp s zCodePageTest.test_mbcs_aliaslF)r,Zmemusedry_runcCsd|ddd}|t||dtd|dd}||dt|~|t|d |d||d dd d ||d d dd dS)Ns01234567rr0s rrirTrreZ 0123456701iu(6701234567rrr2rfr r,rVr]r r rtest_large_inputw szCodePageTest.test_large_inputrucCsd|d}|t||ddtd|dd}||dt|~|t|d|||dddd ||dd dd dS) Ns 0123456턀rrercrTr0ru 0123456턀01iu56턀0123456턀rrr r rtest_large_utf8_input s z"CodePageTest.test_large_utf8_inputN)rrrrkrhrlrorqryrrrrrrrZ bigmemtestrrr r r rrb s ! rbc@s4eZdZddZddZddZddZd d Zd S) ASCIITestcCs|ddddS)Nrqr*sabc123rr\r r rr szASCIITest.test_encodec CsXdD]N\}}}|j|||d$||d||Wdq1sH0YqdS)N)) [€ÿ€]rrp)rrs[???])rrs[€ÿ€])u [€ÿ€򫳞]rs[\x80\xff\u20ac\U000abcde]rrrrr*rrrBrr r rtest_encode_error szASCIITest.test_encode_errorcCs:|tdddWdn1s,0YdS)Nuÿr*rrrrBr\r r r!test_encode_surrogateescape_error s z+ASCIITest.test_encode_surrogateescape_errorcCs|ddddS)Nrr*r)rr4r\r r rr szASCIITest.test_decodec CsXdD]N\}}}|j|||d$||d||Wdq1sH0YqdS)Nrrr*rArr r rr szASCIITest.test_decode_errorN)rrrrrrrrr r r rr s rc@s,eZdZddZddZddZddZd S) Latin1Testc CsRdD]H\}}|j||d"||d|Wdq1sB0YqdS)N))rr)u€éÿsrqrlatin1rr rqrr r rr s zLatin1Test.test_encodec CsXdD]N\}}}|j|||d$||d||Wdq1sH0YqdS)N))[€]rrp)rrs[??])u [€򫳞]rs[\u20ac\U000abcde])rrs[€�]rrrrrr r rtest_encode_errors szLatin1Test.test_encode_errorscCs:|tdddWdn1s,0YdS)Nu€rrrr\r r rr s z,Latin1Test.test_encode_surrogateescape_errorc CsRdD]H\}}|j||d"||d|Wdq1sB0YqdS)N))rr)ru[€ÿ]rrrArr r rr s zLatin1Test.test_decodeN)rrrrrrrr r r rr src@s,eZdZddZddZddZddZd S) StreamRecoderTestcCsRt}td}t||j|jtjj tjj }| ddg| | ddS)Nr*rdbsab)rYrZr2rrrBr4rr*rr writelinesrr)r biorsrr r rtest_writelines s  z!StreamRecoderTest.test_writelinescCs^t}td}t||j|jtjj tjj }d}| |d| | |ddS)Nruàñér)rYrZr2rrrBr4rrnrrr*rr)r rrrrpr r r test_write s  zStreamRecoderTest.test_writecCs|tdd}t|dd}||d|d||d||d||d||ddS) Nzline1 line2 line3 rrsline1 rsline2 sline3 rE)rYrZrBr2rrr_rr rrr r rtest_seeking_read s z#StreamRecoderTest.test_seeking_readcCstdd}t|dd}|d|d||d|d||d||d ||ddS) Nz 123456789 rrrs abc s789 rs1 sabc ) rYrZrBr2rrr*rr_rr r rtest_seeking_write s   z$StreamRecoderTest.test_seeking_writeN)rrrrrrrr r r rr s  rzneed _testcapi modulec@seZdZeZdZdZdZdddZ ddZ d d Z d d Z d dZ ddZdddZddZddZddZddZddZdS) LocaleCodecTest)r*u ulatin1:§éuu255:ÿu UCS:é€􏿿usurrogates:)s blatin1:sb255:urcCst|d|Sr+)rZEncodeLocaleEx)r rprr r rrB szLocaleCodecTest.encodec Cs|jD]}|j|dz||j|}Wn^ty|t}|||Wdn1sd0Yt|j}| |dYn0|||}| ||Wdq1s0YqdS)N)rpz!encode error: pos=[0-9]+, reason=) STRINGSrrBENCODINGrrr-rZr Z assertRegexr)r rrprrerrmsgrVr r rcheck_encode_strings" s   *  z$LocaleCodecTest.check_encode_stringscCs|ddSNrrr\r r rtest_encode_strict0 sz"LocaleCodecTest.test_encode_strictcCs|ddSNrrr\r r rtest_encode_surrogateescape3 sz+LocaleCodecTest.test_encode_surrogateescapec Csfz|ddWnFtyV}z.t|dkr@||jdnWYd}~n d}~00|ddS)NrFrunsupported error handlerz4 encoder doesn't support surrogatepass error handler)rBrrZrrrr rr r rtest_encode_surrogatepass6 s z)LocaleCodecTest.test_encode_surrogatepasscCsL|t}|ddWdn1s,0Y|t|jddS)NrFrr)rrrBrrZr r rr r r%test_encode_unsupported_error_handlerB s *z5LocaleCodecTest.test_encode_unsupported_error_handlercCst|d|Sr+)rZDecodeLocaleEx)r rVrr r rr4G szLocaleCodecTest.decodec Cs\|jdk}|rd}nd}t|j}|jD]d}z$||j|}||vrN||Wntyfd}Yn0|r(||jd}||kr(||q(|D]}|j|dz||j|}Wnft y| t } |||Wdn1s0Yt | j } || d| Yn0|||} || |Wdq1sL0YqdS)Nrrrr)rVzdecode error: )rrb BYTES_STRINGSrrBr`rrr4rrr-rZr r9 startswithr) r rZis_utf8Z encode_errorsstringsrprVZencoded2rrrr]r r rcheck_decode_stringsJ s6       *  z$LocaleCodecTest.check_decode_stringscCs|ddSrrr\r r rtest_decode_strictl sz"LocaleCodecTest.test_decode_strictcCs|ddSrrr\r r rtest_decode_surrogateescapeo sz+LocaleCodecTest.test_decode_surrogateescapec Csfz|ddWnFtyV}z.t|dkr@||jdnWYd}~n d}~00|ddS)NrErrz4 decoder doesn't support surrogatepass error handler)r4rrZrrrrr r rtest_decode_surrogatepassr s z)LocaleCodecTest.test_decode_surrogatepasscCsL|t}|ddWdn1s,0Y|t|jddS)NrErr)rrr4rrZr rr r r%test_decode_unsupported_error_handler~ s *z5LocaleCodecTest.test_decode_unsupported_error_handlerN)r)r)rrrrgetfilesystemencodingrrrZ SURROGATESrBrrrrrr4rrrrrr r r rr s    " rc@s,eZdZddZddZddZddZd S) Rot13TestcCstdd}||ddS)NzCaesar liked ciphersrot-13zPnrfne yvxrq pvcuref)r2rBr)r ciphertextr r rr s zRot13Test.test_encodecCstdd}||ddS)Nz Rg gh, Oehgr?rz Et tu, Brute?)r2r4r)r plaintextr r rr s zRot13Test.test_decodecCs&td}|d}||ddS)NrzABBA nag Cheryl BakerzNOON ant Purely Onxre)r2rArBr)r rrr r rr s  z!Rot13Test.test_incremental_encodecCs&td}|d}||ddS)Nrzterra Ares envy thazgreen Nerf rail gun)r2r3r4r)r rrr r rr s  z!Rot13Test.test_incremental_decodeN)rrrrrrrr r r rr src@seZdZddZdS) Rot13UtilTestcCsBtd}t}tj|||d|}||ddS)Nz)Gb or, be abg gb or, gung vf gur dhrfgvbarz)To be, or not to be, that is the question)rYrcrrrrr.r)r ZinfileZoutfileZ plain_textr r rtest_rot13_func s  zRot13UtilTest.test_rot13_funcN)rrrrr r r rr sr__main__)Sr2r_rYrrr"rrtestrr ImportErrorr ZSIZEOF_WCHAR_TZsizeofZc_wcharrr#r r$r/rDZTestCaserrrrrrrr(rBrFrPrhrr=rrr*rrrrrr rrwrr`ryrprrrrrrrrrrrrrr$r'r_codecsr(r)r#platformrbrrrZskipIfrrrrmainr r r rs         "V`..V,,^V>g!]u  h    y)S"9        # W'%.q