§
    ÷žyjFÞ  ã                  óz  — U d dl mZ d dlZd dl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 d dlmZmZ d dlmZ d	d	d
œZ ed¦  «        Z ed¦  «        ZdZed         Zed         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Zd„ Zi d e ed¦  «         ed¦  «         ed¦  «         ed¦  «        d d!d"¬#¦  «        “d$ e ed%¦  «         ed&¦  «         ed'¦  «         ed(¦  «        d d!d"¬#¦  «        “d) e ed*¦  «         ed+¦  «         ed,¦  «         ed-¦  «        d d!d"¬#¦  «        “d. e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “d2 e ed3¦  «         ed4¦  «         ed*¦  «         ed5¦  «        d d6d1¬#¦  «        “d7 e ed8¦  «         ed3¦  «         ed9¦  «         ed%¦  «        d d0d:¬#¦  «        “d; e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “d< e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “d= e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “d> e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “d? e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d0d1¬#¦  «        “dC e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d0d1¬#¦  «        “dD e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d0d1¬#¦  «        “dE e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d0d1¬#¦  «        “dF e ed*¦  «         ed¦  «         ed,¦  «         ed-¦  «        d d0d1¬#¦  «        “dG e ed&¦  «         edH¦  «         edI¦  «         edJ¦  «        d d0d1¬#¦  «        “dK e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d0d1¬#¦  «        “i dL e ed%¦  «         ed3¦  «         ed-¦  «        d dMdN¬O¦  «        “dP e edQ¦  «         edR¦  «         edS¦  «        d dMdN¬O¦  «        “dT e ed8¦  «         edU¦  «         ed¦  «        d dMdN¬O¦  «        “dV e edW¦  «         edX¦  «         ed,¦  «        d dMdN¬O¦  «        “dY e ed,¦  «         edW¦  «         edZ¦  «        d dMdN¬O¦  «        “d[ e ed3¦  «         ed\¦  «         ed%¦  «        d dMdN¬O¦  «        “d] e ed^¦  «         ed_¦  «         ed`¦  «        d dMdN¬O¦  «        “da e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d0d1¬#¦  «        “db e edc¦  «         edd¦  «         ede¦  «         ed*¦  «        d d0d1¬#¦  «        “df e ed&¦  «         edH¦  «         edI¦  «         edJ¦  «        d d0d1¬#¦  «        “dg e ed'¦  «         ed-¦  «         edh¦  «         edA¦  «        d d0d1¬#¦  «        “di e edj¦  «         edk¦  «         edl¦  «        d dmdn¬O¦  «        “do e edj¦  «         edk¦  «         edl¦  «        d dmdn¬O¦  «        “dp e edq¦  «         edr¦  «         eds¦  «        d dmdn¬O¦  «        “dt e edj¦  «         edk¦  «         edl¦  «        d dmdn¬O¦  «        “du e edI¦  «         edv¦  «         edQ¦  «        d dwdx¬O¦  «        “dy e edI¦  «         edz¦  «         edQ¦  «        d d{d|¬O¦  «        “¥i d} e edA¦  «         ed%¦  «         edh¦  «        d dwdx¬O¦  «        “d~ e ed8¦  «         ed¦  «         ed9¦  «        d d{d|¬O¦  «        “d€ e ed'¦  «         edI¦  «         edZ¦  «        d d{d|¬O¦  «        “d� e ed8¦  «         ed¦  «         ed9¦  «        d d{d|¬O¦  «        “d‚ e ed¦  «         ed@¦  «         edƒ¦  «        d d{d|¬O¦  «        “d„ e ed-¦  «         ed3¦  «         ed…¦  «        d d{d|¬O¦  «        “d† e edQ¦  «         edR¦  «         ed‡¦  «        d d{d|¬O¦  «        “dˆ e ed,¦  «         edW¦  «         ed‰¦  «        d d{d|¬O¦  «        “dŠ e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d‹dŒ¬#¦  «        “d� e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d‹dŒ¬#¦  «        “dŽ e ed¦  «         ed/¦  «         ed¦  «         ed¦  «        d d‹dŒ¬#¦  «        “d� e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d‹d�¬#¦  «        “d‘ e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d‹d’¬#¦  «        “d“ e ed@¦  «         ed&¦  «         edA¦  «         edB¦  «        d d‹d’¬#¦  «        “d” e edc¦  «         edd¦  «         ede¦  «         ed*¦  «        d d‹d’¬#¦  «        “d• e edc¦  «         ed–¦  «        d d‹d’¬—¦  «        “d˜ e ed™¦  «         edš¦  «        d d‹d’¬—¦  «        “¥i d› e edœ¦  «         edj¦  «        d d‹d’¬—¦  «        “d� e edA¦  «         edž¦  «        d dŸ¬ ¦  «        “d¡ e edA¦  «         edž¦  «        d dŸ¬ ¦  «        “d¢ e ed£¦  «         edd¦  «         ed¤¦  «        d d¥d¦¬O¦  «        “d§ e ed£¦  «         edd¦  «         ed¨¦  «        d d¥d¦¬O¦  «        “d© e edª¦  «         ed_¦  «         edj¦  «        d d¥d¦¬O¦  «        “d« e ed¬¦  «         ed­¦  «         ed®¦  «        d d¥d¦¬O¦  «        “d¯ e edj¦  «         edk¦  «         ed°¦  «        d d¥d¦¬O¦  «        “d± e edW¦  «         edX¦  «         ede¦  «        d d¥d¦¬O¦  «        “d² e edA¦  «         edž¦  «         ed™¦  «        d d¥d¦¬O¦  «        “d³ e edQ¦  «         edR¦  «         ed‡¦  «        d d¥d¦¬O¦  «        “d´ e edµ¦  «         edA¦  «         edœ¦  «        d d¥d¦¬O¦  «        “d¶ e edª¦  «         ed_¦  «         ed·¦  «        d d¥d¦¬O¦  «        “d¸ e edA¦  «         edž¦  «         ed™¦  «        d d¥d¦¬O¦  «        “d¹ e ed8¦  «         edU¦  «         edA¦  «        d d¥d¦¬O¦  «        “dº e ed8¦  «         edU¦  «         edA¦  «        d d¥d¦¬O¦  «        “d» e ed¼¦  «         edU¦  «         ed½¦  «        d d¥d¦¬O¦  «        “¥ e ed¾¦  «         ed¿¦  «         edÀ¦  «        d d¥d¦¬O¦  «         e edÁ¦  «         edÂ¦  «         edÃ¦  «        d d¥d¦¬O¦  «        dÄœ¥ZdÅedÆ<   dÇD ]Z edÈe f         edÈe › dÉ�f<   Œ[ dÊdËdÌœ !                    ¦   «         D ]\  Z"Z#edÍe#f         edÍe"f<   Œ["[#d÷dÒ„Z$dødÔ„Z%	 	 dùdúdÚ„Z&dûdÜ„Z'dûdÝ„Z(düdà„Z)düdá„Z*dýdç„Z+	 	 	 dþdÿdé„Z,dddêœ�d dí„Z-ddddîœ�ddð„Z.	 	 	 dþ�ddò„Z/�ddõ„Z0�ddö„Z1dS (  é    )ÚannotationsN)Ú	dataclass)ÚdatetimeÚtimezone)ÚDecimal)ÚAnyÚDictÚLiteralÚOptional)Úfetch_endpoint_model_metadataÚfetch_model_metadata)Úbase_url_host_matchesg        )ÚinputÚoutputÚ0Ú1000000z)https://inference-api.nousresearch.com/v1)ÚactualÚ	estimatedÚincludedÚunknown)Úprovider_cost_apiÚprovider_generation_apiÚprovider_models_apiÚofficial_docs_snapshotÚuser_overrideÚcustom_contractÚnoneT)Úfrozenc                  óª   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded	<   d
Z
ded<   edd„¦   «         Zedd„¦   «         Zdd„Zd
S )ÚCanonicalUsager   ÚintÚinput_tokensÚoutput_tokensÚcache_read_tokensÚcache_write_tokensÚreasoning_tokensé   Úrequest_countNzOptional[dict[str, Any]]Ú	raw_usageÚreturnc                ó0   — | j         | j        z   | j        z   S ©N)r"   r$   r%   ©Úselfs    ú9/home/ragecks/.hermes/hermes-agent/agent/usage_pricing.pyÚprompt_tokenszCanonicalUsage.prompt_tokens(   s   € àÔ  4Ô#9Ñ9¸DÔ<SÑSÐSó    c                ó    — | j         | j        z   S r,   )r0   r#   r-   s    r/   Útotal_tokenszCanonicalUsage.total_tokens,   s   € àÔ! DÔ$6Ñ6Ð6r1   Úotherú'CanonicalUsage'c           	     ó  — t          |t          ¦  «        st          S t          | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   | j        |j        z   d¬¦  «        S )u0  Sum two usage buckets (e.g. MoA advisor fan-out + aggregator).

        ``raw_usage`` is dropped on the sum â€” it describes a single API
        response and cannot be meaningfully merged. ``request_count`` adds so
        callers can see how many underlying API calls a combined figure covers.
        N)r"   r#   r$   r%   r&   r(   r)   )	Ú
