§
    ZøÁi»t  ã                  óZ  — d dl mZ d dl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 d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! ddl"m#Z# ddl"m$Z$ ddl"m%Z% ddl"m&Z& ddl"m'Z' ddl"m(Z( dd l"m)Z) dd!l"m*Z* dd"l"m+Z+ dd#l,m-Z- dd$l,m.Z. d%d&l/m0Z0 d%d'l1m2Z2 d%d(l3m4Z4 d%d)l3m5Z5 d%d*l6m7Z7 d%d+l6m8Z8 d%d,l0m9Z9 d%d-l:m;Z; erld d.lm<Z< d d/lm=Z= d d0lm>Z> d d1l?m@Z@ d d2lAmBZB d d3lCmDZD d d4lEmFZF d d5lEmGZG d d6lmHZH d d7lmIZI d d8lmJZJ d d9lKmLZL d d:lKmMZM d d;lNmOZO dd<l"mPZP d%d=lQmRZR d%d>lSmTZT d%d?lUmVZV  ejW        eX¦  «        ZY G d@„ dAe.¦  «        ZZ G dB„ dCe%¦  «        Z[ e;e+dD¦  «        dfdK„¦   «         Z\ e;e[dD¦  «        dgdL„¦   «         Z] e;e&dD¦  «        dhdN„¦   «         Z^ e;e*dD¦  «        didP„¦   «         Z_ e8j`        dQ¦  «         e7j`        dQdR¦  «        e4ja         b                    dS¦  «         G dT„ dUe4ja        ¦  «        ¦   «         ¦   «         ¦   «         Zce2jd         e                    ec¦  «        djdY„¦   «         Zfe2jg         e                    e¦  «        dkd^„¦   «         Zhdld_„Zidmdb„Zjdnde„ZkdS )oé    )ÚannotationsN)ÚAny)Úcast)ÚDict)ÚList)ÚOptional)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚUnion)ÚColumn)Úliteral_column)ÚNumeric)Útext)Útypes)ÚBIGINT)ÚExcludeConstraint)ÚINTEGER)ÚCreateIndex)ÚColumnClause)Ú
TextClause)ÚFunctionElement)ÚNULLTYPEé   )Úalter_column)Úalter_table)ÚAlterColumn)ÚColumnComment)Úformat_column_name)Úformat_table_name)Úformat_type)ÚIdentityColumnDefault)ÚRenameTable)ÚComparisonResult)ÚDefaultImplé   )Úutil)Úrender)Úops)Ú	schemaobj)ÚBatchOperations)Ú
Operations)Úsqla_compat)Úcompiles)ÚLiteral)ÚIndex)ÚUniqueConstraint)ÚARRAY)ÚPGDDLCompiler)ÚHSTORE)ÚJSON)ÚJSONB)ÚClauseElement)ÚColumnElement)Úquoted_name)ÚMetaData)ÚTable)Ú
TypeEngine)Ú_ServerDefault)ÚAutogenContext)Ú_f_name)ÚMigrationContextc                  ó|  ‡ — e Zd ZdZdZej        ddhfz   ZdQd„Zd„ Zd„ Z		 	 	 	 	 	 	 	 	 	 dRdSˆ fd"„Z
d#„ Zd$„ Z ej        d%¦  «         ej        d&¦  «         ej        d'¦  «         ej        d(¦  «         ej        d)¦  «        fZdTd+„ZdUd/„ZdVd3„ZdWd7„ZdXd;„ZdYd>„Z	 	 dZd[ˆ fdC„Zd\dH„Zd]dJ„Zd^dL„Zd_dN„Zd`dP„Zˆ xZS )aÚPostgresqlImplÚ
postgresqlTÚFLOATzDOUBLE PRECISIONÚindexr0   Úkwr   ÚreturnÚNonec                ó
  — |j                              dd ¦  «        pd}|D ]B}||j        j        vr2|j                             t          |t          j        ¦  «        ¦  «         ŒC|                      t          |fi |¤Ž¦  «         d S )NÚpostgresql_include© )
