§
    nÈjà©  ã                  óR  — U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
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mZmZmZmZ d d	lmZmZ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' d dl(m)Z)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJ d dlKmLZL d dlMmNZNmOZO  ejP        d¦  «        ZQ e#ejR         S                    d¦  «        ¬¦  «        ZT eUejR         S                    d d!¦  «        ¦  «        ZVi ZWd"eXd#<    e!ejR         S                    d$d%¦  «        ¦  «        ZY e,ejR         S                    d&d'¦  «        ¦  «        ZZej[         \                    ej[         ]                    e^¦  «        d(d)¦  «        Z_ e*¦   «         Z` e@ejR         S                    d*d+¦  «        ¦  «        Za eF¦   «         Zb eJ¦   «         Zc eLejR         S                    d,d-¦  «        ¦  «        Zdd. eBeae`ebec¬/¦  «        iZeejR         S                    d0d1¦  «        d2k    r eDeaebec¬/¦  «        eed3<   dÏd6„ZfdÐd8„Zge
 G d9„ d:¦  «        ¦   «         Zh G d;„ d<e¦  «        Zi G d=„ d>e¦  «        Zj G d?„ d@e¦  «        Zk G dA„ dBe¦  «        Zli ZmdCeXdD<   dÑdI„ZndJ„ Zo e0 e1¦   «         dK„ dL„ eneodM„ dN„ dO„ dP„ dQ„ ¬R¦
  «
        ZpdS„ Zq e4ejR         S                    dTdU¦  «        ¦  «        Zr e3 e5¦   «          e6¦   «         erdV„ eneoeq¦  «        ZsdWdWdXœdY„ZtdZ„ Zud[„ Zvd\„ ZwdÒd^„ZxdÓd_„ZydÔdÕdb„Zzdc„ Z{dd„ Z|de„ Z} G df„ dg¦  «        Z~ e~¦   «         ZdÖdi„Z€ed×dl„¦   «         Z� edmdne�¬o¦  «        Z‚e‚ ƒ                    e;¦  «        dØdr„¦   «         Z„dÙdu„Z…e‚ S                    dv¦  «        dw„ ¦   «         Z†e‚ ‡                    dx¦  «        dÚd{„¦   «         Zˆe‚ S                    d|¦  «        d}„ ¦   «         Z‰e‚ ‡                    d|d~¬¦  «        dÛd‚„¦   «         ZŠe‚ ‹                    dƒd„¬¦  «        dÜd†„¦   «         ZŒe‚ S                    d‡¦  «        dˆ„ ¦   «         Z�e‚ S                    d‰¦  «        dÜdŠ„¦   «         ZŽe‚ S                    d‹¦  «        dÝd�„¦   «         Z�e‚ ‡                    dŽ¦  «        dÝd�„¦   «         Z�e‚ ‡                    d�d‘¬¦  «        dÞd“„¦   «         Z‘e‚ S                    d”¦  «        dÝd•„¦   «         Z’e‚ ‡                    d”¦  «        dßd—„¦   «         Z“e‚ S                    d˜¦  «        dàd™„¦   «         Z”e‚ S                    dšd›¬œ¦  «        dádž„¦   «         Z•e‚ S                    dŸd›¬œ¦  «        dâd¡„¦   «         Z–e‚ S                    d¢d›¬œ¦  «        dâd£„¦   «         Z—e‚ S                    d¤¦  «        dàd¥„¦   «         Z˜e‚ S                    d¦¦  «        dãd¨„¦   «         Z™e‚ S                    d©¦  «        dàdª„¦   «         Zš	 dÔdäd­„Z›	 dÔdåd®„Zœdæd±„Z�d²„ Zždçd³„ZŸi Z d´„ Z¡e‚ ‡                    dµd›¬œ¦  «         edW¬¶¦  «        fdèd¸„¦   «         Z¢e‚ ‡                    d¹¦  «        déd¼„¦   «         Z£e‚ ‡                    d½¦  «        dêd¿„¦   «         Z¤e‚ ‡                    dÀ¦  «        dëdÂ„¦   «         Z¥ G dÃ„ dÄe¦  «        Z¦ G dÅ„ dÆe¦  «        Z§e‚ ‡                    dÇ¦  «        dìdÈ„¦   «         Z¨e‚ ‡                    dÉ¦  «        dídÊ„¦   «         Z©e‚ ª                    dË¦  «        dîdÎ„¦   «         Z«dS )ïé    )ÚannotationsN)ÚasynccontextmanagerÚsuppress)Ú	dataclassÚfield)ÚdatetimeÚtimezone)ÚAnyÚLiteral)Úuuid4)ÚFastAPIÚHeaderÚHTTPExceptionÚ	WebSocketÚWebSocketDisconnect)ÚFileResponseÚRedirectResponseÚJSONResponse)Ú	BaseModelÚField)ÚDeviceCredentialStore)ÚSystemCollector)Ú
host_state)ÚServerSnapshot)ÚPiSessionEventÚPiSessionRegistry)ÚTargetStoreÚnormalize_targetÚsplit_target)ÚVoiceManagerÚconfigured_stt)ÚSpeechManagerÚSpeechPreferencesÚconfigured_ttsÚHaihubSummaryÚMODES)Úquick_catalog)ÚControlErrorÚInputÚProjectÚSettings)ÚProjectRegistry)Ú	PiAdapter)ÚCodexAdapter)ÚApprovalRegistry)ÚPiApprovalServer)Ú
UserInputs)Ú
Operations)Ú	NavigatorÚCAPABILITIESzuvicorn.error.device_gatewayÚGATEWAY_SERVER_NAME)ÚhostnameÚGATEWAY_SNAPSHOT_INTERVALÚ2zdict[str, str]Úhost_statesÚDEVICE_CREDENTIALS_FILEz*~/.config/esp32-device-gateway/device.jsonÚGATEWAY_STATE_FILEz+~/.config/esp32-device-gateway/targets.jsonÚstaticz
admin.htmlÚGATEWAY_PROJECTS_FILEz,~/.config/esp32-device-gateway/projects.jsonÚGATEWAY_OPERATIONS_FILEz0~/.config/esp32-device-gateway/operations.sqliteÚpi)Ú	approvalsÚuser_inputsÚGATEWAY_CODEX_ENABLEDÚ0Ú1ÚcodexÚreturnr   c                 ó>   — t          j        t          j        ¦  «        S ©N)r   Únowr	   Úutc© ó    ú[/home/lighthouse/esp32-dev/.cache/main-promotion-test-20261009/server/device_gateway/app.pyÚutc_nowrN   A   s   € ÝŒ<�œÑ%Ô%Ð%rL   Úintc                 óº  — t           j                             d¦  «        } | �\	 t          | ¦  «        }n-# t          $ r  d}t
                               d| ¦  «         Y nw xY wt          dt          d|¦  «        ¦  «        S t          j
        ¦   «                              ¦   «                              ¦   «         }|�$t          |                     ¦   «         dz  ¦  «        ndS )NÚGATEWAY_TIMEZONE_OFFSET_MINUTESr   z5invalid GATEWAY_TIMEZONE_OFFSET_MINUTES=%r; using UTCi0ýÿÿiH  é<   )ÚosÚenvironÚgetrO   Ú
