
    1hb              	          d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ dZ ej&                  dej(                        j*                  e_        d	Zed
z  Zed
z  Zedz  Zedz  Zedz  Zedz  Zedz  Zed
z  Zedz  Z dZ!ejD                  Z"ejF                  Z#ejH                  Z$ejJ                  Z%dejL                  z
  Z'dejL                  z
  Z(ejR                  Z)dZ*edz   Z+ejX                  Z,ejZ                  Z-ej\                  Z.ej^                  Z/dZ0e0dz  Z1e1dz  Z2e2dz  Z3 e4 e5d            Z6ejn                  Z7ejp                  Z8ejr                  Z9ejt                  Z:ejv                  Z;ejx                  Z<ejz                  Z=ej|                  Z>ej~                  Z?ej                  Z@ej                  ZAej                  ZBej                  ZCej                  ZDej                  ZEej                  ZFej                  ZGej                  ZHej                  ZI ej                         D ]  \  ZKZLZM eNd eOeMeLeK      z          [K[L[Mej                  ZPej                  ZQej                  ZRd ZSe3fdZT eU       ZVd ZWd ZXd ZYd ZZd  Z[d! Z\d" Z]d# Z^d$ Z_eYZ`eXZae]xZbZce\xZdZed% Zfd& Zgd' Zhd( Zi eR       Zjd) Zkd* Zld+ Zmd, Znd- Zod. Zpd/ Zqd0 Zrd1 Zs G d2 d3et      Zu G d4 d5eu      Zv G d6 d7eu      Zwd8 Zx G d9 d:ej                        Zy[xd; Zzd< Z G d= d>e      Z{ e{       Z|d? Z} G d@ dAe~      Z G dB dCe      Z G dD dEe      Z G dF dGe      Z G dH dIe      Ze/Ze,ZeZdJ adK ay)L    N)datetime)	timedelta)tzinfo)acoscosisnanpisin)	localtimez4.2z
    \s*:\s*         # A colon optionally surrounded by whitespace,
    |               # or,
    (?<!^)\s+(?!$)  # whitespace not at the start or end of the string.
g-DT!@g       @g      @g       @g     f@g      N@g     v@g   JxޱAg (lBAg}?56BAgV瞯ҼgV瞯<gUUUUUU?g      $@   zx
class %(name)s(_libastro.%(classname)s):
    "Create a Body instance representing %(name)s"
    __planet__ = %(index)r
)name	classnameindexc                 0    | t         z
  t        z  t         z
  S N)r	   tau)angles    3D:\jyotish\venv\Lib\site-packages\ephem/__init__.py_plusminus_pir   m   s    BJ#""    c                      | |       | |      }}|rLt        ||z
        |kD  r;||k7  r6||||z
  ||z  dz
  z  z   }}| | |      }}|rt        ||z
        |kD  r||k7  r6|S )zReturn an x-value at which the given function reaches zero.

    Stops and declares victory once the x-value is within ``precision``
    of the solution, which defaults to a half-second of clock time.

       )abs)fx0x1	precisionf0f1s         r   newtonr    r   sz     rUAbEB
