python (3.12.0)

(root)/
lib/
python3.12/
xml/
dom/
__pycache__/
minidom.cpython-312.opt-1.pyc

̑e,
`dZddlZddlZddlmZmZmZmZddlddl	m
Z
mZejjjejjjfZGddejjZ
ee
dd	
ee
dd
ee
d
d
dZdZdZdZdZGdde
ZGdde
Zeedd
eed
d
eedd
GddeZeedd 
eZGd!d"eZeddZGd#d$e
Zeed%d&
eed
d'
d(ZGd)d*Z Gd+d,e e
Z!Gd-d.e e
Z"ee"dd/
Gd0d1e"Z#ee#d2d3
ee#d4d5
d6Z$d7Z%Gd8d9e"Z&Gd:d;e#Z'Gd<d=eZ(ee(dd>
Gd?d@Z)GdAdBe)e e
Z*GdCdDe)e
Z+GdEdFe)e e
Z,GdGdHe
Z-GdIdJeZ.dKZ/GdLdMe
eZ0ee0dNdO
dPZ1dQZ2dRZ3dVdSZ4dWdTZ5dWdUZ6y)XacSimple implementation of the Level 1 DOM.

Namespaces and other minor Level 2 features are also supported.

parse("foo.xml")

parseString("<foo><bar/></foo>")

Todo:
=====
 * convenience methods for getting elements and text.
 * more testing
 * bring some of the writer and linearizer code into conformance with this
        interface
 * SAX 2 namespaces
N)EMPTY_NAMESPACEEMPTY_PREFIXXMLNS_NAMESPACEdomreg)*)DOMImplementationLS
DocumentLSceZdZdZdZdZdZdZeZ	dZ
ddZ		ddZdZ
dZdZdZd	Zd
ZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZ y)NodeNcy)NTselfs C/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/xml/dom/minidom.py__bool__z
Node.__bool__+c*|jdd||SN)toprettyxml)rencoding
standalones   rtoxmlz
Node.toxml.sB*==rcv|tj}n+tjtj|dd}|jt
jk(r|j|d||||n|j|d||||jS|jjS)Nxmlcharrefreplace
)rerrorsnewliner)
ioStringIO
TextIOWrapperBytesIOnodeTyper
DOCUMENT_NODEwritexmlgetvaluedetach)rindentnewlrrwriters      rrzNode.toprettyxml1s[[]F%%bjjl/7-@.24F==D...MM&"fdHjIMM&"fd3??$$==?++--rc,t|jSN)bool
childNodesrs r
hasChildNodeszNode.hasChildNodesDsDOO$$rc|jSr-r/rs r_get_childNodeszNode._get_childNodesGrc:|jr|jdSyNrr2rs r_get_firstChildzNode._get_firstChildJs????1%%rc:|jr|jdSyNr2rs r_get_lastChildzNode._get_lastChildNs????2&&rc&|j|jk(r.t|jD]}|j	|||S|j|j
vr6tjjt|dt||j|jj|||j||S	|jj|}|jt vrt#||jj%||||_||_|r!|j|dz
}||_||_nd|_||_
|S#t$rtjjwxYw)N cannot be child of )r$DOCUMENT_FRAGMENT_NODEtupler/insertBefore_child_node_typesxmldomHierarchyRequestErrrepr
parentNoderemoveChildappendChildindex
ValueErrorNotFoundErr_nodeTypes_with_children_clear_id_cacheinsertnextSiblingpreviousSibling)rnewChildrefChildcrJnodes      rrAzNode.insertBeforeRss ; ;;8../
/!!!X.
/OD$:$::''--.28nd4jIK
K*++H5X&$!
,--h7  $<<%OO""5(3#+H '/H$uQw/#+ +/(+/("&H
,gg))++
,sE(((Fc|j|jk(r-t|jD]}|j	||S|j|j
vr6tjjt|dt||jtvrt||j|jj|t||d|_|SNr=)r$r?r@r/rIrBrCrDrErFrMrNrGrH
_append_childrP)rrUrTs   rrIzNode.appendChildrs==D7774??+
$  #
$K== 6 66''--.24j$t*EG
G
]]6
6D!??&OO''-dD!rc|j|jk(r/|j}|j||j	||S|j|j
vr6tjjt|dt|||ury|j|jj|	|jj|}||j|<||_
d|_
|jtvs|jtvrt!||j|_|j"|_d|_d|_|j"r||j"_|jr||j_|S#t$rtjjwxYwrW)r$r?rPrHrArBrCrDrErFrGr/rJrKrLrMrNrQ)rrRoldChildrSrJs     rreplaceChildzNode.replaceChilds ; ;;++HX&$$Xx88D$:$::''--.28nd4jIK
Kx*++H5	(OO))(3E"*""!99  $<<D!'33#+#;#; ##' ##3;H$$03;H  0!	(''%%''	(sF(F?c	|jj||j|j|j_|j|j|j_dx|_|_|jtvrt|d|_|S#t$rtjjwxYwr-)r/removerKrCrDrLrPrQr$rMrNrGrrZs  rrHzNode.removeChilds	(OO""8,+3;3K3KH  0##/3;3G3GH$$0:>>x7 88D!"	(''%%''	(sB(Ccg}|jD]M}|jtjk(r|jsN|r|j
|d_|j
r|j|j
_|j{|r~|dj|jk(rb|d}|j|jz|_|j
|_|j
r||j
_|j|j||j||jtjk(s>|jP||jddyr9)r/r$r	TEXT_NODEdatarPrQunlinkappendELEMENT_NODE	normalize)rLchildrUs    rrezNode.normalizes__	&E~~/zz,1,=,=")((<A<Q<Q))9LLN1R5>>U^^;R5D $		EJJ 6DI','8'8D$((<@))9LLNHHUO>>T%6%66OO%-	&.rc8t|||jxs|Sr-)_clone_node
ownerDocument)rdeeps  r	cloneNodezNode.cloneNodes4t'9'9'ATBBrcN|jjj||Sr-)rjimplementation
hasFeaturerfeatureversions   risSupportedzNode.isSupporteds!!!00;;GWMMrcyr-r
rs r_get_localNamezNode._get_localNamesrc
||uSr-r
rothers  r
isSameNodezNode.isSameNodesu}rc,|j|dr|Syr-)rsrrqs  rgetInterfacezNode.getInterfacesGT*KrcR	|j|dS#ttf$rYywxYwr6)
_user_dataAttributeErrorKeyErrorrkeys  rgetUserDatazNode.getUserDatas2	??3'**)		s&&cd}	|j}||vr||d}|	d}|||=|S||f||<|S#t$ri}||_Y4wxYwr6)r~r)rrrahandleroldds      rsetUserDatazNode.setUserDatasy	 A!8C&)C<GcF
G_AcF
	 ADO	 s0AAct|drGt|jjD] \}\}}||j	|||||"yy)Nr~)hasattrlistr~itemshandle)r	operationsrcdstrrars       r_call_user_data_handlerzNode._call_user_data_handlersW4&(,T__-B-B-D(E
C$_dG&NN9c4cB
C'rcdx|_|_|jr0|jD]}|jt	|_d|_d|_yr-)rGrjr/rbNodeListrQrP)rrgs  rrbzNode.unlinksM/33$,??

&jDO#rc|Sr-r
rs r	__enter__zNode.__enter__src$|jyr-)rb)retevtbs    r__exit__z
Node.__exit__s
rNN)	rNN)!__name__
__module____qualname__namespaceURIrGrjrPrQrprefixrrrr0r3r7r;rArIr[rHrerlrsruryr|rrrrbrrr
rrrr"sLJMKO
F><@#.&%&'@"@ 6CN$C rr
firstChildzFirst child node, or None.)doc	lastChildzLast child node, or None.	localNamez"Namespace-local name of this node.cv|j}|r|d}||_||_|j|||_yr9)r/rQrPrcrG)rrUr/lasts    rrXrXs<J"~#dDOrcb|-|jtjk(ry|j}|-yNTF)r$rr%rGrUs r_in_documentr's3

==D...
rc|rT|jddjddjddjdd}|j|y	y	)
zWrites datachars to writer.&z&amp;<z&lt;"z&quot;>z&gt;N)replacewrite)r+ras  r_write_datar/sM||C)11#v>GD(+GGC,@	
Trc|jD]Q}|jtjk(r%|dk(s|j|k(r|j|t
|||S|SNr)r/r$rrdtagNamerc_get_elements_by_tagName_helper)parentnamercrUs    rrr6sY!!8==D---
S[DLLD0IIdO'dB7	8
Irc|jD]g}|jtjk(s!|dk(s|j|k(r%|dk(s|j
|k(r|j
|t||||i|Sr)r/r$rrdrrrc"_get_elements_by_tagName_ns_helper)rnsURIrrrUs     rrr>sr!!K==D---c!T^^y%@#!2!2e!;		$.tUIrJKIrceZdZejZdZdZdZdZ	ejejejejejejej fZdZy)DocumentFragmentz#document-fragmentNc"t|_yr-)rr/rs r__init__zDocumentFragment.__init__Us"*r)rrrrr?r$nodeName	nodeValue
attributesrGrdr`CDATA_SECTION_NODEENTITY_REFERENCE_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODE
NOTATION_NODErBrr
rrrrGsk**H#HIJJ**003399**++
-%rrceZdZdZej
ZdZdZdZ	ejejfZe
ddfdZdZdZdZdZeeexZZd	Zd
ZeeexZZdZdZeeeZd
ZdZdZy)Attr)_name_valuer_prefixr/
_localNamerjownerElementNFcd|_||_||_||_|||_t|_|jjtyr-)	rrrrrrr/rcText)rqNamerrrs     rrz
Attr.__init__csL 
( 'DO"*	
tv&rcx	|jS#t$r"|jjdddcYSwxYwN:r>r:)rrrsplitrs rruzAttr._get_localNamers<	3??"	3==&&sA.r22	3(99c|jSr-)	specifiedrs r_get_specifiedzAttr._get_specifiedx~~rc|jSr-)rrs r	_get_namezAttr._get_name{zzrcV||_|jt|jyyr-)rrrNrvalues  r	_set_namezAttr._set_name~s(
(D--.)rc|jSr-)rrs r
_get_valuezAttr._get_value{{rc||_||jd_|jt	|j||jd_yr6)rr/rarrNrs  r
_set_valuezAttr._set_valuesE"'(D--."'rc|jSr-)rrs r_get_prefixzAttr._get_prefix||rc|j}|dk(r*|r(|tk7rtjj	d||_|
|j}n|d|j}|jrt|j||_	y)Nxmlnsz5illegal use of 'xmlns' prefix for the wrong namespacer)
rrrCrDNamespaceErrrrrrNr)rrnsurinewNames    r_set_prefixzAttr._set_prefixs|!!W/1gg**KMM>nnG!'8GD--.	rc|j}||j|j=|j|j|j
f=|jr;d|_|xjdzc_|jxjdzc_	|jD]}|j|jdd=y)NFr>)r_attrsr_attrsNSrr_is_id_magic_id_nodesrj_magic_id_countr/rb)relemrgs   rrbzAttr.unlinks
  DMM*

