Ë
    tPêj5I  ã            
       ó°  — U d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZ erdd	lmZmZ d�d
ededegdf   fd„Zd‘ded
ededegdf   fd„Z ed¬«       G d„ d«      «       Zg  eddd¬«      ‘ eddd¬«      ‘ eddd¬«      ‘ edd d!¬«      ‘ ed"d#d$¬«      ‘ ed%d&d'¬«      ‘ ed(d)d*d+¬,«      ‘ ed-d.d/¬«      ‘ ed0d1d2¬«      ‘ ed3d4d5¬«      ‘ ed6d7d8¬«      ‘ ed9d:d;¬«      ‘ ed<d=d>¬«      ‘ ed?d@dA¬«      ‘ edBdCdD¬«      ‘ edEdFdGdH¬,«      ‘ edIdJdK¬«      ‘ edLdMdN edOd¬P«      d¬Q«      ‘ edRdSdT¬«      ‘ edUdVdW¬«      ‘ edXdYdZ¬«      ‘ ed[d\d]¬«      ‘ ed^d_d`¬«      ‘ edadbdc¬«      ‘ edddedf edg«      ¬h«      ‘ edidjdk edl«      ¬h«      ‘ edmdndo¬«      ‘ edpdqdr¬«      ‘ edsdtdu¬«      ‘ edvdwdx¬«      ‘ edydzd{¬«      ‘ ed|d}d~¬«      ‘ edd€d�¬«      ‘­Zeeed‚f      edƒ<    G d„„ d…«      Zddd†edefd‡„Z d’dˆ„Z!d“d‰„Z"ddde#e   fdŠ„Z$efd‹e%dŒee   d�eed‚f   de%fdŽ„Z&de%eef   fd�„Z'y)”aX  
Lazy registration for optional feature routers. Each LAZY_FEATURES entry
imports its module only on the first request matching its path prefix,
saving ~700 MB at idle for deployments that don't use these features.
First hit pays the import cost (1-3 s for heavy modules); /openapi.json
omits each feature's routes until the feature is warmed.
é    N)ÚCallable)ÚSet)Ú	dataclassÚfield)ÚTYPE_CHECKINGÚFinal)ÚReceiveÚScopeÚSend)Úverbose_proxy_logger)Ú	APIRouterÚFastAPIÚ	attr_nameÚreturnr   c                 ó(   ‡ — dddt         dd fˆ fd„}|S )NÚappr   Úmoduler   c                 ó<   •— | j                  t        |‰«      «       y ©N)Úinclude_routerÚgetattr)r   r   r   s     €úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/_lazy_features.pyÚ	_registerz"_include_router.<locals>._register   s   ø€ Ø×Ñœ7 6¨9Ó5Õ6ó    ©Úobject)r   r   s   ` r   Ú_include_routerr      s%   ø€ ð7�yð 7¬&ð 7°Tõ 7ð Ðr   r   Úprefixc                 ó,   ‡ ‡— dddt         dd fˆˆ fd„}|S )Nr   r   r   r   c                 ó@   •— | j                  ‰t        |‰«      ¬«       y )N)Úpathr   )Úmountr   )r   r   r   r   s     €€r   r   z_mount_app.<locals>._register    s   ø€ Ø�	‰	�v¤7¨6°9Ó#=ˆ	Õ>r   r   )r   r   r   s   `` r   Ú
_mount_appr#      s%   ù€ ð?�yð ?¬&ð ?°Tö ?ð Ðr   T)Úfrozenc                   ó˜   — e Zd ZU eed<   eed<   eedf   ed<    ed„ ¬«      Zede	gdf   ed	<   d
Z
eedf   ed<   dZeed<   dedefd„Zy)ÚLazyFeatureÚnameÚmodule_path.Úpath_prefixesc                  ó   — t        d«      S )NÚrouter)r   © r   r   ú<lambda>zLazyFeature.<lambda>+   s   € ÔUdÐemÓUn€ r   )Údefault_factoryr   NÚregister_fnr,   Úpath_suffixesFÚpersistent_swagger_stubr!   r   c                 ó€   ‡— t        ˆfd„| j                  D «       «      xs t        ˆfd„| j                  D «       «      S )Nc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr   )Ú
startswith)Ú.0Úpr!   s     €r   ú	<genexpr>z&LazyFeature.matches.<locals>.<genexpr>4   s   øè ø€ ÒB¨!�4—?‘? 1×%ÑBùó   ƒc              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr   )Úendswith)r5   Úsr!   s     €r   r7   z&LazyFeature.matches.<locals>.<genexpr>4   s   øè ø€ ÒIwÐ_`È$Ï-É-ÐXY×JZÑIwùr8   )Úanyr)   r0   )Úselfr!   s    `r   ÚmatcheszLazyFeature.matches3   s1   ø€ ÜÓB¨t×/AÑ/AÔBÓBÒwÄcÓIwÐdh×dvÑdvÔIwÓFwÐwr   )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Útupler   r/   r   r   r0   r1   Úboolr>   r,   r   r   r&   r&   &   sq   … à
ƒIØÓØ˜˜c˜‘?Ó"Ù7<ÑMnÔ7o€K�˜9 fÐ-¨tÐ3Ñ4Óoð &(€M�5˜˜c˜‘?Ó'ð %*Ð˜TÓ)ðx˜Cð x Dô xr   r&   Ú
guardrailsz,litellm.proxy.guardrails.guardrail_endpoints)z/guardrailsz/v2/guardrailsz/apply_guardrailz/policies/usage)r'   r(   r)   Úpoliciesz3litellm.proxy.management_endpoints.policy_endpoints)z/policy/z#/utils/test_policies_and_guardrailsÚpolicy_enginez,litellm.proxy.policy_engine.policy_endpoints)z	/policiesÚpolicy_resolvez4litellm.proxy.policy_engine.policy_resolve_endpoints)z/policies/resolvez%/policies/attachments/estimate-impactÚagentsz'litellm.proxy.agent_endpoints.endpoints)z
/v1/agentsz/agentsz/agent/Úgemini_agentsz/litellm.proxy.google_endpoints.agents_endpoints)z/v1beta/agentsÚa2az+litellm.proxy.agent_endpoints.a2a_endpoints)z/a2a)z/message/send)r'   r(   r)   r0   Úa2a_registrationzlitellm.proxy.a2a.endpoints)z/v1/a2a/discoverÚvector_storesz.litellm.proxy.vector_store_endpoints.endpoints)ú/v1/vector_storesú/vector_storesz/v1/indexesÚvector_store_managementz9litellm.proxy.vector_store_endpoints.management_endpoints)z/vector_store/z/v1/vector_store/Úvector_store_filesz4litellm.proxy.vector_store_files_endpoints.endpoints)rO   rP   Útoolsz<litellm.proxy.management_endpoints.tool_management_endpoints)z/v1/toolz/toolÚsearch_toolsz5litellm.proxy.search_endpoints.search_tool_management)z/search_toolsÚmcp_managementz;litellm.proxy.management_endpoints.mcp_management_endpoints)z/v1/mcp/Úmcp_byok_oauthz;litellm.proxy._experimental.mcp_server.byok_oauth_endpoints)z/v1/mcp/oauthú/.well-known/oauth-Úmcp_discoverablez=litellm.proxy._experimental.mcp_server.discoverable_endpoints)
rW   z!/.well-known/openid-configurationz/.well-known/jwks.jsonz/.well-known/litellm-cli-authú
/authorizeú/tokenz	/callbackú	/registerz/revokez/introspect)rY   rZ   r[   Úmcp_restz5litellm.proxy._experimental.mcp_server.rest_endpoints)z	/mcp-restÚmcp_appz-litellm.proxy._experimental.mcp_server.server)ú/mcpr^   )r   )r'   r(   r)   r/   r1   Úconfig_overridesz<litellm.proxy.management_endpoints.config_override_endpoints)z/config_overridesÚrealtimez*litellm.proxy.realtime_endpoints.endpoints)z/openai/v1/realtimez/v1/realtimez	/realtimeÚanthropic_passthroughz+litellm.proxy.anthropic_endpoints.endpoints)z/v1/messagesz
/anthropicz/api/event_loggingÚanthropic_skillsz2litellm.proxy.anthropic_endpoints.skills_endpoints)z
/v1/skillsz/skillsÚlangfuse_passthroughz4litellm.proxy.vertex_ai_endpoints.langfuse_endpoints)z	/langfuseÚevalsz.litellm.proxy.openai_evals_endpoints.endpoints)z	/v1/evalsz/evalsÚclaude_code_marketplacez7litellm.proxy.anthropic_endpoints.claude_code_endpoints)z/claude-codeÚclaude_code_marketplace_router)r'   r(   r)   r/   Úscimz/litellm.proxy.management_endpoints.scim.scim_v2)z/scimÚscim_routerÚ	cloudzeroz0litellm.proxy.spend_tracking.cloudzero_endpoints)z
/cloudzeroÚvantagez.litellm.proxy.spend_tracking.vantage_endpoints)z/vantageÚusage_aiz2litellm.proxy.management_endpoints.usage_endpoints)z	/usage/aiÚpromptsz&litellm.proxy.prompts.prompt_endpoints)z/promptsz/utils/dotprompt_json_converterÚjwt_mappingsz<litellm.proxy.management_endpoints.jwt_key_mapping_endpoints)z/jwt/key/mappingÚ
compliancez7litellm.proxy.management_endpoints.compliance_endpoints)z/complianceÚaccess_groupsz9litellm.proxy.management_endpoints.access_group_endpoints)z/access_groupz/v1/access_groupz/v1/unified_access_group.ÚLAZY_FEATURESc                   ó\   — e Zd ZdZefdddeedf   fd„Zede	fd„«       Z
d	ed
ededdfd„Zy)ÚLazyFeatureMiddlewarez‹ASGI middleware that imports + registers a feature router on first
    matching request. Idempotent; once loaded, subsequent requests skip.Úfastapi_appr   Úfeatures.c                 óò   — || _         || _        || _        ddlm}  |«       j                  d«      | _        t        |j                  d«      s+t        «       |j                  _
        i |j                  _        y y )Nr   )Úget_server_root_pathú/Úlazy_loaded)r   Ú_fastapi_appÚ	_featuresÚlitellm.proxy.utilsrv   ÚrstripÚ