ÚkwargsÚgetÚtableÚcÚappend_columnr   ÚsqltypesÚNullTypeÚ_execr   )ÚselfrE   rF   rJ   Úcols        ú`/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/alembic/ddl/postgresql.pyÚcreate_indexzPostgresqlImpl.create_indexU   s•   € ð #œ\×-Ò-Ð.BÀDÑIÔIÐOÈRÐØ%ð 	ð 	ˆCØ˜%œ+œ-Ð'Ð'Ø”×)Ò)Ý˜3¥Ô 1Ñ2Ô2ñô ð øð 	�
Š
•;˜uÐ+Ð+¨Ð+Ð+Ñ,Ô,Ð,Ð,Ð,ó    c                ón   — |j         D ],}|j        �#|j        |j        v r|                      |¦  «         Œ-d S ©N)ÚconstraintsÚnameÚnamed_constraintsÚdrop_constraint)rT   Ú
batch_implrN   Ú
constraints       rV   Úprep_table_for_batchz#PostgresqlImpl.prep_table_for_batcha   sK   € ØÔ+ð 	1ð 	1ˆJà”Ð+Ø”O zÔ'CÐCÐCà×$Ò$ ZÑ0Ô0Ð0øð	1ð 	1rX   c                óº  — |j         r||j        j        u rdS |}||k    }|rdS d |||j        fv r| S |j        j        }t          |t          ¦  «        rEt          |j        t          ¦  «        st          j
        dd|¦  «        }d|› d�}t          |¦  «        }| j        }|€J ‚|                     t          j        t          |¦  «        |k    ¦  «        ¦  «         S )NFz^'|'$Ú ú')Úprimary_keyrN   Ú_autoincrement_columnÚserver_defaultÚargÚ
isinstanceÚstrÚtyper   ÚreÚsubr   Ú
connectionÚscalarr-   Ú_select)	rT   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaultÚconn_col_defaultÚdefaults_equalÚmetadata_defaultÚconns	            rV   Úcompare_server_defaultz%PostgresqlImpl.compare_server_defaulti   s*  € ð Ô'ð	à ?Ô#8Ô#NÐNÐNà�5à5Ðà)Ð-FÒFˆØð 	Ø�5àØØ%ØÔ*ð
ð 
ð 
ð
 &Ð%Ð%à*Ô9Ô=ÐåÐ&­Ñ,Ô,ð 	@ÝÐ.Ô3µWÑ=Ô=ð ;Ý#%¤6¨(°BÐ8HÑ#IÔ#IÐ Ø#:Ð'7Ð#:Ð#:Ð#:Ð å-Ð.>Ñ?Ô?Ðð ŒˆØÐÐÐØ—;’;ÝÔÝÐ/Ñ0Ô0Ð4DÒDñô ñ
ô 
ð 
ð 	
rX   NFÚ
table_namerj   Úcolumn_nameÚnullableúOptional[bool]rg   ú%Union[_ServerDefault, Literal[False]]r\   úOptional[str]Útype_úOptional[TypeEngine]ÚschemaÚautoincrementÚexisting_typeÚexisting_server_defaultúOptional[_ServerDefault]Úexisting_nullableÚexisting_autoincrementc                ó  •— |                      dd ¦  «        }|�|€t          j        d¦  «        ‚|�*|                      t	          ||||||	|
|¬¦  «        ¦  «          t          ¦   «         j        ||f||||||	|
||dœ	|¤Ž d S )NÚpostgresql_usingz6postgresql_using must be used with the type_ parameter)r‚   Úusingr„   r…   r‡   )	r|   rg   r\   r‚   rƒ   r„   r…   r‡   rˆ   )Úpopr'   ÚCommandErrorrS   ÚPostgresqlColumnTypeÚsuperr   )rT   rz   r{   r|   rg   r\   r€   r‚   rƒ   r„   r…   r‡   rˆ   rF   r‹   Ú	__class__s                  €rV   r   zPostgresqlImpl.alter_column–   sá   ø€ ð  —’Ð)¨4Ñ0Ô0ˆàÐ  ÝÔ#ØHñô ð ð ÐØ�JŠJÝ$ØØØØ!ØØ"/Ø,CØ&7ð	ñ 	ô 	ñô ð ð 	�‰ŒÔØØð	
ð Ø)ØØØ'Ø'Ø$;Ø/Ø#9ð	
ð 	
ð ð	
ð 	
ð 	
ð 	
ð 	
rX   c                óÄ  — |                      d¦  «        rÂt          |d         t          t          f¦  «        r¢t	          j        d|d         ¦  «        }|r‡t          j        |t          d¦  «        | 	                    d¦  «        ¬¦  «         
                    ¦   «         }|r>|\  }}||d         k    r/t                               d||j        |¦  «         |d= d S d S d S d S d S d S )	NÚdefaultrk   znextval\('(.+?)'::regclass\)a9  select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.oid=cast(:seqname as regclass)r   )Úseqnamer\   z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rM   ri   r   r   rl   Úmatchr-   Ú_exec_on_inspectorr   ÚgroupÚfirstÚlogÚinfor\   )rT   Ú	inspectorrN   Úcolumn_infoÚ	seq_matchr™   r“   Úcolnames           rV   Úautogen_column_reflectz%PostgresqlImpl.autogen_column_reflectÊ   s3  € Ø�?Š?˜9Ñ%Ô%ð $	3­*Ø˜Ô¥'­6Ð!2ñ+
ô +
ð $	3õ œØ/°¸YÔ1Gñô ˆIð ð 3Ý"Ô5ØÝð	;ñô ð &ŸOšO¨AÑ.Ô.ðñ ô ÷ ’%‘'”'ð ð  ð 3Ø'+Ñ$�G˜WØ +¨fÔ"5Ò5Ð5ÝŸšð;ð $Ø!œJØ#ñô ð ð (¨	Ð2Ð2Ð2ðI$	3ð $	3ð $	3ð $	3ð3ð 3ð"3ð 3à5Ð5rX   c                óš   — d„ |D ¦   «         }|D ]}|                      |¦  «         Œt          j        s|                      ||¦  «         d S d S )Nc                óF   — h | ]}|j                              d ¦  «        ¯|’ŒS )Úduplicates_constraint)r™   rM   )Ú.0rE   s     rV   ú	<setcomp>zAPostgresqlImpl.correct_for_autogen_constraints.<locals>.<setcomp>ø   s=   € ð 
ð 
ð 
àØŒz�~Š~Ð5Ñ6Ô6ð
Øð
ð 
ð 
rX   )Úremover-   Úsqla_2Ú_skip_functional_indexes)rT   Úconn_unique_constraintsÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexesÚdoubled_constraintsÚixs          rV   Úcorrect_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraintsñ   s~   € ð
ð 
à%ð
ñ 
ô 
Ðð &ð 	$ð 	$ˆBØ×Ò Ñ#Ô#Ð#Ð#åÔ!ð 	JØ×)Ò)Ð*:¸LÑIÔIÐIÐIÐIð	Jð 	JrX   z( asc nulls last)$z(?<! desc)( nulls last)$z( asc)$z( asc) nulls first$z desc( nulls first)$Úexprc                ó˜  — |                      ¦   «                              dd¦  «                             dd¦  «        }|j        �5|                     |j        j                              ¦   «         › d�d¦  «        }d|v rt	          j        dd|¦  «        }|r<|d         dk    r0|d	         d
k    r$|dd	…         }|r|d         dk    r|d	         d
k    °$| j        D ]H}|                     |¦  «        x}r/|                     d¦  «        \  }}|d |…         ||d …         z   } nŒI|r<|d         dk    r0|d	         d
k    r$|dd	…         }|r|d         dk    r|d	         d
k    °$t	          j	        d¦  «        }| 
                    |¦  «        r,|                     d|¦  «        }t	          j        dd|¦  «        }|                     dd¦  «        }|S )Nú"rc   rd   ú.z::z(::[\w ]+\w)r   ú(éÿÿÿÿú)r   z	cast\s*\(zas\s+[^)]+\)ú )ÚlowerÚreplacerN   r\   rl   rm   Ú_default_modifiers_reÚsearchÚspanÚcompiler”   )rT   rE   r®   Úrsr”   ÚstartÚendÚcast_res           rV   Ú_cleanup_index_exprz"PostgresqlImpl._cleanup_index_expr  så  € Ø�zŠz‰|Œ|×#Ò# C¨Ñ,Ô,×4Ò4°S¸"Ñ=Ô=ˆØŒ;Ð"à—<’< 5¤;Ô#3×#9Ò#9Ñ#;Ô#;Ð >Ð >Ð >ÀÑCÔCˆDà�4ˆ<ˆ<å”6˜/¨2¨tÑ4Ô4ˆDàð 	�t˜A”w #’~�~¨$¨r¬(°cª/¨/Ø˜˜"˜”:ˆDð ð 	�t˜A”w #’~�~¨$¨r¬(°cª/¨/ð
 Ô,ð 	ð 	ˆBØŸ	š	 $™œÐ'ˆuð Ø"ŸZšZ¨™]œ]‘
��sØ˜F˜U˜F”| d¨3¨4¨4¤jÑ0�Ø�ðð
 ð 	�t˜A”w #’~�~¨$¨r¬(°cª/¨/Ø˜˜"˜”:ˆDð ð 	�t˜A”w #’~�~¨$¨r¬(°cª/¨/õ ”*˜\Ñ*Ô*ˆØ�=Š=˜ÑÔð 	5Ø—;’;˜r 4Ñ(Ô(ˆDå”6˜/¨2¨tÑ4Ô4ˆDà�|Š|˜C Ñ$Ô$ˆØˆrX   ÚitemúUnion[Index, UniqueConstraint]úTuple[Any, ...]c                ó>   — |j                              d¦  «        rdS dS )NÚpostgresql_nulls_not_distinct)Únulls_not_distinctrK   )Údialect_kwargsrM   )rT   rÁ   s     rV   Ú_dialect_optionszPostgresqlImpl._dialect_options9  s)   € ð
 Ô×"Ò"Ð#BÑCÔCð 	+Ø*Ð*ØˆrrX   Úmetadata_indexÚreflected_indexr$   c           
     óŒ  — g }|                       ||¦  «        }|r|                     |¦  «         |j        }|j        }t          |¦  «        t          |¦  «        k    r5|                     dt          |¦  «        › dt          |¦  «        › �¦  «         |rt	          j        |¦  «        S g }t          t          ||¦  «        d¦  «        D ]ò\  }\  }	}
|                      |	¦  «        }|  	                    ||¦  «        }|                      |
¦  «        }|  	                    ||¦  «        }||k    rŒe| 
                    ¦   «                              d¦  «        rHd|v sd|v r@|                     d|› d|›d�¦  «         t          j        d	|› d|›d
|j        ›d�¦  «         ŒÔ|                     d|› d|›d|›�¦  «         Œó|                      |¦  «        }|                      |¦  «        }||k    r|                     d|› d|› �¦  «         |rt	          j        |¦  «        S |rt	          j        |¦  «        S t	          j        ¦   «         S )Nzexpression number ú to r   Ú_opsrµ   r´   zexpression #z' detected as including operator clause.zExpression #z
 in index a   detected to include an operator clause. Expression compare cannot proceed. Please move the operator clause to the ``postgresql_ops`` dict to enable proper compare of the index expressions: https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#operator-classeszoptions )Ú_compare_index_uniqueÚappendÚexpressionsÚlenr$   Ú	DifferentÚ	enumerateÚzipÚ_compile_elementrÀ   ÚstripÚendswithr'   Úwarnr\   rÈ   ÚextendÚSkipÚEqual)rT   rÉ   rÊ   ÚmsgÚ
unique_msgÚm_exprsÚr_exprsÚskipÚposÚm_eÚr_eÚ	m_compileÚm_textÚ	r_compileÚr_textÚ	m_optionsÚ	r_optionss                    rV   Úcompare_indexeszPostgresqlImpl.compare_indexesB  sÆ  € ð
 ˆØ×/Ò/Ø˜Oñ
ô 
ˆ
ð ð 	#Ø�JŠJ�zÑ"Ô"Ð"Ø Ô,ˆØ!Ô-ˆÝˆw‰<Œ<�3˜w™<œ<Ò'Ð'Ø�JŠJÐL­C°©L¬LÐLÐL½cÀ'¹l¼lÐLÐLÑMÔMÐMØð 	3å#Ô-¨cÑ2Ô2Ð2ØˆÝ(­¨W°gÑ)>Ô)>ÀÑBÔBð 	Pð 	P‰OˆC‘�#�sØ×-Ò-¨cÑ2Ô2ˆIØ×-Ò-¨n¸iÑHÔHˆFà×-Ò-¨cÑ2Ô2ˆIØ×-Ò-¨n¸iÑHÔHˆFà˜ÒÐØØ—’Ñ"Ô"×+Ò+¨FÑ3Ô3ð PØ�yÐ Ð  C¨9Ð$4Ð$4à—’ð4 3ð 4ð 4¨ð 4ð 4ð 4ñô ð õ ”	ðf 3ð fð f¨ð fð fØ&Ô+ðfð fð fñô ð ð ð —
’
ÐN¨#ÐNÐN°	ÐNÐNÀÐNÐNÑOÔOÐOÐOà×)Ò)¨.Ñ9Ô9ˆ	Ø×)Ò)¨/Ñ:Ô:ˆ	Ø˜	Ò!Ð!Ø�JŠJÐ< )Ð<Ð<°Ð<Ð<Ñ=Ô=Ð=àð 	,Ý#Ô-¨cÑ2Ô2Ð2Øð 	,å#Ô(¨Ñ.Ô.Ð.å#Ô)Ñ+Ô+Ð+rX   Úmetadata_constraintr1   Úreflected_constraintc                ó€  — |                       |¦  «        }|                      |¦  «        }|j        }|j        }||k    rt          j        d|› d|› �¦  «        S |                      |j        ¦  «        }|                      |j        ¦  «        }||k    rt          j        d|› d|› �¦  «        S t          j        ¦   «         S )Nzexpression rÌ   )Ú_create_metadata_constraint_sigÚ _create_reflected_constraint_sigÚunnamedr$   rÒ   rÈ   ÚconstrÛ   )	rT   rë   rì   Úmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigÚmetadata_doÚconn_dos	            rV   Úcompare_unique_constraintz(PostgresqlImpl.compare_unique_constraint~  sí   € ð
 ×;Ò;Øñ
ô 
ˆð ×=Ò=Ø ñ
ô 
ˆð  Ô'ˆØ Ô(ˆØ�xÒÐÝ#Ô-Ø6˜hÐ6Ð6¨HÐ6Ð6ñô ð ð ×+Ò+¨LÔ,>Ñ?Ô?ˆØ×'Ò'¨Ô(;Ñ<Ô<ˆØ˜'Ò!Ð!Ý#Ô-Ø8˜gÐ8Ð8¨;Ð8Ð8ñô ð õ  Ô%Ñ'Ô'Ð'rX   Úreflected_optionsúDict[str, Any]Úkindc                ó¬   — |                      di ¦  «                             ¦   «         }|                      d¦  «        s|                     dd ¦  «         |S )NÚdialect_optionsrJ   )rM   ÚcopyrŒ   )rT   rù   rû   Úoptionss       rV   Ú adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_optionsš  sU   € ð $×'Ò'Ð(9¸2Ñ>Ô>×CÒCÑEÔEˆØ�{Š{Ð/Ñ0Ô0ð 	4Ø�KŠKÐ,¨dÑ3Ô3Ð3ØˆrX   ÚelementúUnion[ClauseElement, str]c                óx   — t          |t          ¦  «        r|S |                     | j        dddœ¬¦  «        j        S )NTF)Úliteral_bindsÚinclude_table)ÚdialectÚcompile_kwargs)ri   rj   r»   r  Ústring)rT   r  s     rV   rÕ   zPostgresqlImpl._compile_element£  sI   € Ý�g�sÑ#Ô#ð 	ØˆNØ�ŠØ”LØ-1ÀEÐJÐJð ñ 
ô 
ô ð	rX   r7   Úis_server_defaultÚboolÚis_indexc                ó”   •— |r)t          |t          ¦  «        s|                     ¦   «         } t          ¦   «         j        |f||dœ|¤ŽS )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        )r	  r  )ri   r   Ú
self_groupr�   Úrender_ddl_sql_expr)rT   r®   r	  r  rF   r�   s        €rV   r  z"PostgresqlImpl.render_ddl_sql_expr«  sb   ø€ ð  ð 	%�J t­\Ñ:Ô:ð 	%Ø—?’?Ñ$Ô$ˆDà*�u‰wŒwÔ*Øð
Ø$5Àð
ð 
ØLNð
ð 
ð 	
rX   r<   Úautogen_contextr>   úUnion[str, Literal[False]]c                óÔ   — t          |¦  «        j        }|                     d¦  «        sdS t          | d|j        z  ¦  «        r$t          | d|j        z  ¦  «        } |||¦  «        S dS )Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rk   Ú
__module__Ú
startswithÚhasattrÚ__visit_name__Úgetattr)rT   r€   r  ÚmodÚmeths        rV   Úrender_typezPostgresqlImpl.render_typeÂ  sv   € õ �5‰kŒkÔ$ˆØ�~Š~Ð>Ñ?Ô?ð 	Ø�5å�4Ð*¨UÔ-AÑAÑBÔBð 	0Ý˜4Ð!2°UÔ5IÑ!IÑJÔJˆDØ�4˜˜Ñ/Ô/Ð/àˆurX   r4   c           	     óV   — t          t          t          j        ||dd¦  «        ¦  «        S )NÚ	text_typez(.+?\(.*text_type=)©r   rj   r(   Ú_render_type_w_subtype©rT   r€   r  s      rV   Ú_render_HSTORE_typez"PostgresqlImpl._render_HSTORE_typeÏ  s3   € õ ÝÝÔ)Ø�¨Ð5Kñô ñ
ô 
ð 	
rX   r2   c           	     óV   — t          t          t          j        ||dd¦  «        ¦  «        S )NÚ	item_typez(.+?\()r  r  s      rV   Ú_render_ARRAY_typez!PostgresqlImpl._render_ARRAY_typeÙ  s2   € õ ÝÝÔ)Ø�¨°Zñô ñ
ô 
ð 	
rX   r5   c           	     óV   — t          t          t          j        ||dd¦  «        ¦  «        S ©NÚastext_typez(.+?\(.*astext_type=)r  r  s      rV   Ú_render_JSON_typez PostgresqlImpl._render_JSON_typeã  ó3   € õ ÝÝÔ)Ø�¨Ð7Oñô ñ
ô 
ð 	
rX   r6   c           	     óV   — t          t          t          j        ||dd¦  «        ¦  «        S r$  r  r  s      rV   Ú_render_JSONB_typez!PostgresqlImpl._render_JSONB_typeí  r'  rX   )rE   r0   rF   r   rG   rH   )
NFNNNNNNNN)rz   rj   r{   rj   r|   r}   rg   r~   r\   r   r€   r�   r‚   r   rƒ   r}   r„   r�   r…   r†   r‡   r}   rˆ   r}   rF   r   rG   rH   )rE   r0   r®   rj   rG   rj   )rÁ   rÂ   rG   rÃ   )rÉ   r0   rÊ   r0   rG   r$   )rë   r1   rì   r1   rG   r$   )rù   rú   rû   rj   rG   rú   )r  r  rG   rj   )FF)
r®   r7   r	  r
  r  r
  rF   r   rG   rj   )r€   r<   r  r>   rG   r  )r€   r4   r  r>   rG   rj   )r€   r2   r  r>   rG   rj   )r€   r5   r  r>   rG   rj   )r€   r6   r  r>   rG   rj   )Ú__name__r  Ú__qualname__Ú__dialect__Útransactional_ddlr%   Útype_synonymsrW   ra   ry   r   rž   r­   rl   r»   r¸   rÀ   rÈ   rê   rø   r   rÕ   r  r  r  r"  r&  r)  Ú__classcell__©r�   s   @rV   rB   rB   N   s@  ø€ € € € € Ø€KØÐØÔ-Ø	Ð$Ð%ð1ñ €Mð
-ð 
-ð 
-ð 
-ð1ð 1ð 1ð+
ð +
ð +
ðb $(Ø@EØ"Ø&*Ø $Ø(,Ø.2Ø<@Ø,0Ø15ð2
ð 2
ð 2
ð 2
ð 2
ð 2
ð 2
ðh%3ð %3ð %3ðNJð Jð Jð> 	ˆŒ
Ð'Ñ(Ô(ØˆŒ
Ð-Ñ.Ô.ØˆŒ
�9ÑÔØˆŒ
Ð(Ñ)Ô)ØˆŒ
Ð)Ñ*Ô*ðÐð ð  ð  ð  ðDð ð ð ð:,ð :,ð :,ð :,ðx(ð (ð (ð (ð8ð ð ð ðð ð ð ð #(Øð	
ð 
ð 
ð 
ð 
ð 
ð 
ð.ð ð ð ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
rX   rB   c                  ó    ‡ — e Zd Zd	ˆ fd„Zˆ xZS )
rŽ   r\   rj   r{   r€   r<   rG   rH   c                óª   •— |                      dd ¦  «        } t          ¦   «         j        ||fi |¤Ž t          j        |¦  «        | _        || _        d S )Nr‹   )rŒ   r�   Ú__init__rQ   Úto_instancer€   r‹   )rT   r\   r{   r€   rF   r‹   r�   s         €rV   r3  zPostgresqlColumnType.__init__ù  sV   ø€ ð —’�w Ñ%Ô%ˆØ�‰ŒÔ˜˜{Ð1Ð1¨bÐ1Ð1Ð1ÝÔ)¨%Ñ0Ô0ˆŒ
ØˆŒ
ˆ
ˆ
rX   )r\   rj   r{   rj   r€   r<   rG   rH   )r*  r  r+  r3  r/  r0  s   @rV   rŽ   rŽ   ø  s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð rX   rŽ   rC   r  r#   Úcompilerr3   rG   rj   c                ój   — t          || j        | j        ¦  «        ›dt          || j        d ¦  «        ›�S )Nz RENAME TO )r   rz   r‚   r    Únew_table_name©r  r5  rF   s      rV   Úvisit_rename_tabler9    s=   € õ
 	�H˜gÔ0°'´.ÑAÔAÐAÐAÝ˜( GÔ$:¸DÑAÔAÐAðð rX   c           	     óÂ   — t          || j        | j        ¦  «        ›dt          || j        ¦  «        ›ddt          || j        ¦  «        z  ›d| j        r
d| j        z  nd›�S )Nrµ   zTYPE %szUSING %src   )r   rz   r‚   r   r{   r!   r€   r‹   r8  s      rV   Úvisit_column_typer;    sq   € õ
 	�H˜gÔ0°'´.ÑAÔAÐAÐAÝ�X˜wÔ2Ñ3Ô3Ð3Ð3Ø•K ¨'¬-Ñ8Ô8Ñ8Ð8Ð8Ø&-¤mÐ;ˆ
�W”]Ñ"Ð"¸Ð;ð	ð rX   r   c                ó  — d}| j         �1|j                             | j         t          j        ¦   «         ¦  «        nd}|                     t          || j        | j        ¦  «        t          || j
        ¦  «        |¬¦  «        S )Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}ÚNULL)rz   r{   Úcomment)r>  Úsql_compilerÚrender_literal_valuerQ   ÚStringÚformatr    rz   r‚   r   r{   )r  r5  rF   Úddlr>  s        rV   Úvisit_column_commentrD    s•   € ð F€Cð
 Œ?Ð&ð 	Ô×2Ò2ØŒO�Xœ_Ñ.Ô.ñ	
ô 	
ð 	
ð ð ð �:Š:Ý$Ø�gÔ(¨'¬.ñ
ô 
õ ' x°Ô1DÑEÔEØð ñ ô ð rX   r"   c                ó  — t          || j        | j        ¦  «        ›dt          || j        ¦  «        ›d�}| j        €|dz  }|S | j        €$|dz  }||                     | j        ¦  «        z  }|S | j         	                    | j        | j        ¦  «        \  }}}| j        }t          |¦  «        D ]T}|dk    r|d|j        rdndz  z  }Œ|d|                     t          j        d	i |t          ||¦  «        i¤Ž¦  «        z  z  }ŒU|S )
Nrµ   zDROP IDENTITYzADD ÚalwayszSET GENERATED %s ÚALWAYSz
BY DEFAULTzSET %s rK   )r   rz   r‚   r   r{   r’   r…   Úvisit_identity_columnÚimplÚ_compare_identity_defaultÚsortedrF  Úget_identity_optionsr-   ÚIdentityr  )r  r5  rF   r   ÚdiffÚ_ÚidentityÚattrs           rV   rH  rH  .  sJ  € õ
 	�H˜gÔ0°'´.ÑAÔAÐAÐAÝ�X˜wÔ2Ñ3Ô3Ð3Ð3ð€Dð „Ðà�ÑˆØˆØ	Ô	(Ð	0à�‰ˆØ�×.Ò.¨w¬Ñ?Ô?Ñ?ˆØˆð ”\×;Ò;ØŒO˜WÔ<ñ
ô 
‰
ˆˆa�ð ”?ˆÝ˜4‘L”Lð 	ð 	ˆDØ�xÒÐØÐ+Ø (¤ÐA�H�H°\ññ ��ð ˜	 H×$AÒ$AÝÔ(ÐKÐK¨Dµ'¸(ÀDÑ2IÔ2IÐ+JÐKÐKñ%ô %ñ ñ ��ð ˆrX   Úcreate_exclude_constraintÚbatch_create_exclude_constraintÚexclude_constraintc                  óz   — e Zd ZdZdZ	 	 	 d"d#d„Zed$d„¦   «         Z	 d%d&d„Zed'd„¦   «         Z	ed(d!„¦   «         Z
dS ))ÚCreateExcludeConstraintOpz0Represent a create exclude constraint operation.ÚexcludeNÚconstraint_nameúsqla_compat._ConstraintNamerz   úUnion[str, quoted_name]ÚelementsúIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]Úwhereú)Optional[Union[ColumnElement[bool], str]]r‚   r   Ú_orig_constraintúOptional[ExcludeConstraint]rG   rH   c                óh   — || _         || _        || _        || _        || _        || _        || _        d S rZ   )rX  rz   r[  r]  r‚   r_  rF   )rT   rX  rz   r[  r]  r‚   r_  rF   s           rV   r3  z"CreateExcludeConstraintOp.__init__[  s;   € ð  /ˆÔØ$ˆŒØ ˆŒØˆŒ
ØˆŒØ 0ˆÔØˆŒˆˆrX   r`   r   c                óÒ   — t          j        |¦  «        } | |j        |j        d„ |j        D ¦   «         t	          d|j        ¦  «        |j        ||j        |j        |j	        ¬¦	  «	        S )Nc                ó   — g | ]
\  }}}||f‘ŒS rK   rK   )r¢   r®   r\   Úops       rV   ú
<listcomp>z=CreateExcludeConstraintOp.from_constraint.<locals>.<listcomp>x  s/   € ð ð ð Ù-˜t T¨2��r�
ðð ð rX   zColumnElement[bool] | None)r]  r‚   r_  Ú
deferrableÚ	initiallyr‹   )
r-   Ú_table_for_constraintr\   Ú_render_exprsr   r]  r‚   rf  rg  r‹   )Úclsr`   Úconstraint_tables      rV   Úfrom_constraintz)CreateExcludeConstraintOp.from_constraintp  s†   € õ 'Ô<¸ZÑHÔHÐØˆsØŒOØÔ!ðð Ø1;Ô1Iðñ ô õ Ð3°ZÔ5EÑFÔFØ#Ô*Ø'Ø!Ô,Ø Ô*ØÔ"ð
ñ 
ô 
ð 	
rX   Úmigration_contextúOptional[MigrationContext]c                óh  — | j         �| j         S t          j        |¦  «        }|                     | j        | j        ¬¦  «        }t          | j        | j        | j	        dœ| j
        ¤Ž}|j        D ].\  }}}|                     t          |t          ¦  «        ¦  «         Œ/|                     |¦  «         |S )N)r‚   )r\   r]  )r_  r*   ÚSchemaObjectsrN   rz   r‚   r   r[  rX  r]  rF   ri  rP   r   r   Úappend_constraint)rT   rm  Ú
schema_objÚtÚexclr®   r\   Úopers           rV   Úto_constraintz'CreateExcludeConstraintOp.to_constraintƒ  sË   € ð Ô Ð,ØÔ(Ð(ÝÔ,Ð->Ñ?Ô?ˆ
Ø×Ò˜Tœ_°T´[ÐÑAÔAˆÝ ØŒ]ØÔ%Ø”*ð
ð 
ð Œgð	
ð 
ˆð Ôð		4ð 	4ñ 
ØØØà�OŠO�F 4­Ñ2Ô2Ñ3Ô3Ð3Ð3Ø	×Ò˜DÑ!Ô!Ð!ØˆrX   Ú
operationsr,   rj   r   rF   úOptional[Table]c                óB   —  | |||fi |¤Ž}|                      |¦  «        S )aØ  Issue an alter to create an EXCLUDE constraint using the
        current migration context.

        .. note::  This method is Postgresql specific, and additionally
           requires at least SQLAlchemy 1.0.

        e.g.::

            from alembic import op

            op.create_exclude_constraint(
                "user_excl",
                "user",
                ("period", "&&"),
                ("group", "="),
                where=("group != 'some group'"),
            )

        Note that the expressions work the same way as that of
        the ``ExcludeConstraint`` object itself; if plain strings are
        passed, quoting rules must be applied manually.

        :param name: Name of the constraint.
        :param table_name: String name of the source table.
        :param elements: exclude conditions.
        :param where: SQL expression or SQL string with optional WHERE
         clause.
        :param deferrable: optional bool. If set, emit DEFERRABLE or
         NOT DEFERRABLE when issuing DDL for this constraint.
        :param initially: optional string. If set, emit INITIALLY <value>
         when issuing DDL for this constraint.
        :param schema: Optional schema name to operate within.

        )Úinvoke)rj  rw  rX  rz   r[  rF   rd  s          rV   rR  z3CreateExcludeConstraintOp.create_exclude_constraint™  s4   € ðV ˆS� *¨hÐ=Ð=¸"Ð=Ð=ˆØ× Ò  Ñ$Ô$Ð$rX   r+   c                ót   — |j         j        |d<    | ||j         j        |fi |¤Ž}|                     |¦  «        S )a3  Issue a "create exclude constraint" instruction using the
        current batch migration context.

        .. note::  This method is Postgresql specific, and additionally
           requires at least SQLAlchemy 1.0.

        .. seealso::

            :meth:`.Operations.create_exclude_constraint`

        r‚   )rI  r‚   rz   rz  )rj  rw  rX  r[  rF   rd  s         rV   rS  z9CreateExcludeConstraintOp.batch_create_exclude_constraintÇ  sF   € ð& "”Ô-ˆˆ8‰ØˆS� *¤/Ô"<¸hÐMÐMÈ"ÐMÐMˆØ× Ò  Ñ$Ô$Ð$rX   )NNN)rX  rY  rz   rZ  r[  r\  r]  r^  r‚   r   r_  r`  rG   rH   )r`   r   rG   rV  rZ   )rm  rn  rG   r   )rw  r,   rX  rj   rz   rj   r[  r   rF   r   rG   rx  )
rw  r+   rX  rj   r[  r   rF   r   rG   rx  )r*  r  r+  Ú__doc__Úconstraint_typer3  Úclassmethodrl  rv  rR  rS  rK   rX   rV   rV  rV  Q  sÆ   € € € € € ð ;Ð:à€Oð <@Ø $Ø8<ðð ð ð ð ð* ð
ð 
ð 
ñ „[ð
ð& ?Cðð ð ð ð ð, ð+%ð +%ð +%ñ „[ð+%ðZ ð%ð %ð %ñ „[ð%ð %ð %rX   rV  r  r>   rd  c                óJ   — t          |                     ¦   «         | d¬¦  «        S )NT)Úalter)Ú_exclude_constraintrv  )r  rd  s     rV   Ú_add_exclude_constraintr‚  ß  s%   € õ ˜r×/Ò/Ñ1Ô1°?È$ÐOÑOÔOÐOrX   r`   r   Únamespace_metadatar:   c                ó\   — t          j        d| |¦  «        }|dur|S t          | |d¦  «        S )NrW  F)r(   Ú_user_defined_renderr�  )r`   r  rƒ  Úrendereds       rV   Ú!_render_inline_exclude_constraintr‡  æ  sA   € õ Ô*Ø�:˜ñô €Hð �uÐÐØˆå˜z¨?¸EÑBÔBÐBrX   c                óB   — | j         }|�|                     d¦  «         dS )Nz*from sqlalchemy.dialects import postgresqlzpostgresql.)ÚimportsÚadd)r  r‰  s     rV   Ú_postgresql_autogenerate_prefixr‹  õ  s(   € ØÔ%€GØÐØ�ŠÐ@ÑAÔAÐAØˆ=rX   r€  r
  c                óì  ‡ ‡‡— g Š‰j         }‰ j        r)‰                     dt          ‰ j        ¦  «        f¦  «         ‰ j        r)‰                     dt          ‰ j        ¦  «        f¦  «         ‰ j        r)‰                     dt          ‰ j        ¦  «        f¦  «         |sA|r?‰ j        j        r3‰                     dt          j	        ‰ j        j        ¦  «        f¦  «         |s6‰ j
        r/‰                     dt          j        ‰‰ j
        ¦  «        f¦  «         ˆˆ ˆfd„}|r£t          t          j        ‰‰ j
        ¦  «        ¦  «        g}|s/|t          t          j	        ‰ j        j
        ¦  «        ¦  «        gz  }|                      |¦   «         ¦  «         dt          j        ‰¦  «        d                     |¦  «        d	œz  S  |¦   «         }d
t!          ‰¦  «        d                     |¦  «        d	œz  S )Nrf  rg  r‹   r‚   r\   c                 óÚ   •— ˆfd„‰j         D ¦   «         } ‰j        �0|                      dt          j        ‰j        ‰¦  «        z  ¦  «         |                      d„ ‰D ¦   «         ¦  «         | S )Nc                óF   •— g | ]\  }}}d t          |‰¦  «        ›d|›d�‘ŒS )r²   ú, r´   )Ú_render_potential_column)r¢   Úsqltextr\   Úopstringr  s       €rV   re  zC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>  s[   ø€ ð 

ð 

ð 

ñ (�˜˜x˜xõ )ØØ#ñô ð ð ð ��ðð

ð 

ð 

rX   zwhere=%sc                ó"   — g | ]\  }}|›d |›�‘ŒS )ú=rK   )r¢   ÚkÚvs      rV   re  zC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>%  s'   € Ð7Ð7Ð7©$¨!¨Q    1 1Ð%Ð7Ð7Ð7rX   )ri  r]  rÏ   r(   Ú_render_potential_exprrÙ   )Úargsr  r`   Úoptss    €€€rV   Údo_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_opts  s™   ø€ ð

