§
    cŠtj=  ã                  ó.  — U d Z ddlmZ ddlZddlmZmZmZmZ ddl	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ e
rJd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& dd	l'm(Z(m)Z) e&eeeeef         Z* ed
¦  «        Z+dZ,de-d<   eZ.de-d<   g d¢Z/ G d„ de¦  «        Z0 G d„ dee0e¦  «        Z1 G d„ de0e¦  «        Z2 G d„ deee         e¦  «        Z3 G d„ dee¦  «        Z4 G d„ de1e4e¦  «        Z5 G d„ de3e4e¦  «        Z6 G d„ de2e¦  «        Z7 G d „ d!e5e¦  «        Z8 G d"„ d#e6e¦  «        Z9 G d$„ d%e0e¦  «        Z: G d&„ d'e5e¦  «        Z; G d(„ d)e6e¦  «        Z< G d*„ d+e2e¦  «        Z=d,Z>de-d-<   d.Z?de-d/<   d0Z@de-d1<   d2ZAde-d3<   d4ZBde-d5<   d6ZCde-d7<   d8ZDde-d9<   d:ZEde-d;<   d<ZFde-d=<   d>ZGde-d?<   e=ZHde-d@<   e=ZIde-dA<   dBZJde-dC<   dDZKde-dE<   dFZLde-dG<   dHZMde-dI<   e1ZNde-dJ<   	 e2e:z  ZOde-dK<   eNeOz  ZPde-dL<   	 e3ZQde-dM<   	  edNeP¬O¦  «        ZR	  edPeN¬O¦  «        ZS	  edQeO¬O¦  «        ZT edReQ¬O¦  «        ZU	 dldW„ZVdmdY„ZW edZe¦  «        ZXeZYd[e-d\<   eZZd]e-d^<    ed_e¦  «        Z[ ed`e¦  «        Z\ edae¦  «        Z]dndc„Z^dode„Z_dpdg„Z`dqdi„Zadrdk„ZbdS )suõ  The home for *mostly* [structural] counterparts to [nominal] native types.

If you find yourself being yelled at by a typechecker and ended up here - **do not fear!**

We have 5 funky flavors, which tackle two different problem spaces.

How do we describe [Native types] when ...
- ... **wrapping in** a [Narwhals type]?
- ... **matching to** an [`Implementation`]?