_root_pathÚhasattrÚstateÚsetrx   Ú
lazy_locks)r=   r   rs   rt   rv   s        r   Ú__init__zLazyFeatureMiddleware.__init__  si   € ð ˆŒØ'ˆÔØ!ˆŒõ
 	=á.Ó0×7Ñ7¸Ó<ˆŒô �{×(Ñ(¨-Ô8Ü,/«EˆK×ÑÔ)Ø+-ˆK×ÑÕ(ð 9r   r   c                 óB   — | j                   j                  j                  S r   )ry   r   rx   )r=   s    r   Ú_loadedzLazyFeatureMiddleware._loaded"  s   € à× Ñ ×&Ñ&×2Ñ2Ð2r   ÚscopeÚreceiveÚsendNc              ƒ   ó
  K  — |d   dv rÙt        | j                  «      t        | j                  «      k  r®|j                  dd«      }| j                  r6|j                  | j                  dz   «      r|t        | j                  «      d  }| j                  D ]K  }|j                  | j                  v rŒ|j                  |«      sŒ.t        | j                  |«      ƒ d {  –—†  ŒM | j                  |||«      ƒ d {  –—†  y 7 Œ"7 Œ­w)NÚtype)ÚhttpÚ	websocketr!   Ú rw   )Úlenr„   rz   Úgetr}   r4   r(   r>   Ú_force_loadry   r   )r=   r…   r†   r‡   r!   Úfeats         r   Ú__call__zLazyFeatureMiddleware.__call__&  sÚ   è ø€ à�‰=Ð1Ñ1´c¸$¿,¹,Ó6GÌ#ÈdÏnÉnÓJ]Ò6]Ø—9‘9˜V RÓ(ˆDð �Š 4§?¡?°4·?±?ÀSÑ3HÔ#IØœC §¡Ó0Ð2Ð3�ØŸ™ò ?�Ø×#Ñ# t§|¡|Ñ3ØØ—<‘< Õ%Ü% d×&7Ñ&7¸Ó>×>Ñ>ð	?ð
 �h‰h�u˜g tÓ,×,Ñ,ð ?øØ,ús*   ‚C DÃDÃC?ÃDÃ9DÃ:DÄD)r?   r@   rA   Ú__doc__rp   rD   r&   r‚   Úpropertyr€   r„   r
   r	   r   r‘   r,   r   r   rr   rr     sl   „ ñLð -:ñ	.ð ð.ð ˜ SÐ(Ñ)ó	.ð. ð3˜ò 3ó ð3ð- Eð -°Gð -À4ð -ÈDô -r   rr   r�   c              ƒ   óf  K  — t        | j                  d«      s*t        «       | j                  _        i | j                  _        | j                  j                  j                  |j                  t        j                  «       «      }|4 ƒd{  –—†  |j                  | j                  j                  v r	 ddd«      ƒd{  –—†  y	 t        j                  «       }|j                  dt        j                  |j                  «      ƒ d{  –—† }|j                  | |«       | j                  j                  j                  |j                  «       d| _        t!        j"                  d|j$                  |j                  «       	 ddd«      ƒd{  –—†  y7 �Œ7 ŒÕ7 ŒŽ7 Œ# t&        $ rv}| j                  j                  j                  |j                  «       t!        j(                  d|j$                  |j                  |«       Y d}~ddd«      ƒd{  –—†7   yd}~ww xY w# 1 ƒd{  –—†7  sw Y   yxY w­w)zzImport + register a lazy feature exactly once per (app, module).
    Shared by the middleware and the /lazy/warm endpoint.rx   NFz,Lazy-loaded optional feature %r (module: %s)TzqFailed to lazy-load optional feature %r (module: %s): %s. This feature's endpoints will return 404 until restart.)r~   r   r€   rx   r�   Ú
setdefaultr(   ÚasyncioÚLockÚget_running_loopÚrun_in_executorÚ	importlibÚimport_moduler/   ÚaddÚopenapi_schemar   Úinfor'   Ú	ExceptionÚwarning)r   r�   ÚlockÚloopr   Úexcs         r   r�   r�   ;  sÀ  è ø€ ô �3—9‘9˜mÔ,Ü #£ˆ�	‰	ÔØ!ˆ�	‰	ÔØ—)‘)×&Ñ&×1Ñ1°$×2BÑ2BÄGÇLÁLÃNÓS€DØ÷ ñ Ø×Ñ˜sŸy™y×4Ñ4Ñ4Ø÷÷ ð ð	ô "×2Ñ2Ó4ˆDØ"&×"6Ñ"6°t¼Y×=TÑ=TÐVZ×VfÑVfÓ"g×gˆFØ×Ñ˜S &Ô)Ø�I‰I×!Ñ!×%Ñ% d×&6Ñ&6Ô7Ø!%ˆCÔÜ ×%Ñ%Ø>Ø—	‘	Ø× Ñ ôð
 ÷!÷ ñ ùð øð høðùô" ò 
	à�I‰I×!Ñ!×%Ñ% d×&6Ñ&6Ô7Ü ×(Ñ(ðJà—	‘	Ø× Ñ Øôó ÷7÷ ñ ûð"
	ú÷#÷ ñ üs«   ‚B	H1ÂFÂH1Â$HÂ3H1Â>FÂ?H1ÃAFÄFÄA7FÆ H1ÆFÆH1ÆH1ÆFÆH1Æ	HÆ#AHÇ>HÈH1ÈHÈH1ÈHÈHÈH.È"H%È#H.È*H1c                 óf   — | j                  t        | «      «       | j                  t        | ¬«       y )N)rs   )r   Ú_make_warmup_routerÚadd_middlewarerr   ©r   s    r   Úattach_lazy_featuresr¨   `  s*   € Ø×ÑÔ*¨3Ó/Ô0Ø×ÑÔ,¸#ÐÕ>r   c                 óž   ‡ ‡‡— ddl m}m}mŠ ddlmŠ ddlm}  |«       }|j                  dd ||«      g¬«      dt        fˆˆ ˆfd	„«       }|S )
u�  POST /lazy/warm/{name}: load a feature and return its partial openapi
    so the Swagger plugin can merge in-place without a full /openapi.json refetch.
    Requires auth â€” anyone who can hit the proxy can already trigger the same
    imports by sending a real request to a feature's prefix, but gating this
    debug endpoint avoids unauthenticated callers forcing the import chain.r   )r   ÚDependsÚHTTPException)Úget_openapi)Úuser_api_key_authz/lazy/warm/{name}F)Úinclude_in_schemaÚdependenciesr'   c           
   “   ó¤  •‡ K  — t        ˆ fd„t        D «       d «      }|€ ‰dd‰ › �«      ‚|j                  rd i di idœS t        ‰|«      ƒ d {  –—†  ‰j                  D �cg c]!  }|j                  t        |dd«      «      sŒ |‘Œ# }} ‰	‰j                  ‰j                  |¬«      }|j                  d	i «      j                  «       D ]8  }|j                  «       D ]#  }t        |t        «      sŒ|j                  g|d
