https://t.me/RX1948
Server : Apache
System : Linux iad1-shared-b8-43 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
User : dh_edsupp ( 6597262)
PHP Version : 8.2.26
Disable Function : NONE
Directory :  /lib/python3/dist-packages/mercurial/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/mercurial/__pycache__/formatter.cpython-310.pyc
o

�]LbZi�@sdZddlmZmZddlZddlZddlZddlmZddl	m
Z
mZddlm
Z
ddlmZmZmZmZmZmZmZdd	lmZmZmZejZd
d�ZGdd
�d
e�ZGdd�de�Zdd�ZGdd�de�Z dd�Z!Gdd�de�Z"Gdd�de�Z#Gdd�de�Z$Gdd�de�Z%Gdd�de�Z&Gd d!�d!e�Z'Gd"d#�d#e�Z(Gd$d%�d%e�Z)e
j*d&d'�Gd(d)�d)e��Z+d*d+�Z,dGd,d-�Z-d.d/�Z.dGd0d1�Z/d2d3�Z0d4d5�Z1dHd6d7�Z2dHd8d9�Z3e�Z4Gd:d;�d;ej5�Z6	<	<	<dId=d>�Z7d?d@�Z8ej9dAdB��Z:ej9dCdD��Z;dEdF�Z<dS)Ja~Generic output formatting for Mercurial

The formatter provides API to show data in various ways. The following
functions should be used in place of ui.write():

- fm.write() for unconditional output
- fm.condwrite() to show some extra data conditionally in plain output
- fm.context() to provide changectx to template output
- fm.data() to provide extra data to JSON or template output
- fm.plain() to show raw text that isn't provided to JSON or template output

To show structured data (e.g. date tuples, dicts, lists), apply fm.format*()
beforehand so the data is converted to the appropriate data type. Use
fm.isplain() if you need to convert or format data conditionally which isn't
supported by the formatter API.

To build nested structure (i.e. a list of dicts), use fm.nested().

See also https://www.mercurial-scm.org/wiki/GenericTemplatingPlan

fm.condwrite() vs 'if cond:':

In most cases, use fm.condwrite() so users can selectively show the data
in template output. If it's costly to build data, use plain 'if cond:' with
fm.write().

fm.nested() vs fm.formatdict() (or fm.formatlist()):

fm.nested() should be used to form a tree structure (a list of dicts of
lists of dicts...) which can be accessed through template keywords, e.g.
"{foo % "{bar % {...}} {baz % {...}}"}". On the other hand, fm.formatdict()
exports a dict-type object to template, which can be accessed by e.g.
"{get(foo, key)}" function.

Doctest helper:

>>> def show(fn, verbose=False, **opts):
...     import sys
...     from . import ui as uimod
...     ui = uimod.ui()
...     ui.verbose = verbose
...     ui.pushbuffer()
...     try:
...         return fn(ui, ui.formatter(pycompat.sysbytes(fn.__name__),
...                   pycompat.byteskwargs(opts)))
...     finally:
...         print(pycompat.sysstr(ui.popbuffer()), end='')

Basic example:

>>> def files(ui, fm):
...     files = [(b'foo', 123, (0, 0)), (b'bar', 456, (1, 0))]
...     for f in files:
...         fm.startitem()
...         fm.write(b'path', b'%s', f[0])
...         fm.condwrite(ui.verbose, b'date', b'  %s',
...                      fm.formatdate(f[2], b'%Y-%m-%d %H:%M:%S'))
...         fm.data(size=f[1])
...         fm.plain(b'\n')
...     fm.end()
>>> show(files)
foo
bar
>>> show(files, verbose=True)
foo  1970-01-01 00:00:00
bar  1970-01-01 00:00:01
>>> show(files, template=b'json')
[
 {
  "date": [0, 0],
  "path": "foo",
  "size": 123
 },
 {
  "date": [1, 0],
  "path": "bar",
  "size": 456
 }
]
>>> show(files, template=b'path: {path}\ndate: {date|rfc3339date}\n')
path: foo
date: 1970-01-01T00:00:00+00:00
path: bar
date: 1970-01-01T00:00:01+00:00

Nested example:

>>> def subrepos(ui, fm):
...     fm.startitem()
...     fm.write(b'reponame', b'[%s]\n', b'baz')
...     files(ui, fm.nested(b'files', tmpl=b'{reponame}'))
...     fm.end()
>>> show(subrepos)
[baz]
foo
bar
>>> show(subrepos, template=b'{reponame}: {join(files % "{path}", ", ")}\n')
baz: foo, bar
�)�absolute_import�print_functionN�)�_)�hex�short)�attr)�error�pycompat�templatefilters�
templatekw�	templater�templateutil�util)�cborutil�dateutil�
stringutilcCst|td�tttjttf�S)z�Check if the given object can be directly passed in to formatter's
    write() and data() functions

    Returns False if the object is unsupported or must be pre-processed by
    formatdate(), formatdict(), or formatlist().
    N)�
isinstance�type�bool�intr
�long�float�bytes)�obj�r�5/usr/lib/python3/dist-packages/mercurial/formatter.py�isprintable�src@�DeZdZdZdZedd��Zedd��Zedd��Zed	d
��Z	dS)�_nullconverterz=convert non-primitive data types to be processed by formatterFcC�|S)z$wrap nested data by appropriate typer��data�tmpl�seprrr�
wrapnested�sz_nullconverter.wrapnestedcCs|\}}t|�|fS�z(convert date tuple to appropriate format)r)�date�fmt�ts�tzrrr�
formatdate�sz_nullconverter.formatdatecC�t|�S�z:convert dict or key-value pairs to appropriate dict format)�dict�r"�key�valuer(r$rrr�
formatdict�sz_nullconverter.formatdictcCr,�z+convert iterable to appropriate list format)�list�r"�namer(r$rrr�
formatlist�sz_nullconverter.formatlistN�
�__name__�
__module__�__qualname__�__doc__�storecontext�staticmethodr%r+r2r7rrrrr�s


rc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zd*d
d�Z	d+dd�Z
d,dd�Zdd�Zdd�Z
dd�Zdd�Zdd �Zd!d"�Zd#d$�Zd-d&d'�Zd(d)�ZdS).�
baseformatterFcCs(||_||_||_||_d|_t|_dS�N)�_ui�_topic�_opts�
_converter�_itemr�hexfunc)�self�ui�topic�opts�	converterrrr�__init__�s
zbaseformatter.__init__cCr r@r�rGrrr�	__enter__��zbaseformatter.__enter__cCs|dur
|��dSdSr@)�end)rG�exctype�excvalue�	tracebackrrr�__exit__�s�zbaseformatter.__exit__cC�dS)z0show a formatted item once all data is collectedNrrMrrr�	_showitem��zbaseformatter._showitemcCs|jdur	|��i|_dS)z begin an item in the format listN�rErVrMrrr�	startitem�s

zbaseformatter.startitem�%a %b %d %H:%M:%S %Y %1%2cCs|j�||�Sr&)rDr+)rGr'r(rrrr+��zbaseformatter.formatdate�key�valueN� cCs|j�|||||�Sr-)rDr2)rGr"r0r1r(r$rrrr2�szbaseformatter.formatdictcCs|j�||||�Sr3)rDr7)rGr"r6r(r$rrrr7�szbaseformatter.formatlistcKs|t�|�}tdd�|D��sJ�|jjr<d|vr$d|vr$|d��|d<d|vr4d|vr4|d��|d<|j�|�dSdS)z=insert context objects to be used to render template keywordscss�|]}|dvVqdS)>�ctx�fctx�repoNr��.0�krrr�	<genexpr>�s�z(baseformatter.context.<locals>.<genexpr>r`r_raN)	r
�byteskwargs�allrDr=�	changectx�reporE�update)rG�ctxsrrr�context�s
�zbaseformatter.contextcCst�S)z#set of field names to be referenced)�setrMrrr�datahint�szbaseformatter.datahintcKst�|�}|j�|�dS)z8insert data into item that's not shown in default outputN)r
rfrErj�rGr"rrrr"�s
zbaseformatter.datacOs:|��}t|�t|�ksJ||f��|j�t||��dS)z3do default text output while assigning data to itemN��split�lenrErj�zip)rG�fields�deftext�	fielddatarJ�	fieldkeysrrr�write�szbaseformatter.writecOs2|��}t|�t|�ksJ�|j�t||��dS)z4do conditional write (primarily for plain formatter)Nrp)rG�condrtrurvrJrwrrr�	condwrite�szbaseformatter.condwritecKrU)z$show raw text for non-templated modeNr�rG�textrJrrr�plainrWzbaseformatter.plaincCrU)zcheck for plain formatter usageFrrMrrr�isplain�zbaseformatter.isplain�cCs*g}|j�|||�|j|<t|j|j|�S)z9sub formatter to store nested data in the specified field)rDr%rE�_nestedformatterrA)rG�fieldr#r$r"rrr�nested	szbaseformatter.nestedcCs|jdur|��dSdS)zend output for the formatterNrXrMrrrrPs
�zbaseformatter.end)rZ)r\r]Nr^)Nr^�Nr�)r9r:r;�
strict_formatrLrNrTrVrYr+r2r7rlrnr"rxrzr}r~r�rPrrrrr?�s&	