isinstancer    ÚNotImplementedr"   r#   r$   r%   r&   r(   )r.   r4   s     r/   Ú__add__zCanonicalUsage.__add__0   sŠ   € õ ˜%¥Ñ0Ô0ð 	"Ý!Ð!ÝØÔ*¨UÔ-?Ñ?ØÔ,¨uÔ/BÑBØ"Ô4°uÔ7NÑNØ#Ô6¸Ô9QÑQØ!Ô2°UÔ5KÑKØÔ,¨uÔ/BÑBØð
ñ 
ô 
ð 	
r1   )r*   r!   )r4   r5   r*   r5   )Ú__name__Ú
__module__Ú__qualname__r"   Ú__annotations__r#   r$   r%   r&   r(   r)   Úpropertyr0   r3   r9   © r1   r/   r    r       sæ   € € € € € € à€LÐÐÐÑØ€MÐÐÐÑØÐÐÐÐÑØÐÐÐÐÑØÐÐÐÐÑØ€MÐÐÐÑØ*.€IÐ.Ð.Ð.Ñ.àðTð Tð Tñ „XðTð ð7ð 7ð 7ñ „Xð7ð
ð 
ð 
ð 
ð 
ð 
r1   r    c                  ó@   — e Zd ZU ded<   ded<   dZded<   dZded<   dS )	ÚBillingRouteÚstrÚproviderÚmodelÚ Úbase_urlr   Úbilling_modeN)r:   r;   r<   r=   rF   rG   r?   r1   r/   rA   rA   D   sF   € € € € € € à€M€M�MØ€J€J�JØ€HÐÐÐÑØ!€LÐ!Ð!Ð!Ñ!Ð!Ð!r1   rA   c                  óŽ   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	d	ed
<   dZ
ded<   dZded<   dZded<   dS )ÚPricingEntryNúOptional[Decimal]Úinput_cost_per_millionÚoutput_cost_per_millionÚcache_read_cost_per_millionÚcache_write_cost_per_millionÚrequest_costr   Ú
CostSourceÚsourceúOptional[str]Ú
source_urlÚpricing_versionúOptional[datetime]Ú
fetched_at)r:   r;   r<   rK   r=   rL   rM   rN   rO   rQ   rS   rT   rV   r?   r1   r/   rI   rI   L   s¯   € € € € € € à04ÐÐ4Ð4Ð4Ñ4Ø15ÐÐ5Ð5Ð5Ñ5Ø59ÐÐ9Ð9Ð9Ñ9Ø6:Ð Ð:Ð:Ð:Ñ:Ø&*€LÐ*Ð*Ð*Ñ*Ø€FÐÐÐÑØ $€JÐ$Ð$Ð$Ñ$Ø%)€OÐ)Ð)Ð)Ñ)Ø%)€JÐ)Ð)Ð)Ñ)Ð)Ð)r1   rI   c                  ób   — e Zd ZU ded<   ded<   ded<   ded<   d	Zd
ed<   d	Zded<   dZded<   d	S )Ú
CostResultrJ   Ú
amount_usdÚ
CostStatusÚstatusrP   rQ   rB   ÚlabelNrU   rV   rR   rT   r?   ztuple[str, ...]Únotes)r:   r;   r<   r=   rV   rT   r]   r?   r1   r/   rX   rX   Y   sr   € € € € € € à!Ð!Ð!Ñ!ØÐÐÑØÐÐÑØ€J€J�JØ%)€JÐ)Ð)Ð)Ñ)Ø%)€OÐ)Ð)Ð)Ñ)Ø€EÐÐÐÑÐÐr1   rX   c                 ó>   — t          j        t          j        ¦  «        S r,   )r   Únowr   Úutcr?   r1   r/   ú<lambda>ra   d   s   € •8”<¥¤Ñ-Ô-€ r1   )Úopenaiúgpt-5.6-solz5.00z30.00z0.50z6.25r   z0https://openai.com/index/previewing-gpt-5-6-sol/zopenai-gpt-5.6-2026-07)rK   rL   rM   rN   rQ   rS   rT   )rb   úgpt-5.6-terraz2.50z15.00z0.25z3.125)rb   úgpt-5.6-lunaz1.00z6.00z0.10z1.25)Ú	anthropiczclaude-opus-4-8z25.00z8https://platform.claude.com/docs/en/about-claude/pricingzanthropic-pricing-2026-05)rf   zclaude-opus-4-8-fastz10.00z50.00z12.50z4https://openrouter.ai/anthropic/claude-opus-4.8-fast)rf   zclaude-sonnet-5z2.00z0.20zanthropic-pricing-2026-06-intro)rf   zclaude-opus-4-7)rf   zclaude-opus-4-7-20250507)rf   zclaude-opus-4-6)rf   zclaude-opus-4-6-20250414)rf   zclaude-sonnet-4-6z3.00z0.30z3.75)rf   zclaude-sonnet-4-6-20250414)rf   zclaude-opus-4-5)rf   zclaude-sonnet-4-5)rf   zclaude-haiku-4-5)rf   zclaude-opus-4-20250514z75.00z1.50z18.75)rf   zclaude-sonnet-4-20250514)rb   zgpt-4ozhttps://openai.com/api/pricing/zopenai-pricing-2026-03-16)rK   rL   rM   rQ   rS   rT   )rb   zgpt-4o-miniz0.15z0.60z0.075)rb   zgpt-4.1z8.00)rb   zgpt-4.1-miniz0.40z1.60)rb   zgpt-4.1-nanoz0.025)rb   Úo3z40.00)rb   zo3-miniz1.10z4.40z0.55)rf   zclaude-3-5-sonnet-20241022)rf   zclaude-3-5-haiku-20241022z0.80z4.00z0.08)rf   zclaude-3-opus-20240229)rf   zclaude-3-haiku-20240307z0.03)Údeepseekzdeepseek-chatz0.14z0.28z0.0028z1https://api-docs.deepseek.com/quick_start/pricingzdeepseek-pricing-2026-07)rh   zdeepseek-reasoner)rh   údeepseek-v4-proz0.435z0.87z0.003625)rh   údeepseek-v4-flash)Úgooglezgemini-3.6-flashz7.50z-https://ai.google.dev/gemini-api/docs/pricingzgoogle-pricing-2026-07-28)rk   zgemini-3.5-flashz9.00zhttps://ai.google.dev/pricingzgoogle-pricing-2026-07-07)rk   zgemini-3.5-flash-lite)rk   úgemini-3.1-proz12.00)rk   úgemini-3.1-flash-lite)rk   zgemini-3-pro-preview)rk   zgemini-3-flash-previewz0.05)rk   zgemini-2.5-proz0.125)rk   zgemini-2.5-flashz0.015)rk   zgemini-2.0-flashz0.01)Úbedrockzanthropic.claude-opus-4-8z'https://aws.amazon.com/bedrock/pricing/zanthropic-list-2026-07)rn   zanthropic.claude-opus-4-7)rn   zanthropic.claude-opus-4-6)rn   zanthropic.claude-sonnet-5zbedrock-pricing-2026-06)rn   zanthropic.claude-sonnet-4-6zbedrock-pricing-2026-04)rn   zanthropic.claude-sonnet-4-5)rn   zanthropic.claude-haiku-4-5)rn   zamazon.nova-proz3.20)rK   rL   rQ   rS   rT   )rn   zamazon.nova-litez0.06z0.24)rn   zamazon.nova-microz0.035)Úminimaxúminimax-m2.7z1.20zminimax-pricing-2026-04)rK   rL   rQ   rT   )ú
minimax-cnrp   )Ú	fireworksz	kimi-k2p6z0.95z0.16z,https://docs.fireworks.ai/serverless/pricingzfireworks-pricing-2026-07)rr   zkimi-k2p7-codez0.19)rr   zglm-5p2z1.40)rr   ri   z1.74z3.48z0.145)rr   rj   z0.028)rr   zqwen3p7-plus)rr   z
minimax-m3)rr   zgpt-oss-120b)rr   zgpt-oss-20bz0.07)rr   zglm-5p1z0.26)rr   zminimax-m2p7)rr   zkimi-k2p6-fast)rr   zkimi-k2p6-turbo)rr   zkimi-k2p7-code-fastz1.90z0.38z2.10z6.60z0.21z2.80z8.80z0.52))rr   zglm-5p2-fast)rr   zglm-5p1-fastz#Dict[tuple[str, str], PricingEntry]Ú_OFFICIAL_DOCS_PRICING)rc   rd   re   rb   z-prorl   rm   )zgemini-3.1-pro-previewzgemini-3.1-flash-lite-previewrk   Úvaluer   r*   rJ   c                óf   — | €d S 	 t          t          | ¦  «        ¦  «        S # t          $ r Y d S w xY wr,   )r   rB   Ú	Exception©rt   s    r/   Ú_to_decimalrx   Î  sG   € Ø€}ØˆtðÝ•s˜5‘z”zÑ"Ô"Ð"øÝð ð ð Øˆtˆtðøøøs   †" ¢
0¯0r!   c                óH   — 	 t          | pd¦  «        S # t          $ r Y dS w xY w)Nr   )r!   rv   rw   s    r/   Ú_to_intrz   ×  s9   € ðÝ�5�:˜A‰ŒÐøÝð ð ð Øˆqˆqðøøøs   ‚ “
! !Ú
model_namerB   rC   rR   rF   c                ó$  — |pd                      ¦   «                              ¦   «         }|pd                      ¦   «                              ¦   «         }| pd                      ¦   «         }|s%d|v r!|                     dd¦  «        \  }}|dv r|}|}|dk    rt          d||pdd¬¦  «        S |dk    st	          |pdd	¦  «        rt          d||pdd
¬¦  «        S |dk    st	          |pdd¦  «        rt          d||pt
          d
