Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 À¡­hõµã@säddlZddlZddlZddlZddlZddlZejddkrXeZe Z e Z e ZejjZn6Gdd„dƒZddlm Z m Z Gdd„dejƒZeƒZday ddlZWnek r¶d aYnXd ayddlZeejd ƒrÖdaWnek rìYnXeed ƒ�rejZneZd d „Zdadd„Zdd„Z dd„Z!dd„Z"dd„Z#dd„Z$dd„Z%dd„Z&Gdd „d eƒZ'Gd!d"„d"eƒZ(d#d$„Z)d%d&„Z*d'd(„Z+Gd)d*„d*eƒZ,d+d,„Z-d-d.„Z.Gd/d0„d0eƒZ/Gd1d2„d2eƒZ0Gd3d4„d4e0ƒZ1Gd5d6„d6e0ƒZ2Gd7d8„d8eƒZ3Gd9d:„d:eƒZ4Gd;d<„d„d>eƒZ6Gd?d@„d@eƒZ7GdAdB„dBeƒZ8GdCdD„dDeƒZ9GdEdF„dFeƒZ:GdGdH„dHeƒZ;dIdJ„ZdOdP„Z?GdQdR„dReƒZ@GdSdT„dTeƒZAGdUdV„dVeƒZBGdWdX„dXeƒZCGdYdZ„dZeƒZDGd[d\„d\eƒZEd]d^„ZFGd_d`„d`eƒZGGdadb„dbeƒZHGdcdd„ddeƒZIGdedf„dfeƒZJGdgdh„dheƒZKGdidj„djeƒZLGdkdl„dleƒZMGdmdn„dneƒZNdodp„ZOGdqdr„dreNƒZPGdsdt„dteNƒZQGdudv„dveNƒZRGdwdx„dxeNƒZSGdydz„dzeƒZTGd{d|„d|eƒZUGd}d~„d~eƒZVGdd€„d€eƒZWGd�d‚„d‚eƒZXGdƒd„„d„eƒZYGd…d†„d†eƒZZGd‡dˆ„dˆeƒZ[Gd‰dŠ„dŠeƒZ\Gd‹dŒ„dŒeƒZ]Gd�dŽ„dŽeƒZ^Gd�d�„d�eƒZ_Gd‘d’„d’eƒZ`Gd“d”„d”eƒZadd•d–d—d˜d™dšd›dœd�dždŸd g Zbd¡d¢d£d¤d¥d¦d§d¡gZcGd¨d©„d©eƒZdGdªd«„d«eƒZeGd¬d­„d­eƒZfGd®d¯„d¯eƒZgGd°d±„d±eƒZhGd²d³„d³eƒZiGd´dµ„dµeƒZjGd¶d·„d·eƒZkGd¸d¹„d¹eƒZlGdºd»„d»eƒZmdanGd¼d½„d½eƒZod¾d¿„ZpGdÀdÁ„dÁeƒZqdÊdÂdÄZrdÄdÅ„ZsdÆdÇ„ZtdÈdÉ„ZueuƒdS)ËéNéc@seZdZdZdd„ZdS)ÚIteratora:Compatibility mixin for iterators Instead of writing next() methods for iterators, write __next__() methods and use this mixin to make them work in Python 2 as well as Python 3. Idea stolen from the "six" documentation: cCs|jƒS)N)Ú__next__)Úself©rú0/usr/share/gcc-8/python/libstdcxx/v6/printers.pyÚnext?sz Iterator.nextN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrr4s r)ÚimapÚizipc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚUTCz5Concrete tzinfo class representing the UTC time zone.cCs tjdƒS)Nr)ÚdatetimeÚ timedelta)rÚdtrrrÚ utcoffsetIsz UTC.utcoffsetcCsdS)Nrr)rrrrrÚtznameLsz UTC.tznamecCs tjdƒS)Nr)rr)rrrrrÚdstOszUTC.dstN)r r r r rrrrrrrrFsrTFZ TypePrinterÚ ValuePrinterc Csz|jƒ}xld|j|f}y tj|ƒStk r6YnX|jƒ}t|ƒr^|djr^|dj}q t dt |ƒ|fƒ‚q WdS)Nz%s::%srzCannot find type %s::%s) Ústrip_typedefsÚtagÚgdbÚ lookup_typeÚ RuntimeErrorÚfieldsÚlenÚ is_base_classÚtypeÚ ValueErrorÚstr)ZorigÚnameÚtypÚsearchrrrrÚ find_typens  r%z__8::cGs�dj|djdd„|Dƒƒƒ}y tj|ƒStjk rŠ}zFt|krv|jddtdƒ}y tj|ƒStjk rtYnX|‚WYdd}~XnXdS)z8 Lookup template specialization templ. z{}<{}>z, cSsg|] }t|ƒ‘qSr)r!)Ú.0Úarrrú ˆsz%lookup_templ_spec..z::éN)ÚformatÚjoinrrÚerrorÚ_versioned_namespaceÚreplace)ZtemplÚargsÚtÚerrrÚlookup_templ_spec„s  r2cCs¬d|krd|}yt|dƒ}Wn|jdƒ}YnX|jƒ}y t||ƒStjk r¦t|dƒr¢t|dddƒr¢|jdd d ƒ}y t||ƒStjk r YnXd SXd S) a» Lookup specialization of template nodename corresponding to containertype. nodename - The name of a class template, as a String containertype - The container, as a gdb.Type Return a gdb.Type for the corresponding specialization of nodename, or None if the type cannot be found. e.g. lookup_node_type('_List_node', gdb.lookup_type('std::list')) will return a gdb.Type for the type std::_List_node. z::zstd::Ú value_typerZstdzstd::__cxx1998z std::__debugZ __gnu_debugz ::__cxx1998::r)N)r%Útemplate_argumentrr2rr,Úis_member_of_namespacer.)ÚnodenameZ containertypeÚvaltyperrrÚlookup_node_type™s&   r8cGs@t|tjƒrt|ƒ}t|ƒ}x|D]}|j|dƒr"dSq"WdS)z� Test whether a type is a member of one of the specified namespaces. The type can be specified as a string or a gdb.Type object. z::TF)Ú isinstancerÚTyper!Ústrip_versioned_namespaceÚ startswith)r#Z namespacesÚ namespacerrrr5¾s  r5cCs2t|tjƒr|j}dt|f}tjd||ƒdk S)zø Test whether a type is a specialization of the named class template. The type can be specified as a string or a gdb.Type object. The template should be the name of a class template as a string, without any 'std' qualification. z(%s)?%sz ^std::%s<.*>$N)r9rr:rr-ÚreÚmatch)ÚxÚ template_namerrrÚis_specialization_ofÌs  rBcCs |jtdƒS)NÚ)r.r-)Útypenamerrrr;Úsr;cCs<d}d}tjddkr&tj|||dƒStj|||dd�SdS)zCRemove "fundamentals_vN" inline namespace from qualified type name.z&^std::experimental::fundamentals_v\d::zstd::experimental::rrr))ÚcountN)ÚsysÚ version_infor>Úsub)r#ÚpatternÚreplrrrÚstrip_fundts_namespaceßs rKcCsVt|ƒ}|jddƒ}d}x d D]}|j||d|ƒ}qW|d}|j|d|ƒ}|S) zARemove known inline namespaces from the canonical name of a type.zstd::__cxx11::zstd::zstd::experimental::Úfundamentals_v1Úfundamentals_v2z::z filesystem::zv1::)rLrM)r;r.)Útype_strZexpt_nsZlfts_nsZfs_nsrrrÚstrip_inline_namespacesés  rOc Cs:d}g}x,y|j|j|ƒƒWn |S|d7}q WdS)z-Return a type's template arguments as a list.rr)N)Úappendr4)Útype_objÚnÚ template_argsrrrÚget_template_arg_listõsrTc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚSmartPtrIteratorz@An iterator for smart pointer types with a single 'child' value.cCs ||_dS)N)Ú_val)rÚvalrrrÚ__init__szSmartPtrIterator.__init__cCs|S)Nr)rrrrÚ__iter__szSmartPtrIterator.__iter__cCs$|jdkrt‚d|j|_}d|fS)Nzget())rVÚ StopIteration)rrWrrrr s zSmartPtrIterator.__next__N)r r r r rXrYrrrrrrUsrUc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚSharedPointerPrinterzP Print a shared_ptr, weak_ptr, atomic, or atomic. cCst|ƒ|_||_|d|_dS)NÚ_M_ptr)r;Ú _typenamerVÚ_pointer)rrDrWrrrrXs zSharedPointerPrinter.__init__cCs t|jƒS)N)rUr^)rrrrÚchildrenszSharedPointerPrinter.childrencCsR|jdkrD|jddd}||d}t|jdjdƒ}|j|ƒS|jddS)Nz std::atomicZ _M_refcountZ_M_valÚ_M_irÚpointerZ_M_pi)r]rVr%rÚcast)rZptr_valZptr_typerrrÚ_get_refcountss    z#SharedPointerPrinter._get_refcountscCspd}|jƒ}|jjjdƒ}tt|ƒƒ}|dkr`|d}|d}|dkrPd|}nd||df}d|j||fS) NÚemptyrZ _M_use_countZ _M_weak_countzexpired, weak count %dzuse count %d, weak count %dr)z %s<%s> (%s))rcrVrr4r;r!r])rÚstateZ refcountsÚtargZusecountZ weakcountrrrÚ to_string(s  zSharedPointerPrinter.to_stringN)r r r r rXr_rcrgrrrrr[s  r[cCs¤|jjƒ}|djs&tdt|jƒƒ‚|j|djƒ}|jjƒ}t|ƒdkr^tdt|jƒƒ‚|djdkrt|dS|djrŽ|j|djƒStdt|jƒƒ‚dS)zBReturn the tuple element stored in a _Tuple_impl base class.r)z-Unsupported implementation for std::tuple: %srÚ _M_head_implNéÿÿÿÿri)rrrr r!rbrr")rWÚbasesZ head_baserrrrÚ_tuple_impl_get9s     rkcCshtt|jƒƒ}||krtdƒ‚|j|jjƒdjƒ}x*|dkr^|j|jjƒdjƒ}|d8}q6Wt|ƒS)z6Return the result of std::get(val) on a std::tuple.z0Out of range index for std::get on std::tuplerr))rrTrr rbrrk)rRrWZ tuple_sizeÚnoderrrÚ tuple_getQs  rmcCsd|jjƒdjjƒ}t|dƒs(t|dƒr6|dd}n$t|dƒrJ|d}ntdt|ƒƒ‚td|ƒS)z4Return the result of val.get() on a std::unique_ptr.rZ__uniq_ptr_dataZ__uniq_ptr_implÚ_M_tÚtuplez-Unsupported implementation for unique_ptr: %s)rrrrBr r!rm)rWZ impl_typeZ tuple_memberrrrÚunique_ptr_get_s    rpc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚUniquePointerPrinterzPrint a unique_ptr.cCs ||_dS)N)rV)rrDrWrrrrXtszUniquePointerPrinter.__init__cCstt|jƒƒS)N)rUrprV)rrrrr_wszUniquePointerPrinter.childrencCs|jjjdƒ}djt|ƒƒS)Nrzstd::unique_ptr<{}>)rVrr4r*r!)rr0rrrrgzszUniquePointerPrinter.to_stringN)r r r r rXr_rgrrrrrqqsrqcCs|djj|jƒƒjƒS)z7Return the value held in a __gnu_cxx::__aligned_membuf.Ú _M_storage)ÚaddressrbraÚ dereference)Zbufr7rrrÚget_value_from_aligned_membufsruc CsjyF|jjƒdj}|dkr"|dS|dkrD|jjdƒ}t|d|ƒSWn YnXtdt|jƒƒ‚dS)z-Return the value held in an _List_node<_Val>.r)Ú_M_datarrrz!Unsupported implementation for %sN)rrr"r4rur r!)rlÚmemberr7rrrÚget_value_from_list_node„s rxc@s8eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd S) ÚStdListPrinterzPrint a std::list.c@s$eZdZdd„Zdd„Zdd„ZdS)zStdListPrinter._iteratorcCs"||_|d|_|j|_d|_dS)NÚ_M_nextr)Ú _nodetypeÚ_basersÚ_headÚ_count)rÚnodetypeÚheadrrrrX˜s z!StdListPrinter._iterator.__init__cCs|S)Nr)rrrrrYžsz!StdListPrinter._iterator.__iter__cCsR|j|jkrt‚|jj|jƒjƒ}|d|_|j}|jd|_t|ƒ}d||fS)Nrzr)z[%d])r|r}rZrbr{rtr~rx)rÚeltrErWrrrr¡s   z!StdListPrinter._iterator.__next__N)r r r rXrYrrrrrÚ _iterator—sr‚cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX«s zStdListPrinter.__init__cCs(td|jjƒjƒ}|j||jddƒS)NÚ _List_nodeÚ_M_implÚ_M_node)r8rVrrar‚)rrrrrr_¯szStdListPrinter.childrencCs0|jdd}|d|jkr&d|jSd|jS)Nr„r…rzzempty %sz%s)rVrsr])rZheadnoderrrrg³s zStdListPrinter.to_stringN) r r r r rr‚rXr_rgrrrrry”s ryc@seZdZdd„Zdd„ZdS)ÚNodeIteratorPrintercCs$||_||_||_t||jƒ|_dS)N)rVr]Ú _contnamer8rr{)rrDrWZcontnamer6rrrrX»szNodeIteratorPrinter.__init__cCs:|jdsd|jS|jdj|jjƒƒjƒ}tt|ƒƒS)Nr…z(non-dereferenceable iterator for std::%s)rVr‡rbr{rartr!rx)rrlrrrrgÁs    zNodeIteratorPrinter.to_stringN)r r r rXrgrrrrr†ºsr†c@seZdZdZdd„ZdS)ÚStdListIteratorPrinterzPrint std::list::iterator.cCstj|||ddƒdS)NÚlistrƒ)r†rX)rrDrWrrrrXÌszStdListIteratorPrinter.__init__N)r r r r rXrrrrrˆÉsrˆc@seZdZdZdd„ZdS)ÚStdFwdListIteratorPrinterz"Print std::forward_list::iterator.cCstj|||ddƒdS)NÚ forward_listÚ_Fwd_list_node)r†rX)rrDrWrrrrXÓs z"StdFwdListIteratorPrinter.__init__N)r r r r rXrrrrrŠÐsrŠc@s8eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd S) ÚStdSlistPrinterzPrint a __gnu_cxx::slist.c@s$eZdZdd„Zdd„Zdd„ZdS)zStdSlistPrinter._iteratorcCs||_|dd|_d|_dS)NÚ_M_headrzr)r{r|r~)rrr€rrrrXÜsz"StdSlistPrinter._iterator.__init__cCs|S)Nr)rrrrrYász"StdSlistPrinter._iterator.__iter__cCsL|jdkrt‚|jj|jƒjƒ}|d|_|j}|jd|_d||dfS)Nrrzr)z[%d]rv)r|rZrbr{rtr~)rr�rErrrräs   z"StdSlistPrinter._iterator.__next__N)r r r rXrYrrrrrr‚Ûsr‚cCs ||_dS)N)rV)rrDrWrrrrXíszStdSlistPrinter.__init__cCs td|jjƒ}|j|jƒ|jƒS)Nz__gnu_cxx::_Slist_node)r8rVrr‚ra)rrrrrr_ðszStdSlistPrinter.childrencCs|jdddkrdSdS)NrŽrzrzempty __gnu_cxx::slistz__gnu_cxx::slist)rV)rrrrrgôszStdSlistPrinter.to_stringN) r r r r rr‚rXr_rgrrrrr�Øs r�c@s eZdZdZdd„Zdd„ZdS)ÚStdSlistIteratorPrinterz!Print __gnu_cxx::slist::iterator.cCs ||_dS)N)rV)rrDrWrrrrXýsz StdSlistIteratorPrinter.__init__cCs<|jdsdStd|jjƒjƒ}t|jdj|ƒjƒdƒS)Nr…z1non-dereferenceable iterator for __gnu_cxx::slistz__gnu_cxx::_Slist_noderv)rVr8rrar!rbrt)rrrrrrgs  z!StdSlistIteratorPrinter.to_stringN)r r r r rXrgrrrrr�úsr�c@s@eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd d „Z d S) ÚStdVectorPrinterzPrint a std::vector.c@s$eZdZdd„Zdd„Zdd„ZdS)zStdVectorPrinter._iteratorcCs^||_|rH|d|_d|_|d|_|d|_|jjƒj}d|j|_n ||_||_d|_ dS)NÚ_M_prÚ _M_offseté) Ú_bitvecÚ_itemÚ_soÚ_finishÚ_fortrÚsizeofÚ_isizer~)rÚstartÚfinishZbitvecÚityperrrrX s    z#StdVectorPrinter._iterator.__init__cCs|S)Nr)rrrrrYsz#StdVectorPrinter._iterator.__iter__cCs¸|j}|jd|_|jr‚|j|jkr4|j|jkr4t‚t|jjƒd|j>@ƒ}|jd|_|j|j krv|jd|_d|_d||fS|j|jkr’t‚|jjƒ}|jd|_d||fSdS)Nr)rz[%d]) r~r”r•r—r–r˜rZÚboolrtrš)rrEr�rrrrs         z#StdVectorPrinter._iterator.__next__N)r r r rXrYrrrrrr‚ sr‚cCs*t|ƒ|_||_|jjdƒjtjk|_dS)Nr) r;r]rVrr4ÚcoderÚTYPE_CODE_BOOLÚ_is_bool)rrDrWrrrrX0s zStdVectorPrinter.__init__cCs$|j|jdd|jdd|jƒS)Nr„Ú_M_startÚ _M_finish)r‚rVr¡)rrrrr_6s zStdVectorPrinter.childrenc CsÒ|jdd}|jdd}|jdd}|jr®|jddd}|jddd}|jddd}|jƒj}d|j}||||}|||}d|jt|ƒt|ƒfSd |jt||ƒt||ƒfSdS) Nr„r¢r£Z_M_end_of_storager‘r’r“z"%s of length %d, capacity %dz%s of length %d, capacity %d)rVr¡rtrr™r]Úint) rr›rœÚendZfor�ZblÚlengthZcapacityrrrrg;s   zStdVectorPrinter.to_stringcCsdS)NÚarrayr)rrrrÚ display_hintMszStdVectorPrinter.display_hintN) r r r r rr‚rXr_rgr¨rrrrr�s %r�c@s eZdZdZdd„Zdd„ZdS)ÚStdVectorIteratorPrinterzPrint std::vector::iterator.cCs ||_dS)N)rV)rrDrWrrrrXTsz!StdVectorIteratorPrinter.__init__cCs |jdsdSt|jdjƒƒS)NZ _M_currentz,non-dereferenceable iterator for std::vector)rVr!rt)rrrrrgWs z"StdVectorIteratorPrinter.to_stringN)r r r r rXrgrrrrr©Qsr©c@s eZdZdZdd„Zdd„ZdS)ÚStdBitIteratorPrinterz@Print std::vector's _Bit_iterator and _Bit_const_iterator.cCs ||_dS)N)rV)rrDrWrrrrX`szStdBitIteratorPrinter.__init__cCs.|jdsdSt|jdjƒd|jd>@ƒS)Nr‘z2non-dereferenceable iterator for std::vectorr)r’)rVržrt)rrrrrgcs zStdBitIteratorPrinter.to_stringN)r r r r rXrgrrrrrª]srªc@s eZdZdZdd„Zdd„ZdS)ÚStdBitReferencePrinterz#Print std::vector::reference.cCs ||_dS)N)rV)rrDrWrrrrXmszStdBitReferencePrinter.__init__cCs*|jdsdSt|jdjƒ|jd@ƒS)Nr‘z$invalid std::vector::referenceZ_M_mask)rVržrt)rrrrrgps z StdBitReferencePrinter.to_stringN)r r r r rXrgrrrrr«jsr«c@s8eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd S) ÚStdTuplePrinterzPrint a std::tuple.c@s0eZdZedd„ƒZdd„Zdd„Zdd„Zd S) zStdTuplePrinter._iteratorcCsNt|ƒdkr"t|djdƒrBdSn t|ƒdkr2dSt|ƒdkrBdStdƒ‚dS)Nrr)Z __tuple_baseTrFz4Top of tuple tree does not consist of a single node.)rrBrr )ÚnodesrrrÚ_is_nonempty_tuple}s   z,StdTuplePrinter._iterator._is_nonempty_tuplecCs:||_|jjjƒ}|j|ƒr0|jj|djƒ|_d|_dS)Nr)r}rrr®rbr~)rr€r­rrrrX‰s   z"StdTuplePrinter._iterator.__init__cCs|S)Nr)rrrrrY”sz"StdTuplePrinter._iterator.__iter__cCsâ|js t‚|jjjƒ}t|ƒdkr&t‚t|ƒdkr:tdƒ‚t|ƒdkr`|jj|djƒ}d|_n&|jj|djƒ}|jj|djƒ|_|jd|_|jjƒ}t|ƒdks¶|djdkrÈd|jd|fSd|jd|dfSdS)Nrrz/Cannot parse more than 2 nodes in a tuple tree.r)rhz[%d]) r}rZrrrr rbr~r")rr­Úimplrrrrr—s$       z"StdTuplePrinter._iterator.__next__N)r r r Ú staticmethodr®rXrYrrrrrr‚|s  r‚cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXÁs zStdTuplePrinter.__init__cCs |j|jƒS)N)r‚rV)rrrrr_ÅszStdTuplePrinter.childrencCs(t|jjjƒƒdkrd|jSd|jS)Nrzempty %sz %s containing)rrVrrr])rrrrrgÈs zStdTuplePrinter.to_stringN) r r r r rr‚rXr_rgrrrrr¬ys Er¬c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚStdStackOrQueuePrinterz!Print a std::stack or std::queue.cCst|ƒ|_tj|dƒ|_dS)NÚc)r;r]rÚdefault_visualizerÚ _visualizer)rrDrWrrrrXÑs zStdStackOrQueuePrinter.__init__cCs |jjƒS)N)r´r_)rrrrr_ÕszStdStackOrQueuePrinter.childrencCsd|j|jjƒfS)Nz%s wrapping: %s)r]r´rg)rrrrrgØsz StdStackOrQueuePrinter.to_stringcCst|jdƒr|jjƒSdS)Nr¨)Úhasattrr´r¨)rrrrr¨Üs  z#StdStackOrQueuePrinter.display_hintN)r r r r rXr_rgr¨rrrrr±Îs r±c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚRbtreeIteratorzf Turn an RB-tree-based container (std::map, std::set etc.) into a Python iterable object. cCs2|ddd|_|dddd|_d|_dS)Nrnr„Z _M_node_countZ _M_headerÚ_M_leftr)Ú_sizeÚ_noder~)rZrbtreerrrrXèszRbtreeIterator.__init__cCs|S)Nr)rrrrrYíszRbtreeIterator.__iter__cCs t|jƒS)N)r¤r¸)rrrrÚ__len__ðszRbtreeIterator.__len__cCs¼|j|jkrt‚|j}|jd|_|j|jkr¸|j}|jƒdrl|jƒd}xd|jƒdrh|jƒd}qNWnF|jƒd}x$||jƒdkrœ|}|jƒd}qzW|jƒd|kr²|}||_|S)Nr)Z_M_rightr·Z _M_parent)r~r¸rZr¹rt)rÚresultrlÚparentrrrrós$      zRbtreeIterator.__next__N)r r r r rXrYrºrrrrrr¶âs r¶c CsjyF|jjƒdj}|dkr"|dS|dkrD|jjdƒ}t|d|ƒSWn YnXtdt|jƒƒ‚dS)z0Return the value held in an _Rb_tree_node<_Val>.r)Z_M_value_fieldrrrz!Unsupported implementation for %sN)rrr"r4rur r!)rlrwr7rrrÚget_value_from_Rb_tree_node s r½c@s eZdZdZdd„Zdd„ZdS)ÚStdRbtreeIteratorPrinterz2Print std::map::iterator, std::set::iterator, etc.cCs"||_td|jjƒ}|jƒ|_dS)NÚ _Rb_tree_node)rVr8rraÚ _link_type)rrDrWrrrrrX!sz!StdRbtreeIteratorPrinter.__init__cCs0|jdsdS|jdj|jƒjƒ}tt|ƒƒS)Nr…z6non-dereferenceable iterator for associative container)rVrbrÀrtr!r½)rrlrrrrg&s z"StdRbtreeIteratorPrinter.to_stringN)r r r r rXrgrrrrr¾sr¾c@s eZdZdZdd„Zdd„ZdS)ÚStdDebugIteratorPrinterz-Print a debug enabled version of an iterator.cCs ||_dS)N)rV)rrDrWrrrrX0sz StdDebugIteratorPrinter.__init__cCsbtjdƒ}|jjjdƒ}|jj|ƒd}|std|ƒ|_nd|_dS)Nrir)) r;r]rVrr4Z_elttyper™r¤r×)rrDrWÚsizerrrrXãs zStdDequePrinter.__init__cCsx|jdd}|jdd}|d|dd}|d|d}|d|d}|j|||}d |jtt|ƒƒfS) Nr„r¢r£r…r)Ú_M_lastÚ_M_curÚ_M_firstz %s with %s)rVr×r]rÃÚlong)rr›r¥Zdelta_nZdelta_sZdelta_erÚrrrrgíszStdDequePrinter.to_stringcCs@|jdd}|jdd}|j|d|d|d|d|jƒS)Nr„r¢r£r…rÜrÛ)rVrËr×)rr›r¥rrrr_ùszStdDequePrinter.childrencCsdS)Nr§r)rrrrr¨ÿszStdDequePrinter.display_hintN) r r r r rrËrXrgr_r¨rrrrrÓÂs   rÓc@s eZdZdZdd„Zdd„ZdS)ÚStdDequeIteratorPrinterzPrint std::deque::iterator.cCs ||_dS)N)rV)rrDrWrrrrXsz StdDequeIteratorPrinter.__init__cCs |jdsdSt|jdjƒƒS)NrÜz+non-dereferenceable iterator for std::deque)rVr!rt)rrrrrg s z!StdDequeIteratorPrinter.to_stringN)r r r r rXrgrrrrrßsrßc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚStdStringPrinterz'Print a std::basic_string of some kind.cCs||_|jdƒdk|_dS)Nz::__cxx11::basic_stringr)ri)rVÚfindÚ _new_string)rrDrWrrrrXszStdStringPrinter.__init__cCsª|jj}|jtjkr|jƒ}|jdd}|jrL|jd}|j|jjƒƒ}n<|j ƒjƒ}tj t |ƒdƒj ƒ}|j|ƒd}|j ƒd}t|dƒrž|j|d�S|j|d�S) NZ _M_dataplusr‘Z_M_string_lengthz::_Repr)Z _M_lengthÚ lazy_string)r¦)rVrrŸrÚ TYPE_CODE_REFrÐrârbrÚ unqualifiedrr!rartrµrãÚstring)rrÚptrr¦ZrealtypeZreptypeÚheaderrrrrgs      zStdStringPrinter.to_stringcCsdS)Nrær)rrrrr¨-szStdStringPrinter.display_hintN)r r r r rXrgr¨rrrrràsràcCs"|d}|d}|d}|||fS)z'Access the streambuf put area pointers.Z _M_out_begZ _M_out_curZ _M_in_endr)Ú streambufÚpbaseÚpptrÚegptrrrrÚaccess_streambuf_ptrs1sríc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚStdStringBufPrinterzPrint a std::basic_stringbuf.cCs ||_dS)N)rV)rÚ_rWrrrrX<szStdStringBufPrinter.__init__cCsLt|jƒ\}}}|rB| s"||kr2|j||d�S|j||d�S|jdS)N)r¦Z _M_string)rírVræ)rrêrërìrrrrg?s zStdStringBufPrinter.to_stringcCsdS)Nrær)rrrrr¨Isz StdStringBufPrinter.display_hintN)r r r r rXrgr¨rrrrrî9s rîc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚStdStringStreamPrinterz Print a std::basic_stringstream.cCsZ||_||_dd„|jjƒDƒd}tjd|j|ƒjƒtjdƒ|_ |j |djk|_ dS)NcSsg|]}|jr|j‘qSr)rr)r&Úfrrrr(Xsz3StdStringStreamPrinter.__init__..rZ__streamz$__stream->rdbuf()Ú _M_stringbuf) rVr]rrrZset_convenience_variablerbrsÚparse_and_evalÚ _streambufÚ_was_redirected)rrDrWZbasetyperrrrXPs  zStdStringStreamPrinter.__init__cCs$|jrd|j|jjƒfS|jdS)Nz%s redirected to %srò)rõr]rôrtrV)rrrrrg]sz StdStringStreamPrinter.to_stringcCs|jr dSdS)Nræ)rõ)rrrrr¨csz#StdStringStreamPrinter.display_hintN)r r r r rXrgr¨rrrrrðMs rðc@s$eZdZdd„Zdd„Zdd„ZdS)ÚTr1HashtableIteratorcCsj|d|_d|_|d|_t|jdƒjƒ|_d|_x2|j|jkrd|j|j|_|jrVP|jd|_q4WdS)NZ _M_bucketsrZ_M_bucket_countZ_Noder))Ú_bucketsÚ_bucketÚ _bucket_countr%rraÚ _node_typer¹)rÚ hashtablerrrrXjs  zTr1HashtableIterator.__init__cCs|S)Nr)rrrrrYvszTr1HashtableIterator.__iter__cCs„|jdkrt‚|jj|jƒ}|jƒd}|jƒd|_|jdkr€|jd|_x2|j|jkr~|j|j|_|jrpP|jd|_qNW|S)NrZ_M_vrzr))r¹rZrbrúrtrørùr÷)rrlr»rrrrys    zTr1HashtableIterator.__next__N)r r r rXrYrrrrrröis röc@s$eZdZdd„Zdd„Zdd„ZdS)ÚStdHashtableIteratorcCsR|dd|_|jjdƒ}|jjdƒjdƒ}tdt|ƒ|r>dndƒ}|jƒ|_dS) NZ_M_before_beginÚ_M_nxtr)é rzstd::__detail::_Hash_nodeÚtrueZfalse)r¹rr4r2r!rarú)rrûr7ÚcachedZ node_typerrrrXŠs   zStdHashtableIterator.__init__cCs|S)Nr)rrrrrY’szStdHashtableIterator.__iter__cCsR|jdkrt‚|jj|jƒjƒ}|d|_|dj}|j|jjdƒjƒƒ}|jƒS)Nrrýrr) r¹rZrbrúrtrsrr4ra)rr�Úvalptrrrrr•s   zStdHashtableIterator.__next__N)r r r rXrYrrrrrrü‰srüc@s<eZdZdZdd„Zdd„Zdd„Zedd „ƒZd d „Z d S) ÚTr1UnorderedSetPrinterz1Print a std::unordered_set or tr1::unordered_set.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX¢s zTr1UnorderedSetPrinter.__init__cCs|jjdƒr|jS|jdS)Nzstd::tr1Ú_M_h)r]r<rV)rrrrÚ _hashtable¦s z!Tr1UnorderedSetPrinter._hashtablecCs|jƒd}d|jt|ƒfS)NÚ_M_element_countz %s with %s)rr]rÃ)rrErrrrg«s z Tr1UnorderedSetPrinter.to_stringcCsd|S)Nz[%d]r)ÚirrrÚ _format_count¯sz$Tr1UnorderedSetPrinter._format_countcCs@t|jtjƒƒ}|jjdƒr.t|t|jƒƒƒSt|t |jƒƒƒS)Nzstd::tr1) r rÚ itertoolsrEr]r<rrörrü)rÚcounterrrrr_³s zTr1UnorderedSetPrinter.childrenN) r r r r rXrrgr°rr_rrrrrŸs  rc@s\eZdZdZdd„Zdd„Zdd„Zedd „ƒZed d „ƒZ ed d „ƒZ dd„Z dd„Z dS)ÚTr1UnorderedMapPrinterz1Print a std::unordered_map or tr1::unordered_map.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX½s zTr1UnorderedMapPrinter.__init__cCs|jjdƒr|jS|jdS)Nzstd::tr1r)r]r<rV)rrrrrÁs z!Tr1UnorderedMapPrinter._hashtablecCs|jƒd}d|jt|ƒfS)Nrz %s with %s)rr]rÃ)rrErrrrgÆs z Tr1UnorderedMapPrinter.to_stringccs&x |D]}x|D] }|VqWqWdS)Nr)r‰r�rrrrÚ_flattenÊs  zTr1UnorderedMapPrinter._flattencCs|d|dfS)NrÈrÉr)r�rrrÚ _format_oneÐsz"Tr1UnorderedMapPrinter._format_onecCsd|S)Nz[%d]r)rrrrrÔsz$Tr1UnorderedMapPrinter._format_countcCsdt|jtjƒƒ}|jjdƒr@|jt|jt|j ƒƒƒƒ}t ||ƒS|jt|jt |j ƒƒƒƒ}t ||ƒS)Nzstd::tr1) r rrrEr]r<r r rörrrü)rr Údatarrrr_Øs  zTr1UnorderedMapPrinter.childrencCsdS)NrÌr)rrrrr¨åsz#Tr1UnorderedMapPrinter.display_hintN) r r r r rXrrgr°r r rr_r¨rrrrr ºs    r c@s8eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd S) ÚStdForwardListPrinterzPrint a std::forward_list.c@s$eZdZdd„Zdd„Zdd„ZdS)zStdForwardListPrinter._iteratorcCs||_|d|_d|_dS)Nrzr)r{r|r~)rrr€rrrrXís z(StdForwardListPrinter._iterator.__init__cCs|S)Nr)rrrrrYòsz(StdForwardListPrinter._iterator.__iter__cCsl|jdkrt‚|jj|jƒjƒ}|d|_|j}|jd|_|dj}|j|jjdƒj ƒƒ}d||jƒfS)Nrrzr)rrz[%d]) r|rZrbr{rtr~rsrr4ra)rr�rErrrrrõs    z(StdForwardListPrinter._iterator.__next__N)r r r rXrYrrrrrr‚ìsr‚cCs||_t|ƒ|_dS)N)rVr;r])rrDrWrrrrXszStdForwardListPrinter.__init__cCs(td|jjƒjƒ}|j||jddƒS)NrŒr„rŽ)r8rVrrar‚)rrrrrr_szStdForwardListPrinter.childrencCs*|jddddkr d|jSd|jS)Nr„rŽrzrzempty %sz%s)rVr])rrrrrgs zStdForwardListPrinter.to_stringN) r r r r rr‚rXr_rgrrrrrés rc@sBeZdZdZd dd„Zdd„ZGdd„deƒZd d „Zd d „Z dS)ÚSingleObjContainerPrinterz8Base class for printers of containers of single objects.NcCs||_||_||_dS)N)Ú_contained_valuer´Ú_hint)rrWZvizZhintrrrrXsz"SingleObjContainerPrinter.__init__cCs(ts t|ƒStjjtjjƒ|ƒp&t|ƒS)z5Return type as a string after applying type printers.)Ú_use_type_printingr!rÚtypesÚapply_type_recognizersÚget_type_recognizers)rrrrrÚ _recognizesz$SingleObjContainerPrinter._recognizec@s$eZdZdd„Zdd„Zdd„ZdS)z$SingleObjContainerPrinter._containedcCs ||_dS)N)rV)rrWrrrrXsz-SingleObjContainerPrinter._contained.__init__cCs|S)Nr)rrrrrY"sz-SingleObjContainerPrinter._contained.__iter__cCs"|jdkrt‚|j}d|_d|fS)Nz[contained value])rVrZ)rZretvalrrrr%s  z-SingleObjContainerPrinter._contained.__next__N)r r r rXrYrrrrrÚ _containedsrcCs6|jdkr|jdƒSt|jdƒr*|jjƒS|j|jƒS)Nr_)rrrµr´r_)rrrrr_,s     z"SingleObjContainerPrinter.childrencCs(t|jdƒr"t|jdƒr"|jjƒS|jS)Nr_r¨)rµr´r¨r)rrrrr¨3s   z&SingleObjContainerPrinter.display_hint)N) r r r r rXrrrr_r¨rrrrrs  rc CsH|jƒj}tjddkr"t|ƒ}nt|ƒ}ytj|ƒjj SdSdS)z{Find the name of the function referred to by the gdb.Value f, which should contain a function pointer from the program.rrN) rtrsrFrGrÞr¤rZ block_for_pcÚfunctionr")rñrrrÚfunction_pointer_to_name;s  rcs4eZdZdZ‡fdd„Zdd„Zedd„ƒZ‡ZS)ÚStdExpAnyPrinterz+Print a std::any or std::experimental::any.c sœt|ƒ|_t|jƒ|_||_d|_d}d}|jd}|dk�r†t|ƒ}|sXtd|jƒ‚dj|ƒ}tj ||ƒ}|s€td|jƒ‚|j dƒ} d| k�r g} xPt j ƒD]D} y(tj d| |j dƒƒ} | jtj| ƒƒWq¢tjk räYq¢Xq¢Wt| ƒdk�rtd ƒ‚| d} n tj| ƒ} | jdƒ|_d}d | k�r@|jd d j}n(d | k�rZ|jd d}ntd|jƒ‚|j|jjƒƒjƒ}tj|ƒ}tt |ƒj||ƒdS)NZ _M_managerrzInvalid function pointer in %szi({0}::_Manager_\w+<.*>)::_S_manage\((enum )?{0}::_Op, (const {0}|{0} const) ?\*, (union )?{0}::_Arg ?\*\)zUnknown manager function in %sr)z std::stringzstd::string(?!\w)z;Cannot uniquely determine std::string type used in std::anyz::_Manager_internalrrZ _M_bufferz::_Manager_externalr\)r;r]rKrVÚ_contained_typerr r*r>r?ÚgrouprÚ _string_typesrHrPrrr,rr4rsrbrartr³ÚsuperrX)rrDrWÚcontained_valueÚ visualizerZmgrÚfuncZrxÚmZmgrnameZmgrtypesÚsr@Zmgrtyper)Ú __class__rrrXVsX                 zStdExpAnyPrinter.__init__cCsT|jdkrd|jSd|j}t|jdƒr8||jjƒS|j|jƒ}|tt|ƒƒS)Nz%s [no contained value]z%s containing r_)rr]rµr´rgrr;r!)rÚdescr7rrrrgšs     zStdExpAnyPrinter.to_stringcs@ttjdƒjƒƒh}d‰dddtg}|‡fdd„|DƒO}|S)Nz std::stringzAbasic_string, std::allocator >zstd::zstd::__cxx11::csh|] }|ˆ’qSrr)r&Úq)r#rrú ­sz1StdExpAnyPrinter._string_types..)r!rrrr-)ZstringsZqualsr)r#rr£s  zStdExpAnyPrinter._string_types) r r r r rXrgr°rÚ __classcell__rr)r$rrSs D rcs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚStdExpOptionalPrinterz5Print a std::optional or std::experimental::optional.c sŠt|ƒ|_t|jƒ|_|d}|jjdƒr8|d}|}n*|d}|d}y |d}Wn YnXtj|ƒ}|std}tt|ƒj||ƒdS)NÚ _M_payloadzstd::experimentalÚ _M_engagedÚ_M_value) r;r]rKr<rr³rr)rX)rrDrWZpayloadZengagedrr )r$rrrX´s"      zStdExpOptionalPrinter.__init__cCs:|jdkrd|jSt|jdƒr4d|j|jjƒfS|jS)Nz%s [no contained value]r_z%s containing %s)rr]rµr´rg)rrrrrgÉs    zStdExpOptionalPrinter.to_string)r r r r rXrgr(rr)r$rr)±s r)cs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚStdVariantPrinterzPrint a std::variant.cs”t|jƒ}t|ƒ|_|d|_|jt|ƒkrz[%s])r•r—rZrtr~r7r@r=)rrÊrEr?r0rrrrRs    z$StdExpPathPrinter._iterator.__next__N)r r r rXrYrrrrrr‚Hsr‚cCs|j|jd|jƒS)Nr8)r‚rVr])rrrrr__szStdExpPathPrinter.childrenN) r r r r rXr=rgrr‚r_rrrrr7.s r7c@s@eZdZdZdd„Zdd„Zdd„ZGdd „d eƒZd d „Z d S) ÚStdPathPrinterzPrint a std::filesystem::path.cCsP||_||_t|jddƒ}|jtjdƒƒd@|_|jdkrF||_nd|_dS)Nr8r„Z uintptr_tér)rVr]rprbrrrÆÚ_impl)rrDrWr¯rrrrXfs zStdPathPrinter.__init__cCsHt|jjtj|jdƒƒƒ}|dd…dkr0dS|d d…dkrDdSdS) Nz::_Typerþr:zroot-directoryr;r<z root-namei÷ÿÿÿiöÿÿÿ)r!rÆrbrrr])rr0rrrr=ps zStdPathPrinter._path_typecCs8d|jd}|jdkr0|jƒ}|r0d||f}d|S)Nz%sr>rz%s [%s]zfilesystem::path %s)rVrÆr=)rr?r0rrrrgxs   zStdPathPrinter.to_stringc@s$eZdZdd„Zdd„Zdd„ZdS)zStdPathPrinter._iteratorc Cs²||_|r¢tjdƒ}tj|dƒ}tjdƒ}|j|jƒƒ}|jƒ}ttjdƒrbtd|j |j ƒ}n d|j }|j|jƒƒ|}|j|jƒƒ|_ |j ||_ d|_ n d|_ d|_ dS)Nr¤z::_CmptÚcharÚalignofrr)r@rrrbrartrµr:Úmaxr™rFr•r—r~) rr¯rAZint_typeZ cmpt_typeÚ char_typerÚZ sizeof_ImplÚbeginrrrrX�s      z!StdPathPrinter._iterator.__init__cCs|S)Nr)rrrrrY˜sz!StdPathPrinter._iterator.__iter__cCsd|j|jkrt‚|jjƒ}|j}|jd|_|jd|_|d}t|j|ƒjƒ}|sX|}d||fS)Nr)r>z[%s])r•r—rZrtr~rBr@r=)rrÊrEr?r0rrrr›s    z!StdPathPrinter._iterator.__next__N)r r r rXrYrrrrrr‚€sr‚cCs|j|j|jƒS)N)r‚rDr])rrrrr_¨szStdPathPrinter.childrenN) r r r r rXr=rgrr‚r_rrrrrBcs  (rBc@s8eZdZdZdd„ZGdd„deƒZdd„Zdd „Zd S) ÚStdPairPrinterz@Print a std::pair object, with 'first' and 'second' as children.cCs ||_dS)N)rV)rrDrWrrrrX¯szStdPairPrinter.__init__c@s(eZdZdZdd„Zdd„Zdd„ZdS) zStdPairPrinter._iterz?An iterator for std::pair types. Returns 'first' then 'second'.cCs||_d|_dS)NrÈ)rVÚ_which)rrWrrrrXµszStdPairPrinter._iter.__init__cCs|S)Nr)rrrrrY¹szStdPairPrinter._iter.__iter__cCs8|jdkrt‚|j}|dkr$d|_nd|_||j|fS)NrÈrÉ)rKrZrV)rZwhichrrrr¼s zStdPairPrinter._iter.__next__N)r r r r rXrYrrrrrr˲srËcCs |j|jƒS)N)rËrV)rrrrr_ÆszStdPairPrinter.childrencCsdS)Nr)rrrrrgÉszStdPairPrinter.to_stringN) r r r r rXrrËr_rgrrrrrJ¬s rJc@s eZdZdZdd„Zdd„ZdS)ÚStdCmpCatPrinterz#Print a comparison category object.cCs&||jdƒdd…|_|d|_dS)Nú:r)r,)Úrfindr]rV)rrDrWrrrrXÐszStdCmpCatPrinter.__init__cCsJ|jdkr|jdkrd}n"ddd ddddd i}|t|jƒ}d j|j|ƒS) NÚstrong_orderingrZequalrZ unorderedr)ZlessZ equivalentZgreaterz std::{}::{}ri)r]rVr¤r*)rr"ÚnamesrrrrgÔs zStdCmpCatPrinter.to_stringN)r r r r rXrgrrrrrLÍsrLc@s`eZdZdZdZdd„Zedd„ƒZedd„ƒZ ed d „ƒZ ed d „ƒZ ed d„ƒZ dd„Z dS)ÚStdErrorCodePrinterz0Print a std::error_code or std::error_condition.Nc CsL||_t|ƒ|_tjdkrHyddl}dt_Wntk rFdt_YnXdS)NrTF)rVr;r]rQÚ_system_is_posixÚposixÚ ImportError)rrDrWrSrrrrXâs   zStdErrorCodePrinter.__init__cCs&tj|ƒ}|dk r"|jtjkr"|SdS)N)rrrŸZTYPE_CODE_ENUM)r"r#rrrÚ_find_errc_enumís z#StdErrorCodePrinter._find_errc_enumc CsBxs(     zStdErrorCodePrinter.to_string)r r r r rRrXr°rUÚ classmethodrXr]rdrfrgrrrrrQÝs   + rQc@s eZdZdZdd„Zdd„ZdS)ÚStdRegexStatePrinterz/Print a state node in the NFA for a std::regex.cCs||_||_dS)N)rVr])rrDrWrrrrX[szStdRegexStatePrinter.__init__cCs–t|jdƒ}|r|dd…}|jd}ddddddddddddddœ }||}d j||ƒ}|dk rŽ|jd |dk rŽd j|||jd |ƒ}d |S) NZ _M_opcodeérzZaltZsubexprÚnegZ backref_index) ÚrepeatÚ alternativeZ subexpr_beginZ subexpr_endZline_begin_assertionZline_end_assertionZ word_boundaryZsubexpr_lookaheadZbackrefr?ZacceptZdummyÚunknownzopcode={}, next={}Z_M_z {}, {}={}z{%s})r!rVr*)rZopcodeZnext_idZvariantsÚvr#rrrrg_s     zStdRegexStatePrinter.to_stringN)r r r r rXrgrrrrrlXsrlc@s@eZdZdZGdd„deƒZdd„Zdd„Zdd „Zd d „Z d S) ÚStdSpanPrinterzPrint a std::span.c@s$eZdZdd„Zdd„Zdd„ZdS)zStdSpanPrinter._iteratorcCsd|_||_||_dS)Nr)r~Ú_beginr¸)rrIrÚrrrrXysz!StdSpanPrinter._iterator.__init__cCs|S)Nr)rrrrrY~sz!StdSpanPrinter._iterator.__iter__cCs8|j|jkrt‚|j}|jd|_d||j|jƒfS)Nr)z[%d])r~r¸rZrtrt)rrErrrr�s   z!StdSpanPrinter._iterator.__next__N)r r r rXrYrrrrrr‚xsr‚cCsLt|ƒ|_||_tjdƒ}|jjdƒ|kr:|dd|_n|jjdƒ|_dS)Nzstatic_cast(-1)r)Z _M_extentZ_M_extent_value)r;r]rVrrórr4r¸)rrDrWZsize_maxrrrrX‰s   zStdSpanPrinter.__init__cCsd|j|jfS)Nz%s of length %d)r]r¸)rrrrrg’szStdSpanPrinter.to_stringcCs|j|jd|jƒS)Nr\)r‚rVr¸)rrrrr_•szStdSpanPrinter.childrencCsdS)Nr§r)rrrrr¨˜szStdSpanPrinter.display_hintN) r r r r rr‚rXrgr_r¨rrrrrsus  rsc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚStdInitializerListPrinterzPrint a std::initializer_list.cCs||_||_|d|_dS)Nr6)r]rVr¸)rrDrWrrrrXŸsz"StdInitializerListPrinter.__init__cCsd|j|jfS)Nz%s of length %d)r]r¸)rrrrrg¤sz#StdInitializerListPrinter.to_stringcCstj|jd|jƒS)NZ_M_array)rsr‚rVr¸)rrrrr_§sz"StdInitializerListPrinter.childrencCsdS)Nr§r)rrrrr¨ªsz&StdInitializerListPrinter.display_hintN)r r r r rXrgr_r¨rrrrruœs ruc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚStdAtomicPrinterzPrint a std:atomic.cCsrt|ƒ|_||_d|_|jjjdƒ|_|jjdk rnt|jjƒ}|jdƒsR|jdƒrn|d}t ||ƒ|_|j |_ dS)Nrzstd::shared_ptr = { %s }) rwrgr1rŸrZ TYPE_CODE_INTrVÚ TYPE_CODE_FLTÚ TYPE_CODE_PTRr r]r!)rrWrrrrgÁs     zStdAtomicPrinter.to_stringN)r r r r rXrxrgrrrrrv®s rvc@s eZdZdZdd„Zdd„ZdS)ÚStdFormatArgsPrinterzPrint a std::basic_format_args.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX×s zStdFormatArgsPrinter.__init__cCs€t|jjƒ}t|dƒd}|tjdƒkr0d}n|tjdƒkrDd}nd}|jd}|dkrbd |S|dkrt|jd }d ||fS) Nrr)rEzstd::format_argsÚwchar_tzstd::wformat_argszstd::basic_format_argsZ_M_packed_sizez%s with 1 argumentZ_M_unpacked_sizez%s with %d arguments)rTrVrrr)rZtargsrHr#rÚrrrrgÛs   zStdFormatArgsPrinter.to_stringN)r r r r rXrgrrrrr{Òsr{c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) ÚStdChronoDurationPrinterzPrint a std::chrono::duration.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXðs z!StdChronoDurationPrinter.__init__cCs*|jjjdƒ}|jdƒ}|jdƒ}||fS)Nr)r)rVrr4)rZperiodrÂÚdenrrrÚ_ratioôs  zStdChronoDurationPrinter._ratiocCsˆ|jƒ\}}|dkrF|dkr dS|dkr,dS|dkr8dS|dkr|dSn6|dkr||d krZd S|d krfd S|d krrdSdj|ƒSdj||ƒS)Nr)r#ièZmsi@BÚusiÊš;rWé<ÚminiÚhi€QÚdz[{}]sz[{}/{}]s)rr*)rrÂr~rrrÚ_suffixûs&  z StdChronoDurationPrinter._suffixcCs4|jd}|jjƒjtjkr$d|}dj||jƒƒS)NÚ__rz%gz"std::chrono::duration = {{ {}{} }})rVrrrŸrryr*r…)rÚrrrrrgs z"StdChronoDurationPrinter.to_stringN)r r r r rXrr…rgrrrrr}ís r}c@s*eZdZdZdd„Zdd„Zd dd„Zd S) ÚStdChronoTimePointPrinterz Print a std::chrono::time_point.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXs z"StdChronoTimePointPrinter.__init__cCsv|jjjdƒ}t|jƒ}|dks(|dkr,dS|dkr8dS|dkrDdS|d krPdS|d kr\dS|dkrhdSdj|ƒdfS)Nrzstd::chrono::_V2::system_clockzstd::chrono::system_clockústd::chrono::sys_timezstd::chrono::utc_clockústd::chrono::utc_timezstd::chrono::gps_clockústd::chrono::gps_timezstd::chrono::tai_clockústd::chrono::tai_timezstd::filesystem::__file_clockústd::chrono::file_timeìumzstd::chrono::local_tústd::chrono::local_timez {} time_point)r‰r)rŠN)r‹N)rŒN)r�rŽ)r�r)rVrr4r;r"r*)rÚclockr"rrrÚ_clocks  z StdChronoTimePointPrinter._clockFc Cs¨|jƒ\}}|jd}|d}t|jj|ƒ}|jƒ}d}|dk r†|jƒ\} } || | |} ytjj| t ƒ} dj | ƒ}Wn YnXd|||f} |rœ| Sd|| fS)NZ__dr†rCz [{:%Y-%m-%d %H:%M:%S}]z%d%s%sz %s = { %s }) r‘rVr}rr"r…rrZ fromtimestampÚ _utc_timezoner*)rZabbrevr�Úoffsetr„r‡ÚprinterÚsuffixÚtimerÂr~Zsecsrr#rrrrg1s$   z#StdChronoTimePointPrinter.to_stringN)F)r r r r rXr‘rgrrrrrˆsrˆc@s eZdZdZdd„Zdd„ZdS)ÚStdChronoZonedTimePrinterz Print a std::chrono::zoned_time.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXIs z"StdChronoZonedTimePrinter.__init__cCs@|jdjƒd}|jd}t|jj|ƒ}|jdƒ}dj||ƒS)NZ_M_zoneÚ_M_nameZ_M_tpTz%std::chrono::zoned_time = {{ {} {} }})rVrtrˆrr"rgr*)rZzoner–r”rrrrgMs   z#StdChronoZonedTimePrinter.to_stringN)r r r r rXrgrrrrr—Fsr—ZJanuaryZFebruaryZMarchZAprilZMayZJuneZJulyZAugustZ SeptemberZOctoberZNovemberZDecemberZSundayZMondayZTuesdayZ WednesdayZThursdayZFridayZSaturdayc@s eZdZdZdd„Zdd„ZdS)ÚStdChronoCalendarPrinterzDPrint a std::chrono::day, std::chrono::month, std::chrono::year etc.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX_s z!StdChronoCalendarPrinter.__init__c Csv|j}|j}d|kr$|dkr$|d}|jdƒr6|d}|dkrPdjt|dƒƒS|d kr||d ksl|ttƒkrtd |St|S|dkrŽd j|ƒS|d krÈ|d}|dks²|ttƒkrºd|Sdjt|ƒS|dkrèdj|dt|dƒƒS|dkrþdj|dƒS|dk�rdj||dƒS|dk�r,dj|ƒS|dk�rFdj||dƒS|dk�r`dj||dƒS|dk�rvdj||ƒS|dk�r’d j|||dƒS|dk�r¬dj||d!ƒS|d"k�rÈd j|||dƒS|d#k�räd j|||dƒS|jd$ƒ�rrd%}|d&dk�r"d'jt|d(d)ƒt|d&ƒƒ}t|d*d+ƒ}t|dd+ƒ}t|d,d+ƒ}|d-�rb| }d.j||||ƒSdS)/NÚmonthz std::chrono::year_month_day_lastZ_M_mzstd::chrono::yearZ_M_yzstd::chrono::dayz{}Z_M_dzstd::chrono::monthr)z%d is not a valid monthz{}yzstd::chrono::weekdayZ_M_wdrz%d is not a valid weekdayzstd::chrono::weekday_indexedz{}[{}]r.zstd::chrono::weekday_lastz{}[last]zstd::chrono::month_dayz{}/{}zstd::chrono::month_day_lastz{}/lastzstd::chrono::month_weekdayZ_M_wdizstd::chrono::month_weekday_lastZ_M_wdlzstd::chrono::year_monthzstd::chrono::year_month_dayz{}/{}/{}Z_M_mdlzstd::chrono::year_month_weekdayz$std::chrono::year_month_weekday_lastzstd::chrono::hh_mm_ssrCZfractional_widthz.{:0{}d}Z_M_ssZ_M_rrr†Ú_M_sZ _M_is_negz{:02}:{:02}:{:02}{})rVr]r<r*r¤rÚmonthsÚweekdays) rrWr#r"ÚyZwdZfractrƒr#rrrrgcsh               z"StdChronoCalendarPrinter.to_stringN)r r r r rXrgrrrrr™\sr™c@s eZdZdZdd„Zdd„ZdS)ÚStdChronoTimeZonePrinterz4Print a chrono::time_zone or chrono::time_zone_link.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXžs z!StdChronoTimeZonePrinter.__init__cCs6d|j|jdf}|jjdƒr2|d|jd7}|S)Nz%s = %sr˜Z_linkz -> %sZ _M_target)r]rVrb)rr!rrrrg¢s z"StdChronoTimeZonePrinter.to_stringN)r r r r rXrgrrrrrŸ›srŸc@s eZdZdZdd„Zdd„ZdS)ÚStdChronoLeapSecondPrinterzPrint a chrono::leap_second.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX¬s z#StdChronoLeapSecondPrinter.__init__cCs.|jdd}d|dk}d|jt|ƒ|fS)Nr›r†z+-rz %s %d (%c))rVr]Úabs)rZdaternrrrrg°s z$StdChronoLeapSecondPrinter.to_stringN)r r r r rXrgrrrrr ©sr c@s eZdZdZdd„Zdd„ZdS)ÚStdChronoTzdbPrinterzPrint a chrono::tzdb.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrX¹s zStdChronoTzdbPrinter.__init__cCsd|j|jdfS)Nz%s %sÚversion)r]rV)rrrrrg½szStdChronoTzdbPrinter.to_stringN)r r r r rXrgrrrrr¢¶sr¢c@s eZdZdZdd„Zdd„ZdS)ÚStdChronoTimeZoneRulePrinterzPrint a chrono::time_zone rule.cCst|ƒ|_||_dS)N)r;r]rV)rrDrWrrrrXÄs z%StdChronoTimeZoneRulePrinter.__init__c CsÜ|jd}|d}t|d}ddddddddœ}|d}d j||j|d ƒƒ}|d krdd j||ƒ}nVt|d }|dkr†dj||ƒ}n4|dkr”d} nd} |d}dj| d || d||ƒ}dj|jd|jd|jd|ƒS)NÚonÚkindršÚstZndZrd)r)rrCééééZ day_of_monthz{}{}Zthrz{} {}Z day_of_weekr)z last {} in {}rrØú<=rÈú>=z{} {} {} {} {}z.time_zone rule {} from {} to {} starting on {}r"ÚfromZto)rØr¬)rÈr­)rVrœr*Úgetr�) rr¥r¦ršÚsuffixesÚdayZ ordinal_dayr›ÚweekdayÚ directionrrrrgÈs*    z&StdChronoTimeZoneRulePrinter.to_stringN)r r r r rXrgrrrrr¤Ásr¤c@s eZdZdZdd„Zdd„ZdS)ÚStdLocalePrinterzPrint a std::locale.cCs||_||_dS)N)rVr])rrDrWrrrrXæszStdLocalePrinter.__init__csx|jdd}d}|ddkr&d}�nFtj|jdƒ}tj|jdƒ}|djƒ}|djƒ}dj||ƒ}||i}d } xN| |krÄ|| dkrÄ|| jƒ}|| jƒ}d j|||ƒ}|||<| d } qxWt|jƒƒ} t| ƒd krä|}nˆt| ƒd k�rl| \} } t |jƒƒ} d‰| j | ƒd k�r$| }| ‰n| j | ƒd k�r<| }| ‰ˆdk �rlt ‡fd d „|j ƒDƒƒ}dj|ˆƒ}dj||ƒS)Nr„Z_M_namesrCrÚ*z::_S_categoriesz::_S_categories_sizez{}={}r)z{};{}={}rc3s|]\}}|ˆkr|VqdS)Nr)r&r²rR)Úotherrrú sz-StdLocalePrinter.to_string..z with "{}={}"zstd::locale = "{}"{}) rVrrór]rær*r4Úvaluesrr‰rErÚitems)rrPÚmodr"ZcatsZncatrRr[Z cat_namesrZ uniq_namesZn1Zn2Z name_listr)r¶rrgêsD            zStdLocalePrinter.to_stringN)r r r r rXrgrrrrr´ãsr´c@s eZdZdZdd„Zdd„ZdS)ÚStdIntegralConstantPrinterz*Print a std::true_type or std::false_type.cCs||_||_dS)N)rVr])rrDrWrrrrX sz#StdIntegralConstantPrinter.__init__cCsL|jjjdƒ}|jjjdƒ}|jtjkr4|r0dSdSt|jƒ}dj|||ƒS)Nrr)zstd::true_typezstd::false_typez {}<{}, {}>) rVrr4rŸrr r;r]r*)rr3rZrDrrrrg s  z$StdIntegralConstantPrinter.to_stringN)r r r r rXrgrrrrr» sr»c@s eZdZdZdd„Zdd„ZdS)ÚStdTextEncodingPrinterzPrint a std::text_encoding.cCs||_||_dS)N)rVr])rrDrWrrrrX$ szStdTextEncodingPrinter.__init__cCs<|jdjƒ}|ddkr$|jdS|ddkr4dS|dS)NZ_M_repZ_M_idr)r˜rrq)rVrt)rZreprrrrg( s    z StdTextEncodingPrinter.to_stringN)r r r r rXrgrrrrr¼! sr¼cs$eZdZ‡fdd„Zdd„Z‡ZS)Ú RxPrintercs$tt|ƒjƒ||_||_d|_dS)NT)rr½rXr"Ú _functionÚenabled)rr"r)r$rrrX3 szRxPrinter.__init__cCs:|js dS|jjtjkr,ttjdƒr,|jƒ}|j|j |ƒS)NÚreferenced_value) r¿rrŸrrärµÚValuerÀr¾r")rrZrrrÚinvoke9 s  zRxPrinter.invoke)r r r rXrÂr(rr)r$rr½2 s r½csHeZdZ‡fdd„Zdd„Zdd„Zdd„Zed d „ƒZd d „Z ‡Z S) ÚPrintercs6tt|ƒjƒ||_g|_i|_d|_tjdƒ|_ dS)NTz^([a-zA-Z0-9_:]+)(<.*>)?$) rrÃrXr"Ú _subprintersÚ_lookupr¿r>ÚcompileÚ _compiled_rx)rr")r$rrrXH s zPrinter.__init__cCs<|jj|ƒstd|ƒ‚t||ƒ}|jj|ƒ||j|<dS)Nz0libstdc++ programming error: "%s" does not match)rÇr?r r½rÄrPrÅ)rr"rr”rrrÚaddP s     z Printer.addcCs>|j|||ƒd|kr:tjddt|ƒ}|j|||ƒdS)NÚ__cxx11z^(std|__gnu_cxx)::z\g<0>%s)rÈr>rHr-)rÚbaser"rZvbaserrrÚ add_version[ s  zPrinter.add_versioncCs$|j|||ƒ|j|d||ƒdS)Nz __cxx1998::)rË)rrÊr"rrrrÚ add_containerc szPrinter.add_containercCs&|jtjkr|jƒ}|jƒjƒ}|jS)N)rŸrrärÐrårr)rrrrÚget_basic_typeg s  zPrinter.get_basic_typecCsr|j|jƒ}|sdS|jj|ƒ}|s(dS|jdƒ}|jjtjkrTttj dƒrT|j ƒ}||j krn|j |j |ƒSdS)Nr)rÀ) rÍrrÇr?rrŸrrärµrÁrÀrÅrÂ)rrWrDr?ÚbasenamerrrÚ__call__r s     zPrinter.__call__) r r r rXrÈrËrÌr°rÍrÏr(rr)r$rrÃG s    rÃc@s0eZdZdZdd„ZGdd„deƒZdd„ZdS) ÚTemplateTypePrinteral A type printer for class templates with default template arguments. Recognizes specializations of class templates and prints them without any template arguments that use a default template argument. Type printers are recursively applied to the template arguments. e.g. replace 'std::vector >' with 'std::vector'. cCs||_||_d|_dS)NT)r"Ú_defargsr¿)rr"ÚdefargsrrrrX˜ szTemplateTypePrinter.__init__c@s(eZdZdZdd„Zdd„Zdd„ZdS) zTemplateTypePrinter._recognizerz-The recognizer class for TemplateTypePrinter.cCs||_||_dS)N)r"rÑ)rr"rÒrrrrX  sz(TemplateTypePrinter._recognizer.__init__c Csú|jdkrdS|jj|jƒs dSt|ƒ}g}d}x”tt|ƒƒD]„}||}|jj|ƒ}|dk rª|j|Ž}y|t j |ƒkr|dSWn$t j k r¢|j|krždSYnXd}q>|r²dS|j |j |ƒƒq>W|jd|jjdƒ…}t|ƒ}|ddj|ƒdS)a If type_obj is a specialization of self.name that uses all the default template arguments for the class template, then return a string representation of the type without default arguments. Otherwise, return None. NFTrú)rr<r"rTÚrangerrÑr¯r*rrr,rPÚ_recognize_subtyperárOr+) rrQrSZdisplayed_argsZrequire_defaultedrRrfZdefargrArrrÚ recognize¥ s2     z)TemplateTypePrinter._recognizer.recognizecCsÔ|jtjkr|j|jƒƒdS|jtjkrj|j|jƒƒ}t|jƒƒjdƒrR|dSd||j ƒddfS|jtj krˆ|j|jƒƒdSt tdƒr°|jtj kr°|j|jƒƒdStj jtj jƒ|ƒ}|rÌ|St|ƒS)zxConvert a gdb.Type to a string by applying recognizers, or if that fails then simply converting to a string.rµz[]z%s[%d]r)ú&ÚTYPE_CODE_RVALUE_REFz&&)rŸrrzrÖrÐrÏr!rrbrÕrärµrÙrrr)rrQrNrrrrÖÖ s"     z2TemplateTypePrinter._recognizer._recognize_subtypeN)r r r r rXr×rÖrrrrÚ _recognizer� s1rÚcCs|j|j|jƒS)z1Return a recognizer object for this type printer.)rÚr"rÑ)rrrrÚ instantiateí szTemplateTypePrinter.instantiateN)r r r r rXÚobjectrÚrÛrrrrrÐ� s PrÐcsžtd||ƒ}tjj||ƒtd||ƒ}tjj||ƒd|kršdt‰t‡fdd„|jƒDƒƒ}tˆ||ƒ}tjj||ƒtd||ƒ}tjj||ƒdS)aá Add a type printer for a class template with default template arguments. Args: name (str): The template-name of the class template. defargs (dict int:string) The default template arguments. Types in defargs can refer to the Nth template-argument using {N} (with zero-based indices). e.g. 'unordered_map' has these defargs: { 2: 'std::hash<{0}>', 3: 'std::equal_to<{0}>', 4: 'std::allocator >' } zstd::zstd::__debug::rÉc3s"|]\}}||jdˆƒfVqdS)zstd::N)r.)r&rRr„)rWrrr· sz0add_one_template_type_printer..N)rÐrrÚregister_type_printerr-Údictr¹)Úobjr"rÒr”r)rWrÚadd_one_template_type_printerò s ràc@s2eZdZdZd dd„ZGdd„deƒZdd„ZdS) ÚFilteringTypePrintera› A type printer that uses typedef names for common template specializations. Args: template (str): The class template to recognize. name (str): The typedef-name that will be used instead. targ1 (str, optional): The first template argument. Defaults to None. Checks if a specialization of the class template 'template' is the same type as the typedef 'name', and prints it as 'name' instead. e.g. if an instantiation of std::basic_istream is the same type as std::istream then print it as std::istream. If targ1 is provided (not None), match only template specializations with this type as the first template argument, e.g. if template='basic_string' and targ1='char' then only match 'basic_string' and not 'basic_string'. This rejects non-matching specializations more quickly, without needing to do GDB type lookups. NcCs||_||_||_d|_dS)NT)Ú _templater"Ú_targ1r¿)rÚtemplater"Útarg1rrrrX- szFilteringTypePrinter.__init__c@s eZdZdZdd„Zdd„ZdS)z FilteringTypePrinter._recognizerz.The recognizer class for FilteringTypePrinter.cCs||_||_||_d|_dS)N)râr"rãÚ _type_obj)rrär"rårrrrX6 sz)FilteringTypePrinter._recognizer.__init__c Csü|jdkrdS|jdkrz|jdk rDdj|j|jƒ}|jj|ƒsVdSn|jj|jƒsVdSytj|jƒj ƒ|_Wn YnX|jdkrˆdStj j |jƒ}tj j |ƒ}||kr´t |jƒS|jj dƒddkrø|jjjddƒ}|jjddƒ}||krøt |jƒSdS) z• If type_obj starts with self._template and is the same type as self.name then return self.name, otherwise None. Nz{}<{}z::r)Ú basic_stringz __cxx11::rCri)rrærãr*râr<rrr"rrrÍrOrer.)rrQr#Zt1Zt2Ús1Ús2rrrr×< s4        z*FilteringTypePrinter._recognizer.recognizeN)r r r r rXr×rrrrrÚ3 srÚcCs|j|j|j|jƒS)z1Return a recognizer object for this type printer.)rÚrâr"rã)rrrrrÛf sz FilteringTypePrinter.instantiate)N)r r r r rXrÜrÚrÛrrrrrá s 3rácCsXtd|d||ƒ}tjj||ƒd|krTdt}t|||||ƒ}tjj||ƒdS)Nzstd::rÉ)rárrrÝr-)rßrär"rår”rWrrrÚadd_one_type_printerk s rêc CsdtsdSxxdgD]p}t|d |d d |dƒt|d|d d |dƒt|dd|d d |dƒt|d|d d|dƒqWx„djD]|}x*dkD]"}t|d||d ||dƒq’WxJdlD]B}t|d||d ||dƒt|d!||d ||dƒ�q¾WqˆWx�dmD]ˆ}x0dpD](}t||d"||d d#|dƒ�qWxNdqD]F}t||d(||d)ƒx&drD]}t||||||ƒ�qlW�qJW�qWt|d-d.ƒxdsD]}t|d9d:|ƒ�q¬Wt|d;d<ƒt|d;d=ƒt|d>d?ƒt|d>d@ƒt|dAdBƒt|dAdCƒt|dDdEƒt|dDdFƒt|dGdHƒdI}x0dyD](}t||d||d d|dƒ�qÚdequezstd::allocator<{0}>r‹r‰z __cxx11::listÚvectorrÌzstd::less<{0}>z)std::allocator>)rrCÚmultimapr4)r)rÚmultisetÚ unordered_mapzstd::hash<{0}>zstd::equal_to<{0}>)rrCéÚunordered_multimapÚ unordered_set)r)rrCÚunordered_multiset©rCrE©rÑr|©rërì©rírî©rïrð)rrrrr©rCrE©rÑr|)rr) rórérôrõrör÷rørùrú)rürýrþrÿ)rCrñ©rCrE©rÑr|)rr )r²r#rr)rrr) rrrrr r r r r rœ©rCrE©rÑr|©rërì©rírî©rïrð)r!r"r#r$r%)rrêrà)rßZchr@ÚabiZdurrWrrrÚregister_type_printerst s® "(     *                   r'cCs8trtjj|tƒn|dkr t}|jjtƒt|ƒdS)z4Register libstdc++ pretty-printers with objfile Obj.N)Ú _use_gdb_pprZprintingZregister_pretty_printerÚlibstdcxx_printerZpretty_printersrPr')rßrrrÚregister_libstdcxx_printersã s  r*cCsXtdƒatjddtƒtjddtƒtjddtƒtjddtƒtjddtƒtjddtƒtjddtƒtjdd tƒtjdd t ƒtjdd t ƒtjdd t ƒtjdd t ƒtjddt ƒtjddt ƒtjddt ƒtjddt ƒtjddtƒtjddtƒttjdƒ�r.tjddtƒtjddtƒtjdtƒtjdtƒtjdtƒtjdtƒtjdtƒtjdt ƒtjdt ƒtjdtƒtjddtƒtjdd tƒtjdd!tƒtjdd"tƒtjdd#tƒtjdd$tƒtjdd%tƒtjd&dtƒtjd&d tƒtjd&d!tƒtjd&d"tƒtjd&d#tƒtjd&d$tƒtjdd'tƒtjdd(tƒtjdd)tƒtjdd)tƒx2doD]*}tjdd-|tƒtjdd-|tƒ�q‚Wtjd.d/tƒtjd.d0tƒtjdd1tƒtjd2d3t ƒtjd4tƒtjd5tƒtjd6tƒtjd7tƒtjd8tƒtjd9d:t!ƒtjd9d;t"ƒtjd9dt$ƒtjd?d>t$ƒtjd@d>t%ƒtjdAd>t%ƒtjdd:t!ƒtjdd;t"ƒtjddrFrirrGrÜrrÌr Úziprr¤rÞZtimezoneZutcr’Ztzinforr(Z gdb.printingrTrZ gdb.typesrµrrZ printer_baser%r-r2r8r5rBr;rKrOrTrUr[rkrmrprqrurxryr†rˆrŠr�r�r�r©rªr«r¬r±r¶r½r¾rÁrÃrÄrÍrÎrÓrßràrírîrðrörürr rrrrr)r-r0r5r7rBrJrLrQrlrsrurvr{r}rˆr—rœr�r™rŸr r¢r¤r´r»r¼r½rÃr)rÐràrárêr'r*r;rrrrÚsö      %   (&"I  U(*$/A " /%-^!,5I!{'$*/ ?  ",Ce%T oT