r?cCst|||td�S)zformatter that prints nothing)rK)r?r)rHrIrJrrr�
nullformatter�r�c@s eZdZdZdd�Zdd�ZdS)r�z6build sub items and store them in the parent formattercCstj||di|d�||_dS)Nr�)rIrJrK)r?rL�_data)rGrHrKr"rrrrLs
�
z_nestedformatter.__init__cC�|j�|j�dSr@�r��appendrErMrrrrV#�z_nestedformatter._showitemN)r9r:r;r<rLrVrrrrr�sr�cCst|t�rtt�|��S|S)z'iterate key-value pairs in stable order)rr.�sortedr
�	iteritems)r"rrr�
_iteritems's
r�c@r)�_plainconverterz(convert non-primitive data types to textFcCs
t�d��)Ns%plainformatter should never be nested)r	�ProgrammingErrorr!rrrr%3�
z_plainconverter.wrapnestedcCst�||�S)z(stringify date tuple in the given format)r�datestr�r'r(rrrr+7sz_plainconverter.formatdatecs6tj��durd�tj�|���fdd�t|�D��S)z*stringify key-value pairs separated by sepNs%s=%sc3s(�|]\}}��|��|�fVqdSr@r�rcrd�v�r(�prefmtrrreCs�
�z-_plainconverter.formatdict.<locals>.<genexpr>)r
�identity�bytestr�joinr�r/rr�rr2<s�z_plainconverter.formatdictcs2tj��durd�tj�|���fdd�|D��S)z#stringify iterable separated by sepNs%sc3s�|]	}��|�VqdSr@r)rc�er�rrreNs�z-_plainconverter.formatlist.<locals>.<genexpr>)r
r�r�r�r5rr�rr7Gs
z_plainconverter.formatlistNr8rrrrr�.s