R"W	)bBhR27r"uqy11BQrUB R"W	)bBh Ir   c                     d }t        |       } t        j                  |        |t        j                  |z   |z  z
  }t	        |      t
        k  r|}| d|z  t        z  z   }t        t        |||t        z               S )z=Function that assists the finding of equinoxes and solstices.c                 v    t         j                  |        t         j                  t        z   t        z  t        z
  S r   )_suncomputeraeighthpi	quarterpi)ds    r   r   zholiday.<locals>.f   s&    Q("i/(::r   g     v@)
Dater#   r$   r%   r   tinytwopidater    hour)d0motionoffsetr   angle_to_coverr(   s         r   holidayr2      st    ; 
bBLLtww/699N
>T!
Vn$u,,Aq!QX&''r   c                 &    t        | t         d      S )z/Return the date of the previous vernal equinox.r   r2   r+   r,   s    r   previous_vernal_equinoxr6      s    4%##r   c                 $    t        | t        d      S )z+Return the date of the next vernal equinox.r   r4   r5   s    r   next_vernal_equinoxr8      s    4""r   c                 <    t        | t         t        t        z         S )z0Return the date of the previous summer solstice.r2   r+   r	   halfpir5   s    r   previous_summer_solsticer<      s    4%f--r   c                 :    t        | t        t        t        z         S )z,Return the date of the next summer solstice.r:   r5   s    r   next_summer_solsticer>      s    4V,,r   c                 .    t        | t         t              S )z1Return the date of the previous autumnal equinox.r2   r+   r	   r5   s    r   previous_autumnal_equinoxrA      s    4%$$r   c                 ,    t        | t        t              S )z-Return the date of the next autumnal equinox.r@   r5   s    r   next_autumnal_equinoxrC      s    4##r   c                 .    t        | t         t              S )z0Return the date of the previous winter solstice.r2   r+   r;   r5   s    r   previous_winter_solsticerF      s    4%((r   c                 ,    t        | t        t              S )z,Return the date of the next winter solstice.rE   r5   s    r   next_winter_solsticerH      s    4''r   c                 &    t        | t         d      S )z(Return the date of the previous equinox.r   r2   r	   r5   s    r   previous_equinoxrK      s    4"a  r   c                 $    t        | t        d      S )z$Return the date of the next equinox.r   rJ   r5   s    r   next_equinoxrM      s    4Qr   c                 .    t        | t         t              S )z)Return the date of the previous solstice.r2   r	   r;   r5   s    r   previous_solsticerP      s    4"f%%r   c                 ,    t        | t        t              S )z%Return the date of the next solstice.rO   r5   s    r   next_solsticerR      s    4V$$r   c                     fd}|t         z   t        |       }  ||       }| |z  }t        |      t        k  r|}| d|z  t        z  z   }t        t        |||t        z               S )z1Function that assists the finding of moon phases.c                 \   t         j                  |        t        j                  |        t        j                  | t         j
                  t         j                        d   }t        j                  | t        j
                  t        j                        d   }||z
  z
  t        z  t        z
  S )Nr   )	r#   r$   _moon	_libastroeq_eclg_rag_decr+   r	   )r(   slonmlon
antitargets      r   r   z_find_moon_phase.<locals>.f   su    Qa499djj9!<5::u{{;A>tj(E1B66r   gHz=@)r	   r)   r   r*   r+   r,   r    r-   )r.   r/   targetr   r   r1   r(   r\   s          @r   _find_moon_phaser^      sn    7 "J	bB	
2Bdf_N
>T!
U^#e++Aq!QX&''r   c                 &    t        | t         d      S )z)Return the date of the previous New Moon.r   r^   r+   r5   s    r   previous_new_moonra      s    D5&!,,r   c                 $    t        | t        d      S )z%Return the date of the next New Moon.r   r`   r5   s    r   next_new_moonrc      s    D%++r   c                 .    t        | t         t              S )z3Return the date of the previous First Quarter Moon.r^   r+   r;   r5   s    r   previous_first_quarter_moonrf      s    D5&&11r   c                 ,    t        | t        t              S )z/Return the date of the next First Quarter Moon.re   r5   s    r   next_first_quarter_moonrh      s    D%00r   c                 .    t        | t         t              S )z*Return the date of the previous Full Moon.r^   r+   r	   r5   s    r   previous_full_moonrk      s    D5&"--r   c                 ,    t        | t        t              S )z&Return the date of the next Full Moon.rj   r5   s    r   next_full_moonrm      s    D%,,r   c                 <    t        | t         t        t        z         S )z2Return the date of the previous Last Quarter Moon.r^   r+   r	   r;   r5   s    r   previous_last_quarter_moonrp      s    D5&"v+66r   c                 :    t        | t        t        t        z         S )z.Return the date of the next Last Quarter Moon.ro   r5   s    r   next_last_quarter_moonrr      s    D%f55r   c                       e Zd Zy)CircumpolarErrorN__name__
__module____qualname__ r   r   rt   rt         r   rt   c                       e Zd Zy)NeverUpErrorNru   ry   r   r   r|   r|     rz   r   r|   c                       e Zd Zy)AlwaysUpErrorNru   ry   r   r   r~   r~     rz   r   r~   c                 L    | j                   | S | xj                   dz  c_         | S )Na  , returning its date.

    The search starts at the `date` of this `Observer` and is limited to
    the single circuit of the sky, from antitransit to antitransit, that
    the `body` was in the middle of describing at that date and time.
    If the body did not, in fact, cross the horizon in the direction you
    are asking about during that particular circuit, then the search
    must raise a `CircumpolarError` exception like `NeverUpError` or
    `AlwaysUpError` instead of returning a date.

    )__doc__)methods    r   describe_riset_searchr     s+    ~~