ValueErrorÚloggerÚwarningÚmaxÚminr   rI   Ú
astimezoneÚ	utcoffsetÚtotal_seconds)Ú
configuredÚvalueÚoffsets      rM   Úgateway_timezone_offset_minutesra   E   sÕ   € Ý”—’Ð AÑBÔB€JØÐð	`Ý˜
‘O”OˆEˆEøÝð 	`ð 	`ð 	`ØˆEÝ�NŠNÐRÐT^Ñ_Ô_Ð_Ð_Ð_ð	`øøøõ �4�˜S %™œÑ)Ô)Ð)ÝŒ\‰^Œ^×&Ò&Ñ(Ô(×2Ò2Ñ4Ô4€FØ06Ð0B�3ˆv×#Ò#Ñ%Ô%¨Ñ+Ñ,Ô,Ð,ÈÐIs   £3 ³'AÁAc                  ón  — e Zd ZU ded<   ded<   ded<   ded<    ed„ ¬¦  «        Zded	<   d
Zded<    ee¬¦  «        Zded<   dZ	ded<    ee
j        d¬¦  «        Zded<    edd¬¦  «        Zded<   dZded<   dZded<   dZded<    ee¬¦  «        Zd ed!<    ee
j        d¬¦  «        Zded"<   d&d%„ZdS )'ÚDeviceÚstrÚ	device_idÚboardÚfirmwarezWebSocket | NoneÚ	websocketc                 ó(   — t          ¦   «         j        S rH   )r   ÚhexrK   rL   rM   ú<lambda>zDevice.<lambda>X   s   € µu±w´w´{€ rL   )Údefault_factoryÚconnection_idTÚboolÚonliner   Ú	last_seenNzdict[str, Any] | NoneÚ
last_eventF)rl   Úreprzasyncio.LockÚsettings_lock)Údefaultrr   zasyncio.Task | NoneÚsettings_taskz
str | NoneÚsettings_idr   rO   Úsettings_generationÚ Úlast_agent_statezset[str]ÚcapabilitiesÚ	send_lockrF   údict[str, Any]c                óš   — | j         | j        | j        | j        t	          | j        ¦  «        | j                             ¦   «         | j        dœS )N)re   rf   rg   ro   rz   rp   rq   )	re   rf   rg   ro   Úsortedrz   rp   Ú	isoformatrq   ©Úselfs    rM   ÚpubliczDevice.publicd   sI   € àœØ”ZØœØ”kÝ" 4Ô#4Ñ5Ô5Øœ×1Ò1Ñ3Ô3Øœ/ð
ð 
ð 	
rL   ©rF   r|   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   rm   ro   rN   rp   rq   ÚasyncioÚLockrs   ru   rv   rw   ry   Úsetrz   r{   r‚   rK   rL   rM   rc   rc   R   sj  € € € € € € à€N€N�NØ€J€J�JØ€M€M�MØÐÐÑØ˜Ð/BÐ/BÐCÑCÔC€MÐCÐCÐCÑCØ€FÐÐÐÑØ˜%°Ð8Ñ8Ô8€IÐ8Ð8Ð8Ñ8Ø(,€JÐ,Ð,Ð,Ñ,Ø"' %¸¼È5Ð"QÑ"QÔ"Q€MÐQÐQÐQÑQØ).¨°tÀ%Ð)HÑ)HÔ)H€MÐHÐHÐHÑHØ"€KÐ"Ð"Ð"Ñ"Ø ÐÐ Ð Ð Ñ ØÐÐÐÐÑØ"˜U°3Ð7Ñ7Ô7€LÐ7Ð7Ð7Ñ7Ø#˜e°G´LÀuÐMÑMÔM€IÐMÐMÐMÑMð	
ð 	
ð 	
ð 	
ð 	
ð 	
rL   rc   c                  ó4   — e Zd ZU  edd¬¦  «        Zded<   dS )ÚApprovalDecisioné   é(   ©Ú
min_lengthÚ
max_lengthrd   ÚdecisionN)r„   r…   r†   r   r’   r‡   rK   rL   rM   rŒ   rŒ   p   s2   € € € € € € Ø�E Q°"Ð5Ñ5Ô5€HÐ5Ð5Ð5Ñ5Ð5Ð5rL   rŒ   c                  óX   — e Zd ZU  edd¬¦  «        Zded<    edd¬¦  «        Zded<   dS )	ÚDisplayMessager�   éP   r�   rd   Útitleiô  ÚbodyN)r„   r…   r†   r   r–   r‡   r—   rK   rL   rM   r”   r”   t   sR   € € € € € € Ø� !°Ð3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø� ¨sÐ3Ñ3Ô3€DÐ3Ð3Ð3Ñ3Ð3Ð3rL   r”   c                  ó2   — e Zd ZU  ed¬¦  «        Zded<   dS )ÚTargetSelectionz;^(server|(?:agent:(?:pi|codex)|pi):[A-Za-z0-9._:-]{1,160})$)Úpatternrd   ÚtargetN©r„   r…   r†   r   r›   r‡   rK   rL   rM   r™   r™   y   s1   € € € € € € Ø�%Ð ^Ð_Ñ_Ô_€FÐ_Ð_Ð_Ñ_Ð_Ð_rL   r™   c                  ó   — e Zd ZU ded<   dS )ÚNotificationTestzLiteral['done', 'failed']ÚkindN)r„   r…   r†   r‡   rK   rL   rM   rž   rž   }   s   € € € € € € Ø#Ð#Ð#Ñ#Ð#Ð#rL   rž   zdict[str, Device]ÚdevicesÚdeviceÚpayloadr|   útuple[float, float]c              ƒ  óŽ  K  — | j         r| j        €t          d¦  «        ‚t          j        ¦   «         }| j        4 ƒd {V —† t          j        ¦   «         }t          j        | j                             |¦  «        d¦  «        ƒ d {V —† ||z
  t          j        ¦   «         |z
  fcd d d ¦  «        ƒd {V —† S # 1 ƒd {V —†swxY w Y   d S )Núdevice is offlineé   )	ro   rh   ÚRuntimeErrorÚtimeÚ	monotonicr{   rˆ   Úwait_forÚ	send_json)r¡   r¢   ÚstartedÚacquireds       rM   Úsend_to_devicer®   „   sX  è è € ØŒ=ð 0˜FÔ,Ð4ÝÐ.Ñ/Ô/Ð/ÝŒnÑÔ€GØÔð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?Ý”>Ñ#Ô#ˆÝÔ˜vÔ/×9Ò9¸'ÑBÔBÀAÑFÔFÐFÐFÐFÐFÐFÐFÐFØ˜'Ñ!¥4¤>Ñ#3Ô#3°hÑ#>Ð>ð?ð ?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð ?ð ?s   Á A!B4Â4
B>ÃB>c                ód   — t                                | j        ¦  «        | u o| j        o| j        d uS rH   )r    rU   re   ro   rh   ©r¡   s    rM   Úcurrent_devicer±   �   s1   € Ý�;Š;�vÔ'Ñ(Ô(¨FÐ2Ðe°v´}ÐeÈÔIYÐaeÐIeÐerL   c                ó6   — t                                | ¦  «        S rH   ©Útarget_storerU   ©Údids    rM   rk   rk   “   s   € µL×4DÒ4DÀSÑ4IÔ4I€ rL   c                ó    — t          | ¦  «        S rH   )Úadapter_for©Úagents    rM   rk   rk   “   s   € ÕYdÐejÑYkÔYk€ rL   c                 óN   — t          t                               ¦   «         ¦  «        S rH   )rn   r@   Úlist_pendingrK   rL   rM   rk   rk   ”   s   € ­­i×.DÒ.DÑ.FÔ.FÑ)GÔ)G€ rL   c                ó6   — t                                | ¦  «        S rH   )r´   Ú
generationrµ   s    rM   rk   rk   ”   s   € Õbn×byÒbyÐz}Ñb~Ôb~€ rL   c                ó8   — t                                | |¦  «        S rH   )Ú	navigatorÚvoice_prepare)ÚdÚes     rM   rk   rk   •   s   € �y×6Ò6°q¸Ñ;Ô;€ rL   c                ó8   — t                                | |¦  «        S rH   )rÀ   Úvoice_valid)rÂ   Úcs     rM   rk   rk   •   s   € ÕU^×UjÒUjÐklÐmnÑUoÔUo€ rL   c                ó:   — t                                | ||¦  «        S rH   )rÀ   Úvoice_submit)rÂ   rÆ   Úts      rM   rk   rk   •   s<   € õ  MV÷  Mcò  Mcð  deð  fgð  hiñ  Mjô  Mj€ rL   )Úgeneration_forÚcontext_prepareÚcontext_validÚcontext_submitc                óÆ   — t           j                             | j        ¦  «        }t	          t
                               ¦   «         ¦  «        pt	          |o|j        dv ¦  «        S )N)Ú	RECORDINGÚTRANSCRIBINGÚAWAITING_CONFIRMATIONÚSENDING)ÚvoicesÚrequestsrU   re   rn   r@   r¼   Ústate)r¡   Úvoices     rM   Úspeech_blockedr×   ˜   sd   € ÝŒO×Ò Ô 0Ñ1Ô1€EÝ•	×&Ò&Ñ(Ô(Ñ)Ô)ð  N­T°%ð  3M¸E¼Kð  LMð  =Mñ  .Nô  .Nð  NrL   ÚGATEWAY_SPEECH_FILEz*~/.config/esp32-device-gateway/speech.jsonc                ó6   — t                                | ¦  «        S rH   r³   rµ   s    rM   rk   rk   Ÿ   s   € •× Ò  Ñ%Ô%€ rL   rx   ©ÚnameÚlatest_activityc          
     ó˜   — t          t                               ¦   «         ¦  «        D ]"}t                               || |||||¦  «         Œ#d S rH   )Úlistr    ÚvaluesÚspeechesÚterminal)rº   Ú
session_idrÕ   Ú
final_textrÛ   rÜ   r¡   s          rM   Úon_agent_terminalrä   ¢   sT   € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð _ð _ˆÝ×Ò˜& %¨°U¸JÈÈoÑ^Ô^Ð^Ð^ð_ð _rL   c                ó,  — t                                ¦   «         rft          t                               ¦   «         ¦  «        D ]?}t
                               |d¬¦  «         t                               |¦  «         d |_        Œ@|  	                    ¦   «          d S )NÚapproval©Úreason)
r@   r¼   rÞ   r    rß   rà   ÚcancelrÓ   rv   rŠ   )Úchangedr¡   s     rM   Úapprovals_changedrë   §   s{   € Ý×ÒÑÔð &Ý�7Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	&ð 	&ˆFÝ�OŠO˜F¨:ˆOÑ6Ô6Ð6Ý�MŠM˜&Ñ!Ô!Ð!Ø!%ˆFÔÐØ‡K‚K�M„M€M€M€MrL   c              ƒ  ó   K  — |d         dk    r'| j         |                     d¦  «        k    rd | _         d S | j        4 ƒd {V —† t          | |¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NÚtypeÚsettings_cancelÚ
request_id)rv   rU   rs   Ú_device_settings)r¡   Úevents     rM   Údevice_settingsrò   °   s%  è è € ØˆV„}Ð)Ò)Ð)ØÔ §¢¨<Ñ!8Ô!8Ò8Ð8Èt¸&Ô:LØˆØÔ#ð .ð .ð .ð .ð .ð .ð .ð .Ý˜v uÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .s   ÁA-Á-
A7Á:A7c              ƒ  óö  ‡ ‡‡‡K  — |                      d¦  «        Št          ‰t          ¦  «        rdt          ‰¦  «        cxk    rdk    sn d S |d         dk    r‰ j        ‰k    rd ‰ _        d S t
                                ‰ j        ¦  «        Št
                               ‰ j        ¦  «        Št          ‰¦  «        }|st          ‰ d‰ddœ¦  «        ƒ d {V —† d S t                               ¦   «         s(t                               ¦   «         st          ‰ ¦  «        sd S |d         d	k    r‰‰ _        ‰‰ _        n1‰ j        ‰k    s$‰ j        ‰k    s|                      d
¦  «        ‰k    rd S ˆ ˆˆˆfd„}	 |\  }}t!          |¦  «        }|                     |¦  «        ƒ d {V —†} |¦   «         sd S |d         dk    rE|                     |t'          j        |                      di ¦  «        ¦  «        |¬¦  «        ƒ d {V —†}nT|                     |¦  «        ƒ d {V —†}|                      d¦  «        r$|dk    r|                     |¦  «        ƒ d {V —†|d<    |¦   «         sd S |                     t0                                |j        ¦  «        ¦  «        ƒ d {V —†}	t5          |d„ t7          |	d„ d¬¦  «        D ¦   «         ¦  «        } |¦   «         rNt          ‰ t9          d|d         dk    rdnd‰‰‰|j        dœ|¤Ž¦  «        ƒ d {V —† |d         dk    rd ‰ _        d S d S d S # t<          $ rQ}
 |¦   «         r<t          ‰ d‰t          |
t>          ¦  «        r|
j         nddœ¦  «        ƒ d {V —† Y d }
~
d S Y d }
~
d S d }
~
ww xY w)Nrï   r�   é@   rí   rî   Úsettings_errorzNO AGENT SELECTED©rí   rï   ÚmessageÚsettings_getr›   c                 óø   •— t          ‰ ¦  «        oj‰ j        ‰k    o_t                               ‰ j        ¦  «        ‰k    o<t                               ‰ j        ¦  «        ‰k    ot                               ¦   «          S rH   )r±   rv   r´   rU   re   r¾   r@   r¼   )r¡   r¾   Úridr›   s   €€€€rM   Úvalidz_device_settings.<locals>.validÌ   s¹   ø€ Ý˜fÑ%Ô%ð  P¨&Ô*<ÀÒ*Cð  PÍ×HXÒHXÐY_ÔYiÑHjÔHjÐntÒHtð  Põ  zF÷  zQò  zQð  RXô  Rbñ  zcô  zcð  eoò  zoð  Põ  xA÷  xNò  xNñ  xPô  xPð  tPð  	PrL   Úsettings_applyÚsettings)Ústill_validÚinclude_permissionsrE   Úpermissionsc                ó*   — g | ]}|j         ¯	|j         ‘ŒS rK   )Úmodel)Ú.0Úss     rM   ú
<listcomp>z$_device_settings.<locals>.<listcomp>Û   s8   € ð  ,Að  ,Að  ,A¸ÐxyÔxð  ,A¨A¬Gð  ,Að  ,Að  ,ArL   c                ó   — | j         S rH   )Ú
updated_at)r  s    rM   rk   z"_device_settings.<locals>.<lambda>Û   s
   € ÐYZÔYe€ rL   T)ÚkeyÚreverseÚsettings_updatedÚsettings_state)rí   rï   r›   Útarget_generationrÛ   zUPDATE FAILEDrK   )!rU   Ú
isinstancerd   Úlenrv   r´   re   r¾   r   r®   r@   r¼   rA   Úpendingr±   rw   r¸   Úget_sessionÚupdate_settingsr+   Úmodel_validateÚget_settingsr   Úlist_sessionsÚproject_registryÚ
project_idr'   r~   ÚdictrÛ   Ú	Exceptionr(   Údetail)r¡   rñ   Úparsedrû   rº   ÚsidÚadapterÚsessionrý   ÚrecentÚexcr¾   rú   r›   s   `          @@@rM   rð   rð   ¸   s  øøøøè è € Ø
�)Š)�LÑ
!Ô
!€CÝ�c�3ÑÔð  q­C°©H¬HÐ':Ð':Ò':Ð':¸Ò':Ð':Ð':Ð':ØˆØˆV„}Ð)Ò)Ð)ØÔ Ò$Ð$Ø!%ˆFÔØˆÝ×Ò˜fÔ.Ñ/Ô/€FÝ×&Ò& vÔ'7Ñ8Ô8€JÝ˜&Ñ!Ô!€FØð Ý˜VÐ-=È3ÐYlÐ%mÐ%mÑnÔnÐnÐnÐnÐnÐnÐnÐnØˆÝ×ÒÑÔð ¥;×#6Ò#6Ñ#8Ô#8ð ÅÈvÑ@VÔ@Vð ØˆØˆV„}˜Ò&Ð&Ø ˆÔ¸J Ô!;Ð!;Ø	Ô	˜sÒ	"Ð	" fÔ&@À*Ò&LÐ&LÐPU×PYÒPYÐZbÑPcÔPcÐgmÒPmÐPmØˆðPð Pð Pð Pð Pð Pð Pð Pð]Ø‰
ˆˆsÝ˜eÑ$Ô$ˆØ×+Ò+¨CÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0ˆØˆu‰wŒwÐ˜˜Ø�Œ=Ð,Ò,Ð,à$×4Ò4°S½(Ô:QÐRW×R[ÒR[Ð\fÐhjÑRkÔRkÑ:lÔ:lÐzÐ4ñ  Aô  Að  Að  Að  Að  Að  Að  AˆHˆHà$×1Ò1°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6ˆHØ�yŠyÐ.Ñ/Ô/Ðy°E¸7²N°NÐah×atÒatÐuxÑayÔayÐ[yÐ[yÐ[yÐ[yÐ[yÐ[yÀ8ÈMÑCZØˆu‰wŒwÐ˜˜Ø×,Ò,Õ-=×-AÒ-AÀ'ÔBTÑ-UÔ-UÑVÔVÐVÐVÐVÐVÐVÐVˆÝ  ð  ,Að  ,A½VÀFÐPeÐPeÐosÐ=tÑ=tÔ=tð  ,Añ  ,Aô  ,Añ  Bô  BˆØˆ5‰7Œ7ð 	JÝ  ­ð *hÈÈvÌÐXhÒIhÐIhÐ3EÐ3EÐn~Ø f¸zÈwÌ|ð*hð *hØ^fð*hð *hñ iô ið ið ið ið ið ið ið ià�VŒ}Ð.Ò.Ð.ÀT°Ô0BÐ0BÐ0Bð	Jð 	Jð /Ð.øÝð ]ð ]ð ]Øˆ5‰7Œ7ð 	]Ý  Ð1AÈsÝ(2°3½Ñ(EÔ(EÐZ˜#œ*˜*È?ð*\ð *\ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøøð]øøøs'   Å29L Æ-B/L ÉB9L Ì
M8Ì'A M3Í3M8ÚNonec              ƒ  óx  K  — t          t                               ¦   «         ¦  «        D �]}|j        r|j        €Œ	 t          || ¦  «        ƒ d {V —† Œ*# t          $ rÚ t                               |ddd¬¦  «         t           
                    |d¬¦  «         d |_        |j        rMt          t          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t          ¦   «         |_        t                                d|j        ¦  «         Y �Œw xY wd S )	NFTÚtransport_failure©ÚnotifyÚforgetrè   rç   éó  ©Úcodez4device %s disconnected while pushing server_snapshot)rÞ   r    rß   ro   rh   r®   r  rà   ré   rÓ   Úsuspendrv   r   ÚcloserN   rp   rW   rX   re   )r¢   r¡   s     rM   Úbroadcast_server_snapshotr+  æ   s€  è è € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð eñ eˆØŒ}ð 	 Ô 0Ð 8Øð	eÝ  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 		eð 		eð 		eÝ�OŠO˜F¨5¸ÐFYˆOÑZÔZÐZÝ�NŠN˜6Ð*=ˆNÑ>Ô>Ð>Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�NŠNÐQÐSYÔScÑdÔdÐdÐdÑdð		eøøøðeð es7   ¼AÁA&D7Â9"C'ÃD7Ã'C+Ã+D7Ã.C+Ã/AD7Ä6D7c               ƒ  óæ   K  — 	 t                                ¦   «         } t          t          | ¦  «        ¦  «        ƒ d {V —† t	          ¦   «         ƒ d {V —† t          j        t          ¦  «        ƒ d {V —† ŒorH   )Úsystem_collectorÚcollectr+  Údevice_snapshot_payloadÚpush_agent_targetsrˆ   ÚsleepÚsnapshot_interval_seconds©Úsnapshots    rM   Úmonitor_systemr5  ø   s‹   è è € ð7Ý#×+Ò+Ñ-Ô-ˆÝ'Õ(?ÀÑ(IÔ(IÑJÔJÐJÐJÐJÐJÐJÐJÐJÝ Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝŒmÕ5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7rL   r4  úServerSnapshot | Nonec           	     ó(  — | p$t           j        pt                                ¦   «         } |                      ¦   «         }t                               d¦  «        }t          | j        | j        ddt                               d¦  «        ¬¦  «        |d<   |d         t          d<   t          t          |dd¦  «        ¦  «        r|                     ¦   «         nt          |dd¦  «        }|                     |�|                     ¦   «         nd	d
dddœ¦  «         |S )zúExisting server snapshot plus derived glance fields.

    No new message type, no extra frame and no device-driven refresh: the same
    2 s frame simply carries a few more small fields. Account identity, plan
    and credits are never included.
    rE   TÚlast)rû   Úgateway_onlineÚpreviousr   Úquota_for_displayNÚquotaFr   )Úcodex_quota_validÚcodex_remaining_percentÚcodex_resets_atÚcodex_window_minutes)r-  Úlatestr.  Ú
model_dumpÚadaptersrU   r   Úcpu_percentÚmemory_percentr9   ÚcallableÚgetattrr;  ÚupdateÚwire)r4  r¢   r  r<  s       rM   r/  r/     s&  € ð ÐPÕ+Ô2ÐPÕ6F×6NÒ6NÑ6PÔ6P€HØ×!Ò!Ñ#Ô#€GÝ�lŠl˜7Ñ#Ô#€GÝ& xÔ';¸XÔ=TØ 4µ+·/²/À&Ñ2IÔ2IðKñ Kô K€GˆLÑà! ,Ô/…K�ÑÝ+3µG¸GÐEXÐZ^Ñ4_Ô4_Ñ+`Ô+`ð  FˆG×%Ò%Ñ'Ô'Ð'ÕfmÐnuÐw~ð  AEñ  gFô  gF€EØ‡N‚N 5Ð#4�5—:’:‘<”<�<Ø.3ÐPQØ,0È$ðPð PñQô Qð Qð €NrL   c            
   ƒ  ó,	  K  — t          t                               ¦   «         ¦  «        D �]\} | j        }| j        r| j        s!t          j                             |d ¦  «         Œ9	 t          j         	                    |¦  «        }t           	                    |¦  «        }|rP|�|j
        dk    rCt          | d||r|j
        nddœ¦  «        ƒ d {V —† t          j                             |d ¦  «         |t          j        vrµt                               ¦   «         }|rš|d         }t                               | d¬¦  «         t                               | ¦  «         d | _        |j        t          j        |<   t%          j        t          | t                               |¦  «        ¦  «        d¦  «        ƒ d {V —† �ŒŠ# t*          $ rÇ t          j                             |d ¦  «         t                               | d	d
d¬¦  «         t                               | d¬¦  «         d | _        d	| _        | j        rMt/          t*          ¦  «        5  | j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d | _        Y �ŒZw xY wt          t                               ¦   «         ¦  «        D �]�} | j        }t3          | ¦  «        s!t4          j                             |d ¦  «         Œ:d| j        vrŒDt4          j         	                    |¦  «        }t                               ¦   «         st4                               ¦   «         ng }|r|d         nd }|r"|d         |d         |d                  d         fnd }||k    rÎ|rlt                               | ¦  «         t          | t;          d|d         |d         ¬¦  «        ¦  «        ƒ d {V —† t4          j                             |d ¦  «         |r^t                               | ¦  «         d | _        |t4          j        |<   t          | t4                               |¦  «        ¦  «        ƒ d {V —† �ŒŸt          t<          j                             ¦   «         ¦  «        D ]}	tA          |	j!        ¦  «        ƒ d {V —† Œd S )NÚPENDINGÚapproval_cancelledÚ	CANCELLED)rí   Úapproval_idrÕ   r   ræ   rç   r¦   FTr"  r#  r&  r'  únative-interactionrï   Ú	questionsÚindexÚidÚuser_input_cancelledr�   )rí   rï   Úquestion_id)"rÞ   r    rß   rm   ro   rh   r@   ÚpresentationsÚpoprU   rÕ   r®   r¼   rà   ré   rÓ   rv   rN  rˆ   rª   rI  r  r)  r   r*  r±   rA   rz   r  r  Úpi_sessionsÚsessionsÚpush_selected_pi_sessionrâ   )
r¡   Ú
connectionÚ
current_idÚcurrentr  ræ   r:  ÚentryÚpresentationr  s
             rM   Úsynchronize_approvalsr_    sý  è è € õ •w—~’~Ñ'Ô'Ñ(Ô(ð $ñ $ˆØÔ)ˆ
ØŒ}ð 	 FÔ$4ð 	ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Øð	$Ý"Ô0×4Ò4°ZÑ@Ô@ˆJÝ—m’m JÑ/Ô/ˆGØð >˜w˜°'´-À9Ò2LÐ2LÝ$ VÐ6JÐ[eØ.5ÐF˜Wœ]˜]¸;ð.Hð .Hñ Iô Ið Ið Ið Ið Ið Ið Ið IåÔ'×+Ò+¨J¸Ñ=Ô=Ð=Ø¥Ô!8Ð8Ð8Ý#×0Ò0Ñ2Ô2�Øð `Ø& qœz�HÝ—O’O F°:�OÑ>Ô>Ð>Ý—M’M &Ñ)Ô)Ð)Ø)-�FÔ&Ø:BÔ:N•IÔ+¨JÑ7Ý!Ô*­>¸&Å)Ç.Â.ÐQYÑBZÔBZÑ+[Ô+[Ð]^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_ùøÝð 		$ð 		$ð 		$ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Ý�OŠO˜F¨5¸ÐFYˆOÑZÔZÐZÝ�NŠN˜6Ð*=ˆNÑ>Ô>Ð>Ø!%ˆFÔØ!ˆFŒMØÔð <Ý�iÑ(Ô(ð <ð <Ø Ô*×0Ò0°dÐ0Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à#ˆFÔÐÑð		$øøøõ •w—~’~Ñ'Ô'Ñ(Ô(ð Eñ EˆØÔ'ˆ
Ý˜fÑ%Ô%Ð]¥kÔ&?×&CÒ&CÀJÈtÑ&TÔ&TÐ&TÐU]Ø vÔ':Ð:Ð:¸8ÝÔ*×.Ò.¨zÑ:Ô:ˆÝ-6×-CÒ-CÑ-EÔ-EÐM•×#Ò#Ñ%Ô%Ð%È2ˆØ#Ð-ˆg�aŒjˆj¨ˆØW\Ðf�e˜LÔ)¨%°Ô*<¸UÀ7¼^Ô*LÈTÔ*RÐSÐSÐbfˆØ�\Ò!Ð!Øð ?Ý—’˜fÑ%Ô%Ð%Ý$ V­DÐ6LÐX`ÐabÔXcÐpxÐyzÔp{Ð,|Ñ,|Ô,|Ñ}Ô}Ð}Ð}Ð}Ð}Ð}Ð}Ð}ÝÔ)×-Ò-¨j¸Ñ>Ô>Ð>Øð EÝ—’˜fÑ%Ô%Ð%¸ fÔ&8Ø6B•Ô)¨*Ñ5Ý$ V­K×,<Ò,<¸UÑ,CÔ,CÑDÔDÐDÐDÐDÐDÐDÐDÐDùõ �Ô,×3Ò3Ñ5Ô5Ñ6Ô6ð ;ð ;ˆÝ& wÔ'9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð;ð ;s8   Á#EF3Æ3BJÉ "I.É"JÉ.I2É2JÉ5I2É6
JÊJc              ƒ  óŽ   K  — 	 |                       ¦   «         ƒ d {V —† |                      ¦   «          t          ¦   «         ƒ d {V —† ŒCrH   )ÚwaitÚclearr_  ©rê   s    rM   Úapproval_deliveryrd  M  s[   è è € ð&Ø�lŠl‰nŒnÐÐÐÐÐÐÐØ�Š‰ŒˆÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&rL   c                óŽ   — t                                | d¬¦  «         t                               | ¦  «         d | _        d| _        d S )NÚtarget_changerç   rx   )rà   ré   rÓ   rv   ry   r°   s    rM   Úinvalidate_targetrg  T  s@   € Ý‡O‚O�F ?€OÑ3Ô3Ð3µF·M²MÀ&Ñ4IÔ4IÐ4IÐ]aÈ&ÔJ\Ðz|ÐbhÔbyÐbyÐbyrL   c                  ó   — e Zd Zd„ Zd„ ZdS )ÚDynamicNavigatorc                ó"   — d | _         d | _        d S rH   )ÚinstanceÚidentityr€   s    rM   Ú__init__zDynamicNavigator.__init__Y  s   €  T�t”}¸¨$¬-¨-¨-rL   c                ó¤  — t          t          ¦  «        t          t          ¦  «        t          t          ¦  «        t          t          ¦  «        t          t
          ¦  «        f}| j        |k    rPt          t          t          t          t          t
          t          t          t          t          ¦	  «	        | _        || _        t          | j        |¦  «        S rH   )rR  r  rC  r´   Ú