¬¦  «        S |dk    r.t          d|                     d¦  «        d         |pdd¬¦  «        S |dv r.t          d|                     d¦  «        d         |pdd¬¦  «        S |dv r.t          ||                     d¦  «        d         |pdd¬¦  «        S |dv s$t	          |pdd¦  «        st	          |pdd¦  «        r.t          d|                     d¦  «        d         |pdd¬¦  «        S |dk    st	          |pdd¦  «        r/t          d|                     dd¦  «        d         |pdd¬¦  «        S |dv s|rd|v rt          |pd||pdd¬¦  «        S t          |pd|r|                     d¦  «        d         nd|pdd¬¦  «        S )NrE   ú/r'   >   rk   rb   rf   zopenai-codexÚsubscription_included)rC   rD   rF   rG   Ú
openrouterzopenrouter.aiÚofficial_models_apiÚnouszinference-api.nousresearch.comrf   éÿÿÿÿr   >   ú
openai-apirb   rb   >   ro   rq   >   ú	vertex-aiúgoogle-geminiúgoogle-vertexúgoogle-ai-studioÚgeminirk   Úvertexzaiplatform.googleapis.comz!generativelanguage.googleapis.comrk   rr   zapi.fireworks.ai>   ÚlocalÚcustomÚ	localhostr‹   r   )ÚstripÚlowerÚsplitrA   r   Ú_NOUS_DEFAULT_BASE_URLÚrsplit)r{   rC   rF   Úprovider_nameÚbaserD   Úinferred_providerÚ
bare_models           r/   Úresolve_billing_router–   Þ  s»  € ð
 �^ ×*Ò*Ñ,Ô,×2Ò2Ñ4Ô4€MØˆN˜×!Ò!Ñ#Ô#×)Ò)Ñ+Ô+€DØÐ˜2×$Ò$Ñ&Ô&€EØð ˜S E˜\˜\Ø(-¯ª°C¸Ñ(;Ô(;Ñ%Ð˜:ØÐ AÐAÐAØ-ˆMØˆEà˜Ò&Ð&Ý ^¸5È8È>ÐWYÐhð  Añ  Aô  Að  	AØ˜Ò$Ð$Õ(=¸h¸nÈ"ÈoÑ(^Ô(^Ð$Ý \¸ÈÈÐUWÐf{Ð|Ñ|Ô|Ð|Ø˜ÒÐÕ"7¸¸ÀBÐHhÑ"iÔ"iÐÝ V°5À8ÐCeÕOeð  uJð  Kñ  Kô  Kð  	KØ˜Ò#Ð#Ý [¸¿ºÀCÑ8HÔ8HÈÔ8LÐW_ÐWeÐceð  uMð  Nñ  Nô  Nð  	Nð
 Ð0Ð0Ð0Ý X°U·[²[ÀÑ5EÔ5EÀbÔ5IÐT\ÐTbÐ`bð  rJð  Kñ  Kô  Kð  	KØÐ1Ð1Ð1Ý ]¸%¿+º+ÀcÑ:JÔ:JÈ2Ô:NÐYaÐYgÐegð  wOð  Pñ  Pô  Pð  	Pð 	ÐzÐzÐzÝ   ¨RÐ1LÑMÔMð 	{å   ¨RÐ1TÑUÔUð 	{õ  X°U·[²[ÀÑ5EÔ5EÀbÔ5IÐT\ÐTbÐ`bð  rJð  Kñ  Kô  Kð  	KØ˜Ò#Ð#Õ'<¸X¸^ÈÐM_Ñ'`Ô'`Ð#õ  [¸¿ºÀSÈ!Ñ8LÔ8LÈRÔ8PÐ[cÐ[iÐgið  yQð  Rñ  Rô  Rð  	RØÐ+Ð+Ð+°Ð+¸ÈÐ9LÐ9LÝ ]Ð%>°hÀeÐV^ÐVdÐbdÐs|Ð}Ñ}Ô}Ð}Ý Ð!;°)Ð[`ÐChÀ5Ç;Â;ÈsÑCSÔCSÐTVÔCWÐCWÐfhÐs{ð  tBð  @Bð  QZð  [ñ  [ô  [ð  [r1   rD   c                óh  — |                       ¦   «                              ¦   «         }dD ]0}|                     |¦  «        r|t          |¦  «        d…         } nŒ1t	          j        dd|¦  «        }t	          j        dd|¦  «        }t	          j        dd|¦  «        }t	          j        dd|¦  «        }|S )	u  Normalize a Bedrock model id to its bare foundation-model form.

    Bedrock cross-region inference profiles prefix the foundation model id
    with a region scope (``us.`` / ``global.`` / ``eu.`` / ``apac.`` / ``au.``
    / ...), e.g. ``us.anthropic.claude-opus-4-7`` or
    ``au.anthropic.claude-sonnet-4-5-20250929-v1:0``.  The pricing table is
    keyed on the bare ``anthropic.claude-*`` id, so the prefix must be
    stripped before the lookup or every cross-region session prices as
    unknown.  Note Asia-Pacific uses ``apac.`` (a bare ``ap.`` never matches
    an ``apac.*`` id) and Australia/New Zealand use ``au.``.  Also normalizes
    dot-notation version numbers (``4.7`` â†’ ``4-7``) and the documented
    trailing date, revision, and profile components (``-20250514-v1:0``).
    )zglobal.zus.zeu.zapac.zap.zau.zjp.zca.zsa.zme.zaf.Nú(\d+)\.(\d+)ú\1-\2z:\d+$rE   z-v\d+$z-\d{8}$©rŽ   r�   Ú
startswithÚlenÚreÚsub)rD   ÚnameÚprefixs      r/   Ú_normalize_bedrock_model_namer¡     s·   € ð �;Š;‰=Œ=×ÒÑ Ô €Dðð ð ˆð �?Š?˜6Ñ"Ô"ð 	Ø�˜F™œ˜˜Ô%ˆDØˆEð	õ Œ6�/ 8¨TÑ2Ô2€Dõ Œ6�(˜B Ñ%Ô%€DÝŒ6�)˜R Ñ&Ô&€DÝŒ6�*˜b $Ñ'Ô'€DØ€Kr1   c                óÖ   — |                       ¦   «                              ¦   «         }|                     d¦  «        r|t          d¦  «        d…         }t	          j        dd|¦  «        }|S )uî   Normalize Anthropic model name variants to canonical form.

    Handles:
      - Dot notation: claude-opus-4.7 â†’ claude-opus-4-7
      - Short aliases: claude-opus-4.7 â†’ claude-opus-4-7
      - Strips anthropic/ prefix if present
    z
