ÿØÿà 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 3gkE@s,gdZddlmZddlmZddlmZeddZ ddZ Gd d d Z d9d dZ ddZ GdddZddlZedjfddZd:ddZddZd;ddZd d!Zd) get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNK IS_LINE_JUNK context_diff unified_diff diff_bytesHtmlDiffMatch)nlargest) namedtuple) GenericAliasr za b sizecCs|rd||SdS)Ng@?)matcheslengthrr&/opt/python39/lib/python3.9/difflib.py_calculate_ratio's rc@szeZdZdddZddZdd Zd d Zd d ZdddZddZ ddZ d ddZ ddZ ddZ ddZeeZdS)!rNTcCs(||_d|_|_||_|||dSN)isjunkabautojunkset_seqs)selfrrrrrrr__init__xs; zSequenceMatcher.__init__cCs||||dSr)set_seq1set_seq2)rrrrrrrs zSequenceMatcher.set_seqscCs$||jurdS||_d|_|_dSr)rmatching_blocksopcodes)rrrrrr s zSequenceMatcher.set_seq1cCs2||jurdS||_d|_|_d|_|dSr)rr"r# fullbcount_SequenceMatcher__chain_b)rrrrrr!s   zSequenceMatcher.set_seq2c Cs|j}i|_}t|D]\}}||g}||qt|_}|j}|r~|D]}||rV| |qV|D] }||=qrt|_ }t |} |j r| dkr| dd} | D]\}} t | | kr| |q|D] }||=qdS)Nd)rb2j enumerate setdefaultappendsetbjunkrkeysaddZbpopularlenritems) rrr)ieltindicesZjunkrZpopularnZntestZidxsrrrZ __chain_b s,           zSequenceMatcher.__chain_br cCsT|j|j|j|jjf\}}}}|dur.t|}|dur>t|}||d} } } i} g} t||D]}| j}i}|||| D]\}||krq~||krq||ddd}||<|| kr~||d||d|} } } q~|} q`| |kr@| |kr@||| ds@|| d|| dkr@| d| d| d} } } q| | |kr| | |kr||| | s|| | || | kr| d7} q@| |kr| |kr||| dr|| d|| dkr| d| d| d} } } q| | |krH| | |krH||| | rH|| | || | krH| d} qt| | | SNr r() rrr)r. __contains__r1rangegetr )raloahiblobhirrr)ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr3Zj2lengetZnewj2lenjkrrrfind_longest_match1sZ:"   z"SequenceMatcher.find_longest_matchcCs||jdur|jSt|jt|j}}d|d|fg}g}|r|\}}}}|||||\} } } } | r8|| || kr|| kr||| || f| | |kr8| | |kr8|| | || | |fq8|d} }}g}|D]V\}}}| ||kr|||kr||7}q|r,|| ||f|||} }}q|rT|| ||f|||dftt t j ||_|jSNr ) r"r1rrpoprAr,sortlistmapr _make)rlalbqueuer"r;r<r=r>r3r?r@xi1j1Zk1Z non_adjacenti2j2Zk2rrrget_matching_blockss8    z#SequenceMatcher.get_matching_blockscCs|jdur|jSd}}g|_}|D]\}}}d}||krN||krNd}n||kr\d}n ||krhd}|r||||||f||||}}|r*|d||||fq*|S)Nr rreplacedeleteinsertequal)r#rPr,)rr3r?Zansweraibjsizetagrrr get_opcodess$  zSequenceMatcher.get_opcodesc csn|}|sdg}|dddkrZ|d\}}}}}|t||||t||||f|d<|dddkr|d\}}}}}||t||||t|||f|d<||}g} |D]\}}}}}|dkr(|||kr(| ||t||||t|||f| Vg} t|||t|||}}| |||||fq| rjt| dkrd| dddksj| VdS)N)rTr r(r r(r rTr()rYmaxminr,r1) rr6ZcodesrXrLrNrMrOnngrouprrrget_grouped_opcodes#s(&&(&z#SequenceMatcher.get_grouped_opcodescCs0tdd|D}t|t|jt|jS)Ncss|]}|dVqdS)r[Nr).0Ztriplerrr kz(SequenceMatcher.ratio..)sumrPrr1rr)rrrrrratioUszSequenceMatcher.ratiocCs|jdur4i|_}|jD]}||dd||<q|j}i}|jd}}|jD]>}||rf||}n ||d}|d||<|dkrP|d}qPt|t|jt|jSr7)r$rr:r8rrr1)rr$r4ZavailZavailhasrZnumbrrr quick_rations         zSequenceMatcher.quick_ratiocCs*t|jt|j}}tt||||Sr)r1rrrr])rrHrIrrrreal_quick_ratiosz SequenceMatcher.real_quick_ratio)NrrT)r Nr N)rZ)__name__ __module__ __qualname__rrr r!r%rArPrYr`rerfrg classmethodr__class_getitem__rrrrr,sL @ ,' tG7 2 rrZ333333?cCs|dkstd|fd|kr*dks:ntd|fg}t}|||D]D}||||krR||krR||krR|||fqRt||}dd|DS)Nr zn must be > 0: %rgrz cutoff must be in [0.0, 1.0]: %rcSsg|] \}}|qSrr)raZscorerKrrr rcz%get_close_matches..) ValueErrorrr!r rgrfrer, _nlargest)ZwordZ possibilitiesr6cutoffresultsrKrrrrs"      rcCsdddt||DS)Nrcss*|]"\}}|dkr|r|n|VqdS) N)isspace)racZtag_crrrrbsz$_keep_original_ws..)joinzip)rsZtag_srrr_keep_original_wss ryc@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)rNcCs||_||_dSrlinejunkcharjunk)rr{r|rrrr*szDiffer.__init__c cst|j||}|D]\}}}}}|dkrB|||||||} n\|dkr\|d|||} nB|dkrv|d|||} n(|dkr|d|||} ntd|f| EdHqdS) NrQrR-rS+rTrtunknown tag %r)rr{rY_fancy_replace_dumpro) rrrcruncherrXr;r<r=r>grrrcompareAszDiffer.compareccs&t||D]}d|||fVq dS)Nz%s %s)r9)rrXrKlohir3rrrrjsz Differ._dumpc csn||||kr2|d|||}|d|||}n |d|||}|d|||}||fD]} | EdHqZdS)Nr~r})r) rrr;r<rr=r>firstsecondrrrr_plain_replaceos zDiffer._plain_replaceccs:d\}}t|j} d\} } t||D]} || } | | t||D]j}||}|| krl| durD|| } } qD| || |krD| |krD| |krD| || }}}qDq$||kr| dur|||||||EdHdS| | d}}}nd} | ||||||EdH||||}}| dur d}}| ||| D]\}}}}}||||}}|dkr|d|7}|d|7}nb|dkr|d|7}nJ|d kr|d |7}n2|d kr|d |7}|d |7}nt d |fqH| ||||EdHn d|V| ||d|||d|EdHdS)N)gGz?g?)NNrrrQ^rRr}rSr~rTrtr r()rr|r9r!r rgrfrer _fancy_helperrrYro_qformat)rrr;r<rr=r>Z best_ratiorqrZeqiZeqjr?rVr3rUZbest_iZbest_jZaeltZbeltatagsbtagsrXZai1Zai2Zbj1Zbj2rHrIrrrr}s\                zDiffer._fancy_replaceccsbg}||kr<||kr*|||||||}qT|d|||}n||krT|d|||}|EdHdS)Nr}r~)rr)rrr;r<rr=r>rrrrrszDiffer._fancy_helperccsXt||}t||}d|V|r8d|dVd|V|rTd|dVdS)N- z?  + )ryrstrip)rZalineZblinerrrrrrs  zDiffer._qformat)NN) rhrirjrrrrrrrrrrrrsV )^ rNz \s*(?:#\s*)?$cCs ||duSrr)linepatrrrrsr cCs||vSrr)Zchwsrrrr%srcCs:|d}||}|dkr"d|S|s.|d8}d||SNr(z{}z{},{}formatstartstopZ beginningrrrr_format_range_unified<s rrrccsPt|||||||d}td|||D]} |s|d}|rFd|nd} |rXd|nd} d|| |Vd|| |V| d| d} } t| d | d }t| d | d }d |||V| D]\}}}}}|dkr|||D]}d|Vqq|dvr"|||D]}d|Vq|dvr|||D]}d|Vq6qq*dS)NFT {}r --- {}{}{}z +++ {}{}{}r r[r(rZz@@ -{} +{} @@{}rTrt>rRrQr}>rSrQr~) _check_typesrr`rr)rrfromfiletofile fromfiledate tofiledater6linetermstartedr_fromdatetodaterlast file1_range file2_rangerXrLrNrMrOrrrrr Gs0)  r cCsB|d}||}|s|d8}|dkr.d|Sd|||dSrrrrrr_format_range_contexts rccst|||||||tddddd}d} td|||D]R} | sd} |rVd|nd } |rhd|nd } d || |Vd || |V| d | d } }d|Vt| d|d}d||Vtdd| Dr| D]8\}}}}}|dkr|||D]}|||Vqqt| d|d}d||Vtdd| Dr:| D]<\}}}}}|dkrP|||D]}|||VqtqPq:dS)Nrrz! r)rSrRrQrTFTrrz *** {}{}{}rr r[z***************r(rz *** {} ****{}css |]\}}}}}|dvVqdS)>rRrQNrrarX_rrrrbrczcontext_diff..rSrZrz --- {} ----{}css |]\}}}}}|dvVqdS)>rSrQNrrrrrrbrcrR)rdictrr`rrany)rrrrrrr6rprefixrr_rrrrrrXrLrNrrrrMrOrrrrs4,  rcGs|r0t|dts0tdt|dj|df|r`t|dts`tdt|dj|df|D]}t|tsdtd|fqddS)Nr z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r) isinstancestr TypeErrortyperh)rrargsargrrrrs rrc c cs~dd} tt| |}tt| |}| |}| |}| |}| |}| |}|||||||||} | D]} | ddVqfdS)Nc SsTz|ddWStyN}z(dt|j|f}t||WYd}~n d}~00dS)Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorrrhr)rserrmsgrrrrs zdiff_bytes..decoderr)rErFencode) Zdfuncrrrrrrr6rrlinesrrrrr s r cCst||||Sr)rr)rrr{r|rrrrs#rc#sddl}|dt||||ddgffdd fddfdd}|}|durj|EdHn|d 7}d}ddg|} } d } | d urzt|\} } } WntyYdS0| |}| | | f| |<| d 7} q| |krd V|}n| }d} |r | |}| d 7} | |V|d 8}q|d }z@|rft|\} } } | rN|d }n|d 8}| | | fVq*Wqvty~YdS0qvdS) Nr z (\++|\-+|\^+)c s||d7<|dur2|||dddfS|dkr|d|d}}g}|fdd}||t|D]<\}\} } |d| d||| | d|| d}qt|dd}n*|ddd}|sd }d||d}|||fS) Nr(r r?cSs&||dd|g|dS)Nr(r )r,r_span)Z match_objectsub_inforrrrecord_sub_infosz3_mdiff.._make_line..record_sub_infort)rCsubreversed) rZ format_keysideZ num_linestextZmarkersrrkeyZbeginend) change_rerr _make_linefs   2z_mdiff.._make_linec3sng}d\}}t|dkr*|tdq ddd|D}|drP|}n|dr||dd |dd d fVq n|d r|d 8}|d d dd fVq nl|drֈ|d d d}}|d d }}n>|dr|dd |dd d fVq n|dr0|dd |dd d fVq n|d r\|d 8}|d d dd fVq n|dr|d 7}d|dd d fVq n|drd|dd }}|d d }}n^|dr|d 7}d|dd d fVq n2|dr|dddd |dd dfVq |d kr0|d 7}dVq|d krL|d 8}dVq0|dr\dS||d fVq dS)N)r r rXrcSsg|] }|dqS)r rrarrrrrnrcz2_mdiff.._line_iterator..z-?+?rr r(Tz--++r})z--?+z--+rz-+?z-?+z+--r~)rz+-rtF)NrrT)rNT)r1r,nextrw startswith)rZnum_blanks_pendingZnum_blanks_to_yieldrs from_lineto_line)rdiff_lines_iteratorrr_line_iteratorsd            $     z_mdiff.._line_iteratorc3s}gg}}t|dks(t|dkr~zt|\}}}WntyNYdS0|durf|||f|dur|||fq|d\}}|d\}}|||p|fVqdSrB)r1r StopIterationr,rC)Z line_iterator fromlinestolinesrr found_diffZfromDiffZto_diff)rrr_line_pair_iterators   z#_mdiff.._line_pair_iteratorr(F)NNN)recompilerrr)rrcontextr{r|rrZline_pair_iteratorZlines_to_writeindexZ contextLinesrrrr3r)rrrrr_mdiff<sR" 8X !     ran %(table)s%(legend)s aH table.diff {font-family:Courier; border:medium;} .diff_header {background-color:#e0e0e0} td.diff_header {text-align:right} .diff_next {background-color:#c0c0c0} .diff_add {background-color:#aaffaa} .diff_chg {background-color:#ffff77} .diff_sub {background-color:#ffaaaa}aZ %(header_row)s %(data_rows)s
a
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op
c@seZdZeZeZeZeZdZdddefddZ dd d d d Z d dZ ddZ ddZ ddZddZddZddZdddZdS)r r NcCs||_||_||_||_dSr)_tabsize _wrapcolumn _linejunk _charjunk)rtabsizeZ wrapcolumnr{r|rrrrs zHtmlDiff.__init__rFzutf-8)charsetc Cs:|jt|j|j|j||||||d|d|d|S)N)rnumlines)ZstylesZlegendtablerxmlcharrefreplace)_file_templater_styles_legend make_tablerr)rrrfromdesctodescrrrrrr make_files zHtmlDiff.make_filecs8fddfdd|D}fdd|D}||fS)Ncs6|dd}|j}|dd}|dddS)Nrtr r)rQ expandtabsrr)r)rrr expand_tabss   z2HtmlDiff._tab_newline_replace..expand_tabscsg|] }|qSrrrrrrrnrcz1HtmlDiff._tab_newline_replace..csg|] }|qSrrrrrrrnrcr)rrrr)rrr_tab_newline_replaces zHtmlDiff._tab_newline_replacec Cs|s|||fdSt|}|j}||ksB||dd|krT|||fdSd}d}d}||kr||kr||dkr|d7}||}|d7}q`||dkr|d7}d}q`|d7}|d7}q`|d|} ||d} |r| d} d|| } ||| f||d| dS)NrrZr rr(r>)r,r1rcount _split_line) rZ data_listZline_numrrWr\r3r6ZmarkZline1Zline2rrrrs8        zHtmlDiff._split_linec cs|D]\}}}|dur$|||fVq||\}}\}}gg} } || |||| ||| sd| r| rt| d}nd}| r| d}nd}|||fVq\qdS)Nr )rrt)rrC) rdiffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistrrr _line_wrappers     zHtmlDiff._line_wrapperc Csggg}}}|D]t\}}}z8||jd|g|R||jd|g|RWn&ty||d|dYn0||q|||fSr7)r, _format_liner)rrrrflaglistrrrrrr_collect_lines.s   zHtmlDiff._collect_linescCspzd|}d|j||f}Wnty4d}Yn0|dddddd }|d d }d |||fS) Nz%dz id="%s%s"r&z&rz>%s%s)_prefixrrQr)rrrZlinenumridrrrrCs  zHtmlDiff._format_linecCs0dtj}dtj}tjd7_||g|_dS)Nzfrom%d_zto%d_r()r _default_prefixr )rZ fromprefixtoprefixrrr _make_prefixZs  zHtmlDiff._make_prefixcCs|jd}dgt|}dgt|}d\} } d} t|D]V\} } | r| sd} | } td| |g} d|| f|| <| d7} d|| f|| <q:d} q:|sdg}dg}dg}d} |rd g}|}n d g}}|dsd ||d<d ||| <|||||fS) Nr(r)r Fr Tz id="difflib_chg_%s_%d"z"nFz2 No Differences Found z( Empty File z!fz#t)r r1r*r\)rrrrrrrnext_id next_hrefZnum_chgZ in_changerr3rrrr_convert_flagses<     zHtmlDiff._convert_flagsc CsR||||\}}|r"|}nd}t||||j|jd}|jrL||}||\} } } || | | ||\} } } } } g}d}t t | D]P}| |dur|dkr| dq| || || || || || |fq|s|rddd|dd|f}nd}|j t d|||jd d }|d d d dddddddS)NrzzV %s%s%s%s r z) z %s%s%s%sz!
z+%srr()Z data_rows header_rowrz+zz-zz^zrzrr )rrrrrrrrrr9r1r,_table_templaterrwr rQ)rrrrrrrZ context_linesrrrrrrrsfmtr3rrrrrrsZ        zHtmlDiff.make_table)rrFr)rrFr)rhrirjrrrrrrrrrrrrrrrrrrrrr s.  7 /r ccslzdddt|}Wn ty6td|dYn0d|f}|D]"}|dd|vrD|ddVqDdS)Nrr)r(rz)unknown delta choice (must be 1 or 2): %rrr)intKeyErrorro)ZdeltawhichrXprefixesrrrrrs rcCsddl}ddl}||SrB)doctestdifflibtestmod)rrrrr_testsr__main__)rZrm)r)rrrrrZr)rrrrrZr)rcrcrcrcrZr)%__all__heapqrrp collectionsrZ _namedtupletypesrr rrrryrrrmatchrrrr rrrr rrrrrrobjectr rrrhrrrrs`    r 1 A   I  L %   a