operationsrA   rl  r3   r®   r±   Úagent_target_payloadrg  rk  rG  )r�   rÛ   rl  s      rM   Ú__getattr__zDynamicNavigator.__getattr__Z  s    € ÝÕ%Ñ&Ô&¥r­(¡|¤|µBµ|Ñ4DÔ4DÅRÍ
Á^Ä^ÕTVÕWbÑTcÔTcÐdˆØŒ=˜(Ò"Ð"Ý#Õ$4µX½lÍ:ÕVaÕbpÕqõ  AUõ  Vgñ  hô  hˆDŒMð  wð  imô  ivÝ�t”} TÑ*Ô*Ð*rL   N)r„   r…   r†   rm  rq  rK   rL   rM   ri  ri  X  s,   € € € € € Ø<Ð<Ð<ð+ð +ð +ð +ð +rL   ri  é   c              ƒ  óð   K  — 	 	 t          j        |                      ¦   «         d¦  «        ƒ d{V —† n*# t          $ r t                               d¦  «         Y nw xY wt          j        |¦  «        ƒ d{V —† Œt)zIInitialize/reconnect account reads even when no Codex target is selected.Té   Nz.Codex quota connection unavailable; will retry)rˆ   rª   Úreadyr  rW   Úinfor1  )r  Úretry_secondss     rM   Úmaintain_codex_quotarx  a  s    è è € ð+ð	JÝÔ" 7§=¢=¡?¤?°AÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6øÝð 	Jð 	Jð 	JÝ�KŠKÐHÑIÔIÐIÐIÐIð	JøøøåŒm˜MÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð+s   …-3 ³$AÁAÚ_r   c           	    óÎ  ‡K  — t          j        ¦   «         Šˆfd„t          _        ˆfd„t          _        dt
          v r.t          t
          d         _        t          t
          d         _	        dt
          v r.t          j
        t          t
          d         ¦  «        d¬¦  «        nd }t          t          t          ¦  «        }t          j
        t          ‰¦  «        d¬¦  «        }t          j
        t          ¦   «         d¬¦  «        }	 d W V — |rM|                     ¦   «          t#          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   t                               ¦   «          t                               ¦   «         D ]}t                               |¦  «         Œt*                               ¦   «         ƒ d {V —† t,                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t
                               ¦   «         D ¦   «         Ž ƒ d {V —† t3          ¦   «         ƒ d {V —† d t          _        d t          _        ||fD ]O}|                     ¦   «          t#          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPd S # |rM|                     ¦   «          t#          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   t                               ¦   «          t                               ¦   «         D ]}t                               |¦  «         Œt*                               ¦   «         ƒ d {V —† t,                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t
                               ¦   «         D ¦   «         Ž ƒ d {V —† t3          ¦   «         ƒ d {V —† d t          _        d t          _        ||fD ]O}|                     ¦   «          t#          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPw xY w)	Nc                 ó"   •— t          ‰ ¦  «        S rH   )rë   rc  s   €rM   rk   zlifespan.<locals>.<lambda>m  s   ø€ Õ"3°GÑ"<Ô"<€ rL   c                 ó,   •— ‰                       ¦   «         S rH   )rŠ   rc  s   €rM   rk   zlifespan.<locals>.<lambda>n  s   ø€  §¢¡¤€ rL   rE   zcodex-quota-connection)rÛ   zapproval-deliveryzsystem-monitorc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rH   )r*  )r  r  s     rM   ú	<genexpr>zlifespan.<locals>.<genexpr>ƒ  s*   è è € ÐPÐP°7˜wŸ}š}™œÐPÐPÐPÐPÐPÐPrL   )rˆ   ÚEventr@   Ú	on_changerA   rC  Úqueue_codex_activityÚon_activityrä   Úon_terminalÚcreate_taskrx  r0   r  rd  r5  ré   r   ÚCancelledErrorr*  r  rà   rÓ   Úgatherrß   r_  )ry  Ú
