
    ph]                        S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJrJrJrJr  SS	KJr  SS
KJrJrJr  SSKJrJrJrJrJ r   \" \" SS5      S9r! " S S5      r" " S S\"5      r# " S S\#5      r$ " S S\#5      r% " S S\"5      r& " S S\"5      r' " S S\&5      r( " S S\"5      r) " S  S!\"5      r*g)"z:
Element
-------

A generic class for creating Elements.

    N)hexlify)OrderedDict)escape)urandom)Path)BinaryIOListOptionalTupleTypeUnion)urlopen)EnvironmentPackageLoaderTemplate   )TypeParseSize	_camelify_parse_sizenone_maxnone_minbranca	templates)loaderc            	          \ rS rSr% Sr\" S5      r\\S'     S!S\\	   S\\	   4S jjr
S	\4S
 jrS\4S jrS	\	4S jrS	\\\\         4S jrS	\\\\         4S jr  S!SS S\\	   S\\   S	S 4S jjr  S!SS S\\	   S\\   S	S 4S jjr  S!SS S\\	   S\\   S	S 4S jjr  S"S\S\S	\\\4   4S jjrS#S\S	\	4S jjrS$S jrS	\	4S jr S%S\\	\\\ 4   S\4S jjr!S r"g)&Element   a  Basic Element object that does nothing.
Other Elements may inherit from this one.

Parameters
----------
template : str, default None
    A jinaj2-compatible template string for rendering the element.
    If None, template will be:

    .. code-block:: jinja

        {% for name, element in this._children.items() %}
        {{element.render(**kwargs)}}
        {% endfor %}

    so that all the element's children are rendered.
template_name : str, default None
    If no template is provided, you can also provide a filename.

z^{% for name, element in this._children.items() %}
    {{element.render(**kwargs)}}{% endfor %}	_templateNtemplatetemplate_namec                    SU l         [        [        S5      5      R                  5       U l        [        5       U l        S U l        Xl        X l	        Ub  [        U5      U l        g Ub  [        R                  U5      U l        g g )Nr      )_namer   r   decode_idr   	_children_parent_template_str_template_namer   r   ENVget_template)selfr   r    s      fC:\Users\julio\OneDrive\Documentos\Trabajo\IdeasFrscas\Cabanna\env\Lib\site-packages\branca/element.py__init__Element.__init__7   so    
 $
,3354?M*.,4-:%h/DN& --m<DN '    returnc                 ^    U R                   R                  5       nUR                  SS5        U$ )zModify object state when pickling the object.

jinja2 Templates cannot be pickled, so remove the instance attribute
if it exists. It will be added back when unpickling (see __setstate__).
r   N)__dict__copypopr,   states     r-   __getstate__Element.__getstate__H   s)     mm((*		+t$r0   r7   c                     US   b  [        US   5      US'   O!US   b  [        R                  US   5      US'   U R                  R	                  U5        g)z3Re-add _template instance attribute when unpicklingr(   Nr   r)   )r   r*   r+   r3   updater6   s     r-   __setstate__Element.__setstate__R   sZ    !-!)%*@!AE+#$0!$!1!1%8H2I!JE+U#r0   c                 L    [        U R                  5      S-   U R                  -   $ )zReturns a string representation of the object.
This string has to be unique and to be a python and
javascript-compatible
variable name.
_)r   r#   r%   r,   s    r-   get_nameElement.get_name[   s!     $s*TXX55r0   c                     SS/SS//$ )z|Computes the bounds of the object itself (not including it's children)
in the form [[lat_min, lon_min], [lat_max, lon_max]]
N r@   s    r-   _get_self_boundsElement._get_self_boundsc   s     ttTl++r0   c                 H   U R                  5       nU R                  R                  5        Hs  nUR                  5       n[	        US   S   US   S   5      [	        US   S   US   S   5      /[        US   S   US   S   5      [        US   S   US   S   5      //nMu     U$ )znComputes the bounds of the object and all it's children
in the form [[lat_min, lon_min], [lat_max, lon_max]].
r   r   )rE   r&   values
get_boundsr   r   )r,   boundschildchild_boundss       r-   rI   Element.get_boundsi   s     &&(^^**,E ++-L VAYq\<?1+=>VAYq\<?1+=>
 VAYq\<?1+=>VAYq\<?1+=>	F - r0   rK   nameindexc                 V    [         R                  " S[        SS9  U R                  XUS9$ )Add a child.zDMethod `add_children` is deprecated. Please use `add_child` instead.   )
stacklevelrN   rO   )warningswarnFutureWarning	add_child)r,   rK   rN   rO   s       r-   add_childrenElement.add_children}   s.     	R	

 ~~ee~<<r0   c                 &   Uc  UR                  5       nUc  XR                  U'   O`U R                  R                  5        Vs/ s H  oDS   U:w  d  M  UPM     nnUR                  [	        U5      X!45        [        U5      U l        Xl        U $ s  snf )rQ   r   )rA   r&   itemsinsertintr   r'   )r,   rK   rN   rO   itemr\   s         r-   rX   Element.add_child   s     <>>#D=#(NN4 &*nn&:&:&<P&<dQ4T&<EPLLUd]3(/DN	 Qs   BBparentc                 &    UR                  XUS9  U $ )zAdd element to a parent.rT   )rX   )r,   ra   rN   rO   s       r-   add_toElement.add_to   s     	6r0   depthorderedc                 "   U(       a  [         nO[        nU" 5       nU R                  US'   U R                  US'   US:w  aI  U" U R                  R                  5        VVs/ s H  u  pgXgR                  US-
  S94PM     snn5      US'   U$ s  snnf ),Returns a dict representation of the object.rN   idr   r   )re   children)r   dictr#   r%   r&   r\   to_dict)r,   re   rf   kwargsdict_funoutrN   rK   s           r-   rl   Element.to_dict   s     "HHjjjFHHD	A:& (,~~';';'='= ==uqy=9:'=C