t00$..AB{{#$$)$""22a72__	ELLN	OOArc|jry|j}|j}||y|j|}|y|jr&|j|j|jS|j|jSr)	rrjr_get_elem_inforisIdNSrisIdrrrrinfos    r	_get_isIdzAttr._get_isIds};;    ;$,!!$'<;;t00$..AA99T]]++rc|j}|j}||tS|j|}|tS|jr&|j|j|jS|j|jSr-)	rjr_no_typerrgetAttributeTypeNSrgetAttributeTyperrs    r_get_schemaTypezAttr._get_schemaTypes{    ;$,O!!$'<O**4+<+<dnnMM((77r) rrr	__slots__rATTRIBUTE_NODEr$rrrr`rrBrrrurrrpropertyrrrrrrrrrrbrrr
rrrrYsWI""HJI
F)C)CD+:d'3/
y)44Ht(!Z88I
k;
/F", 8rrrz True if this attribute is an ID.z'Namespace-local name of this attribute.
schemaTypezSchema type for this attribute.ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dd
ZeZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ y) NamedNodeMapaThe attribute list is a transient interface to the underlying
    dictionaries.  Mutations here will change the underlying element's
    dictionary.

    Ordering is imposed artificially and does not reflect the order of
    attributes as found in an input document.
    rr