r�c@sZeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
ddd�Zdd�ZdS)�plainformatterzthe default text output schemecsLt�||||t�|jrt|_nt|_|�ur|j|_dS�fdd�|_dS)Ncs
��|�Sr@)rx)�srJ��outrr�<lambda>]s
z)plainformatter.__init__.<locals>.<lambda>)	r?rLr��	debugflagrrFrrx�_write�rGrHr�rIrJrr�rrLTszplainformatter.__init__cC�dSr@rrMrrrrY_rOzplainformatter.startitemcKr�r@rrorrrr"brOzplainformatter.datacOs|j||fi|��dSr@�r�)rGrtrurvrJrrrrxeszplainformatter.writecOs"|r|j||fi|��dSdS)zdo conditional writeNr�)rGryrtrurvrJrrrrzhs�zplainformatter.condwritecKs|j|fi|��dSr@r�r{rrrr}mszplainformatter.plaincCrU)NTrrMrrrr~prOzplainformatter.isplainNr�cCr r@r)rGr�r#r$rrrr�srzplainformatter.nestedcCr�r@rrMrrrrPwrOzplainformatter.endr�)
r9r:r;r<rLrYr"rxrzr}r~r�rPrrrrr�Qs
r�c@�$eZdZdd�Zdd�Zdd�ZdS)�debugformattercCs.t�||||t�||_|j�d|j�dS)Ns%s = [
)r?rLr�_outrxrBr�rrrrL|szdebugformatter.__init__cCs"|j�dtj|jddd��dS)Ns    %s,
�r)�indent�level)r�rxr�pprintrErMrrrrV�s�zdebugformatter._showitemcC�t�|�|j�d�dS)Ns]
�r?rPr�rxrMrrrrP��
zdebugformatter.endN�r9r:r;rLrVrPrrrrr�{sr�c@r�)�pickleformattercCs"t�||||t�||_g|_dSr@)r?rLrr�r�r�rrrrL�s
zpickleformatter.__init__cCr�r@r�rMrrrrV�r�zpickleformatter._showitemcCs"t�|�|j�t�|j��dSr@)r?rPr�rx�pickle�dumpsr�rMrrrrP�s
zpickleformatter.endNr�rrrrr��sr�c@�(eZdZdZdd�Zdd�Zdd�ZdS)	�
cborformatterz2serialize items as an indefinite-length CBOR arraycCs*t�||||t�||_|j�tj�dSr@)r?rLrr�rxr�BEGIN_INDEFINITE_ARRAYr�rrrrL�szcborformatter.__init__cCs|j�d�t�|j���dSr�)r�rxr�r�streamencoderErMrrrrV�szcborformatter._showitemcCst�|�|j�tj�dSr@)r?rPr�rxr�BREAKrMrrrrP�s
zcborformatter.endN)r9r:r;r<rLrVrPrrrrr��s
r�c@r�)	�
jsonformatterTcCs.t�||||t�||_|j�d�d|_dS)N�[T)r?rLrr�rx�_firstr�rrrrL�s
zjsonformatter.__init__cCs�|jrd|_n|j�d�|j�d�d}t|j���D] \}}|r%d}n|j�d�tj|dd�}|j�d||f�q|j�d�dS)	NF�,s
 {
Ts,
)�paranoids
  "%s": %ss
 })r�r�rxr�rE�itemsr�json)rG�firstrdr��urrrrV�szjsonformatter._showitemcCr�)N�
]
r�rMrrrrP�r�zjsonformatter.endN)r9r:r;r�rLrVrPrrrrr��s
r�c@r)�_templateconverterz=convert non-primitive data types to be processed by templaterTcCstj|||d�S)z$wrap nested data by templatable type)r#r$)r�mappinglistr!rrrr%�sz_templateconverter.wrapnestedcCs
t�|�S)zreturn date tuple)rr'r�rrrr+�s
z_templateconverter.formatdatecs6t�t���������fdd�}tj����|d�S)zAbuild object that can be evaluated as either plain string or dictc3s�t�������VdSr@)r�r2r�r"r(r0r$r1rr�f�s�z(_templateconverter.formatdict.<locals>.f)r0r1r(�gen)r�sortdictr�r�
hybriddict)r"r0r1r(r$r�rr�rr2�s

�z_templateconverter.formatdictcs,t�������fdd�}tj���|d�S)zAbuild object that can be evaluated as either plain string or listc3s�t������VdSr@)r�r7r�r"r(r6r$rrr��s�z(_templateconverter.formatlist.<locals>.f)r6r(r�)r4r�
hybridlist)r"r6r(r$r�rr�rr7�sz_templateconverter.formatlistNr8rrrrr��s


r�c@sDeZdZddd�Zdd�Zdd�Zejdd	��Zd
d�Z	dd
�Z
dS)�templateformatterNcCs|t�||||t�||_|j|_t||tjt	|�tj
d�|_|r'|jj�
|�t||jgd��|_t��|_|�di�dS)N��defaults�	resources�cache)�	docheader�	docfooter�	separatorr�)r?rLr�r��ref�_tref�
loadtemplaterr�keywords�templateresources�defaulttempl�_tr�rj�templatepartsmap�_parts�	itertools�count�_counter�_renderitem)rGrHr�rIrJ�spec�overridetemplatesrrrrL�s"��
ztemplateformatter.__init__cCsB|j��}t|j�|d<}|dkr|�di�|�|j|�dS)Nsindexrr�)rE�copy�nextr�r�r�)rG�item�indexrrrrVs

ztemplateformatter._showitemcCsZ||jvrdS|j|}|��D]\}}|durt�|�||<q|j�|j�||��dSr@)r�r�r�wrappedvaluer�rxr��render)rG�partr�r�rdr�rrrr�
s

