m v LcC@sdZdZdZdZdklZdkTdkZdkZdk Z dk l Z l Z dk lZlZlZlZd Zd Zd Zeid Zd ZdefdYZdklZlZdefdYZdZdefdYZdefdYZdefdYZdefdYZ dZ!defdYZ"defd YZ#d!efd"YZ$d#e$fd$YZ%d%efd&YZ&d'e&fd(YZ'd)e'fd*YZ(d+e(fd,YZ)d-e'fd.YZ*d/e'fd0YZ+d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsgCZ,dtefduYZ-dve-fdwYZ.dxe-fdyYZ/dze.fd{YZ0d|efd}YZ d~k1l2Z2dZ3dfdYZ4dfdYZ5dee5e4fdYZ6defdYZ7dee5fdYZ8de e8fdYZ9de9fdYZ:defdYZ;defdYZ<de<fdYZ=defdYZ>defdYZ?defdYZ@defdYZAdefdYZBdefdYZCdefdYZDde-fdYZEdefdYZFdefdYZGdefdYZHdeGfdYZIde0fdYZJdeJfdYZKdefdYZLdefdYZMdefdYZNdefdYZOde8fdYZPdefdYZQdefdYZRdefdYZSdefdYZTdeTfdYZUdeTfdYZVdeTfdYZWdS(s$Id$sOSam Ruby and Mark Pilgrim s $Revision$s,Copyright (c) 2002 Sam Ruby and Mark Pilgrim(s validatorBase(t*N(s canonicalFormsurljoin(s AddressLists parsedates parsedate_tzs mktime_tzs+http://www.w3.org/1999/02/22-rdf-syntax-ns#cCs|ddjotSnydkl}l}WnAt|}|titidjp|ddjSnXy||}||}Wn tSnX|tidjp|ddjS(Nii(s parsedate_tzs mktime_tziQiX( tvaluetTruetrfc822t parsedate_tzt mktime_tzt parsedatetpvaluettimetgmtimetzvalue(RRR RR((tC/web/script/rubys/feedvalidator.org/src/feedvalidator/validators.pytimplausible_822s 2 cCs|djotSny dk}Wn6tidtitid}||jSnXy|ii i |}Wn tSnX|tidjS(Ns 1990-01-01s%Y-%m-%dT%H:%M:%SZiQiX( RRtxml.utils.iso8601txmlRtstrftimeR ttomorrowtutilstiso8601tparseR (RRR R((R timplausible_8601#s  %sp[^\s()<>,;:\"/[\]?=]+/[^\s()<>,;:\"/[\]?=]+(\s*;\s*[^\s()<>,;:\"/[\]?=]+=("(\"|[^"])*"|[^\s()<>,;:\"/[\]?=]+))*$cCs9|itjo tSndkl}||SdS(N(s rdfExtension(tselft getFeedTypet TYPE_RSS1teatertrdft rdfExtensiontqname(RtnameRtattrsR((R tany>s  RcBs#tZdZdZdZRS(NcCs |iiS(N(RRtgetNames(R((R tgetExpectedAttrNamesIscCsx~|D]v}dt|jo djnp |djo?dkl}|i|hd|ii<d|i<qqWdS(Niiu�(s BadCharacterstparenttelement( tstringtctordt validatorst BadCharactersRtlogR!R(RR#R$R'((R t charactersLs 1 c Cs|i}| oo|oh|tjo[|iiddjoBdkl}|i |hd|i<d|<dd<n|idd jo9d kl } |i | hd|i<d|<nx|i D]\}} d| joA| o9d kl } |i | hd|i<d| <nx|i|| fD]m}d t|jo d jnp |d jo6dkl}|i |hd|<d| <qOqOWqW|i|i||dS(Nt_i(sNotInANamespaceR!R"t namespaces""t:i(sMissingNamespaceiiu�(s BadCharacters(RRtfeedtypeRt TYPE_RSS2RtfindtloggingtNotInANamespaceR(tMissingNamespaceRtkeysR+tattrtgetR$R%R&R'tpusht __class__( RRRRR$R-R'R1R+R4R2((R tstartElementNSRs$ 5 5 ,  ,1 1(t__name__t __module__R R)R8(((R RHs  (s HTMLParsersHTMLParseErrort HTMLValidatorcBstZddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwgwZdddddddd d dddddddddddddddddd#d d!d"d$d%d&d'd(d)d+d*d,d6d/d0d1d2d3d4d7d9d;d<d=dxd?d@dAdBdDdEdFdHdydIdzdMdNdOdPdQdSdTdUdVdWdYdZd[d{d\d|d]d^d_dadbdcdddedfdjdgdhdidldmdndodpdvdKdwgdZdd}d~ddddddddddddddddddddddddddddddddddddddddddd!dddddddd,d-dddddddddddddddd@dddddddddddddddddddddddddddddddddddddddddddd]dddddddddkdddddddddddddddgZdddddddddddd d d d d ddddddddddddddddd*ddddd dd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@ddAdgJZdBdCdDdEdFdGdHdIdJddKdLdMdNdOdPdQdRdSdTdUdVdWdXdYddZd[d\d]d^d_d`dadbdcdddedfg'ZeidgdhZ didjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddWdgZ dddddddddddddddddd-ddddddddddddddddddddddddddddg.Z ddddddddddddddddddddddddddddddddkddg"Z dddddddddddddddddddddddddddddddddddd ddddddddddddddddddddddddddddddddddddddddddddddd d d d d ddddddddddddddd`ddddddd d!d"d#d$d%d&d'd(d)d*dd+d,d-d.d/d0d1dd2dd3dd4dd5ddd6d7d8d9gZ d:Zd;Zd<Zd=Zd>ZRS(?Ntatabbrtacronymtaddresstapplettareatarticletasidetaudiotbtbasetbasefonttbdotbigt blockquotetbodytbrtbuttontcanvastcaptiontcentertcitetcodetcoltcolgrouptcommandtdatagridtdatalisttddtdeltdetailstdialogtdirtdivtdfntdltdttems event-sourcetfieldsettfiguretfonttfootertformtframetframesetth1th2th3th4th5th6theadtheaderthrthtmltitiframetimgtinputtinstisindextkbdtlabeltlegendtlitlinktmtmaptmenutmetatmetertnavtnoframestnoscripttobjecttoltoutputtoptgrouptoptiontptparamtpretprogresstqtstsamptscripttsectiontselecttsmalltsourcetspantstriketstrongtstyletsubtsupttablettbodyttdttextareattfoottthttheadRttitlettrttttutultvartxmpt plaintexttembedtcommenttlistingtvideotwbrtkeygentmulticoltnextidtsoundtspacertacceptsaccept-charsett accesskeytactiontaligntalttautoplayt autocompletet autofocustaxist backgroundtbalancetbgcolort bgpropertiestbordert bordercolortbordercolordarktbordercolorlightt bottompaddingt cellpaddingt cellspacingtcht challengetchartcharofftchofftcharsettcheckedtclasstcleartcolortcolstcolspantcompacttcontenteditabletcoordstdatatdatafldt datapagesizetdatasrctdatetimetdefaulttdelaytdisabledt draggabletdynsrctenctypetendtfacetfort galleryimgtguttertheaderstheightt hidefocusthiddenthighthrefthreflangthspaceticontidt inputmodetismaptkeytypet leftspacingtlangtlisttlongdesctloopt loopcounttloopendt loopstarttlowtlowsrctmaxt maxlengthtmediatmethodtmintmultipleRtnohreftnoshadetnowraptopentoptimumtpatterntpings point-sizetprompttpqgt radiogrouptreadonlytrels repeat-maxs repeat-mintreplacetrequiredtrevt rightspacingtrowstrowspantrulestscopetselectedtshapetsizetsrctstarttsteptsummarytsuppressttabindexttargetttemplatet toppaddingttypet unselectabletusemapturntvalignRtvariabletvolumetvspacetvrmltwidthtwrapsxml:langtxmlnstazimuthsbackground-colors border-bottomsborder-bottom-colorsborder-bottom-stylesborder-bottom-widthsborder-collapses border-colors border-leftsborder-left-colorsborder-left-stylesborder-left-widths border-rightsborder-right-colorsborder-right-stylesborder-right-widthsborder-spacings border-styles border-topsborder-top-colorsborder-top-stylesborder-top-widths border-widthtcursort directiontdisplayt elevationtfloats font-familys font-sizes font-styles font-variants font-weightsletter-spacings line-heightslist-style-typetmargins margin-bottoms margin-lefts margin-rights margin-toptoverflowtpaddingspadding-bottoms padding-lefts padding-rights padding-toptpauses pause-afters pause-beforetpitchs pitch-rangetrichnesstspeaks speak-headers speak-numeralsspeak-punctuations speech-ratetstresss text-alignstext-decorations text-indents unicode-bidisvertical-aligns voice-familys white-spacetaquatautotblacktblocktbluetboldtbothtbottomtbrowntcollapsetdashedtdottedtfuchsiatgraytgreens !importanttitalictlefttlimetmaroontmediumtnonetnavytnormaltolivetpointertpurpletredtrighttsolidtsilverttealttopt transparentt underlinetwhitetyellows(^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|s.\d?\.?\d?\d(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$t annotationsannotation-xmltmactiontmathtmerrortmfractmit mmultiscriptstmntmotmovertmpaddedtmphantomt mprescriptstmroottmrowtmspacetmsqrttmstyletmsubtmsubsuptmsuptmtabletmtdtmtexttmtrtmundert munderovert semanticst actiontypet columnalignt columnlinest columnspacingt columnspantdeptht displaystyletencodingt equalcolumnst equalrowstfencet fontstylet fontweightt linethicknesstlspacetmathbackgroundt mathcolort mathvarianttmaxsizetminsizetothertrowaligntrowlinest rowspacingtrspacet scriptlevelt selectiont separatortstretchys xlink:hrefs xlink:shows xlink:types xmlns:xlinktanimatet animateColort animateMotiontanimateTransformtcircletdefstdesctellipses font-facesfont-face-names font-face-srctgtglyphthkerntlinearGradienttlinetmarkertmetadatas missing-glyphtmpathtpathtpolygontpolylinetradialGradienttrecttsettstoptsvgtswitchttextttspantuses accent-heightt accumulatetadditivet alphabetics arabic-formtascentt attributeNamet attributeTypet baseProfiletbboxtbegintbytcalcModes cap-heightscolor-renderingtcontenttcxtcytdtdxtdytdescenttdurtfills fill-opacitys fill-rules font-stretchtfromtfxtfytg1tg2s glyph-namet gradientUnitsthangings horiz-adv-xshoriz-origin-xt ideographictkt keyPointst keySplinestkeyTimest mathematicals marker-ends marker-mids marker-startt markerHeightt markerUnitst markerWidthtoffsettopacitytorienttoriginsoverline-positionsoverline-thicknessspanose-1t pathLengthtpointstpreserveAspectRatiotrtrefXtrefYt repeatCountt repeatDurtrequiredExtensionstrequiredFeaturestrestarttrotatetrxtrytslopetstemhtstemvs stop-colors stop-opacitysstrikethrough-positionsstrikethrough-thicknesststrokesstroke-dasharraysstroke-dashoffsetsstroke-linecapsstroke-linejoinsstroke-miterlimitsstroke-opacitys stroke-widthtsystemLanguages text-anchorttot transformtu1tu2sunderline-positionsunderline-thicknesstunicodes unicode-ranges units-per-emtvaluestversiontviewBoxt visibilitytwidthstxsx-heighttx1tx2s xlink:actuates xlink:arcroles xlink:roles xlink:titlesxml:bases xml:spacetyty1ty2t zoomAndPancCs^|ii|idd|iiii|iiii g}|ii ||dS(Nii( RR"Rtgetpost dispatchertlocatort getLineNumbertgetColumnNumberRR(tmsg(RR R((R R(sGcCs||_g|_t|_ti||ii ddjoA|i t hd|ii i <d|ii <dd<ny]|i||i|io8|i thd|ii i <d|ii <nWntj o}|i}|i|iii|iii g}tidt|}|o'|dct|idd7R8R@(((R R<Es   RcBs#tZdZdZdZRS(NcCsdS(N((R((R R>\scCs,|itjodddgSngSdS(Nu+http://www.w3.org/1999/02/22-rdf-syntax-ns#u parseTypeudatatypeuresource(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#u parseType(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#udatatype(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#uresource(RRR(R((R R ]sc Cs|itjo|iip |io=|iiddjo |it hdd<qjn|djo4|djo'dk l }|i|||qd kl}|i||||nd kl}|i|d }|id d jo9dkl}|i|hd|i <d|<n)|ithd|i <d|<|it||dS(Nu+http://www.w3.org/1999/02/22-rdf-syntax-ns#u parseTypetLiteralR s mixed contentR]shttp://www.w3.org/1999/xhtml(sdiveater(s rdfExtension(s namespacestR,i(sMissingNamespaceR!R"(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#u parseType(RRRRtstriptchildrenRR5R(t InvalidRDFRRRtdiveaterR6RRRFt namespacestnsR/R0R2tUndefinedElementR( RRRRRRFRGRHR2((R R8ds $    ,((R9R:R>R R8(((R R[s  t noduplicatescBs/tZedZdZdZdZRS(NcCs||_ti|dS(N(R Rt validatorBaseR(RR ((R Rs cCsdS(N((RRRR((R R8scCsdS(N((RR#((R R)scCsO|i|iijo5|i|ihd|ii<d|i<ndS(NR!R"(RRR!RDR(R (R((R t prevalidates(R9R:tDuplicateElementRR8R)RL(((R RJ~s   t addr_speccBsktZdZddieiiZeidedei Z eidZ e Z ddZRS(Ns/ AC AD AE AERO AF AG AI AL AM AN AO AQ AR ARPA AS ASIA AT AU AW AX AZ BA BB BD BE BF BG BH BI BIZ BJ BM BN BO BR BS BT BV BW BY BZ CA CAT CC CD CF CG CH CI CK CL CM CN CO COM COOP CR CU CV CX CY CZ DE DJ DK DM DO DZ EC EDU EE EG ER ES ET EU FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GOV GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN INFO INT IO IQ IR IS IT JE JM JO JOBS JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MG MH MIL MK ML MM MN MO MOBI MP MQ MR MS MT MU MUSEUM MV MW MX MY MZ NA NAME NC NE NET NF NG NI NL NO NP NR NU NZ OM ORG PA PE PF PG PH PK PL PM PN PR PRO PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR ST SU SV SY SZ TC TD TEL TF TG TH TJ TK TL TM TN TO TP TR TRAVEL TT TV TW TZ UA UG UK UM US UY UZ VA VC VE VG VI VN VU WF WS XN--0ZWM56D XN--11B5BS3A9AJ6G XN--80AKHBYKNJ4F XN--9T4B11YI5A XN--DEBA0AD XN--G6W251D XN--HGBK6AJ7F53BBA XN--HLCJ6AYA9ESC7A XN--JXALPDLP XN--KGBECHTV XN--ZCKZAH YE YT YU ZA ZM ZW sJ(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([A-Z0-9\-]+\.)+))(%s|[0-9]{1,3})t|s([A-Z0-9_\-\+\.']+)@t$s^[\w._%+-]+@[A-Za-z][\w.-]+$cCs(|p |i}n|ii|p|ii|pA|i|ihd|ii<d|i<d|i<q$y'dk }|i |i ddWq$|it hd|ii<d|i<d|i<q$Xn;|it hd|ii<d|i<d|i<dS(NR!R"Rt@i(RRtemail_reRtsimple_email_reR(R R!Rtsockett gethostbynameR:t UnknownHostt ValidContact(RRRT((R tvalidates A B(R9R:tdomainstjoinRCR:t domain_reRR0tIRRRStInvalidAddrSpecR R?RX(((R RNs cCsdk}d|jo|idd\}}n|}|iitit|p/|t hd|<d|<d|<n#|t hd|<d|<dS(NR6iR!R"R(t iso639codesRR:RtsublangtisoLangthas_keyRRR(tInvalidLanguageR!R"t ValidLanguage(R(RR"R!RR^R_((R tiso639_validates  "/tiso639cBstZdZRS(NcCs&t|i|i|i|iidS(N(RdRR(RRR!(R((R RXs(R9R:RX(((R RestCharsetcBstZdZRS(NcCsJydk}|i|iWn&|ithd|i<nXdS(NR(tcodecstlookupRRR(tInvalidEncoding(RRg((R RXs  (R9R:RX(((R RfstMimeTypecBstZdZRS(NcCs7ti|ip |ithdd<ndS(NR4R&(tmime_reRRRR(tInvalidMIMEType(R((R RXs(R9R:RX(((R Rjst MediaRangecBstZdZRS(NcCs|iipdSn|i}xi|idD]X}|i|_|iddjo |ithdd<nti |q1WdS(Nt,s;q=iRR( RRRCtoriginal_valueR:R/R(tUndefinedParamRjRX(RRoR((R RXs  (R9R:RX(((R Rmstunbounded_iso8601cBs*tZeiddZeZdZRS(Ns0^\d\d\d\d(-\d\d(-\d\d(T\d\d:\d\d(:\d\d(\.\d*)?)?s(Z|([+-]\d\d:\d\d))?)?)?)?$cCs|ii|ipE|i|ihd|ii<d|i<d|i<dSn|iid}|did}t |d}t |djot |d}y8t |djo!ti ||t |dnWqGtj oI}|i|ihd|ii<d|i<dt|<SqGXnt |djo~|did did didd}|id }t |dd joE|i|ihd|ii<d|i<d|i<dSnt |djo\t |dd joE|i|ihd|ii<d|i<d|i<dSnt |djo\t|ddjoE|i|ihd|ii<d|i<d|i<dSqn|ithd|ii<d|i<d|i<dS(NR!R"RtTiR6iitZt+R,ii<f60.0(Rt iso8601_reRRR(R R!RR:tworktdateRtyearR=tmonthRt ValueErrorteRRR7tValidW3CDTFDate(RR{RvRyRRxRw((R RXs6=%I1=*=*= :(R9R:RR0RutInvalidISO8601DateTimeR RX(((R RqsRcBstZdZdZRS(NicCst|iofti|oVt|io>|ithd|ii <d|i <d|i<ndSndS(NR!R"Ri( RtboundedRqRXRRR(tImplausibleDateR!R(R((R RX s>(R9R:R~RX(((R Rstw3cdtfcBs!tZeiddZeZRS(Ns0^\d\d\d\d(-\d\d(-\d\d(T\d\d:\d\d(:\d\d(\.\d*)?)?s(Z|([+-]\d\d:\d\d)))?)?)?$(R9R:RR0RutInvalidW3CDTFDateR (((R Rstunbounded_w3cdtfcBstZdZRS(Ni(R9R:R~(((R Rstrfc3339cBs!tZeiddZeZRS(Ns*^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d*)?s(Z|([+-]\d\d:\d\d))$(R9R:RR0RutInvalidRFC3339DateR (((R Rst iso8601_datecBs tZeidZdZRS(Ns^\d\d\d\d-\d\d-\d\d$cCslti|oX|ii|ip>|ithd|ii <d|i <d|i<qhndS(NR!R"R( RRXRtdate_reRRR(tInvalidISO8601DateR!R(R((R RX#s(R9R:RR0RRX(((R R!stftpthttptgophertmailtotnewstnntpttelnettwaistfiletprosperosz39.50ssz39.50rtcidtmidtvemmitservicetimaptnfstacaptrtspttipR)Rtdavtopaquelocktokentsiptsipstteltfaxtmodemtldapthttpss soap.beeps soap.beepss xmlrpc.beeps xmlrpc.beepsR)tgoth323tippttftptmupdatetprestimtmtqps iris.beeptdicttsnmptcridR tdnstinfotaaataaastcaptiaxticaptirissiris.xpcs iris.xpcssiris.lwztmsrptmsrpstshttpt thismessagettvtxmpptrfc2396cBsmtZeidddZeidZeidZeidZeidZe e hdZ RS( Ns#([a-zA-Z][0-9a-zA-Z+\-\.]*:)?/{0,2}s(\[[0-9A-Fa-f:]+\])?s$[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%,#]*$s\^[Uu][Rr][Nn]:[a-zA-Z0-9][a-zA-Z0-9-]{1,31}:([a-zA-Z0-9()+,\.:=@;$_!*'\-]|%[0-9A-Fa-f]{2})+$sk^[Uu][Rr][Nn]:[Uu][Uu][Ii][Dd]:[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$s^tag:([a-z0-9\-\._]+?@)?[a-z0-9\.\-]+?,\d{4}(-\d{2}(-\d{2})?)?:[0-9a-zA-Z;/\?:@&=+$\.\-_!~*'\(\)%,]*(#[0-9a-zA-Z;/\?:@&=+$\.\-_!~*'\(\)%,]*)?$s"[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%,#]cCsd}|iiddi}|djo|ii|ioWd}hd|ii <d|i <d|i<}|i ||i t|qEhd|ii <d|i <d|i<}|i ||i t|nY|djo?|iiid oh|ii|i oQhd|ii <d|i <d|i<}|i ||i t|qE|ii|ioWd}hd|ii <d|i <d|i<}|i ||i t|qEhd|ii <d|i <d|i<}|i ||i t|n |ii|iphd|ii <d|i <d|i<}|i |x|iD]h}t|d joOtii| o;tt||d <|i|d<|i t|PqqWy-|ii|iid o t}nWnnX|i ||n|d dgjoqt!id|ipQhd|ii <d|i <d|i<}|i ||i ||qEd}nu|ii"ddjoU|i#oH|t$jo;|i t%hd|ii <d|i <d|<nd}|oQhd|ii <d|i <d|i<}|i ||i ||n|S(NiR,R iR!R"RR)s urn:uuid:iRtidnaRRs ^\w+://[^/].*('tsuccessRRR:Rtschemettag_reRR!Rt logparamstupdatet extraParamsR(tValidTAGt InvalidTAGR,tuuid_ret InvalidUUIDturn_retValidURNt InvalidURNt rfc2396_reR$R%Rt urichars_retreprRtInvalidUriChartencodet UriNotIrit errorClassRR/tisalphat iana_schemestSchemeNotIANARegisteredt successClass(RRRRRR$RR((R RX@sl - -  0- - - -  '  -  3;- ( R9R:RR0RRRRRt InvalidLinktValidURIRX(((R R7s trfc3987cBstZeehdZRS(NcCsGy'|io|iid|_nWnnXti||||S(NR(RRRRRXRRR(RRRR((R RXs  (R9R:t InvalidIRIRRX(((R Rst rfc2396_fullcBs-tZeiddZeehdZRS(Ns[a-zA-Z][0-9a-zA-Z+\-\.]*:(//)?s$[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%,#]+$cCsti||||S(N(RRXRRRR(RRRR((R RXs(R9R:RR0RtInvalidFullLinkRRX(((R RstxmlbasecBstZeehdZRS(NcCsti||||o|ii|ijot|iii dd}t|ii dd}tt ||i i dd}||joT|id|jo>|ithd|ii<d|i<d|i <qqndS(Nt#iRR!R"R(RRXRRRRRtxmlBaset canonicalFormR:tdocbasetelembaseturljoinRRR(tSameDocumentReferenceR!R(RRRRRRR((R RXs%#(R9R:RRRX(((R RsRcBsMtZeiddddeiZeiddddZd ZRS( Ns5(((mon)|(tue)|(wed)|(thu)|(fri)|(sat)|(sun))\s*,\s*)?sE\d\d?\s+((jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|sA(nov)|(dec))\s+\d\d(\d\d)?\s+\d\d:\d\d(:\d\d)?\s+(([+-]\d\d\d\d)|sF(ut)|(gmt)|(est)|(edt)|(cst)|(cdt)|(mst)|(mdt)|(pst)|(pdt)|[a-ik-z])?$s0(((Mon)|(Tue)|(Wed)|(Thu)|(Fri)|(Sat)|(Sun)), )?sC\d\d? ((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|s:(Nov)|(Dec)) \d\d\d\d \d\d:\d\d(:\d\d)? (([+-]?\d\d[03]0)|s>(UT)|(GMT)|(EST)|(EDT)|(CST)|(CDT)|(MST)|(MDT)|(PST)|(PDT)|Z)$cCs|ii|iodk}t|i}y|ddjoti|d id}|ii ddjof|i |id i joF|i t hd|ii<d|i<d|id <dSqnWnVtj oJ}|i thd|ii<d|i<dt|<dSnXt|io>|i thd|ii<d|i<d|i<q|i thd|ii<d|i<d|i<nd |i}}tid d |}x.||jo |tid d |}}qW|ii|ii p>|i thd|ii<d|i<d|i<n;|i thd|ii<d|i<d|i<dS( Niilis%aRnR!R"RRBs[\\](.)s \([^(]*?\)t (Rt rfc2822_reRRtcalendarRRRwRtdowR/RR(t IncorrectDOWR!RRzR{tInvalidRFC2822DateRR RtValidRFC2822Datetvalue1tvalue2RRt rfc822_reRCtProblematicalRFC822Date(RR{RRRRR((R RXs. 9>= >> !>(R9R:RR0tUNICODERRRX(((R Rs (sname2codepointcCstid|}xtdt|dD]x}||iott ||||]s1]*src=(?:"(.*?)"|'(.*?)'|([\w-]+))[\s>]s\w+:c Cs2|ii|i|ii|i}xg}|D]}|td|q6~D]}t |i }|i i |px|D]c}t|djoJtii | o6|ithd|<dtt|<PqqW|ithd|ii<d|i<d|<qVqVWdS(NcCs |p|S(N(R<RE(R<RE((R tsiRRR!R"(Rtimg_reR8Rt anchor_retrefst_[1]RtreducetrefRRCt absref_reRR$R%RRR(RRRtContainsRelRefR!R(RRR$RRRR((R tvalidateAbsUrls(.'1 ( R9R:RR0t IGNORECASERRRR(((R Rst safeHtmlMixincBstZdZRS(NcCst||dS(N(R;RR(RR((R t validateSafes(R9R:R(((R RstsafeHtmlcBstZdZdZRS(NcCs|iitdS(N(RRDR'R(R((R RLscCs$|i|i|i|idS(N(RRRR(R((R RXs(R9R:RLRX(((R Rs tnonemailcBs8tZeideiid deiZdZRS(NtcCsL|ii|io2|ithd|ii<d|i<ndS(NR!R"(RRRRRR(t ContainsEmailR!R(R((R RXs( R9R:RR0RNRRR R\RX(((R Rs'tnonhtmlcBsDtZeidZeidZdZdZedZ RS(Nss&(#?\w+)cCs|it_|id(R9R:RX(((R R%HstpositiveIntegercBstZdZdZRS(NicCsyt|i}|djo tn|ioN||ijo>|ithd|ii <d|i <d|i<n;|it hd|ii <d|i <d|i<WnMtj oA|it hd|ii <d|i <d|i<nXdS(NiR!R"R( RRRRRzRR(tIntegerOverflowR!RR&tInvalidPositiveInteger(RR((R RXUs  >>(R9R:RRX(((R R(SstUINT31cBstZdZRS(Ni(R9R:R(((R R+bstIntegercBstZdZRS(NcCs|idjodSnyMt|i}|ithd|ii<d|i<d|i<WnMtj oA|it hd|ii<d|i<d|i<nXdS(NRBR!R"R( RRRRR(R&R!RRztInvalidInteger(RR((R RXfs>(R9R:RX(((R R,estFloatcBstZddZRS(NcCsPtid|ip6|ithd|p|i<d|i<ndS(Ns \d+\.?\d*$R4R(RRRRR(t InvalidFloatR(RR((R RXos(R9R:R?RX(((R R.nst alphanumericcBstZdZRS(NcCsItid|ip/|ithd|i<d|i<ndS(Ns^\s*[A-Za-z0-9]+\s*$R4R(RRRRR(tInvalidAlphanumR(R((R RXts(R9R:RX(((R R0sst percentTypecBstZdZRS(NcCsyqt|i}|djp |djo tn;|ithd|ii<d|i<d|i<WnMtj oA|it hd|ii<d|i<d|i<nXdS(Nf0.0f100.0R!R"R( R7RRRRzR(tValidPercentageR!RtInvalidPercentage(RR((R RXys >(R9R:RX(((R R2xstlatitudecBstZdZRS(NcCsyqt|i}|djp |djo tn;|ithd|ii<d|i<d|i<WnMtj oA|it hd|ii<d|i<d|i<nXdS(NiZiR!R"R( R7RRtlatRzR(t ValidLatitudeR!RtInvalidLatitude(RR6((R RXs >(R9R:RX(((R R5st longitudecBstZdZRS(NcCsyqt|i}|djp |djo tn;|ithd|ii<d|i<d|i<WnMtj oA|it hd|ii<d|i<d|i<nXdS(NiiLR!R"R( R7RRtlonRzR(tValidLongitudeR!RtInvalidLongitude(RR:((R RXs >(R9R:RX(((R R9sthttpURLcBs5tZeideiddeiZdZRS(Nshttp://s (?::\d+)?s(/|$)cCs|ii|ip>|ithd|ii<d|i<d|i<nti i|ip>|ithd|ii<d|i<d|i<n;|it hd|ii<d|i<d|i<dS(NR!R"R( Rthttp_reRRR(tInvalidURLAttributeR!RRRtValidURLAttribute(R((R RXs >>( R9R:RR0RNR[RR>RX(((R R=s$trdfResourceURIcBstZdZdZRS(NcCs ddgS(Nu+http://www.w3.org/1999/02/22-rdf-syntax-ns#uresourceu http://purl.org/dc/elements/1.1/utitle(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#uresource(u http://purl.org/dc/elements/1.1/utitle((R((R R scCstdf|iijo,|iitdf|_ti|nO|it jo;|i t hd|i i <d|i <dd<ndS(NtresourceR!R"R4s rdf:resource(trdfNSRRRtgetValueRRRXRRR(tMissingAttributeR!R(R((R RXs (R9R:R RX(((R RAs trdfAboutcBs#tZdZdZdZRS(NcCsdgS(Nu+http://www.w3.org/1999/02/22-rdf-syntax-ns#uabout(u+http://www.w3.org/1999/02/22-rdf-syntax-ns#uabout((R((R R scCsdS(N((RRRR((R R8scCstdf|iijo;|ithd|ii<d|i<dd<nDti |i|i|}|ii tdf|_ |i dS(NtaboutR!R"R4s rdf:about(RCRRRR(RER!RRt setElementttestRDRRX(RRI((R RXs ;(R9R:R R8RX(((R RFs  tnonblankcBstZehdZRS(NcCsS|ipEhd|ii<d|i<}|i||i||ndS(NR!R"( RRR!RRRRR(R(RRRR((R RXs ! (R9R:tNotBlankRX(((R RJstnowscBstZdZdZRS(NcCsd|_ti|dS(Ni(RtokRR(R((R Rs cCsrti|||ioT|i|iijo;|ithd|i i <d|i <d|_ndS(NR!R"i( RR)RR#RMRRCR(tUnexpectedWhitespaceR!R(RR#((R R)s#.(R9R:RR)(((R RLs tuniquecBstZedZdZRS(NcCs[||_||_||_ti||d|iijog|ii|d|ithd|ii<d|i<d|i<ndS(NtyestnoR!R"R(RRR(t InvalidYesNoR!R(R((R RXs(R9R:RYRX(((R RXs t truefalsecBstZdZdZRS(NcCsdS(N((R((R RYscCs^|iiddgjo>|ithd|ii<d|i<d|i<ndS(NttruetfalseR!R"R(RRRR(tInvalidTrueFalseR!R(R((R RXs(R9R:RYRX(((R R]s ttruefalsestrictcBstZdZdZRS(NcCsdS(N((R((R RYscCsX|iddgjo>|ithd|ii<d|i<d|i<ndS(NR^R_R!R"R(RRR(R`R!R(R((R RXs(R9R:RYRX(((R Ras tdurationcBs tZeidZdZRS(Ns \d+(:[0-5][0-9](:[0-5][0-9])?)?$cCsX|ii|ip>|ithd|ii<d|i<d|i<ndS(NR!R"R(Rt duration_reRRR(tInvalidDurationR!R(R((R RXs(R9R:RR0RcRX(((R RbstlengthLimitedTextcBstZdZdZRS(NcCs||_ti|dS(N(RRRR(RR((R Rs cCszt|i|ijoP|ithd|ii<d|i<dt|i<d|i<nti |dS(NR!R"R=R( R=RRRR(tTooLongR!RR RX(R((R RX sP(R9R:RRX(((R Res tkeywordscBstZdZRS(NcCsh|iiddjoK|iiddjo2|ithd|ii<d|i<ndS(NRiRnR!R"(RRR/R(tInvalidKeywordsR!R(R((R RXs2(R9R:RX(((R RgstcommaSeparatedIntegerscBstZdZRS(NcCsLtid|ip2|ithd|ii<d|i<ndS(Ns^\d+(,\s*\d+)*$R!R"(RRRRR(tInvalidCommaSeparatedIntegersR!R(R((R RXs(R9R:RX(((R RistformnamecBstZdZRS(NcCsXtid|ip>|ithd|ii<d|i<d|i<ndS(Ns^[a-zA-z][a-zA-z0-9:._]*R!R"R(RRRRR(tInvalidFormComponentNameR!R(R((R RXs(R9R:RX(((R Rkst enumerationcBstZdZRS(Nc Csy|i|ijob|i|ihd|ii<d|i<ddi|iidd<d|i<ndS(NR!R"R4R,R*iR( RRt valuelistR(terrorR!RRZR:(R((R RX"s(R9R:RX(((R Rm!stcaseinsensitive_enumerationcBstZdZRS(NcCs#|ii|_ti|dS(N(RRRRmRX(R((R RX(s(R9R:RX(((R Rp'stiso3166cBstZeZddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgZRS(NtADtAEtAFtAGtAItAMtANtAOtAQtARtAStATtAUtAWtAZtBAtBBtBDtBEtBFtBGtBHtBItBJtBMtBNtBOtBRtBStBTtBVtBWtBYtBZtCAtCCtCDtCFtCGtCHtCItCKtCLtCMtCNtCOtCRtCUtCVtCXtCYtCZtDEtDJtDKtDMtDOtDZtECtEEtEGtEHtERtEStETtFItFJtFKtFMtFOtFRtGAtGBtGDtGEtGFtGHtGItGLtGMtGNtGPtGQtGRtGStGTtGUtGWtGYtHKtHMtHNtHRtHTtHUtIDtIEtILtINtIOtIQtIRtIStITtJMtJOtJPtKEtKGtKHtKItKMtKNtKPtKRtKWtKYtKZtLAtLBtLCtLItLKtLRtLStLTtLUtLVtLYtMAtMCtMDtMGtMHtMKtMLtMMtMNtMOtMPtMQtMRtMStMTtMUtMVtMWtMXtMYtMZtNAtNCtNEtNFtNGtNItNLtNOtNPtNRtNUtNZtOMtPAtPEtPFtPGtPHtPKtPLtPMtPNtPRtPStPTtPWtPYtQAtREtROtRUtRWtSAtSBtSCtSDtSEtSGtSHtSItSJtSKtSLtSMtSNtSOtSRtSTtSVtSYtSZtTCtTDtTFtTGtTHtTJtTKtTMtTNtTOtTRtTTtTVtTWtTZtUAtUGtUMtUStUYtUZtVAtVCtVEtVGtVItVNtVUtWFtWStYEtYTtZAtZMtZW(R9R:tInvalidCountryCodeRoRn(((R Rq,stiso4217cBs?tZeZddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgZRS(NtAEDtAFNtALLtAMDtANGtAOAtARStAUDtAWGtAZMtBAMtBBDtBDTtBGNtBHDtBIFtBMDtBNDtBOBtBOVtBRLtBSDtBTNtBWPtBYRtBZDtCADtCDFtCHEtCHFtCHWtCLFtCLPtCNYtCOPtCOUtCRCtCSDtCUPtCVEtCYPtCZKtDJFtDKKtDOPtDZDtEEKtEGPtERNtETBtEURtFJDtFKPtGBPtGELtGHCtGIPtGMDtGNFtGTQtGWPtGYDtHKDtHNLtHRKtHTGtHUFtIDRtILStINRtIQDtIRRtISKtJMDtJODtJPYtKEStKGStKHRtKMFtKPWtKRWtKWDtKYDtKZTtLAKtLBPtLKRtLRDtLSLtLTLtLVLtLYDtMADtMDLtMGAtMKDtMMKtMNTtMOPtMROtMTLtMURtMWKtMXNtMXVtMYRtMZMtNADtNGNtNIOtNOKtNPRtNZDtOMRtPABtPENtPGKtPHPtPKRtPLNtPYGtQARtROLtRONtRUBtRWFtSARtSBDtSCRtSDDtSEKtSGDtSHPtSITtSKKtSLLtSOStSRDtSTDtSVCtSYPtSZLtTHBtTJStTMMtTNDtTOPtTRLtTRYtTTDtTWDtTZStUAHtUGXtUSDtUSNtUSStUYUtUZStVEBtVNDtVUVtWSTtXAFtXAGtXAUtXBAtXBBtXBCtXBDtXCDtXDRtXFOtXFUtXOFtXPDtXPFtXPTtXTStXXXtYERtZARtZMKtZWD(R9R:tInvalidCurrencyUnitRoRn(((R R_Ds(Xt__doc__t __author__t __version__t __copyright__RFRKR0RRRRTRRRRRRRRCR RR0RkRRRRR;R"R<RRJRNRdReRfRjRmRqRRRRRRRRRRRRRRRRRR RRR%R(R+R,R.R0R2R5R9R=RARFRJRLRORRRSRXR]RaRbReRgRiRkRmRpRqR_(RRRRRRRgRRRfRCRaRRR0RLRReRbRmRRRkRjRXROR_RJRR]R(RRRRNRqRR RRKR R+RRRR2R=RRRRRRRkR,RiRmRJRARFRSReRRR"R;R5RRR.RR9RR%RRpRRRRR<RqRRd((R t?s    # #'   % I  *    %