_ownerElementc.||_||_||_yr-r)rattrsattrsNSrs    rrzNamedNodeMap.__init__s
)rc,t|jSr-)lenrrs r_get_lengthzNamedNodeMap._get_lengths4;;rct	|t|jj|S#t$rYywxYwr-)rrkeys
IndexErrorrrJs  ritemzNamedNodeMap.items;	T[[--/0788		s(+	77cg}|jjD])}|j|j|jf+|Sr-)rvaluesrcrrrrfrUs   rrzNamedNodeMap.itemssAKK&&(	2D
HHdmmTZZ01	2rcg}|jjD]5}|j|j|jf|j
f7|Sr-)rrrcrrrrs   ritemsNSzNamedNodeMap.itemsNSsNKK&&(	HD
HHt(($..94::FG	HrcZt|tr||jvS||jvSr-)
isinstancestrrrrs  r__contains__zNamedNodeMap.__contains__s*c3$++%%$--''rc6|jjSr-)rrrs rrzNamedNodeMap.keyss{{!!rc6|jjSr-)rrrs rkeysNSzNamedNodeMap.keysNSs}}!!##rc6|jjSr-)rrrs rrzNamedNodeMap.values
s{{!!##rNc:|jj||Sr-rget)rrrs   rr'zNamedNodeMap.get
s{{tU++rc|jt|dduryt|t|kDt|t|kz
S)Nrr)rgetattridrws  r_cmpzNamedNodeMap._cmps?;;'%488tHr%y(RX5	-ABBrc*|j|dk(Sr6r+rws  r__eq__zNamedNodeMap.__eq__yy1$$rc*|j|dk\Sr6r-rws  r__ge__zNamedNodeMap.__ge__r/rc*|j|dkDSr6r-rws  r__gt__zNamedNodeMap.__gt__yy!##rc*|j|dkSr6r-rws  r__le__zNamedNodeMap.__le__!r/rc*|j|dkSr6r-rws  r__lt__zNamedNodeMap.__lt__$r4rc^t|tr|j|S|j|Sr-)rr@rr)rattname_or_tuples  r__getitem__zNamedNodeMap.__getitem__'s-&.==!122;;/00rcJt|tr	|j|}||_yt|tstd|}|j|y#t$rAt	|}|j
j|_|j|Y||_ywxYw)Nz%value must be a string or Attr object)
rrrrrrrjsetNamedItemr	TypeError)rattnamerrUs    r__setitem__zNamedNodeMap.__setitem__.seS!
({{7+
DJeT* GHHDd#
(G}%)%7%7%E%E"!!$'DJ	
(sAAB"!B"c@	|j|S#t$rYywxYwr-)rrrrs  rgetNamedItemzNamedNodeMap.getNamedItem=s(	;;t$$		s	cD	|j||fS#t$rYywxYwr-)rrrrrs   rgetNamedItemNSzNamedNodeMap.getNamedItemNSCs-	==,	!:;;		s	c,|j|}|dt|j|j|j=|j
|j|jf=t|drd|_	|StjjNr)
rCrNrrrrrrrrrCrDrLrrns   rremoveNamedItemzNamedNodeMap.removeNamedItemIswd#=D../AJJ'

q~~q{{;<q.)!%H''%%''rc.|j||}|dt|j|j|j|j
f=|j|j=t|drd|_	|StjjrH)
rFrNrrrrrrrrrCrDrLrrrrJs    rremoveNamedItemNSzNamedNodeMap.removeNamedItemNSUsyi8=D../

q~~q{{;<AJJ'q.)!%H''%%''rct|ts6tjj	t|dt||jj|j}|r|j||j|j<||j|j|jf<|j|_t|j|SrW)rrrCrDrErFrr'rrbrrrrrrN)rrUrs   rr=zNamedNodeMap.setNamedItemas$%''--.24j$t*EG
Gkkoodii(JJL!%DII=A

t(($..9: ..))*
rc$|j|Sr-)r=rrUs  rsetNamedItemNSzNamedNodeMap.setNamedItemNSns  &&rcX||}t|j|jyr-)rNrrb)rr:rUs   r__delitem__zNamedNodeMap.__delitem__qs$$%))*
rcH|j|j|jfSr-rrs r__getstate__zNamedNodeMap.__getstate__vs{{DMM4+=+===rc.|\|_|_|_yr-rrstates  r__setstate__zNamedNodeMap.__setstate__ys9>6T]D$6rr-)!rrr__doc__rrrrrrr rr#rr'__len__r+r.r1r3r6r8r;r@rCrFrKrNr=rRrTrVrZr
rrr
r
s8I*
 ("$$,GC%%$%$1
$
(
('
>?rr
lengthz$Number of nodes in the NamedNodeMap.c(eZdZdZdZdZdZdZy)TypeInfo	namespacerc ||_||_yr-r`)rrars   rrzTypeInfo.__init__s"	rc|jr4d|jjd|jd|jdSd|jjd|jdS)Nr z (from z)>r)ra	__class__rrrs r__repr__zTypeInfo.__repr__sM>>*...*A*A499*...:
:!% 7 7CCrc|jSr-)rrs rrzTypeInfo._get_nameyyrc|jSr-)rars r_get_namespacezTypeInfo._get_namespacerrN)rrrrrrfrrjr
rrr_r_s#IDrr_cjeZdZdZej
ZdZeZ	dZ
ej
ejejejejejfZeddfdZdZdZdZdZd	Zd
ZdZdZd
ZdZdZeZdZdZ dZ!e!Z"dZ#dZ$dZ%dZ&dZ'ddZ(dZ)dZ*dZ+dZ,dZ-y)Element)rjrGrrrrrr/rrrPrQNrcd|_|x|_|_||_||_t|_dx|_|_d|_	d|_
yr-)rGrrrrrr/rPrQrr)rrrrrs     rrzElement.__init__sO'..t}("*2664/
rc:|ji|_i|_yyr-)rrrs r_ensure_attributeszElement._ensure_attributess;;DKDMrcx	|jS#t$r"|jjdddcYSwxYwr)rrrrrs rruzElement._get_localNames<	2??"	2<<%%c1-b11	2rc|jSr-rrs r_get_tagNamezElement._get_tagNamerrc|j8t|jjD]}|jd|_d|_t
j|yr-)rrrrbrr)rattrs  rrbzElement.unlinksP;;"T[[//12



Drcn|jy	|j|jS#t$rYywxYw)aReturns the value of the specified attribute.

        Returns the value of the element's attribute named attname as
        a string. An empty string is returned if the element does not
        have such an attribute. Note that an empty string may also be
        returned as an explicitly given attribute value, use the
        hasAttribute method to distinguish these two cases.
        r)rrr)rr?s  rgetAttributezElement.getAttributes=;;	;;w'---		s(	44cr|jy	|j||fjS#t$rYywxYwr)rrrrEs   rgetAttributeNSzElement.getAttributeNSs@== 	==,	!:;AAA		s*	66c|j|}|5t|}||_|j|_|j	|y||jk7r ||_|j
rt
|yyyr-)getAttributeNoderrrjsetAttributeNoderrN)rr?rrus    rsetAttributezElement.setAttributeso$$W-<=DDJ!%!3!3D!!$'
djj
 DJyy%!rcNt|\}}|j||}|8t||||}||_|j|_|j|y||jk7r||_|jrt||j|k7r||_||_	yyr-)
_nssplitgetAttributeNodeNSrrrjr|rrNrr)rr
qualifiedNamerr	localnamerus       rsetAttributeNSzElement.setAttributeNSs$]3	&&|Y?<
|YGDDJ!%!3!3D!!$'

""
99#D){{f$$ -
%rcR|jy|jj|Sr-r&)rattrnames  rr{zElement.getAttributeNodes";;{{x((rcV|jy|jj||fSr-)rr'rEs   rrzElement.getAttributeNodeNS
s)== }}  ,	!:;;rc|jd|fvrtjjd|j	|j
j
|jd}||j||jj
|j|jfd}|||ur|j|t||||ur|S||ur|Sy)Nzattribute node already owned)
rrCrDInuseAttributeErrrorr'rremoveAttributeNoderrr_set_attribute_node)rruold1old2s    rr|zElement.setAttributeNodesT4L0''++,JKK!{{tyy$/$$T*}}  $"3"3T^^!DdKD 0$$T*D$'tKtKrc|jtjj	|j|}|j
|y#t
$rtjjwxYwr-)rrCrDrLrrr)rrrus   rremoveAttributezElement.removeAttribute'sf== ''%%''	(;;t$D	
  &	(''%%''	(sA

(A5c|jtjj	|j||f}|j|y#t$rtjjwxYwr-)rrCrDrLrr)rrrrus    rremoveAttributeNSzElement.removeAttributeNS0sk== ''%%''	(==,	!:;D	
  &	(''%%''	(sA(A7c(|tjj	|j|jt
||j|j|_|S#t
$rtjjwxYwr-)	rCrDrLrrrrNrbrjrQs  rrzElement.removeAttributeNode9s{<''%%''	(KK		"	
"//	(''%%''	(sA))(Bc8|jy||jvS)zChecks whether the element has an attribute with the specified name.

        Returns True if the element has an attribute with the specified name.
        Otherwise, returns False.
        FrrBs  rhasAttributezElement.hasAttributeIs ;;t{{""rc<|jy||f|jvSNF)rrEs   rhasAttributeNSzElement.hasAttributeNSSs#== i(DMM99rc,t||tS)zReturns all descendant elements with the given tag name.

        Returns the list of all descendant elements (not direct children
        only) with the specified tag name.
        rrrBs  rgetElementsByTagNamezElement.getElementsByTagNameXs/tT8:FFrc.t|||tSr-rrrEs   rgetElementsByTagNameNSzElement.getElementsByTagNameNS`1,	8:7	7rc6d|jt|fzS)Nz<DOM Element: %s at %#x>)rr*rs rrfzElement.__repr__ds)T\\2d8,DDDrc,|j|dz|jz|j}|jD]@}|jd|zt	|||j
|jdB|jr|jdt|jdk(r[|jdjtjtjfvr"|jdj|dddnJ|j||jD]}|j|||z|||j||jd|jd|y
|jd	|zy
)zWrite an XML element to a file-like object

        Write the element to the writer object that must provide
        a write method (e.g. a file or StringIO object).
        rz %s="rrr>rrz</z/>%sN)
rr_get_attributesrrrr/rr$rr`rr&)rr+r)	addindentr*ra_namerUs        rr&zElement.writexmlgsJ	VCZ$,,./$$&jjl	FLLF*+f
 3 34LL	??LLDOO$)"++(?(?0AA"++FBB?T" OOMDMM&&*:ItLMV$LLdllD9:LL'rcd|jt|j|j|Sr-)ror
rrrs rrzElement._get_attributess%!DKK==rc|jryyrrrs r
hasAttributeszElement.hasAttributess;;rcH|j|}|j|yr-)r{setIdAttributeNode)rridAttrs   rsetIdAttributezElement.setIdAttributes &&t,'rcJ|j||}|j|yr-)rr)rrrrs    rsetIdAttributeNSzElement.setIdAttributeNSs"((yA'rcr||j|jstjj	t|tjj
|jsGd|_|xjdz
c_|jxjdz
c_
t|yy)NTr>)ryrrCrDrL_get_containing_entrefNoModificationAllowedErrrrrjrrN)rrs  rrzElement.setIdAttributeNodes>1D1D!E''%%''!$'3''2244}} FM  A% ..!3.D!	rrrr).rrrrrrdr$rrrrrrr`rrrBrrrorursrbrwryr}rr{rr|setAttributeNodeNSrrrremoveAttributeNodeNSrrrrrfr&rrrrrr
rrrlrls1I  HIJO**99**00335.=T(
2 
&.")
<
&*''0#:
G7E(@>((	"rrlrz*NamedNodeMap of attributes on the element.z%Namespace-local name of this element.ct||j||j|j<||j|j
|jf<||_yr-)rNrorrrrrr)elementrus  rrrsQG  $GNN499<@Gd''89
 Drc^eZdZdZdZdZeZdZdZ	dZ
dZdZdZ
dZd	Zd
ZdZy)	ChildlesszMixin that makes childless-ness easy to implement and avoids
    the complexity of the Node methods that deal with children.
    r
Ncyr-r
rs rr7zChildless._get_firstChildrrcyr-r
rs rr;zChildless._get_lastChildrrcZtjj|jdz)Nz nodes cannot have childrenrCrDrErrQs  rrIzChildless.appendChild&gg))MM99;	;rcyrr
rs rr0zChildless.hasChildNodesrcZtjj|jdzNz nodes do not have childrenrrrRrSs   rrAzChildless.insertBeforerrcZtjj|jdzr)rCrDrLrr^s  rrHzChildless.removeChilds&gg!!MM99;	;rcyr-r
rs rrezChildless.normalizesrcZtjj|jdzrrrrRrZs   rr[zChildless.replaceChildrr)rrrr[rr
EmptyNodeListr/rrr7r;rIr0rArHrer[r
rrrrsLIJJJI;;;
;rrcreZdZejZdZdZdZdZ	e
ee	ZdZdZ
e
ee
Zd	dZy)
ProcessingInstructiontargetrac ||_||_yr-r)rrras   rrzProcessingInstruction.__init__s	rc|jSr-rars r_get_nodeValuez$ProcessingInstruction._get_nodeValuerhrc||_yr-rrs  r_set_nodeValuez$ProcessingInstruction._set_nodeValues		rc|jSr-rrs r
_get_nodeNamez#ProcessingInstruction._get_nodeNamerrc||_yr-rrs  r
_set_nodeNamez#ProcessingInstruction._set_nodeNames	rc	d|j|d|jd|jd|y)Nz<?rd?>)rrrarr+r)rr*s     rr&zProcessingInstruction.writexmlst{{DIItLMrNr)rrrrrr$rrrrrrrrrr&r
rrrrsI//H"I
8I
}5HNrrcfeZdZdZdZdZeZdZdZe	eexZ
ZdZdZ
dZd	Zd
ZdZy)