ð 

ð 

ð 

ð ,6Ô+Cð

ñ 

ô 

ˆð ÔÐ'Ø�KŠKØÝÔ/ØÔ$ oñô ññô ð ð 	�ŠÐ7Ð7°$Ð7Ñ7Ô7Ñ8Ô8Ð8ØˆrX   z-%(prefix)screate_exclude_constraint(%(args)s)r�  )Úprefixr˜  z%%(prefix)sExcludeConstraint(%(args)s))Ú
_has_batchrf  rÏ   rj   rg  r‹   rN   r‚   r(   Ú_identr\   Ú_render_gen_nameÚreprrÙ   Ú_alembic_autogenerate_prefixÚjoinr‹  )r`   r  r€  Ú	has_batchrš  r˜  r™  s   ``    @rV   r�  r�  ü  s/  øøø€ ð
 FH€DàÔ*€IàÔð @Ø�Š�\¥3 zÔ'<Ñ#=Ô#=Ð>Ñ?Ô?Ð?ØÔð >Ø�Š�[¥# jÔ&:Ñ";Ô";Ð<Ñ=Ô=Ð=ØÔð 6Ø�Š�W�c *Ô"2Ñ3Ô3Ð4Ñ5Ô5Ð5Øð H˜ð H :Ô#3Ô#:ð HØ�Š�X�vœ}¨ZÔ-=Ô-DÑEÔEÐFÑGÔGÐGØð 
�Z”_ð 
Ø�ŠØ•VÔ,¨_¸j¼oÑNÔNÐOñ	
ô 	
ð 	
ðð ð ð ð ð ð ð, ð 
å•Ô(¨¸*¼/ÑJÔJÑKÔKð
ˆð ð 	AØ•T�&œ-¨
Ô(8Ô(=Ñ>Ô>Ñ?Ô?Ð@Ñ@ˆDØ�ŠÐ&Ð&Ñ(Ô(Ñ)Ô)Ð)Ø>ÝÔ9¸/ÑJÔJØ—I’I˜d‘O”OðB
ð B
ñ 
ð 	
ð
 "Ð!Ñ#Ô#ˆØ6Ý5°oÑFÔFØ—I’I˜d‘O”Oð:
ð :
ñ 
ð 	
rX   ÚvalueúGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]c           	     óä   — t          | t          ¦  «        r+| j        rd}nd}|t          j        |¦  «        | j        dœz  S t          j        | |t          | t          t          f¦  «        ¬¦  «        S )Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r›  r\   )Úwrap_in_text)	ri   r   Ú
is_literalr(   Ú_sqlalchemy_autogenerate_prefixr\   r—  r   r   )r£  r  Útemplates      rV   r�  r�  ;  s‹   € õ �%�Ñ&Ô&ð 
ØÔð 	4à;ˆHˆHà3ˆHàÝÔ<¸_ÑMÔMØ”Jð
ð 
ñ 
ð 	
õ
 Ô,ØØÝ# E­J½Ð+HÑIÔIð
ñ 
ô 
ð 	
rX   )r  r#   r5  r3   rG   rj   )r  rŽ   r5  r3   rG   rj   )r  r   r5  r3   rG   rj   )r  r"   r5  r3   )r  r>   rd  rV  rG   rj   )r`   r   r  r>   rƒ  r:   rG   rj   )r  r>   rG   rj   )r`   r   r  r>   r€  r
  rG   rj   )r£  r¤  r  r>   rG   rj   )lÚ
__future__r   Úloggingrl   Útypingr   r   r   r   r   r	   r
   r   r   Ú
sqlalchemyr   r   r   r   r   rQ   Úsqlalchemy.dialects.postgresqlr   r   r   Úsqlalchemy.schemar   Úsqlalchemy.sql.elementsr   r   Úsqlalchemy.sql.functionsr   Úsqlalchemy.typesr   Úbaser   r   r   r   r   r    r!   r"   r#   rI  r$   r%   rc   r'   Úautogenerater(   rw  r)   r*   Úoperations.baser+   r,   r-   Úutil.sqla_compatr.   r/   r0   r1   Ú$sqlalchemy.dialects.postgresql.arrayr2   Ú#sqlalchemy.dialects.postgresql.baser3   Ú%sqlalchemy.dialects.postgresql.hstorer4   Ú#sqlalchemy.dialects.postgresql.jsonr5   r6   r7   r8   r9   Úsqlalchemy.sql.schemar:   r;   Úsqlalchemy.sql.type_apir<   r=   Úautogenerate.apir>   Úautogenerate.renderr?   Úruntime.migrationr@   Ú	getLoggerr*  r˜   rB   rŽ   r9  r;  rD  rH  Úregister_operationÚAddConstraintOpÚregister_add_constraintrV  Ú	renderersÚdispatch_forr‚  Ú_constraint_renderersr‡  r‹  r�  r�  rK   rX   rV   ú<module>rÇ     sÉ  ðð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø <Ð <Ð <Ð <Ð <Ð <Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø .Ð .Ð .Ð .Ð .Ð .Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø -Ð -Ð -Ð -Ð -Ð -Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'àð 5ØÐÐÐÐÐà Ð Ð Ð Ð Ð Ø+Ð+Ð+Ð+Ð+Ð+Ø:Ð:Ð:Ð:Ð:Ð:ØAÐAÐAÐAÐAÐAØ<Ð<Ð<Ð<Ð<Ð<Ø8Ð8Ð8Ð8Ð8Ð8Ø9Ð9Ð9Ð9Ð9Ð9Ø5Ð5Ð5Ð5Ð5Ð5Ø5Ð5Ð5Ð5Ð5Ð5Ø3Ð3Ð3Ð3Ð3Ð3Ø.Ð.Ð.Ð.Ð.Ð.Ø+Ð+Ð+Ð+Ð+Ð+Ø2Ð2Ð2Ð2Ð2Ð2à$Ð$Ð$Ð$Ð$Ð$Ø1Ð1Ð1Ð1Ð1Ð1Ø-Ð-Ð-Ð-Ð-Ð-Ø4Ð4Ð4Ð4Ð4Ð4ð €gÔ˜Ñ!Ô!€ðg
ð g
ð g
ð g
ð g
�[ñ g
ô g
ð g
ðTð ð ð ð ˜;ñ ô ð ð 
€ˆ+�|Ñ$Ô$ðð ð ñ %Ô$ðð 
€Ð
 Ñ-Ô-ðð ð ñ .Ô-ðð 
€ˆ-˜Ñ&Ô&ðð ð ñ 'Ô&ðð* 
€Ð
 Ñ.Ô.ðð ð ñ /Ô.ððD €ÔÐ:Ñ;Ô;Ø#€Ô#ØÐ!Bñô ð Ô×,Ò,Ð-AÑBÔBðF%ð F%ð F%ð F%ð F% Ô 3ñ F%ô F%ñ CÔBñô ñ <Ô;ð
F%ðR Ô×ÒÐ8Ñ9Ô9ðPð Pð Pñ :Ô9ðPð Ô×*Ò*Ð+<Ñ=Ô=ðCð Cð Cñ >Ô=ðCðð ð ð ð<
ð <
ð <
ð <
ð~
ð 
ð 
ð 
ð 
ð 
rX   