
    	eqP                    B   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZ d dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z8m9Z9m:Z:m;Z; ddl<m=Z=m<Z<  e8j>        d          Z? e8j>        d          Z@ e8j>        d          ZA e8j>        d          ZB ejC        eD          jE        jE        ZF e)ej&                  ZG e)e&          ZHdZIdZJe4dz  d e&jK        dd            d!z  ZLe4dz  d"eG d!z  ZMe3 d#eH d!ZNe3 d$eG d!ZOd%eI d&ZPd%eI d'ZQd(eJ d)ZRd*eJ d+ZSd,eP d-ZTd,eP d-ZUi ZVe4d.z  ZWeWd/z  eWd0z  eWd1z  eWd2z  eWd3z  eWd4z  eWd5z  gZXe$d6         ZYd7ZZd8Z[d9Z\d:Z]d;Z^ej_         G d< d=                      Z` G d> d?e          ZadpdAZbdqdBZc	 	 	 	 	 	 	 	 	 	 drdsdZZd	 	 	 	 	 	 	 	 	 dtdudbZe	 	 	 dvdwdhZfddd[dCd@d@d@i dcdCd@dEd@fdxdoZgdS )y    )annotationsN)IOAnyDictList)ApplicationSessionContext)CodeHandler)serialize_json)MACROSget_env)Document)script_for_render_items)
RenderItem%standalone_docs_json_and_render_items)wrap_in_script_tag)make_id)Literal   )__version__config)base_versionescape   )LOADING_INDICATOR_CSS_CLASS) build_single_handler_application)find_imports)	BASE_TEMPLATECDN_DISTDIST_DIRINDEX_TEMPLATE	Resources_envbundle_resourcesloading_cssset_resource_mode)
set_curdocstatesite.webmanifestserviceWorker.jszpyodide_worker.jszpyodide_handler.jszv0.23.4z	2023.03.1wheelszpanel-z-dirty z-py3-none-any.whlzbokeh-zwheels/panel-zwheels/bokeh-z!https://cdn.jsdelivr.net/pyodide/z/full/pyodide.jsz/pyc/pyodide.jsz;<link rel="stylesheet" href="https://pyscript.net/releases/z/pyscript.css" />z1<script defer src="https://pyscript.net/releases/z/pyscript.js"></script>z<script src="z"></script>imageszfavicon.icozicon-vector.svgzicon-32x32.pngzicon-192x192.pngzicon-512x512.pngzapple-touch-icon.pngzindex_background.png)pyodidepyscriptpyodide-workerzN
import asyncio

from panel.io.pyodide import init_doc, write_doc

init_doc()
z
await write_doc()z$
asyncio.ensure_future(write_doc());a@  
<script type="text/javascript">
async function main() {
  let pyodide = await loadPyodide();
  await pyodide.loadPackage("micropip");
  await pyodide.runPythonAsync(`
    import micropip
    await micropip.install([{{ env_spec }}]);
  `);
  code = `{{ code }}`
  await pyodide.runPythonAsync(code);
}
main();
</script>
a  
<script type="text/javascript">
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./serviceWorker.js').then(reg => {
    reg.onupdatefound = () => {
      const installingWorker = reg.installing;
      installingWorker.onstatechange = () => {
        if (installingWorker.state === 'installed' &&
            navigator.serviceWorker.controller) {
          // Reload page if service worker is replaced
          location.reload();
        }
      }
    }
  })
}
</script>
c                  .    e Zd ZU ded<   ded<   ded<   dS )Requestdictheaderscookies	argumentsN)__name__
__module____qualname____annotations__     0lib/python3.11/site-packages/panel/io/convert.pyr2   r2   z   s0         NNNNNNr<   r2   c                  X     e Zd Zdd fd
Zd Zed	d            Zed             Z xZS )
MockSessionContextNdocumentc               N    || _          t                      j        |d d d| d S )N)server_context
session_id)	_documentsuper__init__)selfrA   argskwargs	__class__s       r=   rG   zMockSessionContext.__init__   s3    !$tOOOOOOOr<   c                    d S Nr;   )rH   rI   s     r=   with_locked_documentz'MockSessionContext.with_locked_document   s    r<   returnboolc                    dS )NFr;   rH   s    r=   	destroyedzMockSessionContext.destroyed   s    ur<   c                &    t          i i i           S )N)r4   r5   r6   )r2   rR   s    r=   requestzMockSessionContext.request   s    r2<<<<r<   )rO   rP   )	r7   r8   r9   rG   rN   propertyrS   rU   __classcell__)rK   s   @r=   r?   r?      s        '+ P P P P P P P      X = = X= = = = =r<   r?   Tc                    |rd}d}d}nd x}x}}d t          |                                           D             }t          j        |||||t                    S )Nr)   zimages/favicon.icozimages/apple-touch-icon.pngc                Z    i | ](\  }}|d t           j                            |          z   )S )./)ospathbasename).0labelfs      r=   
<dictcomp>zmake_index.<locals>.<dictcomp>   s3    SSSUD))!,,,SSSr<   )itemsmanifest
apple_iconfavicontitle	PANEL_CDN)sortedrb   r!   renderr   )filesrf   rc   re   rd   rb   s         r=   
make_indexrk      su     /%&2