CharacterData)_datarjrGrQrPctdx|_|_dx|_|_d|_t
j
|yr)rjrGrQrPrrrrs rrzCharacterData.__init__s4/33T_266t/


drc,t|jSr-)rrars rrzCharacterData._get_length499~rc|jSr-rrs r	_get_datazCharacterData._get_datarrc||_yr-rrras  r	_set_datazCharacterData._set_data	s	
rc|j}t|dkDrd}nd}d|jjd|dd|dS)N
z...rz<DOM z node "rz">)rarrer)rra	dotdotdots   rrfzCharacterData.__repr__sByyt9r>IINN##T!BZ<	<rc$|dkrtjjd|t|jk\rtjjd|dkrtjjd|j|||zSNroffset cannot be negative#offset cannot be beyond end of datazcount cannot be negativerCrDIndexSizeErrrraroffsetcounts   r
substringDatazCharacterData.substringDataswA:''&&'BCCS^#''&&'LMM19''&&'ABByyu--rc,|j|z|_yr-r)rargs  r
appendDatazCharacterData.appendData sIIO	rc|dkrtjjd|t|jk\rtjjd|r(|jd|||j|d|_yy)Nrrrr)rrrs   r
insertDatazCharacterData.insertData#ssA:''&&'BCCS^#''&&'LMM		'6"C67);=DIrcV|dkrtjjd|t|jk\rtjjd|dkrtjjd|r(|jd||j||zdz|_yyrrrs   r
deleteDatazCharacterData.deleteData,sA:''&&'BCCS^#''&&'LMM19''&&'ABB		'6*TYYve|}-EEDIrc\|dkrtjjd|t|jk\rtjjd|dkrtjjd|r+|jd|||j||zd|_yyrr)rrrrs    rreplaceDatazCharacterData.replaceData6sA:''&&'BCCS^#''&&'LMM19''&&'ABB		'6"C6%<=)ACDIrN)rrrrrrr\rrrrarrfrrrrrr
rrrrsSWIG 	955D9<.$=F	CrrzLength of the string data.cPeZdZdZej
ZdZdZdZ	d	dZ
dZdZdZ
y)
rr
z#textNc|dks|t|jkDrtjj	d|j}|j|d|_|j|_|j}|jrR||jjvr:||jj|n|jj|||jd||_|S)Nrzillegal offset value)rrarCrDrrerjrPrGr/rIrA)rrnewTextnexts    r	splitTextzText.splitTextKsA:#dii.0''&&'=>>.."yy) $ 2 2??tt'A'AA|++G4,,Wd;IIgv&	rc<t|||j|yr-)rrars     rr&z
Text.writexmlZsF		4@Arc|jg}|j}|Y|jtjtj
fvr)|j
d|j|j}nn|Y|j}|X|jtjtj
fvr(|j|j|j}nn|Xdj|S)Nrr)
rarQr$rr`rrOrPrcjoin)rrfrJs   r_get_wholeTextzText._get_wholeText_s
YYK  mzzdnnd.E.EFFAFF#%%m
mzzdnnd.E.EFF MMmwwqzrc|j}|j}|P|jtjtj
fvr |j}|j
||}nn|P|j}|s|j
||P|jtjtj
fvr |j}|j
||}nn|P|r	||_|Syr-)	rGrQr$rr`rrHrPra)rcontentrrJrs     rreplaceWholeTextzText.replaceWholeTextqs  mzzdnnd.E.EFF((""1%
m
t$mzzdnnd.E.EFF}}""1%
mDIKrc|jjryt|}|y|jj	|}|y|jSr)rastrip_get_containing_elementrjrisElementContent)rrrs   r!_get_isWhitespaceInElementContentz&Text._get_isWhitespaceInElementContentsR99??&t,<!!006<((**rr)rrrrrr`r$rrrr&rrr
r
rrrrDs4I~~HHJ
B
$8
+rrisWhitespaceInElementContentzKTrue iff this text node contains only whitespace and is in element content.	wholeTextz.The text of all logically-adjacent text nodes.c||j}|.|jtjk(r|S|j}|.yr-)rGr$rrdrUrTs  rrrs<A
-::***H
LL-rc||j}|.|jtjk(r|S|j}|.yr-)rGr$rrrs  rrrs<A
-::333H
LL-rc6eZdZejZdZdZddZy)Commentz#commentc<tj|||_yr-)rrrrs  rrzComment.__init__st$
rc|d|jvrtd|j|d|jd|y)Nz--z%'--' is not allowed in a comment nodez<!--z-->)rarKrrs     rr&zComment.writexmls1499DEE		4@ArNr)	rrrrrr$rrr&r
rrrrs  HHBrrc4eZdZdZej
ZdZddZy)CDATASectionr
z#cdata-sectionc|jjddk\rtd|jd|jzy)Nz]]>rz$']]>' not allowed in a CDATA sectionz<![CDATA[%s]]>)rafindrKrrs     rr&zCDATASection.writexmls999>>% A%CDD%		12rNr)	rrrrrrr$rr&r
rrrrsI&&HH3rrc`eZdZdZddZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZy)ReadOnlySequentialNamedNodeMap_seqc||_yr-r)rseqs  rrz'ReadOnlySequentialNamedNodeMap.__init__s		rc,t|jSr-rrrs rr\z&ReadOnlySequentialNamedNodeMap.__len__rrc,t|jSr-rrs rrz*ReadOnlySequentialNamedNodeMap._get_lengthrrcL|jD]}|j|k(s|cSyr-)rrrIs   rrCz+ReadOnlySequentialNamedNodeMap.getNamedItems&	AzzT!	rcl|jD]%}|j|k(s|j|k(s#|cSyr-)rrrrMs    rrFz-ReadOnlySequentialNamedNodeMap.getNamedItemNSs1	A~~-!++2J	rct|tr|j|}n|j|}|t	||Sr-)rr@rFrCr)r
name_or_tuplerUs   rr;z*ReadOnlySequentialNamedNodeMap.__getitem__sCmU+&4&&
6D$$]3D<=))rcL|dkry	|j|S#t$rYywxYwr6)rrrs  rrz#ReadOnlySequentialNamedNodeMap.items219	99U##		s	##c@tjjdNz"NamedNodeMap instance is read-onlyrCrDrrBs  rrKz.ReadOnlySequentialNamedNodeMap.removeNamedItemgg..02	2rc@tjjdr'r(rEs   rrNz0ReadOnlySequentialNamedNodeMap.removeNamedItemNSr)rc@tjjdr'r(rQs  rr=z+ReadOnlySequentialNamedNodeMap.setNamedItemr)rc@tjjdr'r(rQs  rrRz-ReadOnlySequentialNamedNodeMap.setNamedItemNSr)rc|jgSr-rrs rrVz+ReadOnlySequentialNamedNodeMap.__getstate__s		{rc|d|_yr6rrXs  rrZz+ReadOnlySequentialNamedNodeMap.__setstate__s
!H	rN)r
)rrrrrr\rrCrFr;rrKrNr=rRrVrZr
rrrrsHI