quota_taskÚapproval_serverÚdelivery_taskÚmonitor_taskr]  Útaskrê   s          @rM   ÚlifespanrŒ  j  s;  øè è € åŒm‰oŒo€GØ<Ð<Ð<Ð<…IÔØ.Ð.Ð.Ð.…KÔØ•(ÐÐÝ(<��ÔÔ%Ý(9��ÔÔ%à4;½xÐ4GÐ4Gõ Ô%Õ&:½8ÀGÔ;LÑ&MÔ&MØ/ð1ñ 1ô 1ð 1ØMQð å&¥yÕ2BÑCÔC€OåÔ'Õ(9¸'Ñ(BÔ(BÐI\Ð]Ñ]Ô]€MÝÔ&¥~Ñ'7Ô'7Ð>NÐOÑOÔO€LðØˆˆˆˆàð 	DØ×ÒÑÔÐÝ�'Ô0Ñ1Ô1ÐCÐC¸Ð3CÐ3CÐ3CÐ3CÐ3CÐ3CÐ3CÐCÐCÐCÑCÔCÐCÐCÐCÐCÐCÐCøøøÐCÐCÐCÐCÝ�ŠÑÔÐÝ ×(Ò(Ñ*Ô*ÐDÐDˆE­;×+=Ò+=¸eÑ+DÔ+DÐ+DÐ+DÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ"�ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	ð 	øð ð 	DØ×ÒÑÔÐÝ�'Ô0Ñ1Ô1ÐCÐC¸Ð3CÐ3CÐ3CÐ3CÐ3CÐ3CÐ3CÐCÐCÐCÑCÔCÐCÐCÐCÐCÐCÐCøøøÐCÐCÐCÐCÝ�ŠÑÔÐÝ ×(Ò(Ñ*Ô*ÐDÐDˆE­;×+=Ò+=¸eÑ+DÔ+DÐ+DÐ+DÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ"�ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	øøøsy   ÄJ7 Ä9	EÅEÅEÊ	J)Ê)J-	Ê0J-	Ê70Q$Ë'	K<Ë0Q$Ë<L Ì Q$ÌL ÌD>Q$Ñ	Q	ÑQ$ÑQÑQ$ÑQÑQ$zDevice Lab Gatewayú0.6.0)r–   ÚversionrŒ  r  r(   c              ƒ  ó@   K  — t          |j        d|j        i¬¦  «        S )Nr  )Ústatus_codeÚcontent)r   Ústatusr  )Úrequestr  s     rM   Úcontrol_error_handlerr”  �  s"   è è € å C¤J¸À3Ä:Ð8NÐOÑOÔOÐOrL   rº   rd   c                óN   — | t           vrt          dd¦  «        ‚t           |          S )Nzagent adapter not enabledé”  )rC  r(   r¹   s    rM   r¸   r¸   •  s(   € Ø•HÐÐÝÐ6¸Ñ<Ô<Ð<Ý�EŒ?ÐrL   z/api/approvalsc               ƒ  óL   K  — d„ t                                ¦   «         D ¦   «         S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Újson)Úmode)rB  )r  ræ   s     rM   r  z"list_approvals.<locals>.<listcomp>�  s)   € ÐVÐVÐV°ˆH×Ò VÐÑ,Ô,ÐVÐVÐVrL   )r@   r¼   rK   rL   rM   Úlist_approvalsr›  ›  s&   è è € àVÐV½Y×=SÒ=SÑ=UÔ=UÐVÑVÔVÐVrL   z%/api/approvals/{approval_id}/decisionrN  r_   c              ƒ  ó®   K  — t                                | |j        ¦  «        st          dd¬¦  «        ‚d| t                                | ¦  «        j        dœS )Né™  z'approval is missing or already resolved©r�  r  T)ÚacceptedrN  rÕ   )r@   Úresolver’   r   rU   rÕ   )rN  r_   s     rM   Údecide_approvalr¡     sU   è è € å×Ò˜[¨%¬.Ñ9Ô9ð _Ý¨Ð4]Ð^Ñ^Ô^Ð^Ø¨[Å9Ç=Â=ÐQ\ÑC]ÔC]ÔCcÐdÐdÐdrL   z/api/projectsc               ƒ  ó8   K  — t                                ¦   «         S rH   )r  rÞ   rK   rL   rM   Úlist_projectsr£  §  s   è è € å× Ò Ñ"Ô"Ð"rL   éÉ   ©r�  Úprojectr*   c              ƒ  ó:   K  — t                                | ¦  «        S rH   )r  Úadd)r¦  s    rM   Úadd_projectr©  ¬  s   è è € å×Ò Ñ(Ô(Ð(rL   z/api/projects/{project_id}éÌ   r  c              ƒ  ó>   K  — t                                | ¦  «         d S rH   )r  Údelete)r  s    rM   Údelete_projectr­  ±  s    è è € å×Ò˜JÑ'Ô'Ð'Ð'Ð'rL   z/api/agentsc               ƒ  ó(   K  — d„ t           D ¦   «         S )Nc                ó   — g | ]	}|g d ¢dœ‘Œ
S ))r  Úresume_sessionÚ
send_inputr  Úlist_modelsr  )rº   rz   rK   )r  rÛ   s     rM   r  zlist_agents.<locals>.<listcomp>¸  sM   € ð  gð  gð  gð  VZ�dð  -Pð  -Pð  -Pð  Qð  Qð  gð  gð  grL   )rC  rK   rL   rM   Úlist_agentsr³  ¶  s1   è è € ð gð  gõ  ^fð  gñ  gô  gð  grL   z#/api/projects/{project_id}/sessionsc              ƒ  ó�  ‡K  — t                                | ¦  «        Šg i }}t          j        ˆfd„t                               ¦   «         D ¦   «         ddiŽƒ d {V —†}t          t          |¦  «        D ]Q\  }}t          |t          ¦  «        r"t          |t          ¦  «        r|j
        nd||<   Œ<|                     |¦  «         ŒR||dœS )Nc              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S rH   )r  )r  r  r¦  s     €rM   r~  z#project_sessions.<locals>.<genexpr>¿  s1   øè è € Ð$eÐ$eÈ W×%:Ò%:¸7Ñ%CÔ%CÐ$eÐ$eÐ$eÐ$eÐ$eÐ$erL   Úreturn_exceptionsTzagent catalog unavailable)rX  Úerrors)r  rU   rˆ   r†  rC  rß   Úzipr  r  r(   r  Úextend)r  rX  r·  ÚresultsrÛ   Úresultr¦  s         @rM   Úproject_sessionsr¼  »  sß   øè è € å×"Ò" :Ñ.Ô.€GØ˜2ˆf€HÝ”NÐ$eÐ$eÐ$eÐ$eÕS[×SbÒSbÑSdÔSdÐ$eÑ$eÔ$eÐ~Ðy}Ð~Ð~Ð~Ð~Ð~Ð~Ð~Ð~€GÝ�H gÑ.Ô.ð $ð $‰ˆˆfÝ�f�iÑ(Ô(ð 	$Ý,6°v½|Ñ,LÔ,LÐm˜6œ=˜=ÐRmˆF�4‰LˆLà�OŠO˜FÑ#Ô#Ð#Ð#Ø ¨FÐ3Ð3Ð3rL   z)/api/agents/{agent}/sessions/{session_id}râ   c              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S rH   )r¸   r  ©rº   râ   s     rM   Úget_agent_sessionr¿  È  s4   è è € å˜UÑ#Ô#×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;rL   z0/api/agents/{agent}/sessions/{session_id}/resumec              ƒ  ód   K  — t          | ¦  «                             |¦  «        ƒ d {V —†}d| ||dœS )NT)rŸ  rº   râ   Úresumed)r¸   r°  )rº   râ   rÁ  s      rM   Úresume_agent_sessionrÂ  Í  sF   è è € å Ñ&Ô&×5Ò5°jÑAÔAÐAÐAÐAÐAÐAÐA€GØ u¸JÐSZÐ[Ð[Ð[rL   z//api/agents/{agent}/sessions/{session_id}/inputéÊ   r)   c              ƒ  ób   K  — t          | ¦  «                             ||j        ¦  «        ƒ d {V —†S rH   )r¸   r±  Útext©rº   râ   r_   s      rM   Úagent_inputrÇ  Ó  s8   è è € å˜UÑ#Ô#×.Ò.¨z¸5¼:ÑFÔFÐFÐFÐFÐFÐFÐFÐFrL   z2/api/agents/{agent}/sessions/{session_id}/settingsc              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S rH   )r¸   r  r¾  s     rM   r  r  Ø  s4   è è € å˜UÑ#Ô#×0Ò0°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rL   r+   c              ƒ  óX   K  — t          | ¦  «                             ||¦  «        ƒ d {V —†S rH   )r¸   r  rÆ  s      rM   r  r  Ý  s6   è è € å˜UÑ#Ô#×3Ò3°JÀÑFÔFÐFÐFÐFÐFÐFÐFÐFrL   z/healthc               ƒ  ón   K  — ddt          d„ t                               ¦   «         D ¦   «         ¦  «        dœS )NÚokr�  c              3  ó$   K  — | ]}|j         V — Œd S rH   )ro   )r  rÂ   s     rM   r~  zhealth.<locals>.<genexpr>ä  s%   è è € ÐMqÐMqÐ[\ÈaÌhÐMqÐMqÐMqÐMqÐMqÐMqrL   )r’  Úcontrol_versionÚonline_devices)Úsumr    rß   rK   rL   rM   ÚhealthrÐ  â  s:   è è € à¨wÍ#ÐMqÐMqÕ`g×`nÒ`nÑ`pÔ`pÐMqÑMqÔMqÑJqÔJqÐrÐrÐrrL   ú/F)Úinclude_in_schemar   c               ƒ  ó(   K  — t          dd¬¦  «        S )Nú/admini3  r¥  )r   rK   rL   rM   ÚrootrÕ  ç  s   è è € å˜H°#Ð6Ñ6Ô6Ð6rL   rÔ  r   c               ƒ  ó2   K  — t          t          d¬¦  «        S )Nz	text/html©Ú