NN 
 
N Mr   c                       e Zd ZdZdgZej                  j                  Zd Z	e	Z
d Zd Zd ZddZdd	Zdd
ZddZddZddZddZddZd Zedd       Zedd       Zedd       Zedd       Zd Zd ZddZy)ObserveraM  A location on earth for which positions are to be computed.

    An `Observer` instance allows you to compute the positions of
    celestial bodies as seen from a particular latitude and longitude on
    the Earth's surface.  The constructor takes no parameters; instead,
    set its attributes once you have created it.  Defaults:

    `date` - the moment the `Observer` is created
    `lat` - zero latitude
    `lon` - zero longitude
    `elevation` - 0 meters above sea level
    `horizon` - 0 degrees
    `epoch` - J2000
    `temp` - 15 degrees Celsius
    `pressure` - 1010 mBar

    r   c                 6   | j                         }| j                  |_        | j                  |_        | j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_        | j                  |_        |S r   )		__class__r,   latlonelevhorizonepochtemppressure)selfos     r   copyzObserver.copy.  sk    NNLL	**]]
r   c                     dt        | j                        dt        | j                        d| j                  d| j                  d| j
                  d| j                  d| j                  d| j                  d	S )
z8Return a useful textual representation of this Observer.z<ephem.Observer date=z epoch=z lon='z' lat='z' elevation=z
m horizon=z temp=zC pressure=zmBar>)	strr,   r   r   r   	elevationr   r   r   r   s    r   __repr__zObserver.__repr__<  sI    
 tyy>3tzz?88TXXt~~<<DMM; 	<r   c                 D    ddd| j                   z  dz  z
  dz  z  | _        y)z7Set the atmospheric pressure for the current elevation.g     @r   g9vz?gfffffr@gpoIc@N)r   r   r   s    r   compute_pressurezObserver.compute_pressureE  s-     !A(?&(H$H.$/ /r   c                    
 t        t              rt        d       
fd}|| _         j                  
j                           
       j                  z
  }|z
  |t        z  z  }t        |      t        k  r	|t        z  } j                  |t        z  z   }t        t        |||t        z               }	|	S )z+Internal function used to compute transits.zthe next and previous transit methods do not support earth satellites because of their speed; please use the higher-resolution next_pass() methodc                     | _         j                         t                z
  j                  z         j                  S r   )r,   r$   degreesrX   znorm)r(   bodyr0   r   sidereal_times    r   r   z$Observer._compute_transit.<locals>.fU  s7    DILL6MO3dii?@FFFr   )