anthropic/Nr˜   r™   rš   )rD   rŸ   s     r/   Ú_normalize_anthropic_model_namer£   9  sc   € ð �;Š;‰=Œ=×ÒÑ Ô €DØ‡‚�|Ñ$Ô$ð (Ø•C˜Ñ%Ô%Ð&Ð&Ô'ˆõ Œ6�/ 8¨TÑ2Ô2€DØ€Kr1   ÚrouteúOptional[PricingEntry]c                ó–  — | j                              ¦   «         }t                               | j        |f¦  «        }|r|S | j        dk    r:t          |¦  «        }||k    r%t                               | j        |f¦  «        }|r|S | j        dk    r:t          |¦  «        }||k    r%t                               | j        |f¦  «        }|r|S d S )Nrf   rn   )rD   rŽ   rs   ÚgetrC   r£   r¡   )r¤   rD   ÚentryÚ
normalizeds       r/   Ú_lookup_official_docs_pricingrª   J  sÛ   € ØŒK×ÒÑÔ€Eå"×&Ò&¨¬¸Ð'>Ñ?Ô?€EØð Øˆà„~˜Ò$Ð$Ý4°UÑ;Ô;ˆ
Ø˜ÒÐÝ*×.Ò.°´À
Ð/KÑLÔLˆEØð Ø�ð „~˜Ò"Ð"Ý2°5Ñ9Ô9ˆ
Ø˜ÒÐÝ*×.Ò.°´À
Ð/KÑLÔLˆEØð Ø�Øˆ4r1   c                óJ   — t          t          ¦   «         | j        dd¬¦  «        S )Nz>https://openrouter.ai/docs/api/api-reference/models/get-modelszopenrouter-models-api©rS   rT   )Ú_pricing_entry_from_metadatar   rD   )r¤   s    r/   Ú_openrouter_pricing_entryr®   b  s-   € Ý'ÝÑÔØŒØSØ/ð	ñ ô ð r1   ÚmetadataúDict[str, Dict[str, Any]]Úmodel_idrS   rT   c               óì  — || vrd S | |                               d¦  «        pi }t          |                      d¦  «        ¦  «        }t          |                      d¦  «        ¦  «        }t          |                      d¦  «        ¦  «        }t          |                      d¦  «        p)|                      d¦  «        p|                      d¦  «        ¦  «        }t          |                      d¦  «        p)|                      d	¦  «        p|                      d
¦  «        ¦  «        }	|€|€|€d S dd„}
t           |
|¦  «         |
|¦  «         |
|¦  «         |
|	¦  «        |d||t          ¦   «         ¬¦	  «	        S )NÚpricingÚpromptÚ
completionÚrequestÚ
cache_readÚcached_promptÚinput_cache_readÚcache_writeÚcache_creationÚinput_cache_writert   rJ   r*   c                ó   — | €d S | t           z  S r,   )Ú_ONE_MILLIONrw   s    r/   Ú_per_token_to_per_millionz?_pricing_entry_from_metadata.<locals>._per_token_to_per_million…  s   € Øˆ=Ø�4Ø•|Ñ#Ð#r1   r   )	rK   rL   rM   rN   rO   rQ   rS   rT   rV   )rt   rJ   r*   rJ   )r§   rx   rI   Ú_UTC_NOW)r¯   r±   rS   rT   r³   r´   rµ   r¶   r·   rº   r¿   s              r/   r­   r­   k  sš  € ð �xÐÐØˆtØ�xÔ ×$Ò$ YÑ/Ô/Ð5°2€GÝ˜Ÿš XÑ.Ô.Ñ/Ô/€FÝ˜WŸ[š[¨Ñ6Ô6Ñ7Ô7€JÝ˜'Ÿ+š+ iÑ0Ô0Ñ1Ô1€GÝØ�Š�LÑ!Ô!ð 	+Ø�;Š;�Ñ'Ô'ð	+à�;Š;Ð)Ñ*Ô*ñô €Jõ
 Ø�Š�MÑ"Ô"ð 	,Ø�;Š;Ð'Ñ(Ô(ð	,à�;Š;Ð*Ñ+Ô+ñô €Kð
 €~˜*Ð,°°Øˆtð$ð $ð $ð $õ
 Ø8Ð8¸Ñ@Ô@Ø 9Ð 9¸*Ñ EÔ EØ$=Ð$=¸jÑ$IÔ$IØ%>Ð%>¸{Ñ%KÔ%KØØ$ØØ'Ý‘:”:ð
ñ 
ô 
ð 
r1   Úapi_keyc                óˆ  — t          | ||¬¦  «        }|j        dk    r)t          t          t          t          t          dd¬¦  «        S |j        dk    rt          |¦  «        S |j        rMt          t          |j        |pd¬¦  «        |j	        |j         
                    d	¦  «        › d