*...7ZSSVEKKMM=R=RSSSE h:u   r<   c                    t          |           dk    r|pd}d}n+|pd}t          |                                           d         }t          j        d||d|S )Nr   zPanel Applications
index.htmlr   )namer\   r;   )lenlistvaluesPWA_MANIFEST_TEMPLATEri   )rj   rf   rJ   r\   s       r=   build_pwa_manifestrs      sw    
5zzA~~----ELLNN##A& '     r<   autor.   Ffilenamestr | os.PathLike | IOrequirementsLiteral['auto'] | List[str]js_resourcescss_resources"Literal['auto'] | List[str] | NoneruntimeRuntimes	prerenderrP   panel_versionLiteral['auto', 'local'] | strrc   
str | None
http_patchinlinecompiledrO   strc                  ,-./0 t          | d          rVt          |                                 d          }dt          t	          j                               }t          |          }nwt          j        |           }d	                    |j
                            d          dd                   }t          t          |                                                    }t                      --fd-_        t!          -          5  |                    -           t%          j        d           ddd           n# 1 swxY w Y   |j        d	         j        j        }-j        st1          d
|  d          |dk    rt3          |          }nt5          |t                    rt          j        |                                          rut          j        |                              d                                          }	 d	dlm, ,0fd|D             }n$# t@          $ r}tC          d|           d}~ww xY w|dk    rdt          tD          #                                                              d          d         z   }dt          tH          #                                                              d          d         z   }n$|dk    rtJ          }tL          }nd| }dtN           }||g}|r|(                    d           |d |D             z   }tR          *                                D ]/\  /.tW          /fd|D                       r./fd|D             }0|dk    rtX          ntZ          }d	                    t\          ||g          }d}|g }|dk    rH|dk    rt^          g}g }|dk    rt`          g}d	                    d |D                       }d| d | d!}n
|dk    rg }d"	                    d# |D                       }|1                    d$d%          1                    d&d'          }|d(k    rk|dk    rg }td          3                    |th          j5        d)          }tl          3                    |
rtn          ntp          ||d*          }ts          |          }nH|dk    r|
rtt          ntv          g}ty          j=        t|                    }|3                    ||d+          }|r{t                      }t          -          \  }}|d	         } t          t          |          d,-          }!|ts          |!d.|          z  }|ts          t          ||                    z  }nt          d/-j        d,0          } | g}t          |	rd1nd23          }"t          d4z  d5z                      d          }#t          th          j5        th          jH        th          jI                  }$|(                    d6|# d|$ d7           t!          -          5  t          -j        |"          \  }%}&ddd           n# 1 swxY w Y   |r	t          |%gn|%g}'d	                    ||'z             }%d	                    |&g|z             }&-jL        }(-jM        })|)N                                }*|*O                    t          -jQ        |%|&||t          t          | | j        |t          8                     |(t          }(n9t5          |(t                    r$t                      =                    d9|(z             }(|(3                    |*          }+|+1                    d:d;t           d<th          j5         d=          }+|+|fS )>a7  
    Converts a Panel or Bokeh script to a standalone WASM Python
    application.

    Arguments
    ---------
    filename: str | Path | IO
        The filename of the Panel/Bokeh application to convert.
    requirements: 'auto' | List[str]
        The list of requirements to include (in addition to Panel).
    js_resources: 'auto' | List[str]
        The list of JS resources to include in the exported HTML.
    css_resources: 'auto' | List[str] | None
        The list of CSS resources to include in the exported HTML.
    runtime: 'pyodide' | 'pyscript'
        The runtime to use for running Python in the browser.
    prerender: bool
        Whether to pre-render the components so the page loads.
    panel_version: 'auto' | str
        The panel release version to use in the exported HTML.
    http_patch: bool
        Whether to patch the HTTP request stack with the pyodide-http library
        to allow urllib3 and requests to work.
    inline: bool
        Whether to inline resources.
    compiled: bool
        Whether to use pre-compiled pyodide bundles.
    readz