isinstanceEarthSatellite	TypeErrorr,   r   r$   rX   r+   r   r*   r)   r    minute)r   r   startsignr0   r   ha
ha_to_mover(   resultr   s   ``  `     @r   _compute_transitzObserver._compute_transitK  s     dN+G 	G
 DI**T_tyy(rkdUl3
z?T!JII
U**fQ1v:./r   Nc                 *    | j                  ||dd      S )8Find the previous passage of a body across the meridian.              r   r   r   r   s      r   _previous_transitzObserver._previous_transitf       $$T5#r::r   c                 *    | j                  ||dd      S )4Find the next passage of a body across the meridian.      ?r   r   r   s      r   _next_transitzObserver._next_transitk  r   r   c                 2    | j                  ||dt              S )=Find the previous passage of a body across the anti-meridian.r   r   r	   r   s      r   _previous_antitransitzObserver._previous_antitransitp       $$T5#r::r   c                 2    | j                  ||dt              S )9Find the next passage of a body across the anti-meridian.r   r   r   s      r   _next_antitransitzObserver._next_antitransitu  r   r   c                 P    | j                   }| j                  ||      }|| _         |S )r   )r,   r   r   r   r   original_dater(   s        r   previous_transitzObserver.previous_transitz  +     		""4/!	r   c                 P    | j                   }| j                  ||      }|| _         |S )r   )r,   r   r   s        r   next_transitzObserver.next_transit  s+     		tU+!	r   c                 P    | j                   }| j                  ||      }|| _         |S )r   )r,   r   r   s        r   previous_antitransitzObserver.previous_antitransit  s+     		&&tU3!	r   c                 P    | j                   }| j                  ||      }|| _         |S )r   )r,   r   r   s        r   next_antitransitzObserver.next_antitransit  r   r   c                     t        | j                  |z
        t        k\  rt        d|d| j                        t        | j                  |z         t        k\  rt	        d|d| j                        y)a  Raise an exception if the given declination is circumpolar.

        Raises NeverUpError if an object at the given declination is
        always below this Observer's horizon, or AlwaysUpError if such
        an object would always be above the horizon.

        zThe declination z+ never rises above the horizon at latitude z) is always above the horizon at latitude N)r   r   r;   r|   r~   )r   declinations     r   disallow_circumpolarzObserver.disallow_circumpolar  sm     txx+%&&0"-txx 9 : : txx+%&&0#.!: ; ; 1r   c                 ,    | j                  |||dd      S )z+Search for the given body's previous risingT_find_rise_or_setr   r   r   
use_centers       r   previous_risingzObserver.previous_rising       %%dE:r4HHr   c                 ,    | j                  |||dd      S )z,Search for the given body's previous settingr   Fr   r   s       r   previous_settingzObserver.previous_setting       %%dE:r5IIr   c                 ,    | j                  |||dd      S )z'Search for the given body's next risingr   Tr   r   s       r   next_risingzObserver.next_rising  r   r   c                 ,    | j                  |||dd      S )z(Search for the given body's next settingr   Fr   r   s       r   next_settingzObserver.next_setting  r   r   c                 L   t        |t              rt        d      | j                  }| j                  }	 d| _        ||| _        d }t
        D ]  }	t        | j                        rt        d      |j                  |        | j                  }
|s|
|j                  z  }
|rt        || j                  |
      }
| j                  ||
      }|r| }n|}|j                  }||z
  }|8|t        z  }|dk  r	|t        z  }|t        z  }t!        |      t"        k  r||z  }nt%        |      }|t        z  }t!        |      t"        k  r n| xj                  |z  c_        |} t&        k(  r$t)        |j*                  d| j                        |t,        k(  r$t/        |j*                  d| j                        | j                  | j                  |k7  r|| _        |j                  |        || _        S # | j                  |k7  r|| _        |j                  |        || _        w xY w)Nzthe rising and settings methods do not support earth satellites because of their speed; please use the higher-resolution next_pass() methodr   z7cannot find a next rising or setting if the date is NaNr   z is above the horizon at z is below the horizon at )r   r   r   r   r,   rise_set_iterationsr   
ValueErrorr$   r   radius	unrefractr   _target_hour_angler   r   r   default_newton_precisionr   _slightly_more_than_pir~   r   _slightly_less_than_zeror|   )r   r   r   r   	direction	do_risingoriginal_pressurer   prev_ha_r   abs_target_ha	target_har   
differencebumps                   r   r   zObserver._find_rise_or_set  s   dN+G  !MM		3	&DM !	G((#$ &; < <T",,!t{{*G$'(9499gNG $ 7 7g F"/I -IWW&^
?#%J 1}"c)
%+D4y#;;	)!.z!:J%+Dt977		T!	? )B  66#'+yy$))%= > >  88"&*ii$< = = 99}} 11 1T"%DI }} 11 1T"%DIs   FG3 30H#c                     | j                   }|j                  }t        |      t        |      t        |      z  z
  t        |      t        |      z  z  }|dk  rt        S |dkD  rt
        S t        |      S )Nr   r   )r   decr
   r   r   r   r   )r   r   altr   r   args         r   r   zObserver._target_hour_angle  se    hhhh3x#c(SX--#c(SX2EF:))3Y++Cyr   c                 v   t        |t              st        d      t        j                  | |      }|rd|v s|d   |d   k\  r|S | j                         }|d   t        d|d   |d   z
  dz        z
  |_        t        j                  ||      }|d   |d   cxk  r	|d   k  r|S  t        d      t        d      )a  Return the next rising, culmination, and setting of a satellite.

        If singlepass is True, return next consecutive set of
        ``(rising, culmination, setting)``.

        If singlepass is False, return
        ``(next_rising, next_culmination, next_setting)``.

        z^the next_pass() method is only for use with EarthSatellite objects because of their high speedN   r   gllF?   z?this software is having trouble with those satellite parameters)	r   r   r   rV   
_next_passr   minr,   r   )r   r   
singlepassr   obscopys        r   	next_passzObserver.next_pass
  s     $/F 
 %%dD1FN1I*M))+ ay3x#AY2A5$7 7%%gt4!9q	.VAY.M /Z[[jZ[[r   r   )NF)T)rv   rw   rx   r   	__slots__rV   r   r   r   r   __copy__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   r   r   r   r     s    " 
I''D
 H<06;
;
;
;
;" I I J J I I J J=&~
\r   r   c                 `    t        t        d| z              }t        |d      \  }}|dz  }||fS )z$Converts a PyEphem date into secondsl    `;P i@B l   @'V )introunddivmod)r,   microsecondssecondss      r   $_convert_to_seconds_and_microsecondsr   0  s=    u3d:;<L"<9G\zGL  r   c           	      j    t        |       \  }}t        |      \	  }}}}}}}	}
}t        |||||||      S )zJConvert a PyEphem date into naive local time, returning a Python datetime.)r   
_localtime	_datetime)r,   r   r   ymr(   HMSwdayydayisdsts               r   r   r   8  sE    @FG\*4W*='Aq!Q1dD%Q1aA|44r   c                   .    e Zd Z ed      Zd Zd Zd Zy)_UTCr   c                     | j                   S r   ZEROr   dts     r   	utcoffsetz_UTC.utcoffsetA      yyr   c                     | j                   S r   r  r  s     r   dstz_UTC.dstC  r  r   c                      y)Nz<ephem.UTC>ry   r   s    r   r   z_UTC.__repr__E  s    r   N)rv   rw   rx   
_timedeltar  r  r  r   ry   r   r   r  r  ?  s    a=Dr   r  c                 r    t        |       \  }}t        j                  ||      } | j                  |      } | S )zM"Convert a PyEphem date into a timezone aware Python datetime representation.)microsecond)r   r  fromtimestampreplace)r,   r   r   r   s       r   to_timezoner  L  s8    @FG\""7F3D<<L<1DKr   c                       e Zd Zd Zy)
Coordinatec                    |j                  dd       }|t        |      x| _        }|r!t        dt	        |       j
                  z        t        |      dk(  r/|d   }t        |t              r,t        |j                  |j                  |j                        }t        t        t        fD ]  }t        ||      s||j                  x| _        }t        | |      r.||j                  k(  r | j                  |j!                            y |j#                         \  }}||j                  k7  r%t%        j&                  |j                  |||      \  }}| j)                  ||        y  t        dt	        |      j
                  fz        t        |      dk(  r) | j                  |  |t        t*              x| _        }y y t        dt	        |       j
                  d	|      )
Nr   zH"epoch" is the only keyword argument you can use during %s instantiationr   r   )r   zZa single argument used to initialize %s() must be either a coordinate or a Body, not an %rr   zto initialize zU you must pass either a Body, another coordinate, or two coordinate values, but not: )popr)   r   r   typerv   lenr   Body
Equatoriala_raa_deca_epochEclipticGalacticsetgetto_radecrV   precess
from_radecJ2000)r   argskwr   aclsr%   r   s           r   __init__zCoordinate.__init__V  s    w%!%e,DJ C#Dz224 5 5 t9>QA!T"qvvqww		B"Hh7a%
 }-.WW4
U "$,!''1A !%%'*  jjlGB'"+"3"3GGUB#C OOB,3 86 58<Q8H8H7JK  Y!^DHHdO}%)%[0
U   #'t*"5"5t> r   N)rv   rw   rx   r4  ry   r   r   r  r  U  s    @r   r  c                   $    e Zd ZdZd Zd ZeZeZy)r$  z@An equatorial sky coordinate in right ascension and declination.c                 2    | j                   | j                  fS r   )r%   r   r   s    r   r+  zEquatorial.get  s    ww  r   c                 F    t        |      t        |      c| _        | _        y r   )hoursr   r%   r   r   r%   r   s      r   r*  zEquatorial.set  s    !"Iws|r   N)rv   rw   rx   r   r+  r*  r,  r.  ry   r   r   r$  r$    s    J!4 HJr   r$  c                   P    e Zd ZdZd Zd Zed        Zej                  d        Zy)LonLatCoordinatez<A coordinate that is measured with a longitude and latitude.c                 F    t        |      t        |      c| _        | _        y r   )r   r   r   )r   r   r   s      r   r*  zLonLatCoordinate.set  s    $S\73<$(r   c                 2    | j                   | j                  fS r   )r   r   r   s    r   r+  zLonLatCoordinate.get  s    xx!!r   c                     | j                   S r   r   r   s    r   longzLonLatCoordinate.long  s    xxr   c                     || _         y r   r?  )r   values     r   r@  zLonLatCoordinate.long  s	    r   N)	rv   rw   rx   r   r*  r+  propertyr@  setterry   r   r   r;  r;    s;    F8"   
[[ r   r;  c                       e Zd ZdZd Zd Zy)r(  z#An ecliptic latitude and longitude.c                 l    t        j                  | j                  | j                  | j                        S r   )rV   ecl_eqr   r   r   r   s    r   r,  zEcliptic.to_radec  #    

DHHdhh??r   c                 `    t        j                  | j                  ||      \  | _        | _        y r   )rV   rW   r   r   r   r9  s      r   r.  zEcliptic.from_radec  #    &--djj"cB$(r   Nrv   rw   rx   r   r,  r.  ry   r   r   r(  r(    s    -@Cr   r(  c                       e Zd ZdZd Zd Zy)r)  z"A galactic latitude and longitude.c                 l    t        j                  | j                  | j                  | j                        S r   )rV   gal_eqr   r   r   r   s    r   r,  zGalactic.to_radec  rH  r   c                 `    t        j                  | j                  ||      \  | _        | _        y r   )rV   eq_galr   r   r   r9  s      r   r.  zGalactic.from_radec  rJ  r   NrK  ry   r   r   r)  r)    s    ,@Cr   r)  c                 T    ddl }|j                  j                  at        | g|i |S )z*Load the stars database and return a star.r   N)ephem.starsstarsstar)r   r0  kwargsephems       r   rT  rT    s+     ;;D&t&v&&r   c                 L    ddl }|j                  j                  at        |       S )z+Load the cities database and return a city.r   N)ephem.citiescitiescity)r   rV  s     r   rZ  rZ    s      <<D:r   )ephem._libastrorV   rer   r  r   r  r   _tzinfomathr   r   r   r	   r
   timer   r  __version__compileXsplit_scansexa_splitr   r+   r;   r'   r&   degree	arcminute	arcsecondhalf_arcsecondr*   cmeters_per_auearth_radiusmoon_radius