�d¬¦  «        }|r|S t          |¦  «        S )N©rC   rF   r~   r   úincluded-route)rK   rL   rM   rN   rQ   rT   r   rE   )rÁ   r}   z/modelszopenai-compatible-models-apir¬   )r–   rG   rI   Ú_ZEROrC   r®   rF   r­   r   rD   Úrstriprª   ©r{   rC   rF   rÁ   r¤   r¨   s         r/   Úget_pricing_entryrÈ   —  sâ   € õ " *°xÈ(ÐSÑSÔS€EØÔÐ4Ò4Ð4ÝÝ#(Ý$)Ý(-Ý).ØØ,ð
ñ 
ô 
ð 	
ð „~˜Ò%Ð%Ý(¨Ñ/Ô/Ð/Ø„~ð Ý,Ý)¨%¬.À'À-ÈRÐPÑPÔPØŒKØœ.×/Ò/°Ñ4Ô4Ð=Ð=Ð=Ø:ð	
ñ 
ô 
ˆð ð 	ØˆLÝ(¨Ñ/Ô/Ð/r1   )rC   Úapi_modeÚresponse_usagerÉ   c               ó.  — | st          ¦   «         S |pd                     ¦   «                              ¦   «         }|pd                     ¦   «                              ¦   «         }|dk    s|dk    rzt          t	          | dd¦  «        ¦  «        }t          t	          | dd¦  «        ¦  «        }t          t	          | dd¦  «        ¦  «        }t          t	          | dd¦  «        ¦  «        }�n¶|d	k    r©t          t	          | dd¦  «        ¦  «        }	t          t	          | dd¦  «        ¦  «        }t	          | d
d¦  «        }
t          |
rt	          |
dd¦  «        nd¦  «        }t          |
rt	          |
dd¦  «        nd¦  «        }t          d|	|z
  |z
  ¦  «        }�nt          t	          | dd¦  «        ¦  «        }t          t	          | dd¦  «        ¦  «        }t	          | dd¦  «        }