<   Œ% Œ: |j                  d   |j                  d	i «      d|j                  di «      j                  di «      idœS 7 Œùc c}w ­w)Nc              3   óB   •K  — | ]  }|j                   ‰k(  sŒ|–— Œ y ­wr   )r'   )r5   Úfr'   s     €r   r7   z4_make_warmup_router.<locals>.warm.<locals>.<genexpr>x  s   øè ø€ ÒG !¸¿¹À$»œAÑGùs   ƒ˜i”  zunknown lazy feature: Úschemas)Ú	stub_pathÚpathsÚ
componentsr!   rŒ   )ÚtitleÚversionÚroutesrµ   Útagsr   r¶   )Únextrp   r1   r�   r¹   r>   r   r·   r¸   rŽ   ÚvaluesÚ
isinstanceÚdictr'   r)   )
r'   r�   ÚrÚfeat_routesÚfullÚpath_opsÚopr«   r   r¬   s
   `      €€€r   Úwarmz!_make_warmup_router.<locals>.warmr  sF  ùè ø€ ô ÓG¤}ÔGÈÓNˆØˆ<Ù Ð'=¸d¸VÐ%DÓEÐEØ×'Ò'Ø!%°À9ÈbÀ/ÑRÐRä˜#˜tÓ$×$Ð$à),¯©Ö\ A°t·|±|ÄGÈAÈvÐWYÓDZÕ7[šaÐ\ˆÐ\Ù!¨¯	©	¸3¿;¹;È{Ô[ˆð Ÿ™ ¨"Ó-×4Ñ4Ó6ò 	-ˆHØ—o‘oÓ'ò -�Ü˜b¤$Õ'Ø"&§)¡) �B�v’Jñ-ð	-ð
 ×+Ñ+¨AÑ.Ø—X‘X˜g rÓ*Ø$ d§h¡h¨|¸RÓ&@×&DÑ&DÀYÐPRÓ&SÐTñ
ð 	
ð 	%úâ\ùs2   „AEÁE	ÁEÁ"!EÂEÂA'EÃ0AEÅE)
Úfastapir   rª   r«   Úfastapi.openapi.utilsr¬   Ú$litellm.proxy.auth.user_api_key_authr­   ÚpostrB   )r   r   rª   r­   r+   rÄ   r«   r¬   s   `     @@r   r¥   r¥   e  sX   ú€ ÷ :Ñ9Ý1åFá“K€Fà‡[�[ØØÙÐ/Ó0Ð1ð ó ð

œö 
óð

ð. €Mr   c                 óˆ   — t        | j                  dd«      }t        |t        «      s
t	        «       S t	        d„ |D «       «      S )ak  The set of lazy feature modules whose routers are actually registered
    on this app (tracked by _force_load), empty before the middleware ever ran.
    sys.modules is the wrong signal: boot code imports several feature modules
    (mcp_management, cloudzero, vantage, config_overrides) without mounting
    their routers, and their stubs must still be injected.rx   Nc              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )r½   rB   )r5   Úms     r   r7   z&loaded_lazy_modules.<locals>.<genexpr>š  s   è ø€ Ò=˜1¬*°Q¼Õ*<”QÑ=ùs   ‚˜)r   r   r½   r€   Ú	frozenset)r   Úloadeds     r   Úloaded_lazy_modulesrÎ   ‘  s9   € ô ˜CŸI™I }°dÓ;€FÜ�fœcÔ"Ü‹{ÐÜÑ= Ô=Ó=Ð=r   ÚschemaÚloaded_modulesrt   c                 óæ  — 	 ddl m}  |«       }| j                  di «      }| j                  di «      j                  di «      }|D ]û  }|j                  |v r|j                  sŒ|xs i j                  |j                  «      }|r…|j                  di «      j                  «       D ]  \  }	}
