ó
    eÊjQ;  ã                   óÜ  • S SK r S SKJrJr  S SKJrJrJrJrJrJ	r	  S SK
JrJrJr  S SKJr  S SKrS SKJr  S SKJr  S SKJrJrJrJrJrJrJrJr  S S	KJr  S S
KJ r   \" 5       r!Sr"\!RG                  S5      S 5       r$\!RG                  S\S9S\4S j5       r%\!RG                  S\S9S\4S j5       r&\!RG                  S\S9S\4S j5       r'\!RG                  S5      \" \5      \" \" S5      5      4S\S\S\RP                  4S jj5       r)\!RU                  S5      \" S5      \" S5      \" S5      \" S5      \" \5      \" \" S5      5      4S\S\+S\,S \	S!\	S\S\RP                  4S" jj5       r-g)#é    N)ÚdatetimeÚtimezone)Ú	APIRouterÚRequestÚDependsÚFormÚFileÚ
UploadFile)ÚHTMLResponseÚResponseÚJSONResponse)ÚSession)ÚEMELOGEP_SZAKMAI_SZEREPKOROK)Úget_db)Úis_safe_extensionÚsanitize_filenameÚget_current_userÚget_working_company_idÚapply_user_data_scope_filterÚis_machine_allowedÚis_company_activeÚrequire_modul)Útomorit_kepet)Ú	templatesu~  
const CACHE_NEV = 'emeloreg-offline-v6';
// v6 (v85): a Defensys logÃ³ helyett az EMELOG Database logÃ³ (emelog_logo_w.svg / emelog_logo.svg / emelog_favicon.svg) van az elÅ‘re gyorsÃ­tÃ³tÃ¡razott listÃ¡ban.
// v49: a service worker Ã¡ltal kiszolgÃ¡lt oldalak (gÃ©p-keresÅ‘, mobil csekklista, Ãºj gÃ©p offline) a KÃ–ZÃ–S designt hasznÃ¡ljÃ¡k (_head_kozos.html), ezÃ©rt a kÃ¶zÃ¶s
// stÃ­lus / tÃ©ma-szkript / fejlÃ©c-szkriptek is elÅ‘re gyorsÃ­tÃ³tÃ¡razÃ³dnak - kÃ¼lÃ¶nben net nÃ©lkÃ¼l a hÃ©j stÃ­lus nÃ©lkÃ¼l jelenne meg. Ha ezt a listÃ¡t vagy a
// kÃ¶zÃ¶s head-et mÃ³dosÃ­tod, emeld a CACHE_NEV verziÃ³jÃ¡t (a rÃ©gi gyorsÃ­tÃ³tÃ¡r az activate-nÃ©l tÃ¶rlÅ‘dik). v4 (v51): a kÃ¶zÃ¶s head viewport / theme-color meta-ja Ã©s az okostelefonos CSS miatt. v5 (v55): a precache-elt hÃ©jak (mobil csekklista, Ãºj gÃ©p offline) Å±rlapmezÅ‘i inputmode / autocomplete attribÃºtumokat kaptak.
const ELORE_CACHELT_URLAK = [
    '/mobil-csekklista-shell',
    '/uj-gep-offline-shell',
    '/gep-kereses-shell',
    '/static/emelog_logo_w.svg',
    '/static/emelog_logo.svg',
    '/static/emelog_favicon.svg',
    '/static/css/emelog.css',
    '/static/css/jetbrains-mono.css',
    '/static/fonts/jetbrains-mono/jetbrains-mono-latin-400-normal.woff2',
    '/static/fonts/jetbrains-mono/jetbrains-mono-latin-500-normal.woff2',
    '/static/fonts/jetbrains-mono/jetbrains-mono-latin-700-normal.woff2',
    '/static/js/tema.js',
    '/static/js/common.js',
    '/static/js/pages/gep-kereses.js',
    '/static/js/pages/mobil-csekklista.js',
    '/static/js/pages/uj-gep-offline.js',
    'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css',
    'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js',
    'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css'
];

self.addEventListener('install', event => {
    self.skipWaiting();
    event.waitUntil(
        caches.open(CACHE_NEV).then(async cache => {
            for (const url of ELORE_CACHELT_URLAK) {
                try {
                    await cache.add(url);
                } catch (e) {
                    console.warn('Nem sikerult elore-gyorsitotarazni:', url, e);
                }
            }
        })
    );
});