media_type)r   Úadmin_page_pathrK   rL   rM   Ú
admin_pagerÚ  ì  s   è è € å�°KÐ@Ñ@Ô@Ð@rL   z/api/admin.jsc               ƒ  ó¨   K  — t          t          j                             t          j                             t
          ¦  «        d¦  «        d¬¦  «        S )Nzadmin.jsztext/javascriptr×  )r   rS   ÚpathÚjoinÚdirnamerÙ  rK   rL   rM   Úadmin_scriptrß  ñ  s8   è è € å�œŸš¥R¤W§_¢_µ_Ñ%EÔ%EÀzÑRÔRÐ_pÐqÑqÔqÐqrL   z/serverc               ƒ  óx   K  — t           j        pt                                ¦   «         } |                      ¦   «         S rH   )r-  rA  r.  rB  r3  s    rM   Úserver_statusrá  ö  s2   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HØ×ÒÑ Ô Ð rL   z/devicesúlist[dict[str, Any]]c               ƒ  óX  K  — g } t          t                               ¦   «         d„ ¬¦  «        D ]{}|                     ¦   «         }t                               |j        ¦  «        |d<   t          j                             |j        |d         ¦  «        |d<   |  	                    |¦  «         Œ|| S )Nc                ó   — | j         S rH   )re   )rÂ   s    rM   rk   zlist_devices.<locals>.<lambda>ÿ  s   € ¸¼€ rL   )r  r›   Úspeech_mode)
r~   r    rß   r‚   r´   rU   re   rà   ÚpreferencesÚappend)r»  r¡   Úitems      rM   Úlist_devicesré  ü  sš   è è € à€FÝ�ŸšÑ)Ô)Ð/DÐ/DÐEÑEÔEð ð ˆØ�}Š}‰ŒˆÝ%×)Ò)¨&Ô*:Ñ;Ô;ˆˆX‰Ý&Ô2×6Ò6°vÔ7GÈÈhÌÑXÔXˆˆ]ÑØ�Š�dÑÔÐÐØ€MrL   z/api/statusc               ƒ  ór  K  — t           j        pt                                ¦   «         } t                               ¦   «         }|D ]K}t
                               d|d         ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   ŒL|  	                    ¦   «         t          ¦   «         ƒ d {V —†|dœS )	Nr?   râ   ÚWAITING_APPROVALrÕ   r   ú: Úwaiting_reason)Úserverr    rW  )r-  rA  r.  rW  r‚   r@   r¼   r–   r  rB  ré  )r4  rX  r  r  s       rM   Úadmin_statusrï    sÍ   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HÝ×!Ò!Ñ#Ô#€HØð Tð TˆÝ×(Ò(¨¨w°|Ô/DÑEÔEˆØð 	TØ1ˆG�GÑØ(/°¬
Ô(8¸4Ñ(?À'È!Ä*ÔBSÑ(SˆGÐ$Ñ%øà×%Ò%Ñ'Ô'Ý%™œÐ'Ð'Ð'Ð'Ð'Ð'Øðð ð rL   Únotificationú Literal['done', 'failed'] | Nonec           
     ó.  — t                                | ¦  «        }|€ddd| › �| | dddd dœ	S ddd| › �dœ|                     d	¬
¦  «        ¥}t                               d| ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   |�||d<   |S )NÚagent_stater?   ú	agent:pi:rx   ÚOFFLINEr   )	rí   rº   r›   râ   rÛ   ÚcwdrÕ   Úelapsed_secondsrí  )rí   rº   r›   T)Úinclude_historyrë  rÕ   rì  rí  rð  )rW  rU   r‚   r@   r¼   r–   r  )râ   rð  r  r¢   r  s        rM   Úpi_target_payloadrù    sã   € õ �oŠo˜jÑ)Ô)€GØ€à!¨DØ. *Ð.Ð.Ø$ØØØØ Ø"ð	
ð 	
ð 		
ð ¨Ø*˜jÐ*Ð*ðð ð �.Š.¨ˆ.Ñ
.Ô
.ð€Gõ
 ×$Ò$ T¨:Ñ6Ô6€GØð PØ-ˆ�ÑØ$+¨A¤JÔ$4°tÑ$;¸gÀa¼jÔ>OÑ$OˆÐ Ñ!ØÐØ".ˆ�ÑØ€NrL   c              ƒ  óŽ  K  — d| › �}t          |¦  «        ƒ d {V —†}|�||d<   t          t                               ¦   «         ¦  «        D �]y}t                               |j        ¦  «        |k    rŒ't                               |j        ¦  «        }t                               |j        ¦  «        |k    s#t                               |j        ¦  «        |k    rŒ�	 t          |t          ||¬¦  «        ¦  «        ƒ d {V —† Œ´# t          $ rº t                               |ddd¬¦  «         t                               |d¬¦  «         d |_        |j        rMt#          t          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        Y �Œww xY wd S )Nrô  rð  ©r  FTr"  r#  rç   r&  r'  )rp  rÞ   r    rß   r´   rU   re   r¾   r®   r  r  rà   ré   rÓ   r)  rv   rh   r   r*  ro   rN   rp   )râ   rð  r›   r¢   r¡   r¾   s         rM   rY  rY  4  s  è è € ð &˜Ð%Ð%€FÝ(¨Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0€GØÐ¸< ¨Ñ!8Ý•w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-°Ò7Ð7ØÝ!×,Ò,¨VÔ-=Ñ>Ô>ˆ
õ ×Ò˜FÔ,Ñ-Ô-°Ò7Ð7½<×;RÒ;RÐSYÔScÑ;dÔ;dÐhrÒ;rÐ;rØð
	)Ý  ­¨gÈÐ)TÑ)TÔ)TÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUøÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ÐFYˆOÑZÔZÐZÝ�NŠN˜6Ð*=ˆNÑ>Ô>Ð>Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   Ã%C>Ã>A&GÅ$"FÆGÆFÆGÆFÆ$GÇGrñ   r   c              ƒ  óH  K  — t                                | j        ¦  «        }|�|j        sd S ddd| j        › �| j        |j        |j        |j        �|j                             ¦   «         nd dœ}t          t           	                    ¦   «         ¦  «        D �]}t                               |j        ¦  «        d| j        › �k    rŒ/	 t          ||¦  «        ƒ d {V —† ŒG# t          $ rº t                               |ddd¬¦  «         t                                |d¬	¦  «         d |_        |j        rMt)          t          ¦  «        5  |j                             d
¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t/          ¦   «         |_        Y �Œ
w xY wd S )NÚagent_activityr?   rô  )rí   rº   r›   râ   Úactivity_typeÚactivityr  FTr"  r#  rç   r&  r'  )rW  rU   râ   rÜ   rþ  Úactivity_updated_atr   rÞ   r    rß   r´   re   r®   r  rà   ré   rÓ   r)  rv   rh   r   r*  ro   rN   rp   )rñ   r  r¢   r¡   s       rM   Úpush_selected_pi_activityr  O  sñ  è è € Ý�oŠo˜eÔ.Ñ/Ô/€GØ€˜gÔ5€Øˆà ¨4Ø0˜eÔ.Ð0Ð0ØÔ&Ø Ô.ØÔ+ð Ô*Ð6ð Ô'×1Ò1Ñ3Ô3Ð3àðð €Gõ •w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-Ð1O¸UÔ=MÐ1OÐ1OÒOÐOØð
	)Ý  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ÐFYˆOÑZÔZÐZÝ�NŠN˜6Ð*=ˆNÑ>Ô>Ð>Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   ÃCÃA&FÅ"E/Å#FÅ/E3Å3FÅ6E3Å7$FÆFc              ƒ  ó"  K  — t          | ¦  «        }|sdddœS |\  }}	 t          |¦  «                             |¦  «        ƒ d {V —†}|dk    rEt          t          |¦  «        d¦  «        r(t          |¦  «                             |¦  «        ƒ d {V —† dt          | ¦  «        dœ|                     ¦   «         ¥}|                     dd¦  «                             d	¦  «        d
d …          	                    d	d¬¦  «        |d<   |dk    r®t                               |¦  «        r”|j        r�t          |¦  «        }dD ]7}|                     |¦  «        s |                     |¦  «        r||         ||<   Œ8|                     d¦  «        dk    r|d         |d<   |d         |d<   |                     |¦  «         |S # t          $ rM |dk    r+t                               |¦  «        rt          |¦  «        cY S dt          | ¦  «        |||ddd d dœ	cY S w xY w)NÚtarget_staterî  )rí   r›   rE   Úobserve_sessionró  Úrecent_textrx   zutf-8i`ðÿÿÚignore)r·  r?   )r  rã   rÜ   rÕ   ÚIDLEr÷  rõ  r   )	rí   r›   rº   râ   rÛ   rÕ   r÷  r  Úeffort)r   r¸   r  Úhasattrr  r   rB  rU   ÚencodeÚdecoderW  Úliverù  rH  r(   )r›   r  rº   r  r  r¢   Úoverlayr   s           rM   rp  rp  o  sm  è è € Ý˜&Ñ!Ô!€FØð :Ø%°Ð9Ð9Ð9Ø�J€Eˆ3ðYÝ# EÑ*Ô*×6Ò6°sÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;ˆØ�GÒÐ¥­°EÑ(:Ô(:Ð<MÑ NÔ NÐÝ˜eÑ$Ô$×4Ò4°SÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø'Õ1AÀ&Ñ1IÔ1IÐbÐbÈW×M_ÒM_ÑMaÔMaÐbˆØ!(§¢¨]¸2Ñ!>Ô!>×!EÒ!EÀgÑ!NÔ!NÈuÈvÈvÔ!V×!]Ò!]Ð^eÐnvÐ!]Ñ!wÔ!wˆ�ÑØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=°g´lˆ=Ý% cÑ*Ô*ˆGð Hð _ð _�Ø—{’{ 5Ñ)Ô)Ð^¨g¯kªk¸%Ñ.@Ô.@Ð^ÐPWÐX]ÔP^ÀÈÁøð �{Š{˜7Ñ#Ô# vÒ-Ð-Ø#*¨7Ô#3�˜Ñ Ø-4Ð5FÔ-G�Ð)Ñ*Ø�NŠN˜7Ñ#Ô#Ð#ØˆøÝð Yð Yð YØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=Ý$ SÑ)Ô)Ð)Ð)Ð)Ø$Õ.>¸vÑ.FÔ.FÈuÐbeØ˜y¸1ÀTÐSWðYð Yð 	Yð 	Yð 	YðYøøøs   ŸFF7 Æ79HÇ2HÈHc              ƒ  óL  K  — i }t          t                               ¦   «         ¦  «        D �]÷}t                               |j        ¦  «        }t                               |j        ¦  «        }t          |¦  «        }t          |¦  «        r|r
| r	|| |fk    rŒl	 ||vrt          |¦  «        ƒ d {V —†||<   ||         }t                               |j        ¦  «        |k    s2t                               |j        ¦  «        |k    st          |¦  «        sŒç|rst          |t          d|||d         |d         |                     d¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «        ¦  «        ƒ d {V —† npt          ||¬	¦  «        }	|d         d
k    r0|j        dv r'|d         dv r|d                              ¦   «         |	d<   |d         |_        t          ||	¦  «        ƒ d {V —† �ŒÎ# t          $ r t                               d¦  «         Y �Œõw xY wd S )Nrý  r   r�   rþ  rÜ   rx   r  )rí   r›   r  rº   râ   rþ  rÿ  r  rû  rE   )ÚRUNNINGrë  rÕ   )ÚDONEÚFAILEDrð  zAgent target delivery failed)rÞ   r    rß   r´   rU   re   r¾   r   r±   rp  r®   r  ry   Úlowerr  rW   rX   )
rº   r  rÿ  Úcacher¡   r›   r¾   r  r¢   Úoutgoings
             rM   r0  r0  Ž  sÂ  è è € Ø€EÝ•w—~’~Ñ'Ô'Ñ(Ô(ð ;ñ ;ˆÝ×!Ò! &Ô"2Ñ3Ô3ˆÝ×*Ò*¨6Ô+;Ñ<Ô<ˆ
Ý˜fÑ%Ô%ˆÝ˜fÑ%Ô%ð 	¨Vð 	¸ð 	À&ÈUÐTWÈLÒBXÐBXØð	;Ø˜UÐ"Ð"Õ:NÈvÑ:VÔ:VÐ4VÐ4VÐ4VÐ4VÐ4VÐ4V E¨&¡MØ˜F”mˆGå×Ò Ô 0Ñ1Ô1°VÒ;Ð;½|×?VÒ?VÐW]ÔWgÑ?hÔ?hÐjtÒ?tÐ?tõ  }Kð  LRñ  }Sô  }SÐ?tð  U]Øð 	7Ý$ V­TÐ7GÈvÐhrÐyð  ABô  zCð  OUð  VWô  OXØ")§+¢+¨oÑ">Ô">ÈÏÊÐTeÐfhÑHiÔHiØ '§¢¨M¸"Ñ =Ô =ð.?ñ .?ô .?ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @õ   ¸*ÐEÑEÔE�Ø˜!”9 Ò'Ð'¨FÔ,CÐGeÐ,eÐ,eÐjqÐryÔjzð  Pð  kPð  kPØ/6°wÔ/?×/EÒ/EÑ/GÔ/G�H˜^Ñ,Ø*1°'Ô*:�Ô'Ý$ V¨XÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ùøÝð 	;ð 	;ð 	;Ý�NŠNÐ9Ñ:Ô:Ð:Ð:Ñ:ð	;øøøð+;ð ;s   ÂA9G9ÄC%G9Ç9$H!È H!c                ó|   ‡ — ˆ fd„}‰ t           vr,t                                |¦   «         ¦  «        t           ‰ <   d S d S )Nc               “  ó  •K  — 	 t          j        d¦  «        ƒ d {V —† t          d‰ ¦  «        ƒ d {V —† t          d‰ d¬¦  «        ƒ d {V —† t                               ‰ d ¦  «         d S # t                               ‰ d ¦  «         w xY w)Ng333333Ã?rE   T)rÿ  )rˆ   r1  r0  Ú_codex_push_tasksrV  )r  s   €rM   Údeliverz%queue_codex_activity.<locals>.deliver­  s°   øè è € ð	-Ý”- Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ý$ W¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ý$ W¨c¸DÐAÑAÔAÐAÐAÐAÐAÐAÐAÐAå×!Ò! # tÑ,Ô,Ð,Ð,Ð,øÕ×!Ò! # tÑ,Ô,Ð,Ð,øøøs   …AA* Á*B)r  rÓ   Úspawn)r  Úmethodr  s   `  rM   r�  r�  «  sU   ø€ ð-ð -ð -ð -ð -ð Õ#Ð#Ð#Ý!'§¢¨g¨g©i¬iÑ!8Ô!8Õ˜#ÑÐÐð $Ð#rL   z/integrations/pi/events)rt   Úx_device_lab_pi_tokenc              ƒ  óR  K  — t                                |¦  «        st          dd¬¦  «        ‚t                               | ¦  «        }| j        dv r@t                               d| j        ¦  «         t                               d| j        ¦  «         | j        dk    r5|j
        r.t          d|j        |j        |j        |j        |j        ¬¦  «         | j        dk    rt!          | ¦  «        ƒ d {V —† n t#          |j        |j
        ¦  «        ƒ d {V —† d	|                     ¦   «         d
œS )Ni‘  zinvalid Pi integration tokenrž  )Úsession_shutdownÚ	agent_endr?   r  rÚ   rÿ  T)rŸ  r  )Úcredential_storeÚauthenticate_pir   rW  Úapplyrñ   r@   Úcancel_sessionrâ   rA   Úpending_notificationrä   rÕ   rã   rÛ   rÜ   r  rY  r‚   )rñ   r  r  s      rM   Úpi_eventr$  ¸  sA  è è € õ
 ×+Ò+Ð,AÑBÔBð TÝ¨Ð4RÐSÑSÔSÐSÝ×Ò Ñ&Ô&€GØ„{Ð7Ð7Ð7Ý× Ò   uÔ'7Ñ8Ô8Ð8Ý×"Ò" 4¨Ô(8Ñ9Ô9Ð9Ø„{�kÒ!Ð! gÔ&BÐ!Ý˜$ Ô 2°G´MÀ7ÔCUØ&œ|¸WÔ=Tð	Vñ 	Vô 	Vð 	Và„{�jÒ Ð Ý'¨Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.å& wÔ'9¸7Ô;WÑXÔXÐXÐXÐXÐXÐXÐXÐXØ¨¯ªÑ)9Ô)9Ð:Ð:Ð:rL   z/devices/{device_id}/targetre   Ú	selectionc              ƒ  ó  K  — | t           vrt          dd¬¦  «        ‚t          |j        ¦  «        }t	          |¦  «        }|rM|\  }}|dk    rt
                               |¦  «        s(t          |¦  «                             |¦  «        ƒ d {V —† t           |          }t                               | ¦  «        |k    rDt                               |d¬¦  «         t                               |¦  «         d |_        d|_        t                               | |¦  «        }|d         }d	}	t!          |¦  «        �rJ	 t#          |¦  «        ƒ d {V —†}
t                               | ¦  «        |k    rbt'          |t)          |
|¬
¦  «        ¦  «        ƒ d {V —† |
                     dd¦  «        |_        t                               |¦  «        ƒ d {V —† d}	n³# t,          $ r¦ t                               |d	dd¬¦  «         t                               |d¬¦  «         d |_        |j        rMt3          t,          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d	|_        d |_        Y nw xY w| ||	dœS )Nr–  údevice not foundrž  r?   rf  rç   rx   r¾   Frû  rÕ   Tr"  r#  r&  r'  )re   r›   Ú	delivered)r    r   r   r›   r   rW  rU   r¸   r  r´   rà   ré   rÓ   rv   ry   rŠ   r±   rp  r¾   r®   r  rý   r  r)  rh   r   r*  ro   )re   r%  r›   r  rº   r  r¡   r_   r¾   r(  r¢   s              rM   Úselect_targetr)  Í  sË  è è € à�ÐÐÝ¨Ð4FÐGÑGÔGÐGÝ˜iÔ.Ñ/Ô/€FÝ˜&Ñ!Ô!€FØð 6Ø‰
ˆˆsØ˜’�¥+§/¢/°#Ñ"6Ô"6�Ý˜eÑ$Ô$×0Ò0°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ý�YÔ€FÝ×Ò˜	Ñ"Ô" fÒ,Ð,Ý�Š˜ ˆÑ7Ô7Ð7Ý�Š�fÑÔÐØ!ˆÔØ"$ˆÔÝ
×
Ò
˜9 VÑ
,Ô
,€EØ�\Ô"€JØ€IÝ�fÑÔñ $ð	$Ý0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆGÝ×&Ò& yÑ1Ô1°:Ò=Ð=Ý$ V­D°È:Ð,VÑ,VÔ,VÑWÔWÐWÐWÐWÐWÐWÐWÐWØ*1¯+ª+°g¸rÑ*BÔ*B�Ô'Ý×'Ò'¨Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø �	øøÝð 	$ð 	$ð 	$Ý�OŠO˜F¨5¸ÐFYˆOÑZÔZÐZÝ�NŠN˜6Ð*=ˆNÑ>Ô>Ð>Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÐÐð	$øøøð #¨fÀ9ÐMÐMÐMs8   Ä4BG
 Ç
A&I:È0"IÉI:ÉI"	É"I:É%I"	É&I:É9I:z/devices/{device_id}/messager÷   c              ƒ  ó”  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚d|j        |j        dœ}	 t          ||¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           
                    d
| ¦  «         d| |dœS )Nr–  r'  rž  r�  r¥   Údisplay_message)rí   r–   r—   Fúdevice disconnectedz!sent display_message to device %sT)Úsentre   r÷   )r    rU   r   ro   rh   r–   r—   r®   r  rW   rv  )re   r÷   r¡   r¢   r  s        rM   Úsend_messager.  ó  s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHà(°7´=È'Ì,ÐWÐW€GðTÝ˜V WÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-øÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ3°YÑ?Ô?Ð?Ø y¸WÐEÐEÐEs   Á A7 Á7
B&Â B!Â!B&z&/devices/{device_id}/test-notificationr“  c              ƒ  óš  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚	 t          |d|j        dœ¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           	                    d
|j        | ¦  «         d| |j        dœS )Nr–  r'  rž  r�  r¥   Únotification_test)rí   rŸ   Fr,  z&sent %s notification test to device %sT)r-  re   rŸ   )
r    rU   r   ro   rh   r®   rŸ   r  rW   rv  )re   r“  r¡   r  s       rM   Útest_notificationr1    s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHðTÝ˜VÐ.AÈ7Ì<Ð%XÐ%XÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYøÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ8¸'¼,È	ÑRÔRÐRØ y¸'¼,ÐGÐGÐGs   ÁA/ Á/
BÁ9 BÂBc                  ó>   — e Zd ZU  edd¬¦  «        Zded<   ded<   dS )	ÚSpeechSelectionr�   é¾   r�   rd   r›   z6Literal['OFF', 'MANUAL', 'AUTO_REPLY', 'AUTO_SUMMARY']rš  Nrœ   rK   rL   rM   r3  r3    s>   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø@Ð@Ð@Ñ@Ð@Ð@rL   r3  c                  ó<   — e Zd ZU  edd¬¦  «        Zded<   ddiZdS )	Ú
SpeechTestr�   r4  r�   rd   r›   ÚextraÚforbidN)r„   r…   r†   r   r›   r‡   Úmodel_configrK   rL   rM   r6  r6    s:   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø˜XÐ&€L€L€LrL   r6  z/api/devices/{device_id}/speechc              ƒ  óä  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |d¬¦  «         t          j         	                    | |j        |j
        ¦  «         t                               |¦  «        ƒ d {V —† |j
        t	          |j        ¦  «        dœS )Nr–  úDevice not foundr�  ú Target changed; refresh settingsÚmode_changerç   )rš  r›   )r    rU   r   r´   r   r›   rà   ré   ræ  rŠ   rš  rý   ©re   r_   r¡   s      rM   Úset_speech_moder?  !  sÛ   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ‡O‚O�F =€OÑ1Ô1Ð1ÝÔ×Ò˜Y¨¬°e´jÑAÔAÐAÝ