t          |
rt	          |
dd¦  «        nd¦  «        }|st          t	          | dd¦  «        ¦  «        }|st          t	          | dd¦  «        ¦  «        }t          |
rt	          |
dd¦  «        nd¦  «        }|st          t	          | dd¦  «        ¦  «        }t          d||z
  |z
  ¦  «        }d}t	          | dd¦  «        }|rt          t	          |dd¦  «        ¦  «        }|s1t	          | dd¦  «        }|rt          t	          |dd¦  «        ¦  «        }t          |||||¬¦  «        S )u…  Normalize raw API response usage into canonical token buckets.

    Handles three API shapes:
    - Anthropic: input_tokens/output_tokens/cache_read_input_tokens/cache_creation_input_tokens
    - Codex Responses: input_tokens includes cache tokens; input_tokens_details.cached_tokens separates them
    - OpenAI Chat Completions: prompt_tokens includes cache tokens; prompt_tokens_details.cached_tokens separates them

    In both Codex and OpenAI modes, input_tokens is derived by subtracting cache
    tokens from the total â€” the API contract is that input/prompt totals include
    cached tokens and the details object breaks them out.
    rE   Úanthropic_messagesrf   r"   r   r#   Úcache_read_input_tokensÚcache_creation_input_tokensÚcodex_responsesÚinput_tokens_detailsNÚcached_tokensÚcache_creation_tokensr0   Úcompletion_tokensÚprompt_tokens_detailsÚprompt_cache_hit_tokensr%   Úoutput_tokens_detailsr&   Úcompletion_tokens_details)r"   r#   r$   r%   r&   )r    r�   rŽ   rz   ÚgetattrÚmax)rÊ   rC   rÉ   r’   Úmoder"   r#   r$   r%   Úinput_totalÚdetailsÚprompt_totalr&   Úoutput_detailsÚcompletion_detailss                  r/   Únormalize_usagerà   µ  st  € ð" ð  ÝÑÔÐà�^ ×*Ò*Ñ,Ô,×2Ò2Ñ4Ô4€MØˆN˜×!Ò!Ñ#Ô#×)Ò)Ñ+Ô+€DàÐ#Ò#Ð# }¸Ò'CÐ'CÝ�w ~°~ÀqÑIÔIÑJÔJˆÝ¥¨¸ÈÑ KÔ KÑLÔLˆÝ#¥G¨NÐ<UÐWXÑ$YÔ$YÑZÔZÐÝ$¥W¨^Ð=ZÐ\]Ñ%^Ô%^Ñ_Ô_ÐÑØ	Ð"Ò	"Ð	"Ý�g n°nÀaÑHÔHÑIÔIˆÝ¥¨¸ÈÑ KÔ KÑLÔLˆÝ˜.Ð*@À$ÑGÔGˆÝ#ÈGÐ$Z¥G¨G°_ÀaÑ$HÔ$HÐ$HÐYZÑ[Ô[ÐÝ$Ø<CÐJ�G�GÐ4°aÑ8Ô8Ð8Èñ
ô 
Ðõ ˜1˜kÐ,=Ñ=Ð@RÑRÑSÔSˆ‰å�w ~°ÈÑJÔJÑKÔKˆÝ¥¨Ð8KÈQÑ OÔ OÑPÔPˆÝ˜.Ð*AÀ4ÑHÔHˆõ $ÈGÐ$Z¥G¨G°_ÀaÑ$HÔ$HÐ$HÐYZÑ[Ô[ÐØ ð 	_Ý '­°Ð@YÐ[\Ñ(]Ô(]Ñ ^Ô ^ÐØ ð 	õ !(Ý˜Ð(AÀ1ÑEÔEñ!ô !Ðõ %Ø9@ÐG�G�GÐ1°1Ñ5Ô5Ð5Àañ
ô 
Ðð "ð 	Ý!(Ý˜Ð(EÀqÑIÔIñ"ô "Ðõ ˜1˜lÐ->Ñ>ÐASÑSÑTÔTˆàÐõ ˜^Ð-DÀdÑKÔK€NØð SÝ"¥7¨>Ð;MÈqÑ#QÔ#QÑRÔRÐØð Ý$ ^Ð5PÐRVÑWÔWÐØð 	Ý&ÝÐ*Ð,>ÀÑBÔBñ ô  Ðõ Ø!Ø#Ø+Ø-Ø)ðñ ô ð r1   ©rC   rF   rÁ   Úusagec               ó¶  — t          | ||¬¦  «        }|j        dk    rt          t          dddd¬¦  «        S t	          | |||¬¦  «        }|st          d ddd	¬
¦  «        S g }t          }|j        r|j        €t          d d|j        d	¬
¦  «        S |j        r|j	        €t          d d|j        d	¬
¦  «        S |j
        r |j        €t          d d|j        d	d¬¦  «        S |j        r |j        €t          d d|j        d	d¬¦  «        S |j        �'|t          |j        ¦  «        |j        z  t          z  z  }|j	        �'|t          |j        ¦  «        |j	        z  t          z  z  }|j        �'|t          |j
        ¦  «        |j        z  t          z  z  }|j        �'|t          |j        ¦  «        |j        z  t          z  z  }|j        �&|j        r|t          |j        ¦  «        |j        z  z  }d}	d|d›�}
