
    >h]                    f   S SK Jr  S SKJr  S SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJrJrJrJr  / SQrS#S jrS$S jrS%S jr   S&         S'S jjr  S(S jr!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S  r0S! r1S)S" jr2g)*    )annotations)lrangeN)	DataFrame)offsets)	to_offset)Literal)_is_recarray_is_using_pandas)ValueWarning)NDArray)
array_like	bool_likeint_likestring_like)lagmat	lagmat2ds	add_trendduplication_matrixelimination_matrixcommutation_matrixvecvechunvecunvechfreq_to_periodc                L   [        US5      n[        USSS9n[        USSS9n/ SQnUS:X  a  U R                  5       $ US	:X  a  US
S nSnO'US:X  d  US:X  a  US
S nUS:X  a  USS nSnOUS:X  a  Sn[        U 5      (       a  SSKJn  [        U5      e[        U S
5      nU(       aG  [        U [        R                  5      (       a  [        R                  " U 5      n O'U R                  5       n O[        R                  " U 5      n [        U 5      n[        R                  " [        R                   " SUS-   [        R"                  S9WS-   5      n	[        R$                  " U	5      n	US:X  a	  U	S
S
2S4   n	S	U;   Ga6  U(       a  S n
U R'                  U
S5      nO:[        R(                  " [        R                  " U 5      SS9nUS:H  nXS   S:g  -  nUn[        R*                  " U5      (       a  US:X  a  U R,                  S:X  a  SnO[        R                   " U R.                  S   5      U   n[        U [        R                  5      (       a  U R0                  nSR3                  U Vs/ s H  n[5        U5      PM     sn5      nSU S3nU SU S3n[7        U5      eUS:X  a  USS
 nU	S
S
2SS
24   n	U(       a  SOSnU(       a?  [        R                  " XR8                  US9n	X/n [        R:                  " U S
S
U2   SS9n U $ X/n [        R<                  " U S
S
U2   5      n U $ s  snf )aT  
Add a trend and/or constant to an array.

Parameters
----------
x : array_like
    Original array of data.
trend : str {'n', 'c', 't', 'ct', 'ctt'}
    The trend to add.

    * 'n' add no trend.
    * 'c' add constant only.
    * 't' add trend only.
    * 'ct' add constant and linear trend.
    * 'ctt' add constant and linear and quadratic trend.
prepend : bool
    If True, prepends the new data to the columns of X.
has_constant : str {'raise', 'add', 'skip'}
    Controls what happens when trend is 'c' and a constant column already
    exists in x. 'raise' will raise an error. 'add' will add a column of
    1s. 'skip' will return the data without change. 'skip' is the default.

Returns
-------
array_like
    The original data with the additional trend columns.  If x is a
    pandas Series or DataFrame, then the trend column names are 'const',
    'trend' and 'trend_squared'.

See Also
--------
statsmodels.tools.tools.add_constant
    Add a constant column to an array.

Notes
-----
Returns columns as ['ctt','ct','c'] whenever applicable. There is currently
no checking for an existing trend.
prependtrend)nctctcttoptionshas_constant)raiseaddskip)constr   trend_squaredr   r    N   r   r"   r!      r#   )recarray_exception)dtypec                     [         R                  " U 5      S:H  =(       a    [         R                  " U S:g  5      $ !    g= f)Ng        F)npptpany)ss    kC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\statsmodels/tsa/tsatools.pysafe_is_const add_trend.<locals>.safe_is_const~   s6    !66!9+@qCx0@@! s   8; ?axisr'   zx is constant.z, z3x contains one or more constant columns. Column(s) z are constant.z Adding a constant with trend='z' is not allowed.r)   indexcolumns)r   r   copyr	   statsmodels.tools.sm_exceptionsr.   NotImplementedErrorr
   
isinstancepdSeriesr   r1   
asanyarraylenvanderarangefloat64fliplrapplyr2   r3   ndimshaper=   joinstr
ValueErrorr<   concatcolumn_stack)xr   r   r&   r=   
trendorderr.   	is_pandasnobstrendarrr6   	col_constptp0col_is_constnz_constbase_errr    
const_colsmsgorders                       r5   r   r   '   s   P +Gw0LMEn.FL
 2G|vvx	#"1+
	$%3,"1+C<alG
	%
AF!"455 D)Ia##QAAMM!q6Dyy
		!TAXRZZ0*q.H yy"H|AqD>
e|! q1I66"--*3D19L#tqy1H I66)w&66Q;/H ii
3I>G!!R\\22"#))!%G+DGqCFG+D!EJM%,n6  "
"A%HYZ o%'!!"+#AqrE?AbE<<IMIIa%jq)
 H MOOAggJ'H) ,Es   $L!c                   [        US5      n[        US5      n[        U SSS9n Uc  SnUS:  a  U R                  S   U-   nU R                  S:X  a	  U SS2S4   n U SS2U4   nUS	L a  US-   nOnUS
L a  U R                  S   nOYUS:  a  U R                  S   U-   S-   nX@R                  S   :  a*  U R                  S   n[
        R                  " S[        5        Un[        XRSS9n[        U5      n[        X`R                  S   5      n	U(       aF  X;   a!  UR                  UR                  U5      5        O U	R                  U	R                  U5      5        [        R                  " XS2U4   XpUS2U	4   45      $ )a  
Returns an array with lags included given an array.

Parameters
----------
x : array_like
    An array or NumPy ndarray subclass. Can be either a 1d or 2d array with
    observations in columns.
col : int or None
    `col` can be an int of the zero-based column index. If it's a
    1d array `col` can be None.
lags : int
    The number of lags desired.
drop : bool
    Whether to keep the contemporaneous variable for the data.
insert : bool or int
    If True, inserts the lagged values after `col`. If False, appends
    the data. If int inserts the lags at int.

Returns
-------
array : ndarray
    Array with lags

Examples
--------

>>> import statsmodels.api as sm
>>> data = sm.datasets.macrodata.load()
>>> data = data.data[['year','quarter','realgdp','cpi']]
>>> data = sm.tsa.add_lag(data, 'realgdp', lags=2)

Notes
-----
Trims the array both forward and backward, so that the array returned
so that the length of the returned array is len(`X`) - lags. The lags are
returned in increasing order, ie., t-1,t-2,...,t-lags
lagsdroprR   r-   )rK   Nr   r,   TFz<insert > number of variables, inserting at the last positionBoth)trim)r   r   r   rL   rK   warningswarnr   r   r   popr<   r1   rQ   )
rR   colr`   ra   insertcontempins_idxndlags
first_cols	last_colss
             r5   add_lagrn      ss   N D&!DT6"D1c"A
{ Qwggaj3vv{agJ3iG~'	5''!*A:WWQZ&(1,FGGAJWWQZFMM!
 G/FJw
+INN:++C01MM)//#./??AeZ/0&DE9<L:MNOO    c                `   [        US5      n[        US5      nU R                  S:X  a  [        U5      S:X  a  U R                  n OU R                  S:  a  [	        S5      eU R
                  S   nUS:X  a  X R                  SS9-
  nO|[        R                  " [        R                  " [        U5      5      US-   S9n[        R                  R                  U5      R                  U 5      nU [        R                  " XV5      -
  nU R                  S:X  a  [        U5      S:X  a  UR                  nU$ )	aP  
Detrend an array with a trend of given order along axis 0 or 1.

Parameters
----------
x : array_like, 1d or 2d
    Data, if 2d, then each row or column is independently detrended with
    the same trendorder, but independent trend estimates.
order : int
    The polynomial order of the trend, zero is constant, one is
    linear trend, two is quadratic trend.
axis : int
    Axis can be either 0, observations by rows, or 1, observations by
    columns.

Returns
-------
ndarray
    The detrended series is the residual of the linear regression of the
    data on the trend of given order.
r^   r9   r-   r,   z0x.ndim > 2 is not implemented until it is neededr   r8   )N)r   rK   intTr@   rL   meanr1   rF   rG   floatlinalgpinvdot)rR   r^   r9   rU   residtrendsbetas          r5   detrendr|      s    , UG$ED&!Dvv{s4yA~CC	
!!>
 	
 771:DzFFFN"299U4[1UQY?yy~~f%))!,BFF6((vv{s4yA~Lro   c           	     N   [        US5      n[        US5      n[        USSSS9n[        USSS	9nU n[        U S
SSS9n [	        US5      =(       a    UnUc  SOUnUR                  5       nU(       a  US;   a  [        S5      eSnU R                  u  pUS;   a  U	nX:  a  [        S5      e[        R                  " X-   XS-   -  45      n
[        S[        US-   5      5       H"  nU U
X-
  X-   U-
  2XU-
  -  XU-
  S-   -  24'   M$     US;   a  SnOUS;   a  UnO[        S5      eUS;   a  [        U
5      nOUnU(       Ga2  Un [        U [        5      (       aV  U R                   Vs/ s H  n[!        U5      PM     nn[        [#        U5      5      U R                  S   :w  a  [        S5      eO[!        U R$                  5      /nU Vs/ s H  n[!        U5      PM     nn[        U5       HB  n[!        US-   5      nUR'                  U Vs/ s H  n[!        U5      S-   U-   PM     sn5        MD     [        U
SU U R(                  US9n
U
R*                  US nUS;   a  UU   nUR-                  USS9nOXU2US24   nUS:X  a
  XU2SU24   nUS:X  a  UW4$ U$ s  snf s  snf s  snf )aH  
Create 2d array of lags.

Parameters
----------
x : array_like
    Data; if 2d, observation in rows and variables in columns.
maxlag : int
    All lags from zero to maxlag are included.
trim : {'forward', 'backward', 'both', 'none', None}
    The trimming method to use.

    * 'forward' : trim invalid observations in front.
    * 'backward' : trim invalid initial observations.
    * 'both' : trim invalid observations on both sides.
    * 'none', None : no trimming of observations.
original : {'ex','sep','in'}
    How the original is treated.

    * 'ex' : drops the original array returning only the lagged values.
    * 'in' : returns the original array and the lagged values as a single
      array.
    * 'sep' : returns a tuple (original array, lagged values). The original
              array is truncated to have the same number of rows as
              the returned lagmat.
use_pandas : bool
    If true, returns a DataFrame when the input is a pandas
    Series or DataFrame.  If false, return numpy ndarrays.

Returns
-------
lagmat : ndarray
    The array with lagged observations.
y : ndarray, optional
    Only returned if original == 'sep'.

Notes
-----
When using a pandas DataFrame or Series with use_pandas=True, trim can only
be 'forward' or 'both' since it is not possible to consistently extend
index values.

Examples
--------
>>> from statsmodels.tsa.tsatools import lagmat
>>> import numpy as np
>>> X = np.arange(1,7).reshape(-1,2)
>>> lagmat(X, maxlag=2, trim="forward", original='in')
array([[ 1.,  2.,  0.,  0.,  0.,  0.],
   [ 3.,  4.,  1.,  2.,  0.,  0.],
   [ 5.,  6.,  3.,  4.,  1.,  2.]])

>>> lagmat(X, maxlag=2, trim="backward", original='in')
array([[ 5.,  6.,  3.,  4.,  1.,  2.],
   [ 0.,  0.,  5.,  6.,  3.,  4.],
   [ 0.,  0.,  0.,  0.,  5.,  6.]])

>>> lagmat(X, maxlag=2, trim="both", original='in')
array([[ 5.,  6.,  3.,  4.,  1.,  2.]])

>>> lagmat(X, maxlag=2, trim="none", original='in')
array([[ 1.,  2.,  0.,  0.,  0.,  0.],
   [ 3.,  4.,  1.,  2.,  0.,  0.],
   [ 5.,  6.,  3.,  4.,  1.,  2.],
   [ 0.,  0.,  5.,  6.,  3.,  4.],
   [ 0.,  0.,  0.,  0.,  5.,  6.]])
maxlag
use_pandasrc   Tforwardbackwardbothnoneoptionalr%   original)exsepinr$   rR   r-   N)rK   r/   r   )r   r   zEtrim cannot be 'none' or 'backward' when used on Series or DataFramesr   )r   r   zmaxlag should be < nobsr,   )r   r   )r   r   ztrim option not validzSColumns names must be distinct after conversion to string (if not already strings).z.L.r;   )r   r   r8   r   )r   r   r   r   r
   lowerrO   rL   r1   zerosrangerr   rE   rA   r   r=   rN   setnameextendr<   ilocra   )rR   r~   rc   r   r   origrT   dropidxrU   nvarlmkstartobsstopobsr    	x_columnsrg   r=   laglag_strr`   leadss                         r5   r   r   )  s   R fh'F:|4J7	D 8Z9LMH D1c.A t,;I\6tD::<DT11#
 	

 GJD= ~233	4=$1*"56	7B1c&1*o&  	
DMA%%
TaZ!^44	6	
 ' ""	%	%011##b'a##)*3AQI33y>"aggaj0 0  1 QVVI'01y3s8y1=C#'lGNN)L)3CHu,w6)LM ! r(7|177GDwwxy!}$OE99YQ9/D7"GH,-u''12E5U{3 4 2 Ms   %JJ	J"
c           
        [        US5      n[        USSS9n[        USSSS9nUc  Un[        X5      n[        U S5      nU R                  S	:X  a(  U(       a  [
        R                  " U 5      n O5U SS2S4   n O+U R                  S
:X  d  U R                  S:  a  [        S5      eU R                  u  pU(       a  U(       a  [        U R                  SS2S
4   XdSSS9n
U
R                  SS2SUS	-   24   /n[        S	U	5       HF  n[        U R                  SS2U4   XdSSS9n
UR                  U
R                  SS2X2S	-   24   5        MH     [
        R                  " US	S9$ U(       a  [        R                  " U 5      n [        U SS2S
4   XdSS9SS2SUS	-   24   /n[        S	U	5       H/  nUR                  [        U SS2U4   XdSS9SS2X2S	-   24   5        M1     [        R                   " U5      $ )a1  
Generate lagmatrix for 2d array, columns arranged by variables.

Parameters
----------
x : array_like
    Data, 2d. Observations in rows and variables in columns.
maxlag0 : int
    The first variable all lags from zero to maxlag are included.
maxlagex : {None, int}
    The max lag for all other variables all lags from zero to maxlag are
    included.
dropex : int
    Exclude first dropex lags from other variables. For all variables,
    except the first, lags from dropex to maxlagex are included.
trim : str
    The trimming method to use.

    * 'forward' : trim invalid observations in front.
    * 'backward' : trim invalid initial observations.
    * 'both' : trim invalid observations on both sides.
    * 'none' : no trimming of observations.
use_pandas : bool
    If true, returns a DataFrame when the input is a pandas
    Series or DataFrame.  If false, return numpy ndarrays.

Returns
-------
ndarray
    The array with lagged observations, columns ordered by variable.

Notes
-----
Inefficient implementation for unequal lags, implemented for convenience.
maxlag0maxlagexT)r   rc   r   r   Nr,   r   r-   z'Only supports 1 and 2-dimensional data.r   )rc   r   r   r8   )rc   r   )r   r   maxr
   rK   rB   r   rO   rL   r   r   r   appendrP   r1   rD   rQ   )rR   r   r   dropexrc   r   r~   rT   rU   r   r`   lagslir   s                r5   r   r     s   L w	*G*t<H7	D #F D)Ivv{QA!T'
A	
1
BCCJDZFF1a4L&dt
 ))A}1},-.q$Aq!tf$4D MM$))Av1'<$<=>	  
 yya((	MM! 	qAwD9!]w{]:JKF 1d^1QT7F=6qL((	
  ??6""ro   c                $    U R                  S5      $ )NF)ravelmats    r5   r   r     s    99S>ro   c                \    U R                   R                  [        [        U 5      5      5      $ N)rs   take_triu_indicesrE   r   s    r5   r   r     s    55::mCH-..ro   c                @    [         R                  " U 5      u  pX-  U-   $ r   )r1   tril_indicesr   rowscolss      r5   _tril_indicesr   #      #JD8d?ro   c                @    [         R                  " U 5      u  pX-  U-   $ r   )r1   triu_indicesr   s      r5   r   r   (  r   ro   c                @    [         R                  " U 5      u  pX-  U-   $ r   )r1   diag_indicesr   s      r5   _diag_indicesr   -  r   ro   c                    [        [        R                  " [        U 5      5      5      nX-  [        U 5      :X  d   eU R	                  X4SS9$ )Nr   r^   )rr   r1   sqrtrE   reshape)vr   s     r5   r   r   2  s?    BGGCFOA5CF??99aV39''ro   c           	     V   SS[         R                  " SS[        U 5      -  -   5      -   -  n[        [         R                  " U5      5      n[         R
                  " X45      nX[         R                  " U5      '   X"R                  -   nU[         R                  " U5      ==   S-  ss'   U$ )Ng      ?r:   r,      r-   )	r1   r   rE   rr   roundr   r   rs   r   )r   r   results      r5   r   r   8  s    "rwwq1s1v:~../Drxx~DXXtl#F$%2??4 !hhF 2??4 !Q&!Mro   c                    [        U S5      n [        R                  " X S-   -  S-  5      n[        R                  " U Vs/ s H  n[	        U5      R                  5       PM     sn5      R                  $ s  snf )zz
Create duplication matrix D_n which satisfies vec(S) = D_n vech(S) for
symmetric matrix S

Returns
-------
D_n : ndarray
r   r,   r-   )r   r1   eyearrayr   r   rs   )r   tmprR   s      r5   r   r   G  s[     	CA
&&!e!
"C8841VAY__&457774s   #A3c                    [        U S5      n [        [        R                  " [        R                  " X 45      5      5      n[        R
                  " X -  5      US:g     $ )z
Create the elimination matrix L_n which satisfies vech(M) = L_n vec(M) for
any matrix M

Parameters
----------

Returns
-------
r   r   )r   r   r1   trilonesr   )r   vech_indicess     r5   r   r   U  sG     	CArwwrwwv/0L66!%=*++ro   c                    [        U S5      n [        US5      n[        R                  " X-  5      n[        R                  " X-  5      R	                  X4SS9nUR                  UR                  5       SS9$ )z
Create the commutation matrix K_{p,q} satisfying vec(A') = K_{p,q} vec(A)

Parameters
----------
p : int
q : int

Returns
-------
K : ndarray (pq x pq)
pqr   r   r   r8   )r   r1   r   rG   r   r   r   )r   r   Kindicess       r5   r   r   e  sf     	CACA
quAii&&vS&9G66'--/6**ro   c           	     
   [         R                  " U S-  5      n[         R                  " U S-  5      n[        S[        U 5      5       H7  nX   n[        U5       H  nX%==   XAX5-
  S-
     -  -  ss'   M     USU USU& M9     U$ )z
Transforms params to induce stationarity/invertability.

Parameters
----------
params : array_like
    The AR coefficients

Reference
---------
Jones(1980)
r-   r,   N)r1   tanhr   rE   )params	newparamsr   jakiters         r5   _ar_transparamsr   z  s     
#I
''&1*
C1c&k"L1XEJ!	A666J BQ	"1	 #
 ro   c                ,   U R                  5       n U R                  5       n[        [        U 5      S-
  SS5       H=  nX   n[        U5       H  nX   X0X$-
  S-
     -  -   SUS-  -
  -  X'   M!     USU U SU& M?     S[        R                  " U 5      -  nU$ )zx
Inverse of the Jones reparameterization

Parameters
----------
params : array_like
    The transformed AR coefficients
r,   r   r:   r-   N)r>   r   rE   r1   arctanh)r   r   r   r   r   
invarcoefss         r5   _ar_invtransparamsr     s     [[]F
++-C3v;?Ar*I1XE -!QY].C*CCAF
CJ  !Wr
 + RZZ''Jro   c           	        S[         R                  " U * 5      -
  S[         R                  " U * 5      -   -  R                  5       nS[         R                  " U * 5      -
  S[         R                  " U * 5      -   -  R                  5       n[        S[	        U 5      5       H7  nX   n[        U5       H  nX%==   XAX5-
  S-
     -  -  ss'   M     USU USU& M9     U$ )z
Transforms params to induce stationarity/invertability.

Parameters
----------
params : ndarray
    The ma coeffecients of an (AR)MA model.

Reference
---------
Jones(1980)
r,   N)r1   expr>   r   rE   )r   r   r   r   br   s         r5   _ma_transparamsr     s     bfffWo%!bfffWo*=>DDFIwAw$78
>
>
@C 1c&k"L1XEJ!	A666J BQ	"1	 #
 ro   c                   U R                  5       n[        [        U 5      S-
  SS5       H=  nX   n[        U5       H  nX   X0X$-
  S-
     -  -
  SUS-  -
  -  X'   M!     USU U SU& M?     [        R                  " SU -
  SU -   -  5      * nU$ )zu
Inverse of the Jones reparameterization

Parameters
----------
params : ndarray
    The transformed MA coefficients
r,   r   r:   r-   N)r>   r   rE   r1   log)macoefsr   r   r   r   
invmacoefss         r5   _ma_invtransparamsr     s     ,,.C3w<!#Q+J1XE!.1qy1}/E+EEAF
CJ  "1g , &&!g+!g+677Jro   c           
         [        US5      nU SU n [        R                  " [        USS5       Vs/ s H  n[        R                  " XU-
  5      S   PM!     sn5      $ s  snf )aS  
Returns the successive differences needed to unintegrate the series.

Parameters
----------
x : array_like
    The original series
d : int
    The number of differences of the differenced series.

Returns
-------
y : array_like
    The increasing differences from 0 to d-1 of the first d elements
    of x.

See Also
--------
unintegrate
dNr   r:   )r   r1   asarrayr   diff)rR   r   is      r5   unintegrate_levelsr     sV    * 	CA	"1A::U1a_E_rwwqa%(+_EFFEs   &Ac                   [        U5      SS n[        U5      S:  aC  UR                  S5      n[        [        R
                  " [        R                  X 4   5      U5      $ US   n[        R
                  " [        R                  X 4   5      $ )a%  
After taking n-differences of a series, return the original series

Parameters
----------
x : array_like
    The n-th differenced series
levels : list
    A list of the first-value in each differenced series, for
    [first-difference, second-difference, ..., n-th difference]

Returns
-------
y : array_like
    The original series de-differenced

Examples
--------
>>> x = np.array([1, 3, 9., 19, 8.])
>>> levels = unintegrate_levels(x, 2)
>>> levels
array([ 1.,  2.])
>>> unintegrate(np.diff(x, 2), levels)
array([  1.,   3.,   9.,  19.,   8.])
Nr,   r:   r   )listrE   rf   unintegrater1   cumsumr_)rR   levelsx0s      r5   r   r     sk    4 &\!_F
6{QZZ^299RUU25\2F;;	B99RUU25\""ro   c                   [        U [        R                  5      (       d  [        U 5      n [        U [        R                  5      (       d   eU R                  R                  5       n SnU S;   d  U R                  U5      (       a  gU S:X  d  U R                  S5      (       a  gU S:X  d  U R                  S5      (       a  g	U S
:X  d  U R                  S5      (       a  gU S:X  a  gU S:X  a  gU S:X  a  g[        SR                  U 5      5      e)z
Convert a pandas frequency to a periodicity

Parameters
----------
freq : str or offset
    Frequency to convert

Returns
-------
int
    Periodicity of freq

Notes
-----
Annual maps to 1, quarterly maps to 4, monthly to 12, weekly to 52.
)zA-zAS-zY-zYS-zYE-)AYr,   Q)zQ-QSQE   M)zM-MSME   WzW-4   D   B   H   zDfreq {} not understood. Please report if you think this is in error.)	rA   r   
DateOffsetr   	rule_codeupper
startswithrO   format)freqyearly_freqss     r5   r   r     s    $ dG..//dG..////>>!D4LzT__\::	(:;;	(:;;	--			&&,fTl
 	
ro   )r    Fr)   )Nr,   FT)r,   r   )r   r   F)
r~   rr   rc   z.Literal['forward', 'backward', 'both', 'none']r   zLiteral['ex', 'sep', 'in']r   boolreturnzKNDArray | DataFrame | tuple[NDArray, NDArray] | tuple[DataFrame, DataFrame])Nr   r   F)r	  zstr | offsets.DateOffsetr  rr   )3
__future__r   statsmodels.compat.pythonr   rd   numpyr1   pandasrB   r   pandas.tseriesr   pandas.tseries.frequenciesr   typingr   statsmodels.tools.datar	   r
   r?   r   statsmodels.tools.typingr   statsmodels.tools.validationr   r   r   r   __all__r   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    ro   r5   <module>r     s    " ,     " 0  A 8 , @FMP`,b AJ04!	TT?T 0T 	T
 [Tp EJT#n/


(8, +*.,2*G4#D*
ro   