2222rrz&Number of entries in the NamedNodeMap.c&eZdZdZdZdZdZdZy)
Identifiedz@Mix-in class that supports the publicId and systemId attributes.publicIdsystemIdc ||_||_yr-r1)rr2r3s   r_identified_mixin_initz!Identified._identified_mixin_inits 
 
rc|jSr-)r2rs r
_get_publicIdzIdentified._get_publicId}}rc|jSr-)r3rs r
_get_systemIdzIdentified._get_systemIdr8rN)rrrr[rr5r7r:r
rrr0r0
sJ&I!rr0cReZdZejZdZdZdZdZ	dZ
dZdZdZ
ddZy)DocumentTypeNct|_t|_|rt|\}}||_|j|_yr-)rentities	notationsrrr)rrrrs    rrzDocumentType.__init__$s:68
79 ( 7FI!DI		
rc|jSr-)internalSubsetrs r_get_internalSubsetz DocumentType._get_internalSubset,"""rc|jtd}|j|_|j|_tj
jj}|r\g|j_	g|j_	|jjD]e}t|j|j|j}|jjj||j|||g|jjD]}t!|j|j|j|j"}|j$|_|j&|_|j(|_|jjj||j||||j||||Syr-)rjr<rrrCrDUserDataHandlerNODE_CLONEDr>rr?Notationr2r3rcrEntitynotationNameactualEncodingrrr)rrkclonerrJnotationeentitys        rrlzDocumentType.cloneNode/sg% &EEJ!YYEN//;;I&(#')$,,FA'

AJJ

KHOO((//9--iHEF++DA#AJJ

AJJ$%NN4F,-,<,<F)&'jjFO%&YYFNNN''..v6--iFCD
((D%@Lrc
|jd|j|j|jr2|j|d|jd|d|jdn-|jr!|j|d|jd|j=|jd|j|j|jd|jd|zy)	Nz
<!DOCTYPE z
  PUBLIC ''z  'z
  SYSTEM 'z []r)rrr2r3rArs     rr&zDocumentType.writexmlJs\"TYY==LL $--t}}F
G
]]LLdDMMBC*LLLL,,-LLSXrr)rrrrDOCUMENT_TYPE_NODEr$rrr2r3rArrBrlr&r
rrr<r<s:&&HIDHHN"#6rr<cheZdZdZej
ZdZdZdZ	dZ
dZdZdZ
dZdZdZdZd	Zy)
rHNcb||_||_t|_|j	||yr-)rrIrr/r5)rrr2r3rLs     rrzEntity.__init__as*
$"*##Hh7rc|jSr-rJrs r_get_actualEncodingzEntity._get_actualEncodinggrCrc|jSr-rrs r
_get_encodingzEntity._get_encodingjr8rc|jSr-rrrs r_get_versionzEntity._get_versionmrrc@tjjd)Nz(cannot append children to an entity noderCrDrE)rrRs  rrIzEntity.appendChildpsgg))68	8rc@tjjd)Nz+cannot insert children below an entity noder_rs   rrAzEntity.insertBeforetsgg))9;	;rc@tjjd)Nz*cannot remove children from an entity noder_r^s  rrHzEntity.removeChildxsgg))8:	:rc@tjjd)Nz)cannot replace children of an entity noder_rs   rr[zEntity.replaceChild|sgg))79	9r)rrrrrENTITY_NODEr$rrJrrrrrWrZr]rIrArHr[r
rrrHrHXsNJHINHG8#8;:9rrHc.eZdZejZdZdZy)rGNc6||_|j||yr-)rr5)rrr2r3s    rrzNotation.__init__s
##Hh7r)rrrrrr$rrr
rrrGrGs!!HI8rrGc2eZdZgdZdZdZdZdZdZy)DOMImplementation))core1.0)rh2.0)rhN)rCri)rCrj)rCN)ls-loadz3.0)rkNcL|dk(rd}|j|f|jvSr)lower	_featuresrps   rrozDOMImplementation.hasFeatures(b=G

)T^^;;rcH|r+|jtjjd|j	}|duxr
|duxr|du}|s!|rtjjd|rt
|\}}|dk(r$|dk7rtjjd|r!|stjjd|j||}|r|j||j||r|x|_|_
||_||_|S)Nz(doctype object owned by another DOM treezElement with no namerCz$http://www.w3.org/XML/1998/namespacezillegal use of 'xml' prefixz(illegal use of prefix without namespaces)
rGrCrDWrongDocumentErr_create_documentInvalidCharacterErrrrcreateElementNSrIrjdoctypern)	rrrrtradd_root_elementrrrs	         rcreateDocumentz DOMImplementation.createDocuments.w))5''**:<
<##% , 4!4$1T$9!4$+tO5!1''--.DEE ( 7FI#IIgg**+HIIlgg**>@@)),
FG(OOG$9<<G!6!
rc8t|}||_||_|Sr-)r<r2r3)rrr2r3rts     rcreateDocumentTypez$DOMImplementation.createDocumentTypes!}-##rc,|j|dr|Syr-)ror{s  rr|zDOMImplementation.getInterfaces??7D)KrctSr-)Documentrs rrqz"DOMImplementation._create_documents
zrN)	rrrrnrorvrxr|rqr
rrrgrgs#I<
+ZrrgcJeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
y)
ElementInfozObject that represents content-model information for an element.

    This implementation is not expected to be used in practice; DOM
    builders should provide implementations which do the right thing
    using information available to it.

    rrc||_yr-rrrBs  rrzElementInfo.__init__s	rctSr-rranames  rrzElementInfo.getAttributeTyperctSr-rrEs   rrzElementInfo.getAttributeTypeNSrrcyrr
rs rr	zElementInfo.isElementContentrrcy)zQReturns true iff this element is declared to have an EMPTY
        content model.Fr
rs risEmptyzElementInfo.isEmptysrcy)z7Returns true iff the named attribute is a DTD-style ID.Fr
rs  rrzElementInfo.isIdrcy)z<Returns true iff the identified attribute is a DTD-style ID.Fr
rEs   rrzElementInfo.isIdNSrrc|jSr-rrrs rrVzElementInfo.__getstate__rrc||_yr-rrrXs  rrZzElementInfo.__setstate__s	rN)rrrr[rrrrr	rrrrVrZr
rrr}r}s;I
rr}c|jtjk(r"|jj	d|_yt
|r6|jjj	d|j_yyr-)r$rr%	_id_cacheclear_id_search_stackrrjrs rrNrNs_}}*** $	d	$$**,-1+
rceZdZdZej
ejejejfZ	e
ZejZ
dZdZdZdZdxZZdZdZdZdZdZdZdZdZdZdZdZd	Zd
Z dZ!dZ"d
Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5d Z6d!Z7d"Z8d#Z9d$Z:		d'd%Z;d&Z<y)(r{)
_elem_infortrr/rz	#documentNFrcZd|_t|_i|_i|_d|_yr-)rtrr/rrrrs rrzDocument.__init__%s*"* $rc|jr|j|jf}n|j}|jj	|Sr-)rrrrr')rrrs   rrzDocument._get_elem_info.s?&&(9(99C//C""3''rc|jSr-rVrs rrWzDocument._get_actualEncoding5rCrc|jSr-)rtrs r_get_doctypezDocument._get_doctype8rrc|jSr-)documentURIrs r_get_documentURIzDocument._get_documentURI;src|jSr-rYrs rrZzDocument._get_encoding>r8rc|jSr-)errorHandlerrs r_get_errorHandlerzDocument._get_errorHandlerAs   rc|jSr-)rrs r_get_standalonezDocument._get_standaloneDr4rc|jSr-)strictErrorCheckingrs r_get_strictErrorCheckingz!Document._get_strictErrorCheckingGs'''rc|jSr-r\rs rr]zDocument._get_versionJrrc|j|jvr6tjj	t|dt||j|jj||jtjk(r/|jrtjj	dtj||S)Nr=z two document elements disallowed)r$rBrCrDrErFrGrHrrd_get_documentElementrIrQs  rrIzDocument.appendChildMs== 6 66''--.24j$t*EG
G??&
OO''-==D---((*''--24
4d++rc	|jj|dx|_|_d|_|j|urd|_	|S#t$rtjjwxYwr-)
r/r]rKrCrDrLrPrQrGdocumentElementr^s  rrHzDocument.removeChild]sr	(OO""8,;?>x7"8+#'D 	(''%%''	(sA		(A1ch|jD]#}|jtjk(s!|cSyr-)r/r$rrdrQs  rrzDocument._get_documentElementis,OO	D}} 1 11	rc|j!|jjd|_tj|yr-)rtrbrrs rrbzDocument.unlinkns/<<#LL!DLDrc|sy|jjddd}|j|_|j|_|j|_|j
D]s}t
|||}|j
j||jtjk(rn$|jtjk(r||_||_
u|jtj j"j$|||Sr-)rnrvrrrrr/rircr$rr%rRrtrGrrCrDrErF)rrkrKrJ
childclones     rrlzDocument.cloneNodets##224tD??
		*A$Qe4J##J/""d&8&88$$(?(?? *
$)J!		*	
$$SWW%<%<%H%H%)5	2rc(t}||_|Sr-)rrj)rrs  rcreateDocumentFragmentzDocument.createDocumentFragmentsrc*t|}||_|Sr-)rlrj)rrrMs   r
createElementzDocument.createElementsGrclt|tstdt}||_||_|SNznode contents must be a string)rrr>rrarj)rrats   rcreateTextNodezDocument.createTextNodes2$$<==Frclt|tstdt}||_||_|Sr)rrr>rrarjrrarTs   rcreateCDATASectionzDocument.createCDATASections2$$<==Nrc*t|}||_|Sr-)rrjrs   r
createCommentzDocument.createCommentsDMrc,t||}||_|Sr-)rrj)rrraps    rcreateProcessingInstructionz$Document.createProcessingInstructions!&$/rc8t|}||_d|_|Sr)rrjr)rras   rcreateAttributezDocument.createAttributesKrcJt|\}}t|||}||_|Sr-)rrlrj)rrrrrrMs      rrszDocument.createElementNSs+$]3	M<8rcZt|\}}t||||}||_d|_|Sr)rrrjr)rrrrrrs      rcreateAttributeNSzDocument.createAttributeNSs4$]3	i@rc0t||||}||_|Sr-)rHrj)rrr2r3rIrMs      r_create_entityzDocument._create_entitys48\:rc.t|||}||_|Sr-)rGrj)rrr2r3rJs     r_create_notationzDocument._create_notationsT8X.rc||jvr|j|S|js
|jsy|j}||jg}||_n|syd}|r|j}|j
|jDcgc]}|jtvr|c}|j|}|r.|jjD]}|jrb|j|j|js7||j|j <|j |k(r|}b|j"ron|j%|j&r:||j|j <|j |k(r|}|j"rn|j(s||j|j <|j |k(r|}|j"dk(snenc|j"rW|jjD]:}|j(s||j|j <|j |k(s9|}<|	|S|r|Scc}w)Nr>)rrrrrpopextendr/r$rMrrrrrrrrrrr)rr*stackresultrUrgrrus        rgetElementByIdzDocument.getElementByIds
>>"%%4#7#7%%=))*E$)D!99;DLLT__IE"^^/GG I
J&&t,D!OO224"D((;;t'8'8$..I9=DNN4::6#zzR/)-%)%9%9 %499-59tzz2::+%)F!%!5!5!59tzz2::+%)F!11Q6!'"(%% OO224*D{{59tzz2::+%)F	*
!
ON
IIsIc,t||tSr-rrBs  rrzDocument.getElementsByTagNames.tT8:FFrc.t|||tSr-rrEs   rrzDocument.getElementsByTagNameNS
rrc:|jj||Sr-)rnrorps   rrszDocument.isSupporteds""--gw??rc|jtjk(rtjjd|jtjk(rtjjdt|||S)Nzcannot import document nodesz!cannot import document type nodes)r$rr%rCrDNotSupportedErrrRri)rrUrks   r
importNodezDocument.importNodesa==D...''))*HII
]]d55
5''))*MNN4t,,rcg}|r|jd|d||jd|rdndd|jddj|d||jD]}|j	||||y)	Nz
encoding="rzstandalone="yesnoz<?xml version="1.0" rdr)rcrrr/r&)	rr+r)rr*rrdeclarationsrUs	         rr&zDocument.writexmls*XJa 89!,
u.MQ OP+CHH\,B+C2dVLMOO	;DMM&&)T:	;rc|j|ur/tjjd|d|j|jt
jt
jfvrtjjd|tk7rd|vrV|jdd\}}|dk(r|tjjk7rtjjd|dk(rY|tjjk7r<|jt
jk(rtjjdd}|}nd}d}|jt
jk(r,|j}| |j}|j|nd}||_||_||_||_|jt
jk(r	||_|S||_|$|j-|r|j/||S)	Nz3cannot rename nodes from other documents;
expected z,
found z8renameNode() only applies to element and attribute nodesrr>rzillegal use of 'xmlns' prefixz$illegal use of the 'xmlns' attribute)rjrCrDrpr$rrdrrrrrrrrrrrrrrrr|r)rrJrrrrris_ids        r
renameNodezDocument.renameNode(s??$&''**,0!//CD
D
::d//1D1DEE''))JL
L?*d{$(JJsA$6!	'&#''*A*AA''..799go&#''*A*AA**(;(;;''..>@@ 	FI::,,,nnG"++A.G %
::***AIAF"((+..q1r)rrrNN)=rrrrrrdrrrRrBrgrnr%r$rrrrGrQrPrJrrrrrrrrrrrWrrrZrrrr]rIrHrrbrlrrrrrrrrsrrrrrrrsrr&rr
rrr{r{
sE@I**D,L,L**D,C,CE'(N!!HHIJJ$((Ok
NHJGLKO%(# !(, 

*





8tG7@-KO ; 3rr{rz#Top-level element of this document.c
|jj|r%tjjj
}n$tjjj}|jtjk(r|j|j|j}|jjD]j}|j|j|j|j |j#|j|j$}|j&|_l|r|j(D] }t+|||}|j-|"n|jtj.k(rD|j1}|r|j(D] }t+|||}|j-|"n|jtj2k(r|j5|j6}nM|jtj8k(r|j;|j6}n|jtj<k(r(|j?|j@|j6}n|jtjBk(r|jE|j6}n|jtjFk(r@|jI|j|j}d|_|j |_n7|jtjJk(rtjjj}|jLjO|jP|jR|jT}||_|rg|jV_,g|jZ_,|jZjXD]y}	t]|	j|	jR|	jT}
||
_|jZjXj_|
ta|	dsg|	jc||	|
{|jVjXD]}te|j|jR|jT|jf}|jh|_4|jj|_5|jl|_6||_|jVjXj_|ta|ds|jc|||n+tjjodtq|zta|dr|jc||||S)zo
    Clone a node and give it the new owner document.
    Called by Node.cloneNode and Document.importNode
    TrzCannot clone node %s)9rjryrCrDrErF
NODE_IMPORTEDr$rrdrsrrrrrrrrrr/rirIr?rr`rrarrrrrrrrrrRrnrxrr2r3r>rr?rGrcrrrHrIrJrrrrrF)
rUrknewOwnerDocumentrrKrurrgrTrJrLrMrNs
             rririas
$$%56GG++77	GG++99	}}))) 001B1B15@OO**,	)D  !2!2DMM4::N(():):DNNKA..AK	)

%t-=>!!!$
%
$55	5 779
%t-=>!!!$
%
$..	( //		:	
$11	1 33DII>	
$::	: <<T[[=AYYH	
$++	+ ..tyy9	
$--	- 2243D3D37==Bjj	
$11	1GG++99	 //BBIIt}}dmm5."$ENN#%EOO ^^((
F#AJJ

AJJG)9&$$++H5178--iHE
F]]''	
D

AJJ

 !0()(8(8%"#**!"'7$##**62178--iFC	
Dgg%%&<tDz&IJJ
t./$$Ye<LrcT|jdd}t|dk(r|Sd|dfS)Nrr>r)rr)rfieldss  rrrs4

 
 a
(F
6{a
fQi  rc~||i|}|j\}}|j||j|Sr-)getEvent
expandNoder)funcargskwargseventstoktyperootNodes      r_do_pulldom_parsers>
4
"6
"F)GX
h
LLNOrcz||sddlm}|j|Sddlm}t	|j|f||dS)z3Parse a file into a DOM by filename or file object.rexpatbuilderpulldom)parserbufsize)xml.domrparserr)filerrrrs     rrrs?
~g(!!$''# '24	4rct|ddlm}|j|Sddlm}t	|j|fd|iS)z&Parse a file into a DOM from a string.rrrr)rrparseStringrr)stringrrrs    rrrs?
~(''//# !4!4vi"*F!35	5rc|rQt|trtj|}|D]'\}}tj
j
||r'ytj
Sr-)rrr_parse_feature_stringr{rnro)featuresfvs   rgetDOMImplementationrsYh$33H=H	DAq**55a;	"""rrr-)7r[r rrCrrrrxml.dom.minicompatxml.dom.xmlbuilderrr	rDrrdrrMdefpropertyrXrrrrrrobjectr

AttributeListr_rrlrrrrrrrrrrr0r<rHrGrgr}rNr{rirrrrrr
rr<module>rs"
JJ > GGLL55GGLL>>@t377<<tlD,$@AD+$?@D+$HI%t%$y84y8vD&$FGD+$MND,$EFa?6a?FL(68
v(D$L"dL"\G\<>G[79	 &;&;RNItN4ECItECNM8)EFS+=S+jD0./D+@BBmB	34	3<V<|*H8:

::y$:x&9Z&9P8z9d8M+M^(&(T2QtZQf
H'57Od!45#r