×
Ò
˜FÑ
#Ô
#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø”JÕ*:¸5¼<Ñ*HÔ*HÐIÐIÐIrL   z$/api/devices/{device_id}/speech-testc              ƒ  ó>  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |dd¦  «        st          dd¦  «        ‚dd	iS )
Nr–  r;  r�  r<  Úscreenu   è¯­éŸ³æ’­æ”¾æµ‹è¯•æˆ�åŠŸã€‚zASpeech unavailable, device busy or firmware lacks speech_playbackrŸ  T)r    rU   r   r´   r   r›   rà   Ústartr>  s      rM   Útest_speechrC  .  s›   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ�>Š>˜& (Ð,IÑJÔJð fÝ˜CÐ!dÑeÔeÐeØ˜ÐÐrL   z
/device/wsrh   r   c              ƒ  ó®  ‡K  — |                       ¦   «         ƒ d {V —† d }	 |                      ¦   «         ƒ d {V —†Št          ‰t          ¦  «        r‰                     d¦  «        dk    �rp|                      dd¬¦  «        ƒ d {V —† 	 |�Qd |_        t          j         	                    |j
        d ¦  «         t          j         	                    |j
        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |ddd¬	¦  «         t                                |d¬
¦  «         d |_        |j        rMt'          t(          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        t0                               d|j        ¦  «         d S d S d S d}t5          ˆfd„|D ¦   «         ¦  «        �rp|                      dd¬¦  «        ƒ d {V —† 	 |�Qd |_        t          j         	                    |j
        d ¦  «         t          j         	                    |j
        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |ddd¬	¦  «         t                                |d¬
¦  «         d |_        |j        rMt'          t(          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        t0                               d|j        ¦  «         d S d S d S ‰d         }t6                               |‰d         ¦  «        �s‹t0                               d|¦  «         |                      dd¬¦  «        ƒ d {V —† 	 |�Qd |_        t          j         	                    |j
        d ¦  «         t          j         	                    |j
        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |ddd¬	¦  «         t                                |d¬
¦  «         d |_        |j        rMt'          t(          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        t0                               d|j        ¦  «         d S d S d S t                               |¦  «        }|�c|j        �\t                               |ddd¬	¦  «         t                                |d¬
¦  «         |j                             dd¬¦  «        ƒ d {V —† t=          |‰d         ‰d         | t          ‰                     d¦  «        t>          ¦  «        r d„ ‰                     dg ¦  «        D ¦   «         ntA          ¦   «         ¬¦  «        }|t          |<   tC          |dtE          t-          ¦   «          #                    ¦   «         dz  ¦  «        tI          ¦   «         tK          tL          |j'        z  ¦  «        tP           )                    |¦  «        dœ¦  «        ƒ d {V —† tT          j+        ptT           ,                    ¦   «         }tC          |t[          |¦  «        ¦  «        ƒ d {V —† tP                               |¦  «        }t]          |¦  «        ƒ d {V —†}tC          |t          |fi d |j'        v rd!tP           )                    |¦  «        ini ¤Ž¦  «        ƒ d {V —† |                     d"d#¦  «        |_/        t           0                    |¦  «        ƒ d {V —† t           1                    ¦   «          t0                               d$|j        |j2        |j3        ¦  «         	 |                      ¦   «         ƒ d {V —†}t          |t          ¦  «        r(t          |                     d¦  «        th          ¦  «        s!t0                               d%|j        ¦  «         Œyt-          ¦   «         |_        |d          5                    d&¦  «        r
d|d         in||_6        |d          5                    d'¦  «        r#t           7                    ||¦  «        ƒ d {V —† �n¦|d          5                    d(¦  «        rK|d         d)k    rt                               |d*¬
¦  «         t            7                    ||¦  «        ƒ d {V —† �n@|d         d+v rÊ|d         d,k    rt                               |d-¬
¦  «         |d         d.k    rtq          ||¦  «        ƒ d {V —† �nê|j9        �|j9         :                    ¦   «         r/t            ;                    tq          ||¦  «        ¦  «        |_9        �n›tC          |d/|                     d0¦  «        d1d2œ¦  «        ƒ d {V —† �nl|d         d3v rÒ|d         d4k    r#tx           7                    ||¦  «        ƒ d {V —† �n3|j9        �|j9         :                    ¦   «         r:t            ;                    tx           7                    ||¦  «        ¦  «        |_9        �nÙtC          |t          |d         d5k    rd6nd7|                     d0¦  «        d8¬2¦  «        ¦  «        ƒ d {V —† �n�|d         d9k    rÅt                               |j        ¦  «        |u r£|j        rœ|                     d:¦  «        }	t                               |                     d;¦  «        ¦  «        }
d<|j'        vr|	d=k    r|
rd>|
j=        vrd?|
j=        v rd?}	t           >                    |                     d;¦  «        |	|j
        ¬@¦  «         n¿|d         dAk    rKt0                               dB|j        |                     dCdD¦  «        |                     dEdD¦  «        ¦  «         nh|d         dFk    r5t0           ?                    dG|j        |                     dH¦  «        ¦  «         n't0                               dI|j        |d         ¦  «         �Œ�# t€          $ r Y n)t(          $ r t0           A                    dJ¦  «         Y nw xY w|�Qd |_        t          j         	                    |j
        d ¦  «         t          j         	                    |j
        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |ddd¬	¦  «         t                                |d¬
¦  «         d |_        |j        rMt'          t(          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        t0                               d|j        ¦  «         d S d S d S # |�Qd |_        t          j         	                    |j
        d ¦  «         t          j         	                    |j
        d ¦  «         |�øt                               |j        ¦  «        |u rØt                               |ddd¬	¦  «         t                                |d¬
¦  «         d |_        |j        rMt'          t(          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        t0                               d|j        ¦  «         w w w xY w)KNrí   Úhelloið  zfirst message must be hello)r(  rè   FTÚ
disconnectr#  rç   r&  r'  zdevice %s offline)re   Údevice_tokenrf   rg   c              3  ó|   •K  — | ]6}t          ‰                     |¦  «        t          ¦  «         p‰|          V — Œ7d S rH   )r  rU   rd   )r  r  rE  s     €rM   r~  z#device_websocket.<locals>.<genexpr>E  sE   øè è € ÐYÐYÈ•:˜eŸiši¨™nœn­cÑ2Ô2Ð2ÐD¸%À¼*°nÐYÐYÐYÐYÐYÐYrL   zinvalid hellore   rG  zrejected unauthorized device %szunauthorized deviceÚreplacementiô  zreplaced by a new connectionrf   rg   rz   c                ó<   — h | ]}t          |t          ¦  «        ¯|’ŒS rK   )r  rd   )r  Úvs     rM   ú	<setcomp>z#device_websocket.<locals>.<setcomp>]  s)   € ÐYÐYÐY ÅjÐQRÕTWÑFXÔFXÐY˜!ÐYÐYÐYrL   )re   rf   rg   rh   rz   Ú	hello_ackiè  )rí   Úserver_time_msÚtimezone_offset_minutesrz   r  ztarget-selectr  rÕ   rx   z%device %s online board=%s firmware=%szdevice %s sent invalid event)Úvoice_Ú	settings_Úspeech_Úuser_input_Úsession_Ú	creation_Úhistory_rR  rP  Úvoice_startrÖ   )rø   rü   rî   rø   rý   rî   rõ   rï   zSettings request busyrö   )Úcatalog_getÚtarget_selectÚ
target_getÚcreation_getÚsession_createÚsession_operation_getÚhistory_getÚuser_input_responser_  r^  Únavigator_errorÚhistory_errorÚBusyÚapproval_responser’   rN  rO  ÚrejectÚdeclineré   )Údevice_connectionÚbutton_eventz,device %s button clicked button=%s action=%sÚbuttonÚunknownÚactionÚ	heartbeatzdevice %s heartbeat uptime=%sÚuptimezdevice %s event type=%szdevice websocket failed)BÚacceptÚreceive_jsonr  r  rU   r*  rv   r@   rU  rV  rm   rA   r    re   rà   ré   rÓ   r)  rh   r   r  ro   rN   rp   rW   rv  Úanyr  ÚauthenticaterX   rc   rÞ   rŠ   r®   rO   Ú	timestampra   r~   r4   rz   r´   r¾   r-  rA  r.  r/  rp  ry   rý   rê   rf   rg   rd   Ú
startswithrq   Úhandlerò   ru   Údoner  rÀ   Úchoicesr   Údebugr   Ú	exception)rh   r¡   Úrequiredre   r:  r4  r›   r¢   rñ   r’   ræ   rE  s              @rM   Údevice_websocketry  :  s  øè è € à
×
Ò
Ñ
Ô
ÐÐÐÐÐÐÐØ €Fðy?Ø×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.ˆÝ˜%¥Ñ&Ô&ð 	¨%¯)ª)°FÑ*;Ô*;¸wÒ*FÑ*FØ—/’/ tÐ4Q�/ÑRÔRÐRÐRÐRÐRÐRÐRÐRØðN Ðà!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ÀlˆOÑSÔSÐSÝ�NŠN˜6¨,ˆNÑ7Ô7Ð7Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"IðU FˆÝÐYÐYÐYÐYÐPXÐYÑYÔYÑYÔYñ 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØðD Ðà!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ÀlˆOÑSÔSÐSÝ�NŠN˜6¨,ˆNÑ7Ô7Ð7Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"IðK ˜+Ô&ˆ	Ý×,Ò,¨Y¸¸nÔ8MÑNÔNñ 	Ý�NŠNÐ<¸iÑHÔHÐHØ—/’/ tÐ4I�/ÑJÔJÐJÐJÐJÐJÐJÐJÐJØðx Ðà!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ÀlˆOÑSÔSÐSÝ�NŠN˜6¨,ˆNÑ7Ô7Ð7Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"IõA —;’;˜yÑ)Ô)ˆØÐ HÔ$6Ð$BÝ�OŠO˜H¨U¸4ÈˆOÑVÔVÐVõ
 �NŠN˜8¨MˆNÑ:Ô:Ð:ØÔ$×*Ò*°Ð=[Ð*Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\åØØ˜”.Ø˜:Ô&Øå˜eŸiši¨Ñ7Ô7½Ñ>Ô>ðJÐYÐY U§Y¢Y¨~¸rÑ%BÔ%BÐYÑYÔYÐYÝDGÁEÄEð
ñ 
ô 
ˆð $��	ÑÝ˜VØÝ!¥'¡)¤)×"5Ò"5Ñ"7Ô"7¸$Ñ">Ñ?Ô?Ý'FÑ'HÔ'HÝ!¥,°Ô1DÑ"DÑEÔEÝ ,× 7Ò 7¸	Ñ BÔ Bð&
ð &
ñ ô ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ $Ô*ÐHÕ.>×.FÒ.FÑ.HÔ.HˆÝ˜VÕ%<¸XÑ%FÔ%FÑGÔGÐGÐGÐGÐGÐGÐGÐGÝ×!Ò! )Ñ,Ô,ˆÝ,¨VÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4ˆÝ˜V¥D¨ð  %að  %aÐpð  DJô  DWð  qWð  qWÐ5HÍ×I`ÒI`ÐajÑIkÔIkÐ4lÐ4lð  ]_ð  %að  %añ  bô  bð  	bð  	bð  	bð  	bð  	bð  	bð  	bØ")§+¢+¨g°rÑ":Ô":ˆÔÝ×Ò Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ý×ÒÑÔÐÝ�ŠØ3°VÔ5EÀvÄ|ÐU[ÔUdñ	
ô 	
ð 	
ð/	XØ#×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ˆEÝ˜e¥TÑ*Ô*ð µ*¸U¿YºYÀvÑ=NÔ=NÕPSÑ2TÔ2Tð Ý—’Ð=¸vÔ?OÑPÔPÐPØÝ&™yœyˆFÔà;@À¼=×;SÒ;Sð  Ueñ  <fô  <fð  !q ¨¨v¬Ð 7Ð 7ð  lqˆFÔØ�VŒ}×'Ò'¨	Ñ2Ô2ð 'XÝ—o’o f¨eÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ñ4Ø�v”×)Ò)¨(Ñ3Ô3ð %XØ˜”= MÒ1Ð1µ8·?²?À6ÐRY°?Ñ3ZÔ3ZÐ3ZÝ—m’m F¨EÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ñ2Ø�v”Ð"WÐWÐWØ˜”= NÒ2Ð2µH·O²OÀFÐS]°OÑ4^Ô4^Ð4^Ø˜”=Ð$5Ò5Ð5Ý)¨&°%Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8àÔ+Ð3°vÔ7K×7PÒ7PÑ7RÔ7RÐ3Ý/5¯|ª|½OÈFÐTYÑ<ZÔ<ZÑ/[Ô/[˜Ô,Ñ,å,¨VÐ=MÐ\a×\eÒ\eÐfrÑ\sÔ\sð  @Wð  6Xð  6Xñ  Yô  Yð  Yð  Yð  Yð  Yð  Yð  Yð  Yñ  YØ�v”ð  #kð  kð  kØ˜”=Ð"7Ò7Ð7½i×>NÒ>NÈvÐV[Ñ>\Ô>\Ð8\Ð8\Ð8\Ð8\Ð8\Ð8\Ð8\Ñ8\ØÔ)Ð1°VÔ5I×5NÒ5NÑ5PÔ5PÐ1Õfl×frÒfrÕs|÷  tDò  tDð  EKð  LQñ  tRô  tRñ  gSô  gSÐQWÔQeÑQeÝ)¨&µÐPUÐV\ÔP]Ð_lÒPlÐPlÐ;LÐ;Lð  sBð  NS÷  NWò  NWð  Xdñ  Neô  Neð  ntð  2uñ  2uô  2uñ  vô  vð  vð  vð  vð  vð  vð  vð  vñ  vØ�v”Ð"5Ò5Ð5Ý—;’;˜vÔ/Ñ0Ô0°FÐ:Ð:¸v¼}Ð:Ø"ŸYšY zÑ2Ô2�HÝ&Ÿ]š]¨5¯9ª9°]Ñ+CÔ+CÑDÔD�Hð -°FÔ4GÐGÐGÈHÐV^ÒL^ÐL^Ø (ð M_Ø-6¸hÔ>NÐ-NÐ-NÐS[Ð_gÔ_oÐSoÐSoØ!)˜Ý×%Ò% e§i¢i°Ñ&>Ô&>ÀØ8>Ô8Lð &ñ Nô Nð Nøà�v” .Ò0Ð0Ý—’ØBØÔ$Ø—I’I˜h¨	Ñ2Ô2Ø—I’I˜h¨	Ñ2Ô2ñ	ô ð ð ð �v” +Ò-Ð-Ý—’Ð<¸fÔ>NÐPU×PYÒPYÐZbÑPcÔPcÑdÔdÐdÐdå—’Ð5°vÔ7GÈÈvÌÑWÔWÐWñ_/	Xøõ` ð ð ð ØˆÝð 4ð 4ð 4Ý×ÒÐ2Ñ3Ô3Ð3Ð3Ð3ð4øøøð Ðà!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ÀlˆOÑSÔSÐSÝ�NŠN˜6¨,ˆNÑ7Ô7Ð7Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iøð Ðà!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ÀlˆOÑSÔSÐSÝ�NŠN˜6¨,ˆNÑ7Ô7Ð7Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>ð Ð"Iøøøs²   ¡A&q= Å"FÆFÆFÇ;q= Ë("LÌLÌLÍ(A"q= Ò"SÓSÓSÔ] q= ñ=
r/òx ò	#r/ò,x ò.r/ò/x ö"v2ö2v6ö9v6øC}û"|û9}ü|	ü	}ü|	üA})rF   r   )rF   rO   )r¡   rc   r¢   r|   rF   r£   )r¢   r|   rF   r   )rF   r   rH   )r4  r6  rF   r|   )rr  )ry  r   )r  r(   )rº   rd   )rN  rd   r_   rŒ   )r¦  r*   )r  rd   )rº   rd   râ   rd   )rº   rd   râ   rd   r_   r)   )rº   rd   râ   rd   r_   r+   rƒ   )rF   r   )rF   r   )rF   râ  )râ   rd   rð  rñ  rF   r|   )râ   rd   rð  rñ  rF   r   )rñ   r   rF   r   )NNF)rñ   r   r  rd   rF   r|   )re   rd   r%  r™   rF   r|   )re   rd   r÷   r”   rF   r|   )re   rd   r“  rž   rF   r|   )re   rd   r_   r3  )re   rd   r_   r6  )rh   r   rF   r   )¬Ú
__future__r   rˆ   ÚloggingrS   r¨   Ú
contextlibr   r   Údataclassesr   r   r   r	   Útypingr
   r   Úuuidr   Úfastapir   r   r   r   r   Úfastapi.responsesr   r   r   Úpydanticr   r   Údevice_gateway.authr   Ú device_gateway.collectors.systemr   Ú$device_gateway.collectors.host_stater   Údevice_gateway.protocolr   Údevice_gateway.integrations.pir   r   Údevice_gateway.stater   r   r   Údevice_gateway.voicer    r!   Údevice_gateway.speechr"   r#   r$   r%   r&   Údevice_gateway.control.settingsr'   Údevice_gateway.control.modelsr(   r)   r*   r+   Údevice_gateway.control.projectsr,   Údevice_gateway.control.pir-   Údevice_gateway.control.codexr.   Ú device_gateway.control.approvalsr/   Ú"device_gateway.control.pi_approvalr0   Ú!device_gateway.control.user_inputr1   Ú!device_gateway.control.operationsr2   Ú device_gateway.control.navigatorr3   r4   Ú	getLoggerrW   rT   rU   r-  Úfloatr2  r9   r‡   r  r´   rÜ  rÝ  rÞ  Ú__file__rÙ  rW  r  r@   rA   ro  rC  rN   ra   rc   rŒ   r”   r™   rž   r    r®   r±   rÓ   r×   Úspeech_preferencesrà   rä   rë   rò   rð   r+  r5  r/  r_  rd  rg  ri  rÀ   rx  rŒ  ÚappÚexception_handlerr”  r¸   r›  Úpostr¡  r£  r©  r¬  r­  r³  r¼  r¿  rÂ  rÇ  r  r  rÐ  rÕ  rÚ  rß  rá  ré  rï  rù  rY  r  rp  r0  r  r�  r$  r)  r.  r1  r3  r6  r?  rC  rh   ry  rK   rL   rM   ú<module>rœ     së  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø <Ð <Ð <Ð <Ð <Ð <Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø /Ð /Ð /Ð /Ð /Ð /Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø =Ð =Ð =Ð =Ð =Ð =Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð 