O 
s   B
c                 L    [         R                  " U R                  USS940 UD6$ )z,Returns a JSON representation of the object.Tre   rf   )jsondumpsrl   )r,   re   rm   s      r-   to_jsonElement.to_json   s#    zz$,,UD,ALVLLr0   c                 T    U R                   c  U $ U R                   R                  5       $ z&Returns the root of the elements tree.)r'   get_rootr@   s    r-   ry   Element.get_root   s$    <<K<<((**r0   c                 4    U R                   R                  XS9$ )/Renders the HTML representation of the element.thisrm   )r   render)r,   rm   s     r-   r   Element.render   s    ~~$$$$>>r0   outfile
close_filec                    [        U[        [        [        45      (       a  [	        US5      nOUnU R                  5       nUR                  " S0 UD6nUR                  UR                  S5      5        U(       a  UR                  5         gg)zSaves an Element into a file.

Parameters
----------
outfile : str or file object
    The file (or filename) where you want to output the html.
close_file : bool, default True
    Whether the file has to be closed after write.
wbutf8NrD   )

isinstancestrbytesr   openry   r   writeencodeclose)r,   r   r   rm   fidroothtmls          r-   saveElement.save   sk      gUD122w%CC}}{{$V$		$++f%&IIK r0   )r&   r%   r#   r'   r   r)   r(   )NNT)r   )r1   r   )T)#__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r
   r   r.   rk   r8   r<   rA   r	   floatrE   rI   r^   rY   rX   rc   boolr   r   rl   ru   ry   r   r   r   r   r   __static_attributes__rD   r0   r-   r   r      s   * #	Ix  #''+=3-=  }="d $$ $6# 6,$tHUO'<"= ,Dhuo!67 . ##	== sm= }	=
 
=" ##	 sm }	
 
* ##	 sm }	
 
  
 
t[ 	!0MS MC M+?# ?  sE412  r0   r   c            	       x   ^  \ rS rSrSrSS\S\4U 4S jjjrS\4S jr	  SS\
S	\S\\\4   4U 4S
 jjjrSrU =r$ )Link   z3An abstract class for embedding a link in the HTML.urldownloadc                 l   > [         TU ]  5         Xl        S U l        U(       a  U R	                  5         g g )N)superr.   r   codeget_coder,   r   r   	__class__s      r-   r.   Link.__init__   s+    %)	MMO r0   r1   c                     U R                   c(  [        U R                  5      R                  5       U l         U R                   $ )z2Opens the link and returns the response's content.)r   r   r   readr@   s    r-   r   Link.get_code   s/    99)..0DIyyr0   re   rf   c                 J   > [         TU ]  " SXS.UD6nU R                  US'   U$ )rh   rr   r   rD   )r   rl   r   r,   re   rf   rm   ro   r   s        r-   rl   Link.to_dict   s-     goEEEfEXXE

r0   )r   r   Fr   )r   r   r   r   r   r   r   r.   r   r   r^   r   rk   r   rl   r   __classcell__r   s   @r-   r   r      sb    =C 4  %  		 	
 