convert.py)sourceru   zapp-.Nc                 $    t                     S )Nr@   )r?   r@   s   r=   <lambda>z script_to_html.<locals>.<lambda>   s    (:H(M(M(M r<   r   z	The file z~ does not publish any Panel contents. Ensure you have marked items as servable or added models to the bokeh document manually.rt   utf-8encoding)Requirementc                    g | ]>}|                     d           d                                         x1           <?S )#r   )splitstrip)r^   rr   r2s     r=   
<listcomp>z"script_to_html.<locals>.<listcomp>   s^       ''#,,q///111B7B{2  r<   z,Requirements parser raised following error: localrZ   /zpanel==zbokeh==zpyodide-http==0.2.1c                    g | ]}|d v|	S ))panelbokehr;   r^   reqs     r=   r   z"script_to_html.<locals>.<listcomp>
  s*       s2D'D'D'D'D'Dr<   c              3      K   | ]}|v V  	d S rM   r;   )r^   r   rn   s     r=   	<genexpr>z!script_to_html.<locals>.<genexpr>  s'      ++sts{++++++r<   c                *    g | ]}|v r d  n|S )z>=r;   )r^   r   min_versionrn   s     r=   r   z"script_to_html.<locals>.<listcomp>  s4    UUUt,,{,,,UUUr<   r/   