## Wrapping in a Narwhals type
[//]: # (TODO @dangotbanned: Replace `Thing` with a better name)

The following examples use the placeholder type `Thing` which represents one of:
- `DataFrame`: (Eager) 2D data structure representing data as a table with rows and columns.
- `LazyFrame`: (Lazy) Computation graph/query against a DataFrame/database.
- `Series`: 1D data structure representing a single column.

Our goal is to **wrap** a *partially-unknown* native object **in** a [generic class]:

    def wrapping_in_df(native: IntoDataFrameT) -> DataFrame[IntoDataFrameT]: ...
    def wrapping_in_lf(native: IntoLazyFrameT) -> LazyFrame[IntoLazyFrameT]: ...
    def wrapping_in_ser(native: IntoSeriesT) -> Series[IntoSeriesT]: ...

### (1) `Native<Thing>`
Minimal [`Protocol`]s that are [assignable to] *almost any* supported native type of that group:

    class NativeThing(Protocol):
        def something_common(self, *args: Any, **kwargs: Any) -> Any: ...

Note:
    This group is primarily a building block for more useful types.

### (2) `Into<Thing>`
*Publicly* exported [`TypeAlias`]s of **(1)**:

    IntoThing: TypeAlias = NativeThing

**But**, occasionally, there'll be an edge-case which we can spell like:

    IntoThing: TypeAlias = Union[<type that does not fit the protocol>, NativeThing]

Tip:
    Reach for these when there **isn't a need to preserve** the original native type.

### (3) `Into<Thing>T`
*Publicly* exported [`TypeVar`]s, bound to **(2)**:

    IntoThingT = TypeVar("IntoThingT", bound=IntoThing)

Important:
    In most situations, you'll want to use these as they **do preserve** the original native type.

Putting it all together, we can now add a *narwhals-level* wrapper:

    class Thing(Generic[IntoThingT]):
        def to_native(self) -> IntoThingT: ...

## Matching to an `Implementation`
This problem differs as we need to *create* a relationship between *otherwise-unrelated* types.

Comparing the problems side-by-side, we can more clearly see this difference:

    def wrapping_in_df(native: IntoDataFrameT) -> DataFrame[IntoDataFrameT]: ...
    def matching_to_polars(native: pl.DataFrame) -> Literal[Implementation.POLARS]: ...

### (4) `Native<Backend>`
If we want to describe a set of specific types and **match** them in [`@overload`s], then these the tools we need.

For common and easily-installed backends, [`TypeAlias`]s are composed of the native type(s):

    NativePolars: TypeAlias = pl.DataFrame | pl.LazyFrame | pl.Series

Otherwise, we need to define a [`Protocol`] which the native type(s) can **match** against *when* installed:

    class NativeDask(NativeLazyFrame, Protocol):
        _partition_type: type[pd.DataFrame]

Tip:
    The goal is to be as minimal as possible, while still being *specific-enough* to **not match** something else.

Important:
    See [ibis#9276 comment] for a more *in-depth* example that doesn't fit here ðŸ˜„

### (5) `is_native_<backend>`
[Type guards] for **(4)**, *similar* to those found in `nw.dependencies`.

They differ by checking **all** native types/protocols in a single-call and using ``Native<Backend>`` aliases.

[structural]: https://typing.python.org/en/latest/spec/glossary.html#term-structural
[nominal]: https://typing.python.org/en/latest/spec/glossary.html#term-nominal
[Native types]: https://narwhals-dev.github.io/narwhals/how_it_works/#polars-and-other-implementations
[Narwhals type]: https://narwhals-dev.github.io/narwhals/api-reference/dataframe/
[`Implementation`]: https://narwhals-dev.github.io/narwhals/api-reference/implementation/
[`Protocol`]: https://typing.python.org/en/latest/spec/protocol.html
[assignable to]: https://typing.python.org/en/latest/spec/glossary.html#term-assignable
[`TypeAlias`]: https://mypy.readthedocs.io/en/stable/kinds_of_types.html#type-aliases
[`TypeVar`]: https://mypy.readthedocs.io/en/stable/generics.html#type-variables-with-upper-bounds
[generic class]: https://docs.python.org/3/library/typing.html#user-defined-generic-types
[`@overload`s]: https://typing.python.org/en/latest/spec/overload.html
[ibis#9276 comment]: https://github.com/ibis-project/ibis/issues/9276#issuecomment-3292016818
[Type guards]: https://typing.python.org/en/latest/spec/narrowing.html
é    )ÚannotationsN)ÚCallableÚ
CollectionÚIterableÚSized)ÚTYPE_CHECKINGÚAnyÚProtocolÚTypeVarÚcast)ÚIMPORT_HOOKSÚget_cudfÚ	get_modinÚ
get_pandasÚ
get_polarsÚget_pyarrowÚis_dask_dataframeÚis_duckdb_relationÚis_ibis_tableÚis_pyspark_connect_dataframeÚis_pyspark_dataframeÚis_sqlframe_dataframe)Ú	TypeAlias)ÚBaseDataFrame)ÚSelfÚTypeIsÚTzCallable[[Any], TypeIs[T]]r   Ú_GuardÚ
Incomplete)+ÚIntoDataFrameÚIntoDataFrameTÚ	IntoFrameÚ
IntoFrameTÚIntoLazyFrameÚIntoLazyFrameTÚ
IntoSeriesÚIntoSeriesTÚ	NativeAnyÚNativeArrowÚ
NativeCuDFÚ
NativeDaskÚNativeDataFrameÚNativeDuckDBÚNativeFrameÚ
NativeIbisÚNativeKnownÚNativeLazyFrameÚNativeModinÚNativePandasÚNativePandasLikeÚNativePandasLikeDataFrameÚNativePandasLikeSeriesÚNativePolarsÚNativePySparkÚNativePySparkConnectÚNativeSQLFrameÚNativeSeriesÚNativeSparkLikeÚNativeUnknownÚis_native_arrowÚis_native_cudfÚis_native_daskÚis_native_duckdbÚis_native_ibisÚis_native_modinÚis_native_pandasÚis_native_pandas_likeÚis_native_polarsÚis_native_pysparkÚis_native_pyspark_connectÚis_native_spark_likeÚis_native_sqlframec                  ó.   — e Zd Zedd„¦   «         Zd	d„ZdS )
r.   Úreturnr	   c                ó   — d S ©N© ©Úselfs    úN/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/narwhals/_native.pyÚcolumnszNativeFrame.columnsÀ   s   € Ø!˜có    ÚargsÚkwargsc                ó   — d S rN   rO   ©rQ   rU   rV   s      rR   ÚjoinzNativeFrame.joinÂ   ó   € € € rT   N©rL   r	   ©rU   r	   rV   r	   rL   r	   )Ú__name__Ú
__module__Ú__qualname__ÚpropertyrS   rY   rO   rT   rR   r.   r.   ¿   s2   € € € € € ØØ!Ð!Ð!ñ „XØ!Ø9Ð9Ð9Ð9Ð9Ð9rT   r.   c                  ó   — e Zd Zdd„ZdS )r,   rU   r	   rV   rL   c                ó   — d S rN   rO   rX   s      rR   ÚdropzNativeDataFrame.dropÆ   rZ   rT   Nr\   )r]   r^   r_   rc   rO   rT   rR   r,   r,   Å   s   € € € € € Ø9Ð9Ð9Ð9Ð9Ð9rT   r,   c                  ó   — e Zd Zdd„ZdS )r1   rU   r	   rV   rL   c                ó   — d S rN   rO   rX   s      rR   ÚexplainzNativeLazyFrame.explainÊ   rZ   rT   Nr\   )r]   r^   r_   rf   rO   rT   rR   r1   r1   É   s   € € € € € Ø<Ð<Ð<Ð<Ð<Ð<rT   r1   c                  ó&   — e Zd Zd	d„Zd	d„Zd	d„ZdS )
r;   rU   r	   rV   rL   c                ó   — d S rN   rO   rX   s      rR   ÚfilterzNativeSeries.filterÎ   rZ   rT   c                ó   — d S rN   rO   rX   s      rR   Úvalue_countszNativeSeries.value_countsÏ   rZ   rT   c                ó   — d S rN   rO   rX   s      rR   ÚuniquezNativeSeries.uniqueÐ   rZ   rT   Nr\   )r]   r^   r_   ri   rk   rm   rO   rT   rR   r;   r;   Í   s4   € € € € € Ø;Ð;Ð;Ð;ØAÐAÐAÐAØ;Ð;Ð;Ð;Ð;Ð;rT   r;   c                  ó†   — e Zd ZU ded<   	 dd„Zdd	„Zdd
„Zedd„¦   «         Zedd„¦   «         Z	dddœd d„Z
d!d"d„Zd#d„ZdS )$Ú_BasePandasLiker	   ÚindexÚkeyrL   c               ó   — d S rN   rO   )rQ   rq   s     rR   Ú__getitem__z_BasePandasLike.__getitem__×   rZ   rT   Úotherú float | Collection[float] | Selfr   c               ó   — d S rN   rO   ©rQ   rt   s     rR   Ú__mul__z_BasePandasLike.__mul__Ø   rZ   rT   c               ó   — d S rN   rO   rw   s     rR   Ú__floordiv__z_BasePandasLike.__floordiv__Ù   rZ   rT   c                ó   — d S rN   rO   rP   s    rR   Úlocz_BasePandasLike.locÚ   s   € Ø˜#rT   útuple[int, ...]c                ó   — d S rN   rO   rP   s    rR   Úshapez_BasePandasLike.shapeÜ   s   € Ø(+¨rT   .)ÚaxisÚcopyÚlabelsr€   r�   Úboolc               ó   — d S rN   rO   )rQ   r‚   r€   r�   s       rR   Úset_axisz_BasePandasLike.set_axisÞ   rZ   rT   Údeepc                ó   — d S rN   rO   )rQ   r†   s     rR   r�   z_BasePandasLike.copyß   rZ   rT   rU   ÚkwdsúSelf | Incompletec                ó   — dS )z·`mypy` & `pyright` disagree on overloads.

        `Incomplete` used to fix [more important issue](https://github.com/narwhals-dev/narwhals/pull/3016#discussion_r2296139744).
        NrO   ©rQ   rU   rˆ   s      rR   Úrenamez_BasePandasLike.renameà   rZ   rT   N)rq   r	   rL   r	   )rt   ru   rL   r   r[   )rL   r}   )r‚   r	   r€   r	   r�   rƒ   rL   r   ©.)r†   rƒ   rL   r   )rU   r	   rˆ   r	   rL   r‰   )r]   r^   r_   Ú__annotations__rs   rx   rz   r`   r|   r   r…   r�   rŒ   rO   rT   rR   ro   ro   Ó   s¬   € € € € € € Ø€J€J�JØKà2Ð2Ð2Ð2ØNÐNÐNÐNØSÐSÐSÐSØØÐÐñ „XØØØ+Ð+Ð+ñ „XØ+Ø36ÀSÐVÐVÐVÐVÐVÐVØ1Ð1Ð1Ð1Ð1ðð ð ð ð ð rT   ro   c                  ó   — e Zd ZdS )Ú_BasePandasLikeFrameN)r]   r^   r_   rO   rT   rR   r�   r�   ç   s   € € € € € € € rT   r�   c                  ó6   — e Zd ZU ded<   	 	 	 	 ddd„Zddd„ZdS )Ú_BasePandasLikeSeriesú
Any | NoneÚnameNÚdataúIterable[Any] | Nonerp   ÚdtyperU   r	   rV   rL   ÚNonec                ó   — d S rN   rO   )rQ   r•   rp   r—   r”   rU   rV   s          rR   Ú__init__z_BasePandasLikeSeries.__init__í   s	   € ð ˆsrT   .Úcondrt   r‰   c               ó   — d S rN   rO   )rQ   r›   rt   s      rR   Úwherez_BasePandasLikeSeries.whereö   rZ   rT   )NNNN)r•   r–   rp   r–   r—   r“   r”   r“   rU   r	   rV   r	   rL   r˜   r�   )r›   r	   rt   r	   rL   r‰   )r]   r^   r_   rŽ   rš   r�   rO   rT   rR   r’   r’   ê   sW   € € € € € € ØÐÐÑð &*Ø&*Ø Øðð ð ð ð ð NÐMÐMÐMÐMÐMÐMrT   r’   c                  ó   — e Zd ZU ded<   dS )r+   útype[pd.DataFrame]Ú_partition_typeN©r]   r^   r_   rŽ   rO   rT   rR   r+   r+   ù   ó   € € € € € € Ø'Ð'Ð'Ñ'Ð'Ð'rT   r+   c                  ó   — e Zd Zdd„ZdS )Ú_CuDFDataFramerU   r	   rˆ   rL   c                ó   — d S rN   rO   r‹   s      rR   Úto_pylibcudfz_CuDFDataFrame.to_pylibcudfþ   rZ   rT   N©rU   r	   rˆ   r	   rL   r	   ©r]   r^   r_   r¦   rO   rT   rR   r¤   r¤   ý   ó   € € € € € Ø?Ð?Ð?Ð?Ð?Ð?rT   r¤   c                  ó   — e Zd Zdd„ZdS )Ú_CuDFSeriesrU   r	   rˆ   rL   c                ó   — d S rN   rO   r‹   s      rR   r¦   z_CuDFSeries.to_pylibcudf  rZ   rT   Nr§   r¨   rO   rT   rR   r«   r«     r©   rT   r«   c                  ó.   — e Zd Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )r/   rU   r	   rˆ   rL   c                ó   — d S rN   rO   r‹   s      rR   ÚsqlzNativeIbis.sql  rZ   rT   c                ó   — d S rN   rO   r‹   s      rR   Ú__pyarrow_result__zNativeIbis.__pyarrow_result__  rZ   rT   c                ó   — d S rN   rO   r‹   s      rR   Ú__pandas_result__zNativeIbis.__pandas_result__  rZ   rT   c                ó   — d S rN   rO   r‹   s      rR   Ú__polars_result__zNativeIbis.__polars_result__	  rZ   rT   Nr§   )r]   r^   r_   r¯   r±   r³   rµ   rO   rT   rR   r/   r/     s@   € € € € € Ø6Ð6Ð6Ð6ØEÐEÐEÐEØDÐDÐDÐDØDÐDÐDÐDÐDÐDrT   r/   c                  ó   — e Zd ZU ded<   dS )Ú_ModinDataFramerŸ   Ú_pandas_classNr¡   rO   rT   rR   r·   r·     s   € € € € € € Ø%Ð%Ð%Ñ%Ð%Ð%rT   r·   c                  ó   — e Zd ZU ded<   dS )Ú_ModinSeriesztype[pd.Series[Any]]r¸   Nr¡   rO   rT   rR   rº   rº     r¢   rT   rº   c                  ó   — e Zd Zdd„ZdS )Ú_PySparkDataFrameÚargr	   rV   rL   c                ó   — d S rN   rO   )rQ   r½   rV   s      rR   ÚdropDuplicatesWithinWatermarkz/_PySparkDataFrame.dropDuplicatesWithinWatermark  rZ   rT   N)r½   r	   rV   r	   rL   r	   )r]   r^   r_   r¿   rO   rT   rR   r¼   r¼     s   € € € € € ØQÐQÐQÐQÐQÐQrT   r¼   z'pl.DataFrame | pl.LazyFrame | pl.Seriesr7   zpa.Table | pa.ChunkedArray[Any]r)   zduckdb.DuckDBPyRelationr-   zpd.DataFrame | pd.Series[Any]r3   z_ModinDataFrame | _ModinSeriesr2   z_CuDFDataFrame | _CuDFSeriesr*   z+pd.Series[Any] | _CuDFSeries | _ModinSeriesr6   z/pd.DataFrame | _CuDFDataFrame | _ModinDataFramer5   z2NativePandasLikeDataFrame | NativePandasLikeSeriesr4   z'_BaseDataFrame[Any, Any, Any, Any, Any]r:   r8   r9   z5NativeSQLFrame | NativePySpark | NativePySparkConnectr<   zhNativePolars | NativeArrow | NativePandasLike | NativeSparkLike | NativeDuckDB | NativeDask | NativeIbisr0   z0NativeDataFrame | NativeSeries | NativeLazyFramer=   zNativeKnown | NativeUnknownr(   r    r$   r"   r&   r#   )Úboundr!   r%   r'   Úobjr	   rL   úTypeIs[NativePolars]c                ój   — t          ¦   «         x}d uo!t          | |j        |j        |j        f¦  «        S rN   )r   Ú
isinstanceÚ	DataFrameÚSeriesÚ	LazyFrame)rÁ   Úpls     rR   rF   rF   €  s;   € Ý‘,”,ÐˆB tÐ+ð µ
ØˆbŒl˜BœI r¤|Ð4ñ1ô 1ð rT   úTypeIs[NativeArrow]c                ó^   — t          ¦   «         x}d uot          | |j        |j        f¦  «        S rN   )r   rÄ   ÚTableÚChunkedArray)rÁ   Úpas     rR   r>   r>   †  s7   € Ý‘-”-ÐˆB¨Ð,ð µØˆbŒh˜œÐ(ñ2ô 2ð rT   z_Guard[NativeDask]z_Guard[NativeDuckDB]rA   z_Guard[NativeSQLFrame]rJ   z_Guard[NativePySpark]z_Guard[NativePySparkConnect]z_Guard[NativeIbis]úTypeIs[NativePandas]c                ó¤   ‡ ‡— t          ¦   «         x}d uot          ‰ |j        |j        f¦  «        p t	          ˆˆ fd„t
          D ¦   «         ¦  «        S )Nc              3  ó¬   •K  — | ]N}t           j                             |d ¦  «        xŠd uo%t          ‰‰j        j        ‰j        j        f¦  «        V — ŒOd S rN   )ÚsysÚmodulesÚgetrÄ   ÚpandasrÅ   rÆ   )Ú.0Úmodule_nameÚmodrÁ   s     €€rR   ú	<genexpr>z#is_native_pandas.<locals>.<genexpr>™  su   øè è € ð ð ð õ ”—’ ¨TÑ2Ô2Ð	2ˆ¸4Ð?ð 	GÝ�s˜SœZÔ1°3´:Ô3DÐEÑFÔFðð ð ð ð ð rT   )r   rÄ   rÅ   rÆ   Úanyr   )rÁ   Úpdr×   s   ` @rR   rD   rD   –  sq   øø€ å‰|Œ|Ð	ˆ DÐ(ÐW­Z¸¸b¼lÈBÌIÐ=VÑ-WÔ-Wðå	ð ð ð ð ð õ (ðñ ô ñ 
ô 
ðrT   úTypeIs[NativeModin]c                ó^   — t          ¦   «         x}d uot          | |j        |j        f¦  «        S rN   )r   rÄ   rÅ   rÆ   )rÁ   Úmpds     rR   rC   rC      s7   € Ý‘;”;ÐˆC tÐ+ð µ
ØˆcŒm˜SœZÐ(ñ1ô 1ð rT   úTypeIs[NativeCuDF]c                ó^   — t          ¦   «         x}d uot          | |j        |j        f¦  «        S rN   )r   rÄ   rÅ   rÆ   )rÁ   Úcudfs     rR   r?   r?   ¦  s7   € Ý‘J”JÐˆD tÐ+ð µ
ØˆdŒn˜dœkÐ*ñ1ô 1ð rT   úTypeIs[NativePandasLike]c                ó\   — t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S rN   )rD   r?   rC   ©rÁ   s    rR   rE   rE   ¬  s*   € Ý˜CÑ Ô ÐO¥N°3Ñ$7Ô$7ÐO½?È3Ñ;OÔ;OÐOrT   úTypeIs[NativeSparkLike]c                ó\   — t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S rN   )rJ   rG   rH   rã   s    rR   rI   rI   °  s2   € å˜3ÑÔð 	*Ý˜SÑ!Ô!ð	*å$ SÑ)Ô)ðrT   )rÁ   r	   rL   rÂ   )rÁ   r	   rL   rÉ   )rÁ   r	   rL   rÎ   )rÁ   r	   rL   rÛ   )rÁ   r	   rL   rÞ   )rÁ   r	   rL   rá   )rÁ   r	   rL   rä   )cÚ__doc__Ú
__future__r   rÑ   Úcollections.abcr   r   r   r   Útypingr   r	   r
   r   r   Únarwhals.dependenciesr   r   r   r   r   r   r   r   r   r   r   r   r   ÚduckdbrÔ   rÚ   ÚpolarsrÈ   ÚpyarrowrÍ   Úsqlframe.base.dataframer   Ú_BaseDataFrameÚtyping_extensionsr   r   ÚSQLFrameDataFramer   r   rŽ   r   Ú__all__r.   r,   r1   r;   ro   r�   r’   r+   r¤   r«   r/   r·   rº   r¼   r7   r)   r-   r3   r2   r*   r6   r5   r4   r:   r8   r9   r<   r0   r=   r(   r    r$   r"   r&   r#   r!   r%   r'   rF   r>   r@   rA   rJ   rG   rH   rB   rD   rC   r?   rE   rI   rO   rT   rR   ú<module>ró      sk  ððfð fð fðP #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ø Ð Ð Ð Ð Ð à€M€M€MØÐÐÐØÐÐÐØÐÐÐØGÐGÐGÐGÐGÐGØ.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à& s¨C°°c¸3Ð'>Ô?ÐØˆ�‰Œ€AØ4€FÐ4Ð4Ð4Ñ4Ø€JÐÐÐÑð,ð ,ð ,€ðd:ð :ð :ð :ð :�(ñ :ô :ð :ð:ð :ð :ð :ð :�e˜[¨(ñ :ô :ð :ð=ð =ð =ð =ð =�k 8ñ =ô =ð =ð<ð <ð <ð <ð <�5˜( 3œ-¨ñ <ô <ð <ðð ð ð ð �e˜Xñ ô ð ð( LÐ KÐ KÐ KÐ K˜?¨O¸XÑ KÔ KÐ KðNð Nð Nð Nð N˜L¨/¸8ñ Nô Nð Nð(ð (ð (ð (ð (� (ñ (ô (ð (ð@ð @ð @ð @ð @Ð)¨8ñ @ô @ð @ð@ð @ð @ð @ð @Ð'¨ñ @ô @ð @ðEð Eð Eð Eð E�˜hñ Eô Eð Eð&ð &ð &ð &ð &Ð*¨Hñ &ô &ð &ð(ð (ð (ð (ð (Ð(¨(ñ (ô (ð (ðRð Rð Rð Rð R˜¨ñ Rô Rð Rð D€Ð CÐ CÐ CÑ CØ:€Ð :Ð :Ð :Ñ :Ø3€Ð 3Ð 3Ð 3Ñ 3Ø9€Ð 9Ð 9Ð 9Ñ 9Ø9€Ð 9Ð 9Ð 9Ñ 9Ø6€
Ð 6Ð 6Ð 6Ñ 6Ø$QÐ Ð QÐ QÐ QÑ QØ'XÐ Ð XÐ XÐ XÑ XØRÐ Ð RÐ RÐ RÑ RØE€Ð EÐ EÐ EÑ EØ,€Ð ,Ð ,Ð ,Ñ ,Ø"3Ð Ð 3Ð 3Ð 3Ñ 3ØT€Ð TÐ TÐ TÑ Tð D€ð  Dð  Dð  Dñ  DØM€Ð MÐ MÐ MÑ MØ4€	Ð 4Ð 4Ð 4Ñ 4à*€Ð *Ð *Ð *Ñ *ð
ð +¨ZÑ7€Ð 7Ð 7Ð 7Ñ 7Ø$ }Ñ4€	Ð 4Ð 4Ð 4Ñ 4ðð %€
Ð $Ð $Ð $Ñ $ðð ˆW�\¨Ð3Ñ3Ô3€
ðð �Ð)°Ð?Ñ?Ô?€ðð �Ð)°Ð?Ñ?Ô?€Øˆg�m¨:Ð6Ñ6Ô6€ððð ð ð ðð ð ð ð �Ð*Ð,=Ñ>Ô>€Ø);Ð Ð ;Ð ;Ð ;Ñ ;Ø-BÐ Ð BÐ BÐ BÑ BØ�DÐ0Ð2FÑGÔGÐ Ø ˜DØ"Ð$@ñô Ð ð �Ð*¨MÑ:Ô:€ðð ð ð ðð ð ð ðð ð ð ðPð Pð Pð Pðð ð ð ð ð rT   