�ztemplateformatter._renderitemcCs|j�|j�Sr@)r��symbolsusedr�rMrrr�_symbolsusedr[ztemplateformatter._symbolsusedcCs
|jdS)z5set of field names to be referenced from the templater)r�rMrrrrnr�ztemplateformatter.datahintcCst�|�|�di�dS)Nr�)r?rPr�rMrrrrPr�ztemplateformatter.endr@)r9r:r;rLrVr�r�
propertycacher�rnrPrrrrr��s


r�T)�frozenc@s<eZdZe��Ze��Ze��Zejdd�Zejdd�Z	dS)�templatespecN)�default)
r9r:r;r�ibr�r#�mapfile�refargs�fprrrrr�!sr�cCstddd�Sr@�r�rrrr�empty_templatespec*sr�cCst|dd|�Sr@r�)r�r�rrr�reference_templatespec.sr�cCs$tjrt|t�rJd��td|d�S)Nstmpl must not be a strr�)r
�ispy3r�strr�)r#rrr�literal_templatespec2sr�cCst|d||d�S)N)r�r�)rIr�r�rrr�mapfile_templatespec8sr�c	Cst|st�Sd|vr
t|�S|dvrt|�S|�d�\}}}|dvr7|r7|�d�r7t�|�t||dd�d�Stj�	|�d	sUt�
d
|�pJt�
|�\}}|rUt|||�S|�d|�r_t|�S|dkru|�
td
�t���t�td���d|vs}d|vr�tj�|�r�tj�|��d�r�t|tj�|��St�|d��}|��}Wd�t|�S1s�wYt|�St|�S)a�Find the template matching the given -T/--template spec 'tmpl'

    'tmpl' can be any of the following:

     - a literal template (e.g. '{rev}')
     - a reference to built-in template (i.e. formatter)
     - a map-file name or path (e.g. 'changelog')
     - a reference to [templates] in config file
     - a path to raw template file

    A map file defines a stand-alone template environment. If a map file
    selected, all templates defined in the file will be loaded, and the
    template matching the given topic will be rendered. Aliases won't be
    loaded from user config, but from the map file.

    If no map file selected, all templates in [templates] section will be
    available as well as aliases in [templatealias].
    �{>�cbor�json�debug�pickle�(>r�r��)N���)r�rsmap-cmdline.�	templatesslistsavailable styles: %s
sspecify a template�/�\smap-srb)r�r�r��	partition�endswithr
�	parseexpr�os�pathrq�try_open_templater��configrxr�	stylelistr	�Abort�isfile�basename�
startswith�realpathr�	posixfile�read)	rHrIr#�func�fsep�ftail�mapnamer�r�rrr�lookuptemplate<sB
��

��rcs`|j|ji}|jr|��fdd�|D��|S|jr.|D]}d|j|f}|�vr-|||<q|S)zCreate a mapping of {part: ref}c3s �|]}|�vr||fVqdSr@r)rc�p��trrre�s�z#templatepartsmap.<locals>.<genexpr>s%s:%s)r�r�rj)r�r�	partnames�partsmapr�r�rrrr�~s��r�cCsD|jr|jrJ�|jrtjj|j|j|||d�St||j|||d�S)zPCreate a templater from either a literal template or loading from
    a map filer�)r#r�r
�frommapfiler��
maketemplater)rHr�r�r�r�rrrr��s��r�cCsJ|�d�}tj||||d�}|j�dd�|�d�D��|r#||jd<|S)z0Create a templater from a string template 'tmpl's
templatealias)r�r�r��aliasescss"�|]\}}|t�|�fVqdSr@)r
�
unquotestringr�rrrre�s�
�z maketemplater.<locals>.<genexpr>rr�)�configitemsr
r�rj)rHr#r�r�r�r"rrrrr!�s
��
r!c@steZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Ze
ed�ZdS)r�z@Resource mapper designed for the default templatekw and functionNcCsi||d�|_dS)N)�cachera�ui)�_resmap)rGrHrirrrrL�s�ztemplateresources.__init__cs��fdd����D�S)Ncs h|]}���|�dur|�qSr@)�_getsomerb��mappingrGrr�	<setcomp>�sz2templateresources.availablekeys.<locals>.<setcomp>)�	knownkeys�rGr*rr)r�
availablekeys�s�ztemplateresources.availablekeyscCshd�S)N>r&r_r`rar%�revcacherrMrrrr,�sztemplateresources.knownkeyscCs@||��vrdS|�||�}|tur|j|||�}||<|Sr@)r,r(�_placeholder�
_loadermap�rGr*r0r�rrr�lookup�sztemplateresources.lookupcCs|i}|�|�ri|d<|�|�r |�|�r t�||d�}||d<d|vr.|�|d�r.t|d<d|vr<|�|d�r<t|d<|S)Nr/�nodesoriginalnoder_r`�path)�_hasnodespecr�	runsymbol�_hasliteralr0)rGrl�origmapping�
newmappingr*�orignoderrr�populatemap�s
ztemplateresources.populatemapcCs"|�|�}|dur|S|j�|�Sr@)�getr'r2rrrr(�s
ztemplateresources._getsomecCs||vo
t||�S)z<Test if a literal value is set or unset in the given mapping)�callable)rGr*r0rrrr8�sztemplateresources._hasliteralcCs|�|�}t|�rdS|S)z1Return value of the given name if it is a literalN)r=r>r2rrr�_getliteral�s
ztemplateresources._getliteralcCsd|vpd|vS)z=Test if context revision is set or unset in the given mappingr4r_rr-rrrr6�r�ztemplateresources._hasnodespeccC�N|�|d�}|�|d�}|dus|durdSz||WStjy&YdSw)Nrar4)r(r?r	�RepoLookupError)rGr*ri�noderrr�_loadctx��
�ztemplateresources._loadctxcCr@)Nr_r5)r(r?r	�LookupError)rGr*�ctxrrrr�	_loadfctx�rDztemplateresources._loadfctx)r_r`r@)r9r:r;r<rLr.r,r3r<r(r8r?r6rCrGr1rrrrr��s 


�r�r�c	
CsT|j|i}	|r||	d|j<|r||	d|j<|r ||	d|j<t||||||	d�S)z]Build template formatter that handles customizable built-in templates
    such as -Tjson(...)s%s:docheaders%s:docfooters%s:separator)r�)r�r�)
rHr�rIrJr�r#�	docheader�	docfooter�	separator�	templatesrrr�_internaltemplateformatters

�rLcCsxt|||�dd��}|jdkr%|jdur%t|||||d|jtjtjd�S|jdkr1t||||�S|jdkrK|jdurKt|||||d|jdd	d
d�	S|jdkrWt	||||�S|jdkrl|jduseJd
��t
||||�S|jdkr�|jduszJd
��t||||�S|js�|js�|j
r�|jdus�Jd
��t|||||�S|�dd�r�t||||�S|�dd�r�t	||||�St||||�S)Nstemplater�r�s{dict(%s)|cbor})r#rHrIr�s{dict(%s)|json}s[
 r�s,
 )r#rHrIrJrzfunction-style not supportedr�r&sformatdebugs
formatjson)rr=r�r�rLrr�r�r�r�r�r�r#r�r��
configboolr�)rHr�rIrJr�rrr�	formatter sT�

�


rNc	csx�t�|d��+}t||||��}|VWd�n1swYWd�dSWd�dS1s5wYdS)zrCreate a formatter that writes outputs to the specified file

    Must be invoked using the 'with' statement.
    swbN)rrrN)rH�filenamerIrJr��fmrrr�
openformatterOs���"�rQccs�|VdSr@r)rPrrr�_neverendingZs�
rRcCs |rt|j||j|j�St|�S)z�Create a formatter backed by file if filename specified, else return
    the given formatter

    Must be invoked using the 'with' statement. This will never call fm.end()
    of the given formatter.
    )rQrArBrCrR)rPrOrrr�maybereopen_srSr@)NNN)r�r�r�)=r<�
__future__rr�
contextlibr�r
�i18nrrBrr�
thirdpartyr�r	r
rrr
rr�utilsrrrr�r�objectrr?r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r!r0�resourcemapperr�rLrN�contextmanagerrQrRrSrrrr�<module>s^d$	
a
#* &
2

B

_
�/




https://t.me/RX1948 - 2025