sun_radiusMJD0B1900B1950r/  r   r   Angler   r8  r)   r-   r   secondr   tupleranger   delta_tjulian_dater#  Planet
PlanetMoon	FixedBodyEllipticalBodyParabolicBodyHyperbolicBodyr   readdbreadtleconstellation
separationr   nowmillennium_atlasuranometriauranometria2000builtin_planetsr   r   r   execdictJupiterSaturnMoonr   r    Sunr#   r2   r6   r8   r<   r>   rA   rC   rF   rH   next_spring_equinoxprevious_spring_equinoxnext_fall_equinoxnext_autumn_equinoxprevious_fall_equinoxprevious_autumn_equinoxrK   rM   rP   rR   rU   r^   ra   rc   rf   rh   rk   rm   rp   rr   r   rt   r|   r~   r   r   r   r  UTCr  objectr  r$  r;  r(  r)  r,   r   LongLatCoordinaterT  rZ  ry   r   r   <module>r     s  
 $ 	 * , & * * (
 'BJJ ( TT	 5	 
  !
R	bG	7	dSL	O	R4''%%##!!
y~~%y~~%! e  	


~~		#!C< E!Ho 


##~~			!!
	))''))))			


''!!
	mm-- ##++
 8i779E9d 
 	7	
8 9 : 
9d
 

			~~#
 !9  u($#.-%$)( * 1 *? ? '2K K /! &% 	($-,21.-76 )z ( *# * +$ +"P\y!! P\f !57  fA AF
 
z "C CC C $ 'r   