m P9fJc@s1dZdZdZdZdklZdkTdkZdefdYZd efd YZ d efd YZ d efdYZ defdYZ de fdYZ de fdYZdefdYZde fdYZdee e fdYZdefdYZdefdYZdeee fd YZd!eee e fd"YZd#efd$YZd%efd&YZd'eee fd(YZd)e fd*YZd+eee fd,YZd-eee fd.YZd/efd0YZd1efd2YZd3efd4YZd5eefd6YZd7efd8YZ d9efd:YZ!d;e"fd<YZ#d=eee e fd>YZ$d?eefd@YZ%dAefdBYZ&dCefdDYZ'dEee fdFYZ(dGefdHYZ)dIefdJYZ*dKefdLYZ+dMefdNYZ,dOee fdPYZ-dQee fdRYZ.dSee fdTYZ/dUeefdVYZ0dWefdXYZ1dYeefdZYZ2d[efd\YZ3d]efd^YZ4d_efd`YZ5daefdbYZ6dcefddYZ7deefdfYZ8dgeefdhYZ9diefdjYZ:dkeefdlYZ;dmeefdnYZ<doefdpYZ=dqefdrYZ>dse?fdtYZ@due?fdvYZAdwe?fdxYZBdye?fdzYZCd{e?fd|YZDd}e?fd~YZEde?fdYZFde?fdYZGde?fdYZHdefdYZIdeefdYZJde"fdYZKde"fdYZLde"fdYZMdee fdYZNdeefdYZOdefdYZPde"fdYZQde"fdYZRde"fdYZSde"fdYZTde"fdYZUde"fdYZVdS(s/$Id: kml.py 1057 2009-07-21 21:54:14Z sa3ruby $sYGregor J. Rothfuss and Mark Pilgrim s$Revision: 1057 $s,Copyright (c) 2002 Sam Ruby and Mark Pilgrim(s validatorBase(t*Nt FeatureTypecBstZdZdZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZRS(NcCsttfS(N(ttextt noduplicates(tself((t</web/script/rubys/feedvalidator.org/src/feedvalidator/kml.pytdo_namescCsttfS(N(tzerooneR(R((Rt do_visibilityscCsttfS(N(RR(R((Rtdo_openscCsttfS(N(tnonhtmlR(R((Rt do_addressscCsttfS(N(RR(R((Rtdo_phoneNumberscCsttfS(N(tSnippetR(R((Rt do_Snippet!scCsttfS(N(RR(R((Rtdo_description$scCsttfS(N(tLookAtR(R((Rt do_LookAt'scCsttfS(N(t TimeStampR(R((Rt do_TimeStamp+scCsttfS(N(tTimeSpanR(R((Rt do_TimeSpan.scCsttfS(N(RR(R((Rt do_styleUrl2scCstS(N(tStyle(R((Rtdo_Style6scCstS(N(tStyleMap(R((Rt do_StyleMap9scCsttfS(N(tViewR(R((Rtdo_View>scCsttfS(N(tRegionR(R((Rt do_RegionBscCstS(N(tMetadata(R((Rt do_MetadataEscCsdkl}|S(N(slink(tlink(RR!((Rt do_atom_linkHs cCsdkl}|S(N(sauthor(tauthor(RR#((Rtdo_atom_authorLs (t__name__t __module__RRR R R RRRRRRRRRRR R"R$(((RRs$                 t OverlayTypecBs#tZdZdZdZRS(NcCsttfS(N(tcolorR(R((Rtdo_colorTscCsttfS(N(tIntegerR(R((Rt do_drawOrderWscCsttfS(N(tIconR(R((Rtdo_IconZs(R%R&R)R+R-(((RR'Rs  tColorStyleTypecBstZdZdZRS(NcCsttfS(N(R(R(R((RR)ascCsttfS(N(t colorModeR(R((Rt do_colorModeds(R%R&R)R0(((RR._s t ContainercBstZdZdZRS(NcCstS(N(tDocument(R((Rt do_DocumentlscCstS(N(tFolder(R((Rt do_Folderos(R%R&R3R5(((RR1js tFeaturecBstZdZRS(NcCstS(N(t Placemark(R((Rt do_Placemarkws(R%R&R8(((RR6ustGeometrycBs>tZdZdZdZdZdZdZRS(NcCstS(N(tModel(R((Rtdo_ModelscCstS(N(t LineString(R((Rt do_LineStringscCstS(N(t LinearRing(R((Rt do_LinearRingscCstS(N(tPoint(R((Rtdo_PointscCstS(N(tPolygon(R((Rt do_PolygonscCstS(N(t MultiGeometry(R((Rtdo_MultiGeometrys(R%R&R;R=R?RARCRE(((RR9}s      tGeometryElementscBs#tZdZdZdZRS(NcCsttfS(N(RR(R((Rt do_extrudescCsttfS(N(RR(R((Rt do_tessellatescCsttfS(N(t altitudeModeR(R((Rtdo_altitudeModes(R%R&RGRHRJ(((RRFs  tLinkTypecBsYtZdZdZdZdZdZdZdZdZ d Z RS( NcCsttfS(N(RR(R((Rtdo_hrefscCsttfS(N(t refreshModeR(R((Rtdo_refreshModescCsttfS(N(tviewRefreshModeR(R((Rtdo_viewRefreshModescCsttfS(N(tFloatR(R((Rtdo_viewRefreshTimescCsttfS(N(RQR(R((Rtdo_viewBoundScalescCsttfS(N(trefreshVisibilityR(R((Rtdo_refreshVisibilityscCsttfS(N(RQR(R((Rtdo_refreshIntervalscCsttfS(N(RR(R((Rt do_viewFormatscCsttfS(N(RR(R((Rt do_httpQuerys( R%R&RLRNRPRRRSRURVRWRX(((RRKs        t LookAtTypecBsGtZdZdZdZdZdZdZdZRS(NcCsttfS(N(t longitudeR(R((Rt do_longitudescCsttfS(N(tlatitudeR(R((Rt do_latitudescCsttfS(N(tFloatWithNegativeR(R((Rt do_altitudescCsttfS(N(RQR(R((Rtdo_rangescCsttfS(N(R\R(R((Rtdo_tiltscCsttfS(N(tangle360R(R((Rt do_headingscCsttfS(N(RIR(R((RRJs( R%R&R[R]R_R`RaRcRJ(((RRYs      tkmlcBsWtZdklZlZlZdZdZdZdZ dZ dZ RS(N(s TYPE_KML20s TYPE_KML21s TYPE_KML22cCstS(N(t NetworkLink(R((Rtdo_NetworkLinkscCstS(N(t GroundOverlay(R((Rtdo_GroundOverlayscCstS(N(t ScreenOverlay(R((Rtdo_ScreenOverlayscCstS(N(tNetworkLinkControl(R((Rtdo_NetworkLinkControlscCsdkl}|S(N(slink(R!(RR!((RR"s cCsdkl}|S(N(sauthor(R#(RR#((RR$s ( R%R&tloggingt TYPE_KML20t TYPE_KML21t TYPE_KML22RfRhRjRlR"R$(((RRds     RkcBsbtZdZdZdZdZdZdZdZdZ d Z d Z RS( NcCsttfS(N(RQR(R((Rtdo_minRefreshPeriodscCsttfS(N(RR(R((Rt do_linkNamescCsttfS(N(RR(R((Rtdo_linkDescriptionscCsttfS(N(RR(R((Rt do_cookiescCsttfS(N(RR(R((Rt do_messagescCsttfS(N(R R(R((Rtdo_linkSnippetscCsttfS(N(tw3cdtfR(R((Rt do_expires scCsttfS(N(tUpdateR(R((Rt do_Update scCsttfS(N(RR(R((RRscCsttfS(N(RR(R((RRs( R%R&RqRrRsRtRuRvRxRzRR(((RRks         RycBs5tZdZdZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(Nt targetHreftparenttelement(RtchildrentlogtMissingElementtname(R((RtvalidatescCsttfS(N(RR(R((Rt do_targetHrefscCstS(N(R(R((Rt do_ChangescCstS(N(R(R((RRz"scCstS(N(R(R((Rt do_Delete&s(R%R&RRRRzR(((RRys     RecBsGtZdZdZdZdZdZdZdZRS(NcCsPd|ijo<d|ijo,|ithd|i<dd<ndS(NtLinktUrlR|R}(RR~RRR(R((RR*s cCsttfS(N(RyR(R((RR.scCsdgS(Nuid(Nuid(tNone(R((RtgetExpectedAttrNames1scCsttfS(N(RQR(R((RRV4scCsttfS(N(RR(R((Rt do_flyToView7scCsttfS(N(RR(R((Rtdo_Link:scCsttfS(N(RR(R((Rtdo_Url=s( R%R&RRRRVRRR(((RRe)s      R2cBs5tZdZdZdZdZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRBscCstS(N(Ri(R((RRjEscCstS(N(Rg(R((RRhHscCstS(N(Re(R((RRfKscCsttfS(N(tSchemaR(R((Rt do_SchemaNs(R%R&RRjRhRfR(((RR2@s     RcBs5tZdZdZdZdZdZRS(NcCs ddgS(Nunameuparent(Nuname(Nuparent(R(R((RRRscCstS(N(t SchemaField(R((Rtdo_SimpleFieldUscCstS(N(R(R((Rtdo_SimpleArrayFieldXscCstS(N(R(R((Rt do_ObjField[scCstS(N(R(R((Rtdo_ObjArrayField^s(R%R&RRRRR(((RRQs     RcBstZdZdZRS(NcCs ddgS(Nunameutype(Nuname(Nutype(R(R((RRbscCs$|idt|idtdS(NRttype(Nsname(Nstype(Rtvalidate_required_attributeRRtSchemaFieldType(R((RRhs(R%R&RR(((RRas R7cBs#tZdZdZdZRS(NcCs_|iidp,|ithd|i<dd<n|idtd|i dS(NtidR|R}(Nsid(Nsid( Rtattrsthas_keyRRt MissingIdRtvalidate_optional_attributetuniqueR|(R((Rt prevalidatems,cCsdgS(Nuid(Nuid(R(R((RRrscCstS(N(tGeometryCollection(R((Rtdo_GeometryCollectionus(R%R&RRR(((RR7ls  RDcBstZdZRS(NcCsdgS(Nuid(Nuid(R(R((RR|s(R%R&R(((RRDysRicBs>tZdZdZdZdZdZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(t geomColorR(R((Rt do_geomColorscCsttfS(N(t overlayxyR(R((Rt do_overlayXYscCsttfS(N(RR(R((Rt do_screenXYscCsttfS(N(RR(R((Rt do_rotationXYscCsttfS(N(RR(R((Rtdo_sizes(R%R&RRRRRR(((RRis      RgcBs>tZdZdZdZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(Nt LatLonBoxR|R}(RR~RRR(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(R^R(R((RR_scCsttfS(N(RIR(R((RRJscCsttfS(N(RR(R((RRscCsttfS(N(RR(R((Rt do_LatLonBoxs(R%R&RRR_RJRR(((RRgs      RcBstZdZdZRS(NcCsddddgS( Nuxuyuxunitsuyunits(Nux(Nuy(Nuxunits(Nuyunits(R(R((RRscCsD|idt|idt|idt|idtdS( Ntxtytxunitstyunits(NR(NR(NR(NR(RRRR^tkmlunits(R((RRs(R%R&RR(((RRs RcBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(Nt LatLonAltBoxR|R}(RR~RRR(R((RRscCsttfS(N(RR(R((Rtdo_LatLonAltBoxscCsttfS(N(tLodR(R((Rtdo_Lods(R%R&RRR(((RRs  RcBsGtZdZdZdZdZdZdZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRscCsd|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<ndS(NtnorthR|R}tsouthteasttwest(RR~RRR(R((RRs,,,cCsttfS(N(R\R(R((Rtdo_northscCsttfS(N(R\R(R((Rtdo_southscCsttfS(N(RZR(R((Rtdo_eastscCsttfS(N(RZR(R((Rtdo_westscCsttfS(N(RZR(R((Rt do_rotations( R%R&RRRRRRR(((RRs     RcBs#tZdZdZdZRS(NcCsttfS(N(RQR(R((Rtdo_minAltitudescCsttfS(N(RQR(R((Rtdo_maxAltitudescCsttfS(N(RIR(R((RRJs(R%R&RRRJ(((RRs  RcBs,tZdZdZdZdZRS(NcCsttfS(N(RQR(R((Rtdo_minLodPixelsscCsttfS(N(RQR(R((Rtdo_maxLodPixelsscCsttfS(N(RQR(R((Rtdo_minFadeExtentscCsttfS(N(RQR(R((Rtdo_maxFadeExtents(R%R&RRRR(((RRs   RcBstZdZRS(NcCstS(N(R(R((RRs(R%R&R(((RRsR cBstZdZdZRS(NcCsttfS(N(R R(R((RRscCsdgS(NumaxLines(NumaxLines(R(R((RRs(R%R&RR(((RR s R4cBs,tZdZdZdZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRscCstS(N(Re(R((RRfscCstS(N(Rg(R((RRh scCstS(N(Ri(R((RRj s(R%R&RRfRhRj(((RR4s   RcBstZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRs(R%R&R(((RRsRcBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NtPairR|R}(RR~RRR(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCstS(N(R(R((Rtdo_Pairs(R%R&RRR(((RRs  RcBsbtZdZdZdZdZdZdZdZdZ d Z d Z RS( NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RR!scCsdgS(Nuid(Nuid(R(R((RR$scCsttfS(N(t LineStyleR(R((Rt do_LineStyle'scCsttfS(N(t PolyStyleR(R((Rt do_PolyStyle*scCsttfS(N(t IconStyleR(R((Rt do_IconStyle-scCsttfS(N(t ListStyleR(R((Rt do_ListStyle0scCsttfS(N(t LabelStyleR(R((Rt do_LabelStyle3scCsttfS(N(t BalloonStyleR(R((Rtdo_BalloonStyle6scCsttfS(N(RQR(R((Rtdo_scale9scCsttfS(N(t labelColorR(R((Rt do_labelColor<s( R%R&RRRRRRRRRR(((RR s         RcBs>tZdZdZdZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RR@scCsdgS(Nuid(Nuid(R(R((RRCscCsttfS(N(RbR(R((RRcFscCsttfS(N(R,R(R((RR-IscCsttfS(N(RQR(R((RRLscCsttfS(N(RR(R((Rt do_hotSpotOs(R%R&RRRcR-RR(((RR?s      R,cBsktZdZdZdZdZdZdZdZdZ d Z d Z d Z RS( NcCs@d|ijo,|ithd|i<dd<ndS(NthrefR|R}(RR~RRR(R((RRSscCsttfS(N(RR(R((RRLWscCstS(N(t noiconoffset(R((Rtdo_x\scCstS(N(R(R((Rtdo_y_scCstS(N(R(R((Rtdo_wbscCstS(N(R(R((Rtdo_hescCsttfS(N(RQR(R((RRVhscCsttfS(N(RMR(R((RRNkscCsttfS(N(ROR(R((RRPnscCsttfS(N(RQR(R((RRRqscCsttfS(N(RQR(R((RRSts( R%R&RRLRRRRRVRNRPRRRS(((RR,Rs          RcBs>tZdZdZdZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RRxscCsdgS(Nuid(Nuid(R(R((RR{scCsttfS(N(R(R(R((Rt do_textColor~scCsttfS(N(R(R(R((Rt do_bgColorscCsttfS(N(R(R(R((RR)scCsttfS(N(RR(R((Rtdo_texts(R%R&RRRRR)R(((RRws      RcBs>tZdZdZdZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(R(R(R((RRscCstS(N(tItemIcon(R((Rt do_ItemIconscCsttfS(N(t listItemTypeR(R((Rtdo_listItemTypescCsttfS(N(RQR(R((RRs(R%R&RRRRRR(((RRs      RcBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NRR|R}(RR~RRR(R((RRscCsttfS(N(RR(R((RRLscCsttfS(N(t itemIconStateR(R((Rtdo_states(R%R&RRLR(((RRs  RcBs,tZdZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(RR(R((RRscCsttfS(N(RQR(R((RRs(R%R&RRRR(((RRs   RcBs#tZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(RQR(R((Rtdo_widths(R%R&RRR(((RRs  RcBs,tZdZdZdZdZRS(NcCs |idtd|idS(NR(Nsid(RRRRR|(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(RR(R((Rtdo_fillscCsttfS(N(RR(R((Rt do_outlines(R%R&RRRR(((RRs   RcBstZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRs(R%R&R(((RRsRcBs#tZdZdZdZRS(NcCs|d|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<ndS(NtkeyR|R}tstyleUrl(RR~RRR(R((RRs,cCsttfS(N(t styleStateR(R((Rtdo_keyscCsttfS(N(RR(R((RRs(R%R&RRR(((RRs  R@cBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(Nt coordinatesR|R}(RR~RRR(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCstS(N(R(R((Rtdo_coordinatess(R%R&RRR(((RR@s  R:cBsPtZdZdZdZdZdZdZdZdZ RS( NcCs@d|ijo,|ithd|i<dd<ndS(NRR|R}(RR~RRR(R((RRscCsdgS(Nuid(Nuid(R(R((RRscCsttfS(N(RIR(R((RRJscCsttfS(N(tLocationR(R((Rt do_LocationscCsttfS(N(t OrientationR(R((Rtdo_OrientationscCsttfS(N(tScaleR(R((Rtdo_ScalescCsttfS(N(RR(R((RRscCsttfS(N(t ResourceMapR(R((Rtdo_ResourceMaps( R%R&RRRJRRRRR(((RR:s       RcBstZdZRS(NcCstS(N(tAlias(R((Rtdo_Aliass(R%R&R(((RRsRcBstZdZdZRS(NcCsttfS(N(RR(R((RR scCsttfS(N(RR(R((Rt do_sourceHref s(R%R&RR(((RRs RcBs,tZdZdZdZdZRS(NcCsd|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<nd|ijo,|ithd|i<dd<ndS(NRZR|R}R\taltitude(RR~RRR(R((RRs ,,cCsttfS(N(RZR(R((RR[scCsttfS(N(R\R(R((RR]scCsttfS(N(R^R(R((RR_s(R%R&RR[R]R_(((RRs   RcBs#tZdZdZdZRS(NcCsttfS(N(RQR(R((RR$scCsttfS(N(RQR(R((RR'scCsttfS(N(RQR(R((Rtdo_z*s(R%R&RRR(((RR"s  RcBs#tZdZdZdZRS(NcCsttfS(N(RbR(R((RRc/scCsttfS(N(RbR(R((RRa2scCsttfS(N(RbR(R((Rtdo_roll5s(R%R&RcRaR(((RR-s  RBcBs,tZdZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NtouterBoundaryIsR|R}(RR~RRR(R((RR9scCsdgS(Nuid(Nuid(R(R((RR=scCsttfS(N(tboundaryR(R((Rtdo_outerBoundaryIs@scCstS(N(R(R((Rtdo_innerBoundaryIsCs(R%R&RRRR(((RRB8s   RcBstZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NR>R|R}(RR~RRR(R((RRGscCstS(N(R>(R((RR?Ks(R%R&RR?(((RRFs R<cBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NRR|R}(RR~RRR(R((RROscCsdgS(Nuid(Nuid(R(R((RRSscCsttfS(N(RR(R((RRVs(R%R&RRR(((RR<Ns  R>cBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NRR|R}(RR~RRR(R((RRZscCsdgS(Nuid(Nuid(R(R((RR^scCsttfS(N(RR(R((RRas(R%R&RRR(((RR>Ys  RcBs#tZdZdZdZRS(NcCsdgS(Nuid(Nuid(R(R((RRfscCsttfS(N(RwR(R((Rtdo_beginiscCsttfS(N(RwR(R((Rtdo_endls(R%R&RRR(((RRds  RcBs#tZdZdZdZRS(NcCs@d|ijo,|ithd|i<dd<ndS(NtwhenR|R}(RR~RRR(R((RRpscCsdgS(Nuid(Nuid(R(R((RRtscCsttfS(N(tunbounded_w3cdtfR(R((Rtdo_whenws(R%R&RRR(((RRos  RcBstZeZdddgZRS(Ntfractiontpixelst insetPixels(R%R&tInvalidKmlUnitsterrort valuelist(((RRzsR/cBstZeZddgZRS(Ntnormaltrandom(R%R&tInvalidColorModeRR(((RR/sRMcBstZeZdddgZRS(NtonChanget onIntervaltonExpire(R%R&tInvalidRefreshModeRR(((RRMsROcBs tZeZddddgZRS(Ntnevert onRequesttonStoptonRegion(R%R&tInvalidViewRefreshModeRR(((RROsRcBstZeZddgZRS(NRt highlight(R%R&tInvalidStyleStateRR(((RRsRcBs tZeZddddgZRS(Nt radioFoldertchecktcheckHideChildrent checkOffOnly(R%R&tInvalidListItemTypeRR(((RRsRc Bs5tZeZddddddddd d d g ZRS( NtopentclosedRt fetching0t fetching1t fetching2s open errors closed errorsfetching0 errorsfetching1 errorsfetching2 error(R%R&tInvalidItemIconStateRR(((RRsRIcBstZeZdddgZRS(Nt clampToGroundtrelativeToGroundtabsolute(R%R&tInvalidAltitudeModeRR(((RRIsRcBs,tZeZddddddddgZRS( Ntstringtinttuinttshorttushorttfloattdoubletbool(R%R&tInvalidSchemaFieldTypeRR(((RRst antialiascBstZdZdZRS(NcCs,|ithd|i<dd<dS(NR}t replacementtnone(RRt DeprecatedR(R((RRscCsttfS(N(RR(R((RRs(R%R&RR(((RR.s RcBstZdZdZRS(NcCs,|ithd|i<dd<dS(NR}R/R(RRR1R(R((RRscCsdgS(Nuid(Nuid(R(R((RRs(R%R&RR(((RRs RcBstZdZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/R(Rt getFeedTypeRnRR1R(R((RRscCs=tid|ip#|ithd|i<SndS(Ns([a-f]|[A-F]|[0-9]){8}tvalue(tretmatchRR3Rt InvalidColor(R((RRs(R%R&RR(((RRs RcBstZdZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/R((RR2RnRR1R(R((RRscCs=tid|ip#|ithd|i<SndS(Ns([a-f]|[A-F]|[0-9]){8}R3(R4R5RR3RR6(R((RRs(R%R&RR(((RRs t geomScalecBstZdZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/tscale(RR2RnRR1R(R((RRscCstS(N(RQ(R((RRs(R%R&RR(((RR7s RcBstZdZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/RD(RR2RnRR1R(R((RRscCsdgS(Nuid(Nuid(R(R((RRs(R%R&RR(((RRs RcBstZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/R(RR2RnRR1R(R((RRs(R%R&R(((RRsRTcBstZdZdZRS(NcCsC|itjp,|ithd|i<dd<ndS(NR}R/Ry(RR2RnRR1R(R((RRscCs ttfS(N(RR(R((RRs(R%R&RR(((RRTs RcBstZdZRS(NcCsO|itjp,|ithd|i<dd<nttfS(NR}R/R,(RR2RnRR1RR*R(R((RRs,(R%R&R(((RRsRcBstZdZdZRS(NcCsdS(N((R((RtnormalizeWhitespacescCs^|iiddgjo>|ithd|ii<d|i<d|i<ndS(Nt0t1R|R}R3(RR3tlowerRtInvalidZeroOneR|R(R((RRs(R%R&R9R(((RRs R(cBstZdZRS(NcCs=tid|ip#|ithd|i<SndS(Ns^([a-f]|[A-F]|[0-9]){8}$R3(R4R5RR3RR6(R((RR s(R%R&R(((RR( sRcBstZdZRS(NcCsW|iii}x;|D]3}tid|ip#|ithd|i<Sn|id}yut |di}|djp |djo t n8|it hd|ii<d|i<d|<WnJt j o>|ithd|ii<d|i<d|<nXyut |d i}|d jp |d jo t n8|ithd|ii<d|i<d|<WnJt j o>|ithd|ii<d|i<d|<nXt|d joKtid |dp0|ithd|i<d|d<qOqqWdS(Ns"^[-+.0-9]+,[-+.0-9]+(,[-+.0-9]+)?$R3t,iiiLR|R}iiZiis \d+\.?\d*$itattr(RR3tstriptsplittvaluesR4R5RtInvalidKmlCoordListtpointR*tlont ValueErrortValidLongitudeR|RtInvalidKmlLongitudetlatt ValidLatitudetInvalidKmlLatitudetlent InvalidFloat(RRDRER3RBRI((RRs0 # ;< ;<(R%R&R(((RRsRbcBstZdZRS(NcCsyqt|i}|djp |djo tn;|ithd|ii<d|i<d|i<WnMtj oA|it hd|ii<d|i<d|i<nXdS(NihiR|R}R3( R*RR3tangleRFRt ValidAngleR|Rt InvalidAngle(RRN((RR0s >(R%R&R(((RRb/sR^cBstZddZRS(NcCsPtid|ip6|ithd|p|i<d|i<ndS(Ns -?\d+\.?\d*$R?R3(R4R5RR3RRMR(RR((RR;s(R%R&RR(((RR^:s(Wt__doc__t __author__t __version__t __copyright__tbaset validatorBaset validatorsR4RR'R.R1R6R9RFRKRYRdRkRyReR2RRR7RDRiRgRRRRRRRR R4RRRRR,RRRRRRRRR@R:RRRRRRBRR<R>RRt enumerationRR/RMRORRRRIRR.RRRR7RRRTRRR(RRbR^(RReRRR1RBRRRYR6RgRR RR'RRRR4R2RR.RRKRIRRRR7RdRRyR^R4RRRRRRRRSRVR,RRRR9RRRRRRRRRRRR:RRR(R>RRTR<RRR@R/R7RRRkRTRRDRiR.RFRbRORM((Rt?s  B           %                  !