t[ 	!	 	r0   r   c                   L   ^  \ rS rSrSr\" S5      rSS\S\4U 4S jjjr	Sr
U =r$ )	JavascriptLinki  zCreate a JavascriptLink object based on a url.

Parameters
----------
url : str
    The url to be linked
download : bool, default False
    Whether the target document shall be loaded right now.

z{% if kwargs.get("embedded",False) %}<script>{{this.get_code()}}</script>{% else %}<script src="{{this.url}}"></script>{% endif %}r   r   c                 .   > [         TU ]  XS9  SU l        g )Nr   r   r   r   r.   r#   r   s      r-   r.   JavascriptLink.__init__  s    S4%
r0   r#   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   s   @r-   r   r     s1    	 	I&C &4 & &r0   r   c                   L   ^  \ rS rSrSr\" S5      rSS\S\4U 4S jjjr	Sr
U =r$ )	CssLinki  zCreate a CssLink object based on a url.

Parameters
----------
url : str
    The url to be linked
download : bool, default False
    Whether the target document shall be loaded right now.

z{% if kwargs.get("embedded",False) %}<style>{{this.get_code()}}</style>{% else %}<link rel="stylesheet" href="{{this.url}}"/>{% endif %}r   r   c                 .   > [         TU ]  XS9  SU l        g )Nr   r   r   r   s      r-   r.   CssLink.__init__3  s    S4
r0   r   r   r   r   s   @r-   r   r     s1    	 	IC 4  r0   r   c                      ^  \ rS rSrSr\" S5      r     SS\S\\   S\S\\   S\\	\
\
4      4
U 4S	 jjjr  SS
\
S\S\\\4   4U 4S jjjrSS jrS\4S jrS\4S jrSS\
S\
S\
S\SS4
S jjrSrU =r$ )Figurei8  a  Create a Figure object, to plot things into it.

Parameters
----------
width : str, default "100%"
    The width of the Figure.
    It may be a percentage or pixel value (like "300px").
height : str, default None
    The height of the Figure.
    It may be a percentage or a pixel value (like "300px").
ratio : str, default "60%"
    A percentage defining the aspect ratio of the Figure.
    It will be ignored if height is not None.
title : str, default None
    Figure title.
figsize : tuple of two int, default None
    If you're a matplotlib addict, you can overwrite width and
    height. Values will be converted into pixels in using 60 dpi.
    For example figsize=(10, 5) will result in
    width="600px", height="300px".
z<!DOCTYPE html>
<html>
<head>
{% if this.title %}<title>{{this.title}}</title>{% endif %}    {{this.header.render(**kwargs)}}
</head>
<body>
    {{this.html.render(**kwargs)}}
</body>
<script>
    {{this.script.render(**kwargs)}}