ˆÔ	Ð9Ñ	:Ô	:€Ø"�?¨B¬J¯NªNÐ;PÑ,QÔ,QÐRÑRÔRÐ Ø!˜E "¤*§.¢.Ð1LÈcÑ"RÔ"RÑSÔSÐ à €Ð  Ð  Ð  Ñ  Ø(Ð(Ø„J‡N‚NØ!Ø4ñô ñô Ð ð ˆ{Ø„J‡N‚NØØ5ñô ñô €ð ”'—,’,˜rœwŸš¨xÑ8Ô8¸(ÀLÑQÔQ€ØÐÑ!Ô!€Ø"�? 2¤:§>¢>Ð2IÐKyÑ#zÔ#zÑ{Ô{Ð ØÐÑÔ€	ØˆJ‰LŒL€Øˆ:�b”j—n’nÐ%>Ð?qÑrÔrÑsÔs€
Ø�)�)Ð,¨kÀYÐ[fÐgÑgÔgÐh€Ø„:‡>‚>Ð)¨3Ñ/Ô/°3Ò6Ð6Ø$˜Ð%5ÀÐWbÐcÑcÔc€HˆWÑð&ð &ð &ð &ð
Jð 
Jð 
Jð 
Jð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð:6ð 6ð 6ð 6ð 6�yñ 6ô 6ð 6ð4ð 4ð 4ð 4ð 4�Yñ 4ô 4ð 4ð
`ð `ð `ð `ð `�iñ `ô `ð `ð$ð $ð $ð $ð $�yñ $ô $ð $ð  €Ð Ð Ð Ñ ð?ð ?ð ?ð ?ðfð fð fð 
ˆ�n�nÑ&Ô&Ð(IÐ(IÐKkÐKkØ�>Ð"GÐ"GÐW~ÐW~Ø;Ð;ÐJoÐJoð  @jð  @jð
kñ 
kô 
k€ð
Nð Nð Nð
 'Ð& r¤z§~¢~Ð6KÐMyÑ'zÔ'zÑ{Ô{Ð Øˆ=˜˜Ñ)Ô)¨=¨=©?¬?Ð<NØ%Ð% ~°~À~ñWô W€ð EGÐXZð _ð _ð _ð _ð _ð
ð ð ð.ð .ð .ð+]ð +]ð +]ð\eð eð eð eð$7ð 7ð 7ð 7ðð ð ð ð ð(6;ð 6;ð 6;ðr&ð &ð &ð}ð }ð }ð+ð +ð +ð +ð +ñ +ô +ð +ð Ð
Ñ
Ô
€	ð+ð +ð +ð +ð ðð ð ñ ÔððD €gÐ(°'ÀHÐMÑMÔM€ð ×Ò�|Ñ$Ô$ðPð Pð Pñ %Ô$ðPðð ð ð ð ‡‚Ð	ÑÔðWð Wñ ÔðWð ‡‚Ð
1Ñ2Ô2ðeð eð eñ 3Ô2ðeð ‡‚ˆÑÔð#ð #ñ Ôð#ð ‡‚ˆ/ s€Ñ+Ô+ð)ð )ð )ñ ,Ô+ð)ð ‡‚Ð(°c€Ñ:Ô:ð(ð (ð (ñ ;Ô:ð(ð ‡‚ˆÑÔðgð gñ Ôðgð ‡‚Ð	.Ñ/Ô/ð	4ð 	4ð 	4ñ 0Ô/ð	4ð ‡‚Ð	4Ñ5Ô5ð<ð <ð <ñ 6Ô5ð<ð ‡‚Ð
<Ñ=Ô=ð\ð \ð \ñ >Ô=ð\ð
 ‡‚Ð
;È€ÑMÔMðGð Gð Gñ NÔMðGð ‡‚Ð	=Ñ>Ô>ð=ð =ð =ñ ?Ô>ð=ð ‡‚Ð
>Ñ?Ô?ðGð Gð Gñ @Ô?ðGð ‡‚ˆÑÔðsð sð sñ Ôðsð ‡‚ˆ €Ñ&Ô&ð7ð 7ð 7ñ 'Ô&ð7ð ‡‚ˆ U€Ñ+Ô+ðAð Að Añ ,Ô+ðAð ‡‚ˆ¨E€Ñ2Ô2ðrð rð rñ 3Ô2ðrð ‡‚ˆÑÔð!ð !ð !ñ Ôð!ð
 ‡‚ˆÑÔðð ð ñ Ôðð ‡‚ˆÑÔðð ð ñ Ôðð  GKðð ð ð ð ð< GKð)ð )ð )ð )ð )ð6)ð )ð )ð )ð@Yð Yð Yð>;ð ;ð ;ð ;ð6 Ð ð
9ð 
9ð 
9ð ‡‚Ð
#°u€Ñ=Ô=ð "( °Ð!3Ñ!3Ô!3ð;ð ;ð ;ð ;ñ >Ô=ð;ð( ‡‚Ð
'Ñ(Ô(ð"Nð "Nð "Nñ )Ô(ð"NðJ ‡‚Ð
(Ñ)Ô)ðFð Fð Fñ *Ô)ðFð$ ‡‚Ð
2Ñ3Ô3ðHð Hð Hñ 4Ô3ðHð Að Að Að Að A�iñ Aô Að Að
'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð
 ‡‚Ð
+Ñ,Ô,ð	Jð 	Jð 	Jñ -Ô,ð	Jð ‡‚Ð
0Ñ1Ô1ðð ð ñ 2Ô1ðð ‡‚ˆ|ÑÔð|?ð |?ð |?ñ Ôð|?ð |?ð |?rL   