self.addEventListener('activate', event => {
    // A rÃ©gi verziÃ³jÃº gyorsÃ­tÃ³tÃ¡rak tÃ¶rlÃ©se (v49: emeloreg-offline-v2 -> v3), majd az oldalak Ã¡tvÃ©tele.
    event.waitUntil(
        caches.keys()
            .then(nevek => Promise.all(nevek.filter(n => n.startsWith('emeloreg-offline-') && n !== CACHE_NEV).map(n => caches.delete(n))))
            .then(() => self.clients.claim())
    );
});

self.addEventListener('fetch', event => {
    const req = event.request;
    let url;
    try {
        url = new URL(req.url);
    } catch (e) {
        return;
    }

    // Meglevo gep oldalak (QR / napi ellenorzes / adatlap): halozat elsobbseg, offline eseten
    // a helyi, gep-fuggetlen hejjal valaszolunk - a kliens JS a szerepkor alapjan donti el, mit mutat.
    if (req.mode === 'navigate' && (
        url.pathname.startsWith('/q/') ||
        url.pathname.startsWith('/mobil-csekklista/') ||
        url.pathname.startsWith('/szerkesztes/')
    )) {
        event.respondWith(
            fetch(req).catch(() => caches.match('/mobil-csekklista-shell'))
        );
        return;
    }

    // Uj gep felvitele: kulon, gep-fuggetlen hej.
    if (req.mode === 'navigate' && url.pathname === '/uj-gep') {
        event.respondWith(
            fetch(req).catch(() => caches.match('/uj-gep-offline-shell'))
        );
        return;
    }

    // Azonosito-alapu gepkereses (gyari/leltari szam): kulon, gep-fuggetlen hej.
    if (req.mode === 'navigate' && (url.pathname === '/gep-kereses' || url.pathname === '/gep-kereses-eredmeny')) {
        event.respondWith(
            fetch(req).catch(() => caches.match('/gep-kereses-shell'))
        );
        return;
    }

    // Sajat statikus allomanyok (css / js / svg / betutipus) es az elore ismert CDN-ek: azonnal a gyorsitotarbol (gyors, net nelkul is mukodik),
    // a hatterben pedig frissitjuk (v49: korabban "cache-first" volt, ami az emelog.css modositasa utan orokre a regi stilust adta volna).
    const sajatStatikus = url.origin === self.location.origin && /^\/static\/.+\.(css|js|svg|woff2?)$/.test(url.pathname);
    const ismertCdn = ELORE_CACHELT_URLAK.includes(req.url);
    if (req.method === 'GET' && (sajatStatikus || ismertCdn)) {
        const halozati = caches.open(CACHE_NEV).then(cache =>
            fetch(req).then(resp => {
                if (resp && resp.ok) cache.put(req, resp.clone());
                return resp;
            })
        ).catch(() => null);
        event.waitUntil(halozati);
        event.respondWith(
            caches.match(req).then(cachedResp => cachedResp || halozati.then(resp => resp || Response.error()))
        );
    }
    // Minden mas keres (API hivasok, POST-ok) a bongeszo alapertelmezett halozati viselkedeset kapja.
});
z/sw.jsc                  ó$   • [        [        SSS0S9$ )Nzapplication/javascriptzCache-Controlzno-cache)ÚcontentÚ
media_typeÚheaders)r   ÚSW_JS© ó    Ú(/var/www/website/routers/offline_sync.pyÚservice_workerr#   †   s   € äœEÐ.FÐQ`ÐblÐPmÑnÐnr!   z/mobil-csekklista-shell)Úresponse_classÚrequestc           	      ó8   • [         R                  " U SS/ SSS.S9$ )u–  
GÃ©p-fÃ¼ggetlen, statikusan elÅ‘re-gyorsÃ­tÃ³tÃ¡razhatÃ³ hÃ©j. A Service Worker ezt szolgÃ¡lja ki
bÃ¡rmely /q/{uuid}, /mobil-csekklista/{uuid} vagy /szerkesztes/{uuid} kÃ©rÃ©sre, ha nincs hÃ¡lÃ³zat -
a kliens oldali JS a helyi (IndexedDB) gyorsÃ­tÃ³tÃ¡rbÃ³l tÃ¶lti be a gÃ©p adatait, Ã©s a mentett
szerepkÃ¶r alapjÃ¡n dÃ¶nti el, hogy a napi ellenÅ‘rzÃ©s Å±rlapot vagy a gÃ©p-ellenÅ‘rzÅ‘ nÃ©zetet mutatja.
zmobil-csekklista.htmlNÚnull)ÚgepÚkerdesekÚuserÚszerver_adat_json©r%   ÚnameÚcontext©r   ÚTemplateResponse©r%   s    r"   Úmobil_csekklista_shellr2   ‹   s*   € ô ×%Ò%ØØ$Ø¨"°dÐQWÑXñð r!   z/uj-gep-offline-shellc                 ó.   • [         R                  " U S0 S9$ )u=  
Ã–nÃ¡llÃ³, gÃ©p-fÃ¼ggetlen hÃ©j az Ãºj gÃ©p offline felvitelÃ©hez. A hozzÃ¡ szÃ¼ksÃ©ges referenciaadatokat
(telephelyek, gyÃ¡rtÃ³k, tÃ­pusok, gÃ©ptÃ­pusok, lehetsÃ©ges fÅ‘ gÃ©pek) a kliens oldali JS a helyi
(IndexedDB) gyorsÃ­tÃ³tÃ¡rbÃ³l olvassa - ezeket az /offline/szinkronizacio-adatok tÃ¶lti fel, amÃ­g van net.
zuj-gep-offline.htmlr,   r/   r1   s    r"   Úuj_gep_offline_shellr4   š   s   € ô ×%Ò%¨gÐ<QÐ[]Ñ^Ð^r!   z/gep-kereses-shellc                 ó6   • [         R                  " U SSSSS.S9$ )u{  
GÃ©p-fÃ¼ggetlen, elÅ‘re-gyorsÃ­tÃ³tÃ¡razhatÃ³ hÃ©j az azonosÃ­tÃ³ (gyÃ¡ri/leltÃ¡ri szÃ¡m) alapÃº keresÃ©shez.
A Service Worker ezt szolgÃ¡lja ki a /gep-kereses Ã©s /gep-kereses-eredmeny Ãºtvonalakra, ha nincs
hÃ¡lÃ³zat - a kliens oldali JS a helyi (IndexedDB) gyorsÃ­tÃ³tÃ¡rbÃ³l keres, Ã©s a talÃ¡lt gÃ©p uuid-jÃ¡ra
navigÃ¡l (amit a /q/ Ãºtvonal offline-fallbackje mÃ¡r ismer).
zgep-kereses.htmlNÚ )r*   ÚhibaÚ	talalatokr,   r/   r1   s    r"   Úgep_kereses_shellr9   ¤   s'   € ô ×%Ò%ØØØ r¸Ñ=ñð r!   z/offline/szinkronizacio-adatokÚEMELOGEPÚdbÚcurrent_userc                 óÞ	  • [        X 5      nUR                  [        R                  5      R	                  [        R                  R
                  U:H  [        R                  R                  R                  / SQ5      5      n[        XB5      nUR                  5       nS nS nU Vs/ s GH3  oˆR                  (       d  M  0 SUR                  _SUR                  _SUR                  _SUR                  _SUR                  _S	UR                  _S
UR                   _SUR"                  _SUR$                  _SU" UR&                  5      _SU" UR(                  5      _SUR*                  _SUR                  _SUR,                  _SUR.                  (       a  UR.                  R0                  OS_SUR2                  _SUR4                  _UR
                  U" U5      S.EPGM6     n	nUR                  [        R6                  5      R	                  [        R6                  R
                  U:H  5      R                  5       n
U
 Vs/ s H2  nUR                  UR8                  UR:                  UR<                  S.PM4     nnUR                  [        R>                  5      R	                  [        R>                  R
                  U:H  5      R                  5       nU Vs/ s H  oîR                  UR0                  S.PM     nnUR                  [        R@                  5      R	                  [        R@                  R
                  U:H  [        R@                  RB                  S:H  5      R                  5       nUR                  [        R@                  5      R	                  [        R@                  R
                  U:H  [        R@                  RB                  S:H  5      R                  5       nUR                  [        RD                  5      R	                  [        RD                  R
                  U:H  5      R                  5       n[G        [H        RJ                  " [L        RN                  5      RQ                  5       UURR                  U	UUU Vs/ s H  nURT                  PM     snU Vs/ s H  nURT                  PM     snU Vs/ s H  nUR                  PM     snS.	S9$ s  snf s  snf s  snf s  snf s  snf s  snf )u  
Az offline (jelerÅ‘ssÃ©g nÃ©lkÃ¼li) hasznÃ¡lathoz szÃ¼ksÃ©ges adatok letÃ¶ltÃ©se: a cÃ©g gÃ©pei
(teljes adatlap-mezÅ‘kkel), a napi ellenÅ‘rzÅ‘ kÃ©rdÃ©sek, valamint az Ãºj gÃ©p felvitelÃ©hez
szÃ¼ksÃ©ges referenciaadatok (telephelyek, gyÃ¡rtÃ³k, tÃ­pusok, gÃ©ptÃ­pusok).
)u   VÃ©gleg kivonva/SelejtezveÚEladvau"   BÃ©rleti idÅ‘ lejÃ¡rt / Visszaadvac                 ó6   • U (       a  U R                  S5      $ S $ )Nz%Y-%m-%d)Ústrftime)Úds    r"   Ú	datum_strÚ0offline_szinkronizacio_adatok.<locals>.datum_strÇ   s   € Þ)*ˆq�z‰z˜*Ó%Ð4°Ð4r!   c                 ó¢   • U R                    Vs/ s H  oR                  S:X  d  M  UPM     nnU(       a  [        US S9R                  $ S $ s  snf )Nu   HasznÃ¡lati utasÃ­tÃ¡sc                 ó   • U R                   $ )N)Úuploaded_at)Úfs    r"   Ú<lambda>ÚPoffline_szinkronizacio_adatok.<locals>.hasznalati_utasitas_url.<locals>.<lambda>Ì   s   € ¨¯ªr!   )Úkey)ÚfajlokÚ	file_typeÚmaxÚ	file_path)ÚgrG   rK   s      r"   Úhasznalati_utasitas_urlÚ>offline_szinkronizacio_adatok.<locals>.hasznalati_utasitas_urlÊ   sF   € ØŸXšXÓQšX˜¯©Ð8PÑ)P—!™XˆÐQÞEKŒs�6Ñ6Ñ7×AÑAÐUÐQUÐUùò Rs
   �A¦AÚidÚuuidÚ
megnevezesÚgyartoÚtipusÚgeptipusÚ
gyari_szamÚleltari_szamÚ
teherbirasÚgyartas_datumÚuzembe_helyezes_datumÚuzemoraÚstatuszÚsite_idÚtelephely_nevNÚalapadat_megjegyzesÚ	fo_gep_id)Ú
company_idrP   )rR   ÚszovegÚkovetkezmenyÚgeptipus_lista)rR   ÚnevÚGyartoÚTipus)	Úletoltverc   Ú	user_roleÚgepekr)   ÚsitesÚgyartokÚtipusokÚ
geptipusok)r   )+r   ÚqueryÚmodelsÚMachineÚfilterrc   r^   Únotin_r   ÚallrS   rR   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r_   Ú	telephelyrg   ra   rb   ÚDailyCheckQuestionrd   re   rf   ÚSiteÚ
DictionaryÚ	kategoriaÚMachineTypeConfigr   r   Únowr   ÚutcÚ	isoformatÚroleÚertek)r%   r;   r<   Úworking_company_idÚ	gep_queryrl   rB   rP   rO   Ú
gepek_adatr)   ÚkÚkerdesek_adatrm   ÚsÚ
sites_adatrn   ro   ÚconfigsÚrÚcs                        r"   Úoffline_szinkronizacio_adatokrŒ   ³   s>  € ô 0°ÓFÐà—‘œŸ™Ó(×/Ñ/Ü�‰×!Ñ!Ð%7Ñ7Ü�‰×Ñ×%Ñ%Ò&tÓuó€Iô -¨YÓE€IØ�M‰M‹O€Eò5òVñ4 ó-ó, ˆAŸ&�&ô+	
Ø�!—$‘$ð	
à�A—F‘Fð	
ð ˜!Ÿ,™,ð	
ð �a—h‘hð		
ð
 �Q—W‘Wð	
ð ˜Ÿ
™
ð	
ð ˜!Ÿ,™,ð	
ð ˜AŸN™Nð	
ð ˜!Ÿ,™,ð	
ð ™Y q§¡Ó7ð	
ð $¡Y¨q×/FÑ/FÓ%Gð	
ð �q—y‘yð	
ð �q—y‘yð	
ð �q—y‘yð	
ð °··˜QŸ[™[Ÿ_š_Àð	
ð  " 1×#8Ñ#8ð!	
ð" ˜Ÿ™ð#	
ð$ Ÿ,™,Ù'>¸qÓ'Aö'	
ñ* ð- ð ð8 �x‰xœ×1Ñ1Ó2×9Ñ9Ü×!Ñ!×,Ñ,Ð0BÑBóç	�cƒeð ñ
 óâˆAð �t‰t˜qŸx™x¸¿¹Ð[\×[kÑ[kÔlÙð ð ð
 �H‰H”V—[‘[Ó!×(Ñ(¬¯©×)?Ñ)?ÐCUÑ)UÓV×ZÑZÓ\€EÙ6;Ó<²e°Ÿ™ a§e¡eÔ,±e€JÐ<à�h‰h”v×(Ñ(Ó)×0Ñ0Ü×Ñ×$Ñ$Ð(:Ñ:Ü×Ñ×#Ñ# xÑ/ó÷ 
�cƒeð ð �h‰h”v×(Ñ(Ó)×0Ñ0Ü×Ñ×$Ñ$Ð(:Ñ:Ü×Ñ×#Ñ# wÑ.ó÷ 
�cƒeð ð �h‰h”v×/Ñ/Ó0×7Ñ7Ü× Ñ ×+Ñ+Ð/AÑAóç	�cƒeð ô Ü—L’L¤§¡Ó.×8Ñ8Ó:Ø(Ø!×&Ñ&ØØ!ØÙ%,Ó-¢W �A—G”G¡WÑ-Ù%,Ó-¢W �A—G”G¡WÑ-Ù+2Ó3ª7 a�q—z”z©7Ñ3ñ
!ñ 
ð 
ùògùò>ùò =ùò* .ùÚ-ùÚ3s+   Â$SÂ=D"SÈ<9SË"SÑ<S ÒS%Ò4S*z/offline/eltero-adat-bejelentes.r6   Ú
machine_idrd   Úfenykep1Úfenykep2c           	   ƒ   óö  #   • [        X`5      nUR                  [        ;  a  [        SSS0S9$ [	        Xu5      (       d  [        SSS0S9$ UR
                  (       a  [        SSS0S9$ UR                  [        R                  5      R                  [        R                  R                  U:H  [        R                  R                  U:H  5      R                  5       nU(       a  [        X†5      (       d  [        SSS0S9$ U(       d<  U(       a  UR                  (       d$  U(       a  UR                  (       d  [        S	SS
0S9$ [        R                  " UR                  UR                  SSU(       a  UOSS9n	UR!                  U	5        SU SUR                   S3n
X44 GH)  nU(       d  M  [#        USS5      (       d  M!  [%        UR                  5      (       d  M=  [&        R(                  " U
SS9  [+        UR                  5      n[-        UR/                  5       I Sh  v•N 5      nUc  M�  UR1                  SS5      S   S-   nU
 S[2        R4                  " 5       R7                  S5       SU 3n[9        US5       nUR;                  U5        SSS5        UR!                  [        R<                  " UR                  SU-   SS95        GM,     UR?                  5         [        S SS!0S9$  NÊ! , (       d  f       Nc= f7f)"u(  
HelyszÃ­ni (jellemzÅ‘en offline rÃ¶gzÃ­tett, majd szinkronizÃ¡lt) Ã©szrevÃ©tel egy mÃ¡r felvitt gÃ©prÅ‘l:
mindig ÃšJ, Ã¶nÃ¡llÃ³ naplÃ³bejegyzÃ©skÃ©nt kerÃ¼l mentÃ©sre - soha nem Ã­r felÃ¼l semmilyen meglÃ©vÅ‘ mezÅ‘t,
Ã­gy nincs szÃ¼ksÃ©g Ã¼tkÃ¶zÃ©s-ellenÅ‘rzÃ©sre az online Ã¡llapottal szemben.
i“  Úmessageu)   Nincs jogosultsÃ¡god ehhez a mÅ±velethez!)Ústatus_coder   u-   Ez a cÃ©g inaktÃ­v stÃ¡tuszÃº, nem menthetÅ‘!u/   Csak megtekintÃ©si jogosultsÃ¡ggal rendelkezel!i”  u    A keresett gÃ©p nem talÃ¡lhatÃ³!i�  u1   LegalÃ¡bb egy megjegyzÃ©s vagy fotÃ³ szÃ¼ksÃ©ges!u!   Offline ellenÅ‘rzÃ©si megjegyzÃ©sÚ-u   (csak fotÃ³ csatolva))r�   Úuser_idÚ
field_nameÚ	old_valueÚ	new_valuezuploads/Ú/z/offline_ellenorzesÚfilenamer6   T)Úexist_okNÚ.é   r   z.jpgz%Y%m%d%H%M%S%fÚ_zwb+u   Offline ellenÅ‘rzÃ©s fotÃ³)r�   rN   rL   éÈ   u   Sikeresen rÃ¶gzÃ­tve!) r   r€   r   r   r   Úcsak_olvasasrq   rr   rs   rt   rR   rc   Úfirstr   r™   ÚAuditLogÚaddÚgetattrr   ÚosÚmakedirsr   r   ÚreadÚrsplitr   r}   r@   ÚopenÚwriter	   Úcommit)r%   r�   rd   rŽ   r�   r;   r<   r‚   r(   ÚlogÚmappaÚkep_fileÚsafe_filenameÚ	kep_bytesÚfile_locrG   s                   r"   Úoffline_eltero_adat_bejelentesr±     s€  é € ô 0°ÓFÐà×ÑÔ <Ó<Ü¨°iÐAlÐ5mÑnÐnäÐ/×4Ñ4Ü¨°iÐApÐ5qÑrÐrà× × Ü¨°iÐArÐ5sÑtÐtà
�(‰(”6—>‘>Ó
"×
)Ñ
)Ü�‰×Ñ˜ZÑ'Ü�‰×!Ñ!Ð%7Ñ7ó÷ �eƒgð ö
 Ô(¨×;Ñ;Ü¨°iÐAcÐ5dÑeÐeæž8¨×(9×(9ÆHÐQY×Qb×QbÜ¨°iÐAtÐ5uÑvÐvä
�/Š/Ø—6‘6Ø—‘Ø6ØÞ"‘&Ð(?ñ€Cð ‡F�Fˆ3„KàÐ)Ð*¨!¨C¯F©F¨8Ð3FÐG€EØÔ(ˆßˆ8œ ¨*°b×9Ó9Ü$ X×%6Ñ%6×7Ñ7ÙÜ�KŠK˜¨Ò-Ü-¨h×.?Ñ.?Ó@ˆMÜ%¨H¯M©M«O×&;Ó<ˆIØÑ ÙØ)×0Ñ0°°aÓ8¸Ñ;¸fÑDˆMØ˜ ¤(§,¢,£.×"9Ñ"9Ð:JÓ"KÐ!LÈAÈmÈ_Ð]ˆHÜ�h Ô&¨!Ø—‘˜	Ô"÷ 'à�F‰F”6—;’;ØŸ6™6Ø ™.Ø6ñ÷ ñ )ð& ‡I�I„KÜ C°)Ð=TÐ1UÑVÐVñ '<÷
 'Õ&üs9   ‚F#K9Æ)K9Æ=AK9ÈK&
ÈAK9É9K(ÊAK9Ë(
K6	Ë2K9).r¤   r   r   Úfastapir   r   r   r   r	   r
   Úfastapi.responsesr   r   r   Úsqlalchemy.ormr   rr   Úsecurityr   Údatabaser   r   r   r   r   r   r   r   r   Úimage_utilsr   Útemplates_envr   Úrouterr   Úgetr#   r2   r4   r9   ÚUserrŒ   ÚpostÚintÚstrr±   r    r!   r"   Ú<module>r¿      sé  ðÛ 	ß 'ç G× Gß BÑ BÝ "ã Ý 1Ý ÷÷ ó õ &Ý #á	‹€ð
l	€ð^ ‡�ˆHÓñoó ðoð ‡�Ð%°l€ÐCð Gó ó Dðð ‡�Ð#°L€ÐAð_ 'ó _ó Bð_ð ‡�Ð °€Ð>ð˜wó ó ?ðð ‡�Ð,Ó-ñ ˜&“/Ù '©°jÓ(AÓ BñWØðWàðWð —+‘+ôWó .ðWðt ‡�Ð.Ó/ñ ˜3“iÙ�r“(Ù ›:Ù ›:Ù˜&“/Ù '©°jÓ(AÓ BñBWØðBWàðBWð ðBWð ð	BWð
 ðBWð 	ðBWð —+‘+ôBWó 0ñBWr!   