|j        dk    r|t          k    rd}	d}
|j        dk    r|                     d¦  «         t          ||	|j        |
|j        |j        t-          |¦  «        ¬¦  «        S )NrÃ   r~   r   r   rÄ   )rY   r[   rQ   r\   rT   rá   r   zn/a)rY   r[   rQ   r\   )z(cache-read pricing unavailable for route)rY   r[   rQ   r\   r]   )z)cache-write pricing unavailable for router   z~$ú.2fr   zBOpenRouter cost is estimated from the models API until reconciled.)rY   r[   rQ   r\   rV   rT   r]   )r–   rG   rX   rÅ   rÈ   r"   rK   rQ   r#   rL   r$   rM   r%   rN   r   r¾   rO   r(   rC   ÚappendrV   rT   Útuple)r{   râ   rC   rF   rÁ   r¤   r¨   r]   Úamountr[   r\   s              r/   Úestimate_usage_costrè     sÔ  € õ " *°xÈ(ÐSÑSÔS€EØÔÐ4Ò4Ð4ÝÝØØØØ,ð
ñ 
ô 
ð 	
õ ˜j°8ÀhÐX_Ð`Ñ`Ô`€EØð YÝ T°)ÀFÐRWÐXÑXÔXÐXà€EÝ€FàÔð _˜eÔ:ÐBÝ T°)ÀEÄLÐX]Ð^Ñ^Ô^Ð^ØÔð _˜uÔ<ÐDÝ T°)ÀEÄLÐX]Ð^Ñ^Ô^Ð^ØÔð ØÔ,Ð4ÝØØ Ø”|ØØCðñ ô ð ð Ôð ØÔ-Ð5ÝØØ Ø”|ØØDðñ ô ð ð Ô#Ð/Ø•'˜%Ô,Ñ-Ô-°Ô0LÑLÍ|Ñ[Ñ[ˆØÔ$Ð0Ø•'˜%Ô-Ñ.Ô.°Ô1NÑNÕQ]Ñ]Ñ]ˆØÔ(Ð4Ø•'˜%Ô1Ñ2Ô2°UÔ5VÑVÕYeÑeÑeˆØÔ)Ð5Ø•'˜%Ô2Ñ3Ô3°eÔ6XÑXÕ[gÑgÑgˆØÔÐ%¨%Ô*=Ð%Ø•'˜%Ô-Ñ.Ô.°Ô1CÑCÑCˆà$€FØ�ÐÐÐ€EØ„|�vÒÐ &­E¢/ /ØˆØˆà„~˜Ò%Ð%Ø�ŠÐYÑZÔZÐZåØØØŒ|ØØÔ#ØÔ-Ý�E‰lŒlðñ ô ð r1   Úboolc                ón   — t          | ||¬¦  «        }|j        dk    rdS t          | |||¬¦  «        }|duS )uÏ   Check whether we have pricing data for this model+route.

    Uses direct lookup instead of routing through the full estimation
    pipeline â€” avoids creating dummy usage objects just to check status.
    rÃ   r~   Trá   N)r–   rG   rÈ   rÇ   s         r/   Úhas_known_pricingrë   c  sN   € õ " *°xÈ(ÐSÑSÔS€EØÔÐ4Ò4Ð4ØˆtÝ˜j°8ÀhÐX_Ð`Ñ`Ô`€EØ˜ÐÐr1   ÚsecondsÚfloatc                óÞ   — | dk     r| d›d�S | dz  }|dk     r|d›d�S |dz  }|dk     r;t          |dz  ¦  «        }|rt          |¦  «        › d|› d�nt          |¦  «        › d�S |dz  }|d›d	�S )
Né<   ú.0fÚsÚmé   zh Úhú.1fÚd)r!   )rì   ÚminutesÚhoursÚremaining_minÚdayss        r/   Úformat_duration_compactrû   v  s±   € Ø�‚|€|ØÐ Ð Ð Ð Ð Ø˜‰l€GØ�‚|€|ØÐ Ð Ð Ð Ð Ø�b‰L€EØˆr‚z€zÝ˜G b™LÑ)Ô)ˆØ4AÐW•#�e‘*”*Ð0Ð0 Ð0Ð0Ð0Ð0Í#ÈeÉ*Ì*ÐGWÐGWÐGWÐWØ�2‰:€DØˆ>ˆ>ˆ>ˆ>Ðr1   c                ód  — t          t          | ¦  «        ¦  «        }|dk     rt          t          | ¦  «        ¦  «        S | dk     rdnd}d}|D ]`\  }}||k    rU||z  }|dk     r|d›}n|dk     r|d	›}n|d
›}d|v r(|                     d¦  «                             d¦  «        }|› |› |› �c S Œa| d›S )Néè  r   Ú-rE   ))i Êš;ÚB)i@B ÚM)rý   ÚKé
   rä   éd   rõ   rð   ú.r   Ú,)Úabsr!   rB   rÆ   )rt   Ú	abs_valueÚsignÚunitsÚ	thresholdÚsuffixÚscaledÚtexts           r/   Úformat_token_count_compactr  „  sõ   € Ý•C˜‘J”J‘”€IØ�5ÒÐÝ•3�u‘:”:‰ŒÐà˜!’)�)ˆ3ˆ3 €DØB€EØ"ð +ð +Ñˆ	�6Ø˜	Ò!Ð!Ø Ñ*ˆFØ˜Š{ˆ{Ø ����Ø˜#’�Ø ����à ���Ø�dˆ{ˆ{Ø—{’{ 3Ñ'Ô'×.Ò.¨sÑ3Ô3�ØÐ*˜DÐ* &Ð*Ð*Ð*Ð*Ð*ð "ð ˆ<ˆ<Ðr1   )rt   r   r*   rJ   )rt   r   r*   r!   )NN)r{   rB   rC   rR   rF   rR   r*   rA   )rD   rB   r*   rB   )r¤   rA   r*   r¥   )
r¯   r°   r±   rB   rS   rB   rT   rB   r*   r¥   )NNN)
r{   rB   rC   rR   rF   rR   rÁ   rR   r*   r¥   )rÊ   r   rC   rR   rÉ   rR   r*   r    )r{   rB   râ   r    rC   rR   rF   rR   rÁ   rR   r*   rX   )
r{   rB   rC   rR   rF   rR   rÁ   rR   r*   ré   )rì   rí   r*   rB   )rt   r!   r*   rB   )2Ú
__future__r   r�   Údataclassesr   r   r   Údecimalr   Útypingr   r	   r
   r   Úagent.model_metadatar   r   Úutilsr   ÚDEFAULT_PRICINGrÅ   r¾   r�   rZ   rP   r    rA   rI   rX   rÀ   rs   r=   Ú_base_56ÚitemsÚ_aliasÚ