|j                  |	|
«       Œ |j                  di «      j                  di «      j                  «       D ]  \  }}|j                  ||«       Œ ŒÄ|j                  d   }||v rŒØd|j                  g|j                  ddd	iid
œi||<   Œý 	 | S # t        $ r!}t        j                  d|«       Y d}~| S d}~ww xY w)a$  Inject openapi entries for features not in loaded_modules. Uses the
    snapshot file when available (full route info), otherwise falls back to a
    single placeholder per feature. Any failure logs and returns the schema
    unchanged so /openapi.json never 500s on a cosmetic injection bug.r   ©Úload_snapshotrµ   r¶   r³   rŽ   Ú200ÚdescriptionÚOK)rº   ÚsummaryÚ	responseszinject_lazy_stubs failed: %sN)Ú$litellm.proxy._lazy_openapi_snapshotrÓ   r•   r(   r1   rŽ   r'   Úitemsr)   rŸ   r   r    )rÏ   rÐ   rt   rÓ   Úsnapshotrµ   r³   r�   Úfragmentr6   Úopsr'   Úschr   r£   s                  r   Úinject_lazy_stubsrß   �  sƒ  € ðJÝFá'›/ˆØ×(Ñ(¨°"Ó5ˆØ×*Ñ*¨<¸Ó<×GÑGÈ	ÐSUÓVˆàò 	ˆDØ×Ñ >Ñ1¸$×:VÒ:VØà š B×+Ñ+¨D¯I©IÓ6ˆHÙØ&Ÿl™l¨7°BÓ7×=Ñ=Ó?ò -‘F�A�sØ×$Ñ$ Q¨Õ,ð-à!)§¡¨l¸BÓ!?×!CÑ!CÀIÈrÓ!R×!XÑ!XÓ!Zò 2‘I�D˜#Ø×&Ñ& t¨SÕ1ð2àà×'Ñ'¨Ñ*ˆFØ˜‰ØàØ!ŸY™Y˜KØ#Ÿy™yØ"'¨-¸Ð)>Ð!?ñðˆE�&ŠMñ	ð0 €Møô ò JÜ×$Ñ$Ð%CÀS×IÐIØ€MûðJús   ‚EE Å	E0ÅE+Å+E0c                  óœ   — ddl m}   | «       ri S t        D �ci c])  }|j                  rŒ|j                  |j
                  d   “Œ+ c}S c c}w )uÆ   feature.name -> first prefix, used by the Swagger warmup JS plugin.
    Returns empty when the snapshot is loaded â€” the plugin is unnecessary
    because /openapi.json already has full route info.r   rÒ   )rÙ   rÓ   rp   r1   r'   r)   )rÓ   r�   s     r   Úlazy_tag_to_prefixrá   È  sB   € õ Cá„Øˆ	Ü9FÖk°Èd×NjÓNjˆD�I‰I�t×)Ñ)¨!Ñ,Ñ,ÒkÐkùÒks
   ˜A	ªA	)r+   r§   )r   r   r   N)r   r   r   r   )(r’   r–   rš   Úcollections.abcr   r   ÚAbstractSetÚdataclassesr   r   Útypingr   r   Ústarlette.typesr	   r
   r   Úlitellm._loggingr   rÅ   r   r   rB   r   r   r#   r&   rp   rD   rC   rr   rE   r�   r¨   r¥   rÌ   rÎ   r¾   rß   rá   r,   r   r   ú<module>rè      sû  ðòó Û Ý $Ý .ß (ß 'ç 0Ñ 0å 1áß*ñ˜sð °(¸IÀvÐ;NÐPTÐ;TÑ2Uó ñ�sð  sð °xÀÈFÐ@SÐUYÐ@YÑ7Zó ñ �$Ô÷xð xó ðxð M1ÙØØBð
ô	ðM1ñ ØØIàIô	ðM1ñ" ØØBØ$ôð#M1ñ, ØØJØTôð-M1ñ6 ØØ=Ø:ôð7M1ñ@ ØØEØ)ôðAM1ñJ ØØAð  Ø(ôðKM1ñZ ØØ1Ø+ôð[M1ñd ØØDØLôðeM1ñn Ø&ØOà=ô	ðoM1ñz Ø!ð KØ=ôð{M1ñH ØØRØ+ôðIM1ñR ØØKØ(ôðSM1ñ` ØØQØ#ôðaM1ñj ð ØQØ>ôðkM1ñz ð  ØSð
ð <ô'ð{M1ñd ØØKØ$ôðeM1ñn ð ØCØÙ˜v°Ô7Ø $ôðoM1ñ@ ØØRØ,ôðAM1ñJ ØØ@ØJôðKM1ñT Ø$ØAØJôðUM1ñ^ ØØHØ/ôð_M1ñh Ø#ØJØ$ôðiM1ñr ØØDØ-ôðsM1ñ| Ø&ØMØ'Ù#Ð$DÓEô	ð}M1ñH ØØEØ Ù# MÓ2ô	ðIM1ñT ØØFØ%ôðUM1ñ^ ØØDØ#ôð_M1ñh ØØHØ$ôðiM1ñr ØØ<ØEôðsM1ñ| ØØRØ+ôð}M1ñF ØØMØ&ôðGM1ñP ØØOØWôñQM1€ˆu�U˜;¨Ð+Ñ,Ñ-ó M÷`1-ñ 1-ðh"˜9ð "¨Kð "¸Dó "óJ?ó
)ðX	>˜Yð 	>¨9°S©>ó 	>ð )6ñ(Øð(à Ñ$ð(ð �K Ð$Ñ%ð(ð 
ó	(ðVl˜D  c ™Nô lr   