,c                ,    g | ]}t          |          S r;   reprr   s     r=   r   z"script_to_html.<locals>.<listcomp>  s    444$s))444r<   z<py-config>
packages = [z]
</py-config>
<py-script>z</py-script>, c                ,    g | ]}t          |          S r;   r   r   s     r=   r   z"script_to_html.<locals>.<listcomp>"  s    888Cd3ii888r<   `z\`z\nz\\nr0   )rn   loading_spinner)PYODIDE_URLenv_speccode)r   r   F)quotezapplication/jsonr,   )tokenrootsuse_for_titler   cdn)modecsszloading.cssz<style type="text/css">
z	
</style>)rf   bokeh_js	bokeh_cssplot_scriptdocsbasemacrosdocr   rc   dist_urlz{% extends base %}
z<body>z<body class="z pn-z">)Whasattrr
   r   r   uuiduuid4r   pathlibPathjoinrn   r   r   absoluter   _session_contextr'   initialize_documentr(   _on_load	_handlers_runnerr   r   RuntimeErrorr   
isinstanceis_file	read_text
splitlinespackaging.requirementsr   	Exception
ValueErrorPANEL_LOCAL_WHLas_posixBOKEH_LOCAL_WHLPANEL_CDN_WHLBOKEH_CDN_WHLBOKEH_VERSIONappendMINIMUM_VERSIONSrb   anyPOST_PYSCRIPTPOSTPREPYSCRIPT_JSPYSCRIPT_CSSreplaceWORKER_HANDLER_TEMPLATEri   r   r   WEB_WORKER_TEMPLATEPYODIDE_PYC_URLr   r   PYODIDE_PYC_JS
PYODIDE_JS_pn_envfrom_stringPYODIDE_SCRIPTr   r   r   r   r   r   r"   r    r%   loading_colorloading_max_heightr$   INIT_SERVICE_WORKERtemplate_template_variablescopyupdater3   rf   r   r   r   r   r   )1ru   rw   ry   rz   r|   r~   r   rc   r   r   r   handlerapp_nameappr\   r   e	panel_req	bokeh_req	base_reqsreqs	post_coder   
web_workerpyenvr   r   worker_handlerscript_templatejson_id	docs_jsonrender_itemsrender_itemjson	resourcesloading_basespinner_cssr   r   extra_jsr   template_variablescontexthtmlr   rA   r   rn   r   s1                                               @@@@@r=   script_to_htmlr	     s   T x   EX]]__|LLL-#djll++--'""|H%%88DIOOC00"566.s4==??/C/CDDzzH M M M MH	H		  )))t               ]1%,F> 
+ + + +
 
 	
 v#F++	L#	&	& 7<+E+E+M+M+O+O |L11;;W;MMXXZZ		::::::    (  LL  	 	 	BqBB  	 37799::@@EEbII	37799::@@EEbII			&	 	 !	!		-m--	-m--	I&I 0.///  #   D .3355 V Vk++++d+++++ 	VUUUUUPTUUUD ")J!6!6DI99c69-..DJ*6!!'=LF"")NM44t44455g%ggUYgggF""M9988488899||C&&..uf==&&&v%%!4;; #)#9= =  N -332:K$5 5  J
 -^<<KKv%%2: J
K%1.AAO)00$2 2  K
  %))"G"Q"Q	<"1onY//u===)$0BGLLL)*A'<*X*XYYY N!
 
 

 $} 6<xxu===Iu$}4???QQL 4f6O K KLKKKKKK   
H		 J J.x~yII)J J J J J J J J J J J J J J J2:J#X..
Hyyh.//H		9+m344I  H!5 %%''GNN4n       	Hc	"	" L99(()?()JKK??7##D	f+FffFLbfff	g	g 	 s<   
*E  EEH 
H?(H::H?X>>YYr0   r   str | os.PathLike	dest_pathstr | os.PathLike | None)List[str] | Literal['auto'] | os.PathLikeverbosec
                   |t          j        d          }n.t          |t           j                  st          j        |          }	 t	          |rdnd          5  t          | |||||||          \  }
}d d d            n# 1 swxY w Y   n<# t          $ r Y d S t          $ r#}t          d|  d| d|            Y d }~d S d }~ww xY wd	                    t          j                            |                               d          d d	                   }| d
}t          ||z  dd          5 }|                    |
           d d d            n# 1 swxY w Y   |dk    rEt          || dz  dd          5 }|                    |           d d d            n# 1 swxY w Y   |	rt          d|  d| d| d           |                    dd          |fS )NrZ   r   r   )rw   r|   r~   rc   r   r   r   zFailed to convert z to z	 target: r   r   z.htmlwr   r   r0   z.jszSuccessfully converted z target and wrote output to _ )r   r   r   PurePathr&   r	  KeyboardInterruptr   printr   r[   r\   r]   r   openwriter   )r   r  rw   r|   r~   rc   r   r   r   r  r  	js_workerr   rn   ru   outs                   r=   convert_appr  v  s    L&&			7#344 ,L++	6<xxu== 	 	,,#h+
	  OD)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       A3AAGAAaAABBB 88BG$$S))//44SbS9::D~~~H	i("C'	:	:	: c		$              """)lll*C'BBB 	!cIIi   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! caaaaaV^aaabbbLLc""H--sf   B B5B BB B	B 
C	C#CC0EEE;FF!$F!   apps	List[str]max_workersintc                :    dd l }ddlm} i } fdt          dt	                               D             }|D ]}	 ||                    d                    5 }
g }|	D ]\}t          |t                    r|                    |d          }n|} |
j	        t          ||fd|i|}|                    |           ]t          j                            |          D ]"}|                                }|
|\  }}|||<   #	 d d d            n# 1 swxY w Y   |S )Nr   )ProcessPoolExecutorc                *    g | ]}||z            S r;   r;   )r^   ir  r  s     r=   r   z)_convert_process_pool.<locals>.<listcomp>  s&    NNNd1Q{]?#NNNr<   spawn)r  
mp_contextrt   rw   )multiprocessingconcurrent.futuresr!  rangero   get_contextr   r3   getsubmitr  r   
concurrentfuturesas_completedresult)r  r  r  rw   rJ   mpr!  rj   groupsgroupexecutorr-  r   app_requiresr`   futurer/  rn   ru   s   ` `                r=   _convert_process_poolr6    s    !   666666ENNNNNU1c$ii-M-MNNNF + +  'BNN74K4K
 
 
 	+G " "lD11 0#/#3#3C#@#@LL#/L#HOi >JNT  q!!!!$,99'BB + +%%+ND("*E$K	+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+$ Ls   B$DD	D	+str | os.PathLike | List[str | os.PathLike]rf   build_index	build_pwa