_canonicalrx   rz   r–   r¡   r£   rª   r®   r­   rÈ   rà   rè   rë   rû   r  r?   r1   r/   ú<module>r     sÕ  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à¨3Ð/Ð/€àˆ�‰Œ€Øˆw�yÑ!Ô!€ØDÐ àÐAÔB€
Øðô€
ð €�$ÐÑÔð"
ð "
ð "
ð "
ð "
ñ "
ô "
ñ Ôð"
ðJ €�$ÐÑÔð"ð "ð "ð "ð "ñ "ô "ñ Ôð"ð €�$ÐÑÔð	*ð 	*ð 	*ð 	*ð 	*ñ 	*ô 	*ñ Ôð	*ð €�$ÐÑÔð ð  ð  ð  ð  ñ  ô  ñ Ôð ð .Ð-€ð
M?ðð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØEØ0ðñ ô ð!M?ð2ð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨WÑ%5Ô%5Ø'ØEØ0ðñ ô ð9M?ðJð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØEØ0ðñ ô ðQM?ðjð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðqM?ðBð €|Ø&˜w wÑ/Ô/Ø ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨WÑ%5Ô%5Ø'ØIØ3ðñ ô ðIM?ðdð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ9ðñ ô ðkM?ðDð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðKM?ð\ð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðcM?ðvð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ð}M?ðNð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðUM?ðfð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðmM?ð~ð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðEM?ðXð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ð_M?ðpð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðwM?ðHð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðOM?ðbð €|Ø&˜w wÑ/Ô/Ø ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨WÑ%5Ô%5Ø'ØMØ3ðñ ô ðiM?ðzð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðAM?ð M?ðTð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ'Ø4Ø3ðñ ô ð[M?ðjð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'Ø4Ø3ðñ ô ðqM?ð@ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø4Ø3ðñ ô ðGM?ðVð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø4Ø3ðñ ô ð]M?ðlð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'Ø4Ø3ðñ ô ðsM?ðB	ð €|Ø&˜w wÑ/Ô/Ø ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ'Ø4Ø3ðñ ô ðI	M?ðX	ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø4Ø3ðñ ô ð_	M?ðp	ð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðw	M?ðH
ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ðO
M?ð`
ð €|Ø&˜w wÑ/Ô/Ø ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨WÑ%5Ô%5Ø'ØMØ3ðñ ô ðg
M?ðx
ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'ØMØ3ðñ ô ð
M?ðXð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨HÑ$5Ô$5Ø'ØFØ2ðñ ô ð_M?ðnð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨HÑ$5Ô$5Ø'ØFØ2ðñ ô ðuM?ðDð €|Ø&˜w wÑ/Ô/Ø ' ¨¡¤Ø$+ G¨JÑ$7Ô$7Ø'ØFØ2ðñ ô ðKM?ðZð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨HÑ$5Ô$5Ø'ØFØ2ðñ ô ðaM?ðrð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØBØ3ðñ ô ðyM?ðHð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø2Ø3ðñ ô ðOM?ð M?ð M?ð^ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØBØ3ðñ ô ðeM?ðtð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ'Ø2Ø3ðñ ô ð{M?ðJð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'Ø2Ø3ðñ ô ðQM?ð`ð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ'Ø2Ø3ðñ ô ðgM?ðvð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø2Ø3ðñ ô ð}M?ðLð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨GÑ$4Ô$4Ø'Ø2Ø3ðñ ô ðSM?ðbð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'Ø2Ø3ðñ ô ðiM?ðxð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'Ø2Ø3ðñ ô ðM?ðbð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø0ðñ ô ðiM?ðzð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø0ðñ ô ðAM?ðRð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø0ðñ ô ðYM?ðjð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø1ðñ ô ðqM?ðBð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø1ðñ ô ðIM?ðZð €|Ø&˜w v™œØ ' ¨Ñ 0Ô 0Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø1ðñ ô ðaM?ðrð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ%, W¨V¡_¤_Ø'Ø<Ø1ðñ ô ðyM?ðJð €|Ø&˜w v™œØ ' ¨¡¤Ø'Ø<Ø1ðñ ô ðQM?ð^ð €|Ø&˜w v™œØ ' ¨¡¤Ø'Ø<Ø1ðñ ô ðeM?ð M?ð M?ðrð €|Ø&˜w wÑ/Ô/Ø ' ¨¡¤Ø'Ø<Ø1ðñ ô ðyM?ðHð €|Ø&˜w v™œØ ' ¨¡¤Ø'Ø1ð	ñ ô ðOM?ðZð €|Ø&˜w v™œØ ' ¨¡¤Ø'Ø1ð	ñ ô ðaM?ðvð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ð}M?ðLð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðSM?ðbð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðiM?ðxð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'ØAØ3ðñ ô ðM?ðNð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'ØAØ3ðñ ô ðUM?ðdð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðkM?ðzð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðAM?ðPð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'ØAØ3ðñ ô ðWM?ðfð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨GÑ$4Ô$4Ø'ØAØ3ðñ ô ðmM?ð|ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðCM?ðRð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðYM?ðlð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðsM?ðBð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðIM?ðXð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ð_M?ð M?ðt €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ð €|Ø&˜w v™œØ ' ¨¡¤Ø$+ G¨F¡O¤OØ'ØAØ3ðñ ô ðKM?ð M?ð M?Ð ð Mð Mð Mñ Mðd Að ð €HØ<RØ	�8Ðô=Ð˜H¨Ð&7Ð&7Ð&7Ð8Ñ9Ð9ð ð /Ø%<ðð ÷ ‚%�'„'ðð Ñ€FˆJð 2HØ	�:Ðô2Ð˜H fÐ-Ñ.Ð.ð ˆJðð ð ð ðð ð ð ð #Ø"ð/[ð /[ð /[ð /[ð /[ðd&ð &ð &ð &ðRð ð ð ð"ð ð ð ð0ð ð ð ð)ð )ð )ð )ð\ #Ø"Ø!ð	0ð 0ð 0ð 0ð 0ðB #Ø"ð	\ð \ñ \ð \ð \ð \ðF #Ø"Ø!ðLð Lñ Lð Lð Lð Lðb #Ø"Ø!ð	ñ ð ð ð ñ&ð ð ð ñð ð ð ð ð r1   