</script>
</html>
widthheightratiotitlefigsizec                   > [         TU ]  5         SU l        [        5       U l        [        5       U l        [        5       U l        X R                  l        X R
                  l        X R                  l        Xl        X l	        X0l
        X@l        Ub2  [        SUS   -  5      S-   U l        [        SUS   -  5      S-   U l	        U R                  R                  [        S5      SS9  g )	Nr   <   r   pxr   zE<meta http-equiv="content-type" content="text/html; charset=UTF-8" />	meta_httprN   )r   r.   r#   r   headerr   scriptr'   r   r   r   r   r   rX   )r,   r   r   r   r   r   r   s         r-   r.   Figure.__init___  s     	
iI	i" 		"


R'!*_-4DJb71:o.5DK 	W 	 	 	
r0   re   rf   r1   c                   > [         TU ]  " SSU0UD6nU R                  R                  " SSUS-
  0UD6US'   U R                  R                  " SSUS-
  0UD6US'   U R                  R                  " SSUS-
  0UD6US'   U$ )rh   re   r   r   r   r   rD   )r   rl   r   r   r   r   s        r-   rl   Figure.to_dict  s     go4E4V4++F%!)FvFHii''BeaiB6BF++F%!)FvFH
r0   c                     U $ rx   rD   r@   s    r-   ry   Figure.get_root      r0   c                     U R                   R                  5        H  u  p#UR                  " S0 UD6  M     U R                  R                  XS9$ )r|   r}   rD   )r&   r\   r   r   )r,   rm   rN   rK   s       r-   r   Figure.render  sB    >>//1KDLL"6" 2~~$$$$>>r0   c                     [        U R                  " S0 UD65      nU R                  c&  SR                  X R                  U R
                  S9nU$ SR                  X R                  U R                  S9nU$ )z*Displays the Figure in a Jupyter notebook.a  <div style="width:{width};"><div style="position:relative;width:100%;height:0;padding-bottom:{ratio};"><span style="color:#565656">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc="{html}" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>r   r   r   z<iframe srcdoc="{html}" width="{width}" height="{height}"style="border:none !important;" "allowfullscreen" "webkitallowfullscreen" "mozallowfullscreen"></iframe>r   r   r   rD   )r   r   r   formatr   r   )r,   rm   r   iframes       r-   _repr_html_Figure._repr_html_  st    dkk+F+,;; f$jj

fC "  f$jjfE  r0   xynmarginDivc                     SU-  nSU-  nUS-
  U-  U-  nUS-
  U-  U-  nXuU-  -   nXU-  -   nUSSU-  -
  -  nUSSU-  -
  -  n[        SSU-   S3SU-   S3SU-   S3SU-   S3S9n	U R                  U	5        U	$ )a  Creates a div child subplot in a matplotlib.figure.add_subplot style.

Parameters
----------
x : int
    The number of rows in the grid.
y : int
    The number of columns in the grid.
n : int
    The cell number in the grid, counted from 1 to x*y.
margin : float, default 0.05
    Factor to add to the left, top, width and height parameters.

Example
-------
>>> fig.add_subplot(3, 2, 5)
# Create a div in the 5th cell of a 3rows x 2columns
grid(bottom-left corner).
g      ?r   g       @absoluteg      Y@%)positionr   r   lefttop)r   rX   )
r,   r   r   r   r   r   r   r   r   divs
             r-   add_subplotFigure.add_subplot  s    ( aqQ!u$A!|v%fn$VO#S6\)*1sV|+,U]O1%fn%Q'DL>#3;-q!
 	s
r0   )r#   r   r   r   r   r   r   r   )100%N60%NNr   )r1   r   )g?)r   r   r   r   r   r   r   r   r
   r   r^   r.   r   r   rk   r   rl   ry   r   r   r   r   r   r   r   s   @r-   r   r   8  s    , 	I$  $#-1 
 
  
 	 

 } 
 %S/* 
  
H  
 
t[ 	! ?# ?s .&S &S &S &% &5 & &r0   r   c            	       Z   ^  \ rS rSrSr\" S5      r   S
S\S\S\	S\	4U 4S jjjr
S	rU =r$ )Htmli  a  Create an HTML div object for embedding data.

Parameters
----------
data : str
    The HTML data to be embedded.
script : bool
    If True, data will be embedded without escaping
    (suitable for embedding html-ready code)
width : int or str, default '100%'
    The width of the output div element.
    Ex: 120 , '80%'
height : int or str, default '100%'
    The height of the output div element.
    Ex: 120 , '80%'
z<div id="{{this.get_name()}}" style="width: {{this.width[0]}}{{this.width[1]}}; height: {{this.height[0]}}{{this.height[1]}};">{% if this.script %}{{this.data}}{% else %}{{this.data|e}}{% endif %}</div>datar   r   r   c                    > [         TU ]  5         SU l        X l        Xl        [        U5      U l        [        U5      U l        g )Nr   )r   r.   r#   r   r   r   r   r   )r,   r   r   r   r   r   s        r-   r.   Html.__init__  s9     	
	 '
!&)r0   )r#   r   r   r   r   )Fr   r   )r   r   r   r   r   r   r   r   r   r   r.   r   r   r   s   @r-   r   r     sU    " 	VI % &** * 	*
 * *r0   r   c                      ^  \ rS rSrSr\" S5      r     SS\S\S\S\S\4
U 4S	 jjjr	SS jr
S rS
\4S jrSrU =r$ )r   i   aP  Create a Div to be embedded in a Figure.

Parameters
----------
width: int or str, default '100%'
    The width of the div in pixels (int) or percentage (str).
height: int or str, default '100%'
    The height of the div in pixels (int) or percentage (str).
left: int or str, default '0%'
    The left-position of the div in pixels (int) or percentage (str).
top: int or str, default '0%'
    The top-position of the div in pixels (int) or percentage (str).
position: str, default 'relative'
    The position policy of the div.
    Usual values are 'relative', 'absolute', 'fixed', 'static'.
a  {% macro header(this, kwargs) %}<style> #{{this.get_name()}} {
        position : {{this.position}};
        width : {{this.width[0]}}{{this.width[1]}};
        height: {{this.height[0]}}{{this.height[1]}};
        left: {{this.left[0]}}{{this.left[1]}};
        top: {{this.top[0]}}{{this.top[1]}};
    </style>{% endmacro %}{% macro html(this, kwargs) %}<div id="{{this.get_name()}}">{{this.html.render(**kwargs)}}</div>{% endmacro %}r   r   r   r   r   c                   > [         [        U ]  5         SU l        [	        U5      U l        [	        U5      U l        [	        U5      U l        [	        U5      U l        XPl	        [        5       U l        [        S5      U l        [        5       U l        X R                  l        X R                  l        X R                  l        g )Nr   zY{% for name, element in this._children.items() %}{{element.render(**kwargs)}}{% endfor %})r   r   r.   r#   r   r   r   r   r   r   r   r   r   r   r'   )r,   r   r   r   r   r   r   s         r-   r.   Div.__init__!  s     	fd$&
 !'
!&)%	s# i
	
 i" 		"r0   r1   c                     U $ rx   rD   r@   s    r-   ry   Div.get_root?  r   r0   c                 T   U R                   n[        U[        5      (       d   S5       eU R                  R	                  5        H  u  p4UR
                  " S0 UD6  M     U R                  R                  R	                  5        H  u  p4UR                  R                  XCS9  M      U R                  R                  R	                  5        H  u  p4UR                  R                  XCS9  M      U R                  R                  R                  R                  SS5      nUb7  UR                  R                  [        U" X5      5      U R                  5       S9  U R                  R                  R                  R                  SS5      nUb7  UR                  R                  [        U" X5      5      U R                  5       S9  U R                  R                  R                  R                  SS5      nUb8  UR                  R                  [        U" X5      5      U R                  5       S9  gg)r|   8You cannot render this Element if it is not in a Figure.r   r   Nr   r   rD   )r'   r   r   r&   r\   r   r   rX   r   r   moduler3   getr   rA   r   )r,   rm   figurerN   elementr   r   r   s           r-   r   
Div.renderC  s   &&)) 	
I	
) "^^113MDNN$V$ 4 "[[2288:MDMM##G#7 ; "[[2288:MDMM##G#7 ; &&//33HdCMM##GF4,@$A#X~~$$--11&$?KK!!'$t*<"=DMMO!T&&//33HdCMM##GF4,@$A#X r0   c                     U R                   c>  U R                  [        5       5        U R                   R                  " S0 UD6nSU l         U$ U R                   R                  " S0 UD6nU$ )z'Displays the Div in a Jupyter notebook.NrD   )r'   rc   r   r   )r,   rm   ro   s      r-   r   Div._repr_html__  s]    <<KK!,,**4V4CDL 
 ,,**4V4C
r0   )
r#   r'   r   r   r   r   r   r   r   r   )r   r   0%r   relative)r1   r   )r   r   r   r   r   r   r   r   r   r.   ry   r   r   r   r   r   s   @r-   r   r      s    " 	I"  & &"!"## # 	#
 # # #<Y8s  r0   r   c                      ^  \ rS rSrSr     SS\\\\4      S\S\\   S\S\\	\
\
4      4
U 4S jjjrS	\4U 4S
 jjrSrU =r$ )IFrameij  a  Create a Figure object, to plot things into it.

Parameters
----------
html : str, default None
    Eventual HTML code that you want to put in the frame.
width : str, default "100%"
    The width of the Figure.
    It may be a percentage or pixel value (like "300px").
height : str, default None
    The height of the Figure.
    It may be a percentage or a pixel value (like "300px").
ratio : str, default "60%"
    A percentage defining the aspect ratio of the Figure.
    It will be ignored if height is not None.
figsize : tuple of two int, default None
    If you're a matplotlib addict, you can overwrite width and
    height. Values will be converted into pixels in using 60 dpi.
    For example figsize=(10, 5) will result in
    width="600px", height="300px".
r   r   r   r   r   c                 H  > [         TU ]  5         SU l        X l        X0l        X@l        Ub2  [        SUS   -  5      S-   U l        [        SUS   -  5      S-   U l        [        U[        5      (       a  U R                  [        U5      5        g Ub  U R                  U5        g g )Nr  r   r   r   r   )
r   r.   r#   r   r   r   r   r   rX   r   )r,   r   r   r   r   r   r   s         r-   r.   IFrame.__init__  s     	


R'!*_-4DJb71:o.5DKdC  NN74=)NN4  r0   r1   c                 D  > [         TU ]  " S0 UD6nS[        R                  " UR	                  S5      5      R                  S5      -   nU R                  c&  SR                  X R                  U R                  S9nU$ SR                  X R                  U R                  S9nU$ )r|   z$data:text/html;charset=utf-8;base64,r   z<div style="width:{width};"><div style="position:relative;width:100%;height:0;padding-bottom:{ratio};"><iframe src="{html}" style="position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;"></iframe></div></div>r   z`<iframe src="{html}" width="{width}" style="border:none !important;" height="{height}"></iframe>r   rD   )
r   r   base64	b64encoder   r$   r   r   r   r   )r,   rm   r   r   r   s       r-   r   IFrame.render  s    w~''58H8HKK9

&. ;; f$jj

fC  .f$jjfE  r0   )r#   r   r   r   )Nr   Nr   N)r   r   r   r   r   r
   r   r   r   r   r^   r.   r   r   r   r   s   @r-   r  r  j  s    0 /3 $-1!uS'\*+! ! 	!
 ! %S/*! !.#  r0   r  c                   B   ^  \ rS rSrSr\" S5      rU 4S jrS rSr	U =r
$ )MacroElementi  a  This is a parent class for Elements defined by a macro template.
To compute your own element, all you have to do is:

* To inherit from this class
* Overwrite the '_name' attribute
* Overwrite the '_template' attribute with something of the form::

    {% macro header(this, kwargs) %}
        ...
    {% endmacro %}

    {% macro html(this, kwargs) %}
        ...
    {% endmacro %}

    {% macro script(this, kwargs) %}
        ...
    {% endmacro %}

 c                 0   > [         TU ]  5         SU l        g )Nr	  r   )r,   r   s    r-   r.   MacroElement.__init__  s    #
r0   c                 B   U R                  5       n[        U[        5      (       d   S5       eU R                  R                  R
                  R                  SS5      nUb7  UR                  R                  [        U" X5      5      U R                  5       S9  U R                  R                  R
                  R                  SS5      nUb7  UR                  R                  [        U" X5      5      U R                  5       S9  U R                  R                  R
                  R                  SS5      nUb7  UR                  R                  [        U" X5      5      U R                  5       S9  U R                  R                  5        H  u  pgUR                  " S0 UD6  M     g)r|   r   r   Nr   r   r   rD   )ry   r   r   r   r   r3   r   r   rX   r   rA   r   r   r&   r\   r   )r,   rm   r   r   r   r   rN   r   s           r-   r   MacroElement.render  sA   &&)) 	
I	
) &&//33HdCMM##GF4,@$A#X~~$$--11&$?KK!!'$t*<"=DMMO!T&&//33HdCMM##GF4,@$A#X!^^113MDNN$V$ 4r0   r   )r   r   r   r   r   r   r   r.   r   r   r   r   s   @r-   r	  r	    s"    * I$% %r0   r	  )+r   r  rs   rU   binasciir   collectionsr   r   r   osr   pathlibr   typingr   r	   r
   r   r   r   urllib.requestr   jinja2r   r   r   	utilitiesr   r   r   r   r   r*   r   r   r   r   r   r   r   r  r	  rD   r0   r-   <module>r     s        #    ? ? " 7 7 P Px=>L L^7 8&T &2d 2]W ]@%*7 %*Pg& gTCW CL0%7 0%r0   