pwa_configDict[Any, Any]c           	        t          | t                    r| g} t          j        d          n.t          t          j                  st          j                                      dd           |rdnd}t          |t                    r7i }| D ]1fd|                                D             }|r|d         nd|<   2n|}|||||
|||d	t          j	        rt          fd
| D                       }nt          | fd|	i}|rvt          |          dk    rct          |||          }t          dz  d          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           |sdS dz  }|                    d           g }t           D ]v}t          ||j        z  d          5 }|                    |                                           ddd           n# 1 swxY w Y   |                    d|j                    w|rt          d           t)          |fd|i|}t          dz  dd          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           t*                              t/          j                    j        |pdd                    d |D                                 }t          dz  dd          5 }|                    |           ddd           n# 1 swxY w Y   |rt          d           dS dS ) ad  
    Arguments
    ---------
    apps: str | List[str]
        The filename(s) of the Panel/Bokeh application(s) to convert.
    dest_path: str | pathlib.Path
        The directory to write the converted application(s) to.
    title: str | None
        A title for the application(s). Also used to generate unique
        name for the application cache to ensure.
    runtime: 'pyodide' | 'pyscript' | 'pyodide-worker'
        The runtime to use for running Python in the browser.
    requirements: 'auto' | List[str] | os.PathLike | Dict[str, 'auto' | List[str] | os.PathLike]
        The list of requirements to include (in addition to Panel).
        By default automatically infers dependencies from imports
        in the application. May also provide path to a requirements.txt
    prerender: bool
        Whether to pre-render the components so the page loads.
    build_index: bool
        Whether to write an index page (if there are multiple apps).
    build_pwa: bool
        Whether to write files to define a progressive web app (PWA) including
        a manifest and a service worker that caches the application locally
    pwa_config: Dict[Any, Any]
        Configuration for the PWA including (see https://developer.mozilla.org/en-US/docs/Web/Manifest)

          - display: Display options ('fullscreen', 'standalone', 'minimal-ui' 'browser')
          - orientation: Preferred orientation
          - background_color: The background color of the splash screen
          - theme_color: The theme color of the application
    max_workers: int
        The maximum number of parallel workers
    panel_version: 'auto' | 'local'] | str
'       The panel version to include.
    http_patch: bool
        Whether to patch the HTTP request stack with the pyodide-http library
        to allow urllib3 and requests to work.
    inline: bool
        Whether to inline resources.
    NrZ   T)parentsexist_okr)   c                    g | ]?\  }}                     |                    t          j        j        d                     =|@S )r   )endswithr   r[   r\   sep)r^   rn   depsr   s      r=   r   z convert_apps.<locals>.<listcomp>  sQ       #t<<RW[# > >??  r<   r   rt   )rw   r|   r~   rc   r   r   r   r  c              3  4   K   | ]}t          |fi V  d S rM   )r  )r^   r   r  rJ   s     r=   r   zconvert_apps.<locals>.<genexpr>  s5      LLk#y;;F;;LLLLLLr<   r  r   )rc   rf   rm   r  zSuccessfully wrote index.html.r-   )r>  wbzimages/z$Successfully wrote icons and images.rf   r   r   z!Successfully wrote site.manifest.zPanel Pyodide Appr   c                ,    g | ]}t          |          S r;   r   )r^   ps     r=   r   z convert_apps.<locals>.<listcomp>>  s    666T!WW666r<   )r   rn   	pre_cacher*   z$Successfully wrote serviceWorker.js.)r   r   r   r   r  mkdirr3   rb   r(   _is_pyodider6  ro   rk   r  r  r  
PWA_IMAGESrn   
read_bytesr   rs   SERVICE_WORKER_TEMPLATEri   r   r   hexr   )r  r  rf   r|   rw   r~   r8  r9  r:  r  r   r   r   r  rc   app_requirementsmatchesrj   indexr`   	imgs_pathimg_relimgworkerr   rJ   s    `                      @@r=   convert_appsrU    s   p $ vL&&			7#344 ,L++	OOD4O000%.8!!DH,%% 	( 	F 	FC   '3'9'9';';  G 3:$EGAJJvS!!	F ( )WH&jW	 F  
LLLLLtLLLMM%)
 
)4
8>
 
  4s5zzQ59EBBB)l*C00 	AGGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	42333  X%IOOTO"""G - -)ch&-- 	&GGCNN$$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&+++,,,, 64555 "%CCuC
CCH	i,,cG	D	D	D 	               31222 %++Z\\))))66g66677 ,  F
 
i,,cG	D	D	D 	               64555556 6sH   
E,,E03E0
(G>>H	H	I>>JJL##L'*L')NTrM   )
rt   rt   Nr.   Trt   NTFT)ru   rv   rw   rx   ry   rx   rz   r{   r|   r}   r~   rP   r   r   rc   r   r   rP   r   rP   r   rP   rO   r   )	Nrt   r0   TNrt   TFT)r   r
  r  r  rw   r  r|   r}   r~   rP   rc   r   r   r   r   rP   r   rP   r  rP   )Nr  rt   )r  r  r  r   r  r  rw   r  )r  r7  r  r  rf   r   r|   r}   rw   r  r~   rP   r8  rP   r9  rP   r:  r;  r  r  r   r   r   rP   r   rP   r  rP   )h
__future__r   r'  r,  dataclassesr[   r   r   typingr   r   r   r   r   bokeh.application.applicationr   r	   bokeh.application.handlers.coder
   bokeh.core.json_encoderr   bokeh.core.templatesr   r   bokeh.documentr   bokeh.embed.elementsr   bokeh.embed.utilr   r   bokeh.embed.wrappersr   bokeh.util.serializationr   typing_extensionsr   r,   r   r   utilr   r   loadingr   markdownr   mime_renderr   r  r   r   r    r!   r"   r#   r   r$   r%   r&   r(   r'   get_templaterr   rL  r   r   r   __file__parent
PANEL_ROOTr   
PY_VERSIONPYODIDE_VERSIONPYSCRIPT_VERSIONr   r   r   r   r   r   r   r   r   r   r   r   ICON_DIRrJ  r}   r   r   r   r   r   	dataclassr2   r?   rk   rs   r	  r  r6  rU  r;   r<   r=   <module>rp     s   " " " " " "         				               E E E E E E E E 7 7 7 7 7 7 2 2 2 2 2 2 0 0 0 0 0 0 0 0 # # # # # # 8 8 8 8 8 8 N N N N N N N N 3 3 3 3 3 3 , , , , , , % % % % % % " " " " " " " " ' ' ' ' ' ' ' ' 0 0 0 0 0 0 6 6 6 6 6 6 % % % % % %                      % $ $ $ $ $ $ $,,-?@@ .'./ABB *g*+>?? /7/0DEE W\(##*1
U.//\+&&
 X%(e1D1DXr1R1R(e(e(eeX%(Q(Q(Q(QQGG*GGGJJ-JJJS/SSSVoVVVpM]pppkBRkkk5[555
9999 h}  !!!!%%%%
 :;'  &        = = = = = = = =&       17068<!4:E E E E ET +/>D(4:(. (. (. (. (.Z !>D	         H +/(>D!#4:@6 @6 @6 @6 @6 @6 @6r<   