3 ÄÌ]([ã@s ddlZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d eƒZGd d „d eƒZGd d „d eƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ Gdd„deƒZ Gdd„deƒZ Gdd„deƒZ Gdd„deƒZGdd„deƒZGdd„deƒZGd d!„d!eƒZGd"d#„d#eƒZGd$d%„d%eƒZGd&d'„d'eƒZGd(d)„d)eƒZGd*d+„d+eƒZGd,d-„d-eƒZGd.d/„d/eƒZGd0d1„d1eƒZGd2d3„d3eƒZGd4d5„d5eƒZGd6d7„d7eƒZGd8d9„d9eƒZGd:d;„d;eƒZGdd?„d?eƒZ Gd@dA„dAeƒZ!GdBdC„dCeƒZ"GdDdE„dEeƒZ#GdFdG„dGeƒZ$GdHdI„dIeƒZ%GdJdK„dKeƒZ&GdLdM„dMeƒZ'GdNdO„dOeƒZ(GdPdQ„dQeƒZ)GdRdS„dSeƒZ*GdTdU„dUeƒZ+GdVdW„dWeƒZ,GdXdY„dYeƒZ-GdZd[„d[eƒZ.Gd\d]„d]eƒZ/Gd^d_„d_eƒZ0Gd`da„daeƒZ1dS)béNc@s0eZdZfZdd„Zejdddddfdd„ZdS)ÚNodecCsdS)z3 A sequence of all children that are Nodes N©)Úselfrrú/usr/lib/python3.6/c_ast.pyÚchildrensz Node.childrenrFNc sd|}|r4|dk r4|j|ˆjjd|dƒn|j|ˆjjdƒˆjr°|r~‡fdd„ˆjDƒ}djd d „|Dƒƒ} n(‡fd d„ˆjDƒ} djd d „| Dƒƒ} |j| ƒ|rÄ|jd ˆjƒ|jdƒx.ˆjƒD]"\} } | j||d|||| d�qØWdS)a� Pretty print the Node and all its attributes and children (recursively) to a buffer. buf: Open IO buffer into which the Node is printed. offset: Initial offset (amount of leading spaces) attrnames: True if you want to see the attribute names in name=value pairs. False to only see the values. nodenames: True if you want to see the actual node names within their parents. showcoord: Do you want the coordinates of each Node to be displayed. ú Nz : z: csg|]}|tˆ|ƒf‘qSr)Úgetattr)Ú.0Ún)rrrú =szNode.show..z, css|]}d|VqdS)z%s=%sNr)r Znvrrrú >szNode.show..csg|]}tˆ|ƒ‘qSr)r)r r )rrrr @scss|]}d|VqdS)z%sNr)r Úvrrrr Asz (at %s)Ú é)ÚoffsetÚ attrnamesÚ nodenamesÚ showcoordÚ _my_node_name)ÚwriteÚ __class__Ú__name__Ú attr_namesÚjoinÚcoordrÚshow) rZbufrrrrrZleadZnvlistZattrstrZvlistZ child_nameÚchildr)rrrs,    z Node.show)rÚ __module__Ú __qualname__Ú __slots__rÚsysÚstdoutrrrrrrsrc@s eZdZdZdd„Zdd„ZdS)Ú NodeVisitora- A base NodeVisitor class for visiting c_ast nodes. Subclass it and define your own visit_XXX methods, where XXX is the class name you want to visit with these methods. For example: class ConstantVisitor(NodeVisitor): def __init__(self): self.values = [] def visit_Constant(self, node): self.values.append(node.value) Creates a list of values of all the constant nodes encountered below the given node. To use it: cv = ConstantVisitor() cv.visit(node) Notes: * generic_visit() will be called for AST nodes for which no visit_XXX method was defined. * The children of nodes for which a visit_XXX was defined will not be visited - if you need this, call generic_visit() on the node. You can use: NodeVisitor.generic_visit(self, node) * Modeled after Python's own AST visiting facilities (the ast module of Python 3.0) cCs"d|jj}t|||jƒ}||ƒS)z Visit a node. Zvisit_)rrrÚ generic_visit)rÚnodeÚmethodZvisitorrrrÚvisitss zNodeVisitor.visitcCs$x|jƒD]\}}|j|ƒq WdS)zy Called if no explicit visitor function exists for a node. Implements preorder visiting of the node. N)rr&)rr$Zc_nameÚcrrrr#zszNodeVisitor.generic_visitN)rrrÚ__doc__r&r#rrrrr"Rs r"c@s&eZdZd Zd dd„Zd d „Zd ZdS)Ú ArrayDeclÚtypeÚdimÚ dim_qualsrÚ __weakref__NcCs||_||_||_||_dS)N)r*r+r,r)rr*r+r,rrrrÚ__init__„szArrayDecl.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr*r+)r*Úappendr+Útuple)rÚnodelistrrrrŠs   zArrayDecl.children)r*r+r,rr-)N)r,)rrrrr.rrrrrrr)‚s r)c@s&eZdZd Zd dd„Zdd „ZfZdS) ÚArrayRefÚnameÚ subscriptrr-NcCs||_||_||_dS)N)r3r4r)rr3r4rrrrr.”szArrayRef.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr3r4)r3r/r4r0)rr1rrrr™s   zArrayRef.children)r3r4rr-)N)rrrrr.rrrrrrr2’s r2c@s&eZdZd Zd dd„Zd d „Zd ZdS)Ú AssignmentÚopÚlvalueÚrvaluerr-NcCs||_||_||_||_dS)N)r6r7r8r)rr6r7r8rrrrr.£szAssignment.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr7r8)r7r/r8r0)rr1rrrr©s   zAssignment.children)r6r7r8rr-)N)r6)rrrrr.rrrrrrr5¡s r5c@s&eZdZd Zd dd„Zd d „Zd ZdS)ÚBinaryOpr6ÚleftÚrightrr-NcCs||_||_||_||_dS)N)r6r:r;r)rr6r:r;rrrrr.³szBinaryOp.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr:r;)r:r/r;r0)rr1rrrr¹s   zBinaryOp.children)r6r:r;rr-)N)r6)rrrrr.rrrrrrr9±s r9c@s&eZdZdZd dd„Zdd„ZfZdS) ÚBreakrr-NcCs ||_dS)N)r)rrrrrr.ÃszBreak.__init__cCsfS)Nr)rrrrrÆszBreak.children)rr-)N)rrrrr.rrrrrrr<Ás r<c@s&eZdZd Zd dd„Zdd „ZfZdS) ÚCaseÚexprÚstmtsrr-NcCs||_||_||_dS)N)r>r?r)rr>r?rrrrr.Ísz Case.__init__cCsTg}|jdk r|jd|jfƒx,t|jp*gƒD]\}}|jd||fƒq.Wt|ƒS)Nr>z stmts[%d])r>r/Ú enumerater?r0)rr1ÚirrrrrÒs  z Case.children)r>r?rr-)N)rrrrr.rrrrrrr=Ës r=c@s&eZdZd Zd dd„Zdd „ZfZdS) ÚCastÚto_typer>rr-NcCs||_||_||_dS)N)rCr>r)rrCr>rrrrr.Ýsz Cast.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)NrCr>)rCr/r>r0)rr1rrrrâs   z Cast.children)rCr>rr-)N)rrrrr.rrrrrrrBÛs rBc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚCompoundÚ block_itemsrr-NcCs||_||_dS)N)rEr)rrErrrrr.ìszCompound.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nzblock_items[%d])r@rEr/r0)rr1rArrrrrðszCompound.children)rErr-)N)rrrrr.rrrrrrrDês rDc@s&eZdZd Zd dd„Zdd „ZfZdS) ÚCompoundLiteralr*Úinitrr-NcCs||_||_||_dS)N)r*rGr)rr*rGrrrrr.úszCompoundLiteral.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr*rG)r*r/rGr0)rr1rrrrÿs   zCompoundLiteral.children)r*rGrr-)N)rrrrr.rrrrrrrFøs rFc@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚConstantr*Úvaluerr-NcCs||_||_||_dS)N)r*rIr)rr*rIrrrrr. szConstant.__init__cCs g}t|ƒS)N)r0)rr1rrrrszConstant.children)r*rIrr-)N)r*rI)rrrrr.rrrrrrrHs rHc@s&eZdZdZd dd„Zdd„ZfZdS) ÚContinuerr-NcCs ||_dS)N)r)rrrrrr.szContinue.__init__cCsfS)Nr)rrrrrszContinue.children)rr-)N)rrrrr.rrrrrrrJs rJc @s&eZdZdZdd d „Zd d„ZdZd S)ÚDeclr3ÚqualsÚstorageÚfuncspecr*rGÚbitsizerr-Nc Cs4||_||_||_||_||_||_||_||_dS)N)r3rLrMrNr*rGrOr) rr3rLrMrNr*rGrOrrrrr. sz Decl.__init__cCsZg}|jdk r|jd|jfƒ|jdk r8|jd|jfƒ|jdk rR|jd|jfƒt|ƒS)Nr*rGrO)r*r/rGrOr0)rr1rrrr*s   z Decl.children) r3rLrMrNr*rGrOrr-)N)r3rLrMrN)rrrrr.rrrrrrrKs rKc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚDeclListÚdeclsrr-NcCs||_||_dS)N)rQr)rrQrrrrr.5szDeclList.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz decls[%d])r@rQr/r0)rr1rArrrrr9szDeclList.children)rQrr-)N)rrrrr.rrrrrrrP3s rPc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚDefaultr?rr-NcCs||_||_dS)N)r?r)rr?rrrrr.CszDefault.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz stmts[%d])r@r?r/r0)rr1rArrrrrGszDefault.children)r?rr-)N)rrrrr.rrrrrrrRAs rRc@s&eZdZd Zd dd„Zdd „ZfZdS) ÚDoWhileÚcondÚstmtrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.QszDoWhile.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)NrTrU)rTr/rUr0)rr1rrrrVs   zDoWhile.children)rTrUrr-)N)rrrrr.rrrrrrrSOs rSc@s&eZdZdZd dd„Zdd„ZfZdS) Ú EllipsisParamrr-NcCs ||_dS)N)r)rrrrrr.`szEllipsisParam.__init__cCsfS)Nr)rrrrrcszEllipsisParam.children)rr-)N)rrrrr.rrrrrrrV^s rVc@s&eZdZdZd dd„Zdd„ZfZdS) ÚEmptyStatementrr-NcCs ||_dS)N)r)rrrrrr.jszEmptyStatement.__init__cCsfS)Nr)rrrrrmszEmptyStatement.children)rr-)N)rrrrr.rrrrrrrWhs rWc@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚEnumr3Úvaluesrr-NcCs||_||_||_dS)N)r3rYr)rr3rYrrrrr.tsz Enum.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)NrY)rYr/r0)rr1rrrrys z Enum.children)r3rYrr-)N)r3)rrrrr.rrrrrrrXrs rXc@s&eZdZd Zd dd„Zdd „Zd ZdS) Ú Enumeratorr3rIrr-NcCs||_||_||_dS)N)r3rIr)rr3rIrrrrr.‚szEnumerator.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)NrI)rIr/r0)rr1rrrr‡s zEnumerator.children)r3rIrr-)N)r3)rrrrr.rrrrrrrZ€s rZc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚEnumeratorListÚ enumeratorsrr-NcCs||_||_dS)N)r\r)rr\rrrrr.�szEnumeratorList.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nzenumerators[%d])r@r\r/r0)rr1rArrrrr”szEnumeratorList.children)r\rr-)N)rrrrr.rrrrrrr[Žs r[c@s&eZdZd Zd dd„Zdd„ZfZdS) ÚExprListÚexprsrr-NcCs||_||_dS)N)r^r)rr^rrrrr.žszExprList.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz exprs[%d])r@r^r/r0)rr1rArrrrr¢szExprList.children)r^rr-)N)rrrrr.rrrrrrr]œs r]c@s&eZdZd Zd dd„Zdd„ZfZdS) ÚFileASTÚextrr-NcCs||_||_dS)N)r`r)rr`rrrrr.¬szFileAST.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nzext[%d])r@r`r/r0)rr1rArrrrr°szFileAST.children)r`rr-)N)rrrrr.rrrrrrr_ªs r_c@s&eZdZd Zd dd „Zd d „ZfZdS)ÚForrGrTÚnextrUrr-NcCs"||_||_||_||_||_dS)N)rGrTrbrUr)rrGrTrbrUrrrrr.ºs z For.__init__cCstg}|jdk r|jd|jfƒ|jdk r8|jd|jfƒ|jdk rR|jd|jfƒ|jdk rl|jd|jfƒt|ƒS)NrGrTrbrU)rGr/rTrbrUr0)rr1rrrrÁs    z For.children)rGrTrbrUrr-)N)rrrrr.rrrrrrra¸s rac@s&eZdZd Zd dd„Zdd „ZfZdS) ÚFuncCallr3Úargsrr-NcCs||_||_||_dS)N)r3rdr)rr3rdrrrrr.ÍszFuncCall.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr3rd)r3r/rdr0)rr1rrrrÒs   zFuncCall.children)r3rdrr-)N)rrrrr.rrrrrrrcËs rcc@s&eZdZd Zd dd„Zdd „ZfZdS) ÚFuncDeclrdr*rr-NcCs||_||_||_dS)N)rdr*r)rrdr*rrrrr.ÜszFuncDecl.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nrdr*)rdr/r*r0)rr1rrrrás   zFuncDecl.children)rdr*rr-)N)rrrrr.rrrrrrreÚs rec@s&eZdZd Zd dd„Zd d „ZfZdS) ÚFuncDefÚdeclÚ param_declsÚbodyrr-NcCs||_||_||_||_dS)N)rgrhrir)rrgrhrirrrrr.ëszFuncDef.__init__cCsng}|jdk r|jd|jfƒ|jdk r8|jd|jfƒx,t|jpDgƒD]\}}|jd||fƒqHWt|ƒS)Nrgrizparam_decls[%d])rgr/rir@rhr0)rr1rArrrrrñs  zFuncDef.children)rgrhrirr-)N)rrrrr.rrrrrrrfés rfc@s&eZdZd Zd dd„Zdd„Zd ZdS) ÚGotor3rr-NcCs||_||_dS)N)r3r)rr3rrrrr.ýsz Goto.__init__cCs g}t|ƒS)N)r0)rr1rrrrsz Goto.children)r3rr-)N)r3)rrrrr.rrrrrrrjûs rjc@s&eZdZd Zd dd„Zdd„Zd ZdS) ÚIDr3rr-NcCs||_||_dS)N)r3r)rr3rrrrr. sz ID.__init__cCs g}t|ƒS)N)r0)rr1rrrr sz ID.children)r3rr-)N)r3)rrrrr.rrrrrrrks rkc@s&eZdZd Zd dd„Zdd„Zd ZdS) ÚIdentifierTypeÚnamesrr-NcCs||_||_dS)N)rmr)rrmrrrrr.szIdentifierType.__init__cCs g}t|ƒS)N)r0)rr1rrrrszIdentifierType.children)rmrr-)N)rm)rrrrr.rrrrrrrls rlc@s&eZdZd Zd dd„Zd d „ZfZdS) ÚIfrTÚiftrueÚiffalserr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.!sz If.__init__cCsZg}|jdk r|jd|jfƒ|jdk r8|jd|jfƒ|jdk rR|jd|jfƒt|ƒS)NrTrorp)rTr/rorpr0)rr1rrrr's   z If.children)rTrorprr-)N)rrrrr.rrrrrrrns rnc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚInitListr^rr-NcCs||_||_dS)N)r^r)rr^rrrrr.2szInitList.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz exprs[%d])r@r^r/r0)rr1rArrrrr6szInitList.children)r^rr-)N)rrrrr.rrrrrrrq0s rqc@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚLabelr3rUrr-NcCs||_||_||_dS)N)r3rUr)rr3rUrrrrr.@szLabel.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)NrU)rUr/r0)rr1rrrrEs zLabel.children)r3rUrr-)N)r3)rrrrr.rrrrrrrr>s rrc@s&eZdZd Zd dd„Zdd „ZfZdS) ÚNamedInitializerr3r>rr-NcCs||_||_||_dS)N)r3r>r)rr3r>rrrrr.NszNamedInitializer.__init__cCsTg}|jdk r|jd|jfƒx,t|jp*gƒD]\}}|jd||fƒq.Wt|ƒS)Nr>zname[%d])r>r/r@r3r0)rr1rArrrrrSs  zNamedInitializer.children)r3r>rr-)N)rrrrr.rrrrrrrsLs rsc@s&eZdZd Zd dd„Zdd„ZfZdS) Ú ParamListÚparamsrr-NcCs||_||_dS)N)rur)rrurrrrr.^szParamList.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz params[%d])r@rur/r0)rr1rArrrrrbszParamList.children)rurr-)N)rrrrr.rrrrrrrt\s rtc@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚPtrDeclrLr*rr-NcCs||_||_||_dS)N)rLr*r)rrLr*rrrrr.lszPtrDecl.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr*)r*r/r0)rr1rrrrqs zPtrDecl.children)rLr*rr-)N)rL)rrrrr.rrrrrrrvjs rvc@s&eZdZd Zd dd„Zdd„ZfZdS) ÚReturnr>rr-NcCs||_||_dS)N)r>r)rr>rrrrr.zszReturn.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr>)r>r/r0)rr1rrrr~s zReturn.children)r>rr-)N)rrrrr.rrrrrrrwxs rwc@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚStructr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.‡szStruct.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz decls[%d])r@rQr/r0)rr1rArrrrrŒszStruct.children)r3rQrr-)N)r3)rrrrr.rrrrrrrx…s rxc@s&eZdZd Zd dd„Zd d „Zd ZdS)Ú StructRefr3r*Úfieldrr-NcCs||_||_||_||_dS)N)r3r*rzr)rr3r*rzrrrrr.–szStructRef.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)Nr3rz)r3r/rzr0)rr1rrrrœs   zStructRef.children)r3r*rzrr-)N)r*)rrrrr.rrrrrrry”s ryc@s&eZdZd Zd dd„Zdd „ZfZdS) ÚSwitchrTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.¦szSwitch.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)NrTrU)rTr/rUr0)rr1rrrr«s   zSwitch.children)rTrUrr-)N)rrrrr.rrrrrrr{¤s r{c@s&eZdZd Zd dd„Zd d „ZfZdS) Ú TernaryOprTrorprr-NcCs||_||_||_||_dS)N)rTrorpr)rrTrorprrrrr.µszTernaryOp.__init__cCsZg}|jdk r|jd|jfƒ|jdk r8|jd|jfƒ|jdk rR|jd|jfƒt|ƒS)NrTrorp)rTr/rorpr0)rr1rrrr»s   zTernaryOp.children)rTrorprr-)N)rrrrr.rrrrrrr|³s r|c@s&eZdZd Zd dd„Zd d „Zd ZdS)ÚTypeDeclÚdeclnamerLr*rr-NcCs||_||_||_||_dS)N)r~rLr*r)rr~rLr*rrrrr.ÆszTypeDecl.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr*)r*r/r0)rr1rrrrÌs zTypeDecl.children)r~rLr*rr-)N)r~rL)rrrrr.rrrrrrr}Äs r}c@s&eZdZd Zd dd „Zd d „ZdZdS)ÚTypedefr3rLrMr*rr-NcCs"||_||_||_||_||_dS)N)r3rLrMr*r)rr3rLrMr*rrrrr.Õs zTypedef.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr*)r*r/r0)rr1rrrrÜs zTypedef.children)r3rLrMr*rr-)N)r3rLrM)rrrrr.rrrrrrrÓs rc@s&eZdZd Zd dd„Zd d „Zd ZdS)ÚTypenamer3rLr*rr-NcCs||_||_||_||_dS)N)r3rLr*r)rr3rLr*rrrrr.åszTypename.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr*)r*r/r0)rr1rrrrës zTypename.children)r3rLr*rr-)N)r3rL)rrrrr.rrrrrrr€ãs r€c@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚUnaryOpr6r>rr-NcCs||_||_||_dS)N)r6r>r)rr6r>rrrrr.ôszUnaryOp.__init__cCs&g}|jdk r|jd|jfƒt|ƒS)Nr>)r>r/r0)rr1rrrrùs zUnaryOp.children)r6r>rr-)N)r6)rrrrr.rrrrrrr�òs r�c@s&eZdZd Zd dd„Zdd „Zd ZdS) ÚUnionr3rQrr-NcCs||_||_||_dS)N)r3rQr)rr3rQrrrrr.szUnion.__init__cCs:g}x,t|jpgƒD]\}}|jd||fƒqWt|ƒS)Nz decls[%d])r@rQr/r0)rr1rArrrrrszUnion.children)r3rQrr-)N)r3)rrrrr.rrrrrrr‚s r‚c@s&eZdZd Zd dd„Zdd „ZfZdS) ÚWhilerTrUrr-NcCs||_||_||_dS)N)rTrUr)rrTrUrrrrr.szWhile.__init__cCs@g}|jdk r|jd|jfƒ|jdk r8|jd|jfƒt|ƒS)NrTrU)rTr/rUr0)rr1rrrrs   zWhile.children)rTrUrr-)N)rrrrr.rrrrrrrƒs rƒ)2r Úobjectrr"r)r2r5r9r<r=rBrDrFrHrJrKrPrRrSrVrWrXrZr[r]r_rarcrerfrjrkrlrnrqrrrsrtrvrwrxryr{r|r}rr€r�r‚rƒrrrrÚs`<0