|L i UddlmZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl%m'Z'ddl(m)Z)ddl$m*Z*erNddlm+Z+dd l,m-Z-dd!lm.Z.dd"lm/Z/dd#lm0Z0dd$lm1Z1dd%l2m3Z3dd&l4m5Z5dd'l6m7Z7dd(l6m8Z8dd)l6m9Z9dd*l6m:Z:dd+l%m;Z;ejxe=Z> dNd,Z?e$jd-.ZA dOd/ZBeAjd0 dPd1ZD dQd2ZEe$jejejejejejejd3ZKd4eLd5< dRd6ZM dSd7ZN dTd8ZOej dUd9ZQed:ee eef;ZRGd<d=ZSeAjd> dVd?ZTd@ZUeAjdA dWdBZVeAjdA dXdCZWeAjdA dWdDZX dYdEZYdZdFZZ d[dGZ[d\dHZ\dIZ]eAjdA d]dJZ^eAjdA d^dKZ_eAjd> d_dLZ`eAjd> d`dMZay)a) annotationsN)Any)cast)Dict)Iterator)Mapping)Optional)Set)Tuple) TYPE_CHECKING)TypeVar)Union)event)inspectschema)text)types) expression)conv)ForeignKeyConstraint)Index)UniqueConstraint) OrderedSet)util) is_index_sig) is_uq_sig)ops) sqla_compat)Literal) Inspector) quoted_name) TextClause)Column)Table)AutogenContext) DefaultImpl) AlterColumnOp)MigrationScript)ModifyTableOps) UpgradeOps)_constraint_sigcz|jd}|jd}t|||j|y)N)upgrade_ops_listdowngrade_ops_list_produce_net_changes reverse_into)autogen_contextmigration_script upgrade_ops downgrade_opss b/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/alembic/autogenerate/compare.py_populate_migration_scriptr9<s<#33B7K$77;M+6]+T)uselistc|j}|J|jjdd}t|}|jj }|rMt |j}|jd|j||jdndh}|Dchc]}|j|dis|}}|jJtjd|jj|||ycc}w)Ninclude_schemasFinformation_schemar) connectionoptsgetrdialectdefault_schema_namesetget_schema_namesdiscardaddrun_name_filters comparatorsdispatchname)r4r6r?r= inspectordefault_schemaschemasss r8r2r2Is!++J  !! !%**../@%HO":.I'';;Ni0023,-' D&o>>q(BOG  " " .. .?#:#:#?#?@g s $D=Drc j}t}jj}jj}|D]c t|j } |k(r&|j jjg}|j fd|DetjDcgc]}|j|jfc}j ||fg} t|| ||ycc}w)Nrc3PK|]}j|ddir|fyw)table schema_nameN)rH).0tnamer4rSs r8 z&_autogen_for_tables..~s8 //w <%  #&) rLrDmigration_contextversion_table_schema version_tableget_table_names differenceupdater sorted_tablesrrK_compare_tables) r4r6rNrLconn_table_namesrYrZtablesrRmetadata_table_namesrSs ` @r8_autogen_for_tablesrchs  ))I7:u ))>>$55CCM  Y..k.BC . .&& 22@@AF      &1@1N1NO%,, #Oj'789  PsDc  |jjj}t|Dcgc]\}}||k7r|nd|fc}}}t ||D cic],\} \}}| |j t j||.} }} }|}|j|D]\} }| r| d|n|} | | |f} |j| |ddds.|jjtjj| tjd| tj |g| }t#j%d||| |d| |j'r|jj|t j(}|j|D]`\} }t j|| } | |j*v}t j,||| }|sVt/j0|d|j2j4j7|t9|j;|d|j||dddstj |g| }t#j%d||| ||d|j's|jj||jjtj<j|tjd | c|j?|}t j(}i}|D]\} }t j|| } | |j*v}t j,||| }|sVt/j0|d|j2j4j7|t9|j;|d||| |f<tA|d D]\} }| xsd} | r| d|n|} | | |f} |j*| }|j| |dd|sCtj |g| }tC| ||| |||5t#j%d||| ||| ddd|j'r|jj|ycc}}wcc}}} w#1swYExYw) N.rRFzDetected added table %rrcolumn_reflectinclude_columnsTzDetected removed table %rc|dxsd|dfS)Nr)xs r8z!_compare_tables..s1Q4:2qt:Lr:)key)"bindrBrCrziptable_key_to_table sa_schema_get_table_keyr\run_object_filtersrappend CreateTableOp from_tableloginfor+rIrJis_emptyMetaDatarar&rlistenrXimpl_compat_autogen_column_reflect_InspectorConv reflect_table DropTableOp intersectionsorted_compare_columns)r`rbrLr6r4rMrrU#metadata_table_names_no_dflt_schemano_dflt_schematname_to_tablerOrKmetadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info conn_tables r8r_r_s^^++??N+5"6 /VT5 A +'03 /1E0  ,NOVU ::  $ $UF 3  N?(334DE95'(!U#e'E 3  - - E7E4  OO " "!!,,^<  HH. 5"11%AF    )   $,,.&&'78+9.!))+$//0DE85''q1)000 OOE#3A > LL 1166..   9 % 3 3At 3 L  - -at L"11%AF    )!11eQ $,,.&&'78 OO " "3??#=#=a#@ A HH0$ 7588'334HIO!**,#)5''q1*111 OOE#4Q ? LL 1166..y9   9 % 3 3At 3 L'(!U$)"?0LM95 I'(!U#e'E 3&--d3  - - E7E:  #11%AF !  $$W-#$"  $$,,.&&'78;9y z  sR' 1R- R44R= )ascdesc nulls_first nulls_last nullsfirst nullslastzMapping[str, Any]_IndexColumnSortingOpscg}|jd}t|dD]j\}}|d|vsJ|d|}t|}n|}|j|}|r%||vr!||D]} | tvs t | |}|j |lt j|dg||d|d|j|d} d|vr|d| jd<| S) Ncolumn_sorting column_names expressionsrKunique)r_tableindexduplicates_constraint) rA enumeratercrrvrsr adjust_reflected_dialect_optionsrz) r~paramsrexprssortingnumcol_namerKitemoperatorixs r8 _make_indexr*s$35Ejj)*G"6.#9:  X   F* **-(-D:DD<<)D tw#DM B551(;DAD B  T  v   h    / / @  B&(+12I+J'( Ir:ctj|dDcgc]}|j|c}d|di|j|d}d|vr|d|jd<|Scc}w)NrrKunique_constraintduplicates_index)rsrrrrz)r~rrcnameuqs r8_make_unique_constraintrJs~  # #+1.+A B%*,,u  B  F^   / /8K L B V#&,-?&@"# I CsA!c |d}|dr |dd|}|jdi}tj|dDcgc]}|j|c}|dDcgc] }|d| c}|jd|jd|jd |jd |d  }|j ||Scc}wcc}w) Nreferred_tablereferred_schemareoptionsconstrained_columnsreferred_columnsonupdateondelete deferrable initiallyrK)rrrrrK)rArsrrappend_constraint)rrrUrrnconsts r8_make_foreign_keyrXs # $E  !"34e<jjB'G  * **01F*GHe H'-.@'AB!E1 BZ(Z(;;|,++k* F^ E  ' L IBs C C c #K|r|d|n|}td|jD}|jD cic]} | jr| j| } } |jD cic]/} |j | jd||dr | j| 1} } |j | D]o} |j | | | ddds|jjtjj||| | tjd|| q|j| D]} | | }|j| }|j || dd|s-tj|| |}tj!d||||| |||j#sv|jj|dt%| j |D]} |j |j| | ddds&|jjtj&j|||j| tjd || ycc} wcc} ww) Nrec3NK|]}|jr|jywN)systemrK)rTrs r8rVz#_compare_columns..zs$$s%%column table_namerSFzDetected added column '%s.%s'rTzDetected removed column '%s.%s')rrrrKrHr\rurrv AddColumnOpfrom_column_and_tablenameryrzrr)rIrJ has_changesrD DropColumnOp)rrUrrrr4rLrKmetadata_col_namesrmetadata_cols_by_nameconn_col_namesrcolname metadata_colconn_colalter_column_ops r8rros)/fe $ED#$&(($*++188    + + FFHU6J   N$..~> C  - - !% (%5$   ' '99E#8#?  HH4dE B C&22>B9,W5 <<(11 '8UH  ++E76JX&          & & (  ' ' 8)9, ^$//0BC E  - - LL $   ' '  ::E:<<#6  HH6e D E_s76I5I+ I+I5)4I0.I5 CI5)A I5 A+I5_C)boundc:eZdZdZdZdZdZdZdZdZ dZ y ) rrLc||_yrr)selfrLs r8__init__z_InspectorConv.__init__s "r:cr|s|S|D]-}|d t|dtrt|d|d</|S)NrK) isinstancerrconstsrs r8_apply_reflectinfo_convz&_InspectorConv._apply_reflectinfo_convsNM 4EV}(f t2!%U6] 3f  4  r:c|s|S|D]D}|jt|jtr+t|j|_F|Sr)rKrrrs r8_apply_constraint_convz%_InspectorConv._apply_constraint_convsGM .Ezz%jT.J!%**-  . r:cX|j|jj|i|Sr)rrL get_indexesrargskws r8rz_InspectorConv.get_indexess.++ &DNN & & 3 3  r:cX|j|jj|i|Sr)rrLget_unique_constraintsrs r8rz%_InspectorConv.get_unique_constraintss.++ 1DNN 1 14 >2 >  r:cX|j|jj|i|Sr)rrLget_foreign_keysrs r8rz_InspectorConv.get_foreign_keyss.++ +DNN + +T 8R 8  r:c|jj|||j|j|j|jy)Nrg)rLrr constraintsindexes)rrRrhs r8rz_InspectorConv.reflect_tablesA $$UO$L ##E$5$56 ##EMM2r:N) __name__ __module__ __qualname__ __slots__rrrrrrrrlr:r8rrs*I#   3r:rrRc D +,-./j}du-|du.jj,|I|jDchc]}t |t j r| }}t|j} nt}t} tx} } d/d}  t|j|} d/| Dcgc]}j|dd|dr|} }| D]}|jdsd}  t|j!|} | D cgc]} j| dd|dr| } } .r t} n| Dchc]}t#,|} },fd | DDchc]}||} }| rt%| | || j&,,j)| | || |Dchc]},j+|}}| D chc]} ,j+| }} | Dchc]},j-|}}| D chc]} ,j-| }} |j/|Dcic].}|j0r t3t4|j7|0}}|Dcic]}|j8|}}|Dcic]}|j8|}}|j/|Dcic].}t;j<|j8r |j8|0}}t|j?|Dcic] }|||||f}}|Dcic]}|j@|}}|Dcic]}|j@|}}|Dcic]9}t;jB|jDj&s |j@|;}}d-./fd }d-./fd } dfd } tGt|jI|D]j}!||!}"tK|"r|"j@|vr"|!|vr=||!\}#+tM+fd |DsC|#j@|vsR||#|+c||"ltGt|j?|D]}$||$}%|$|vr||$\}#+tO|%r+}"n|#}"n||$}"tQ|"tQ|%k7r||"||%R|%jS|"}&|&jTr| |"|%|&jV|&jXr.Fs68 D"j1sct|rj|j|jdddrnjj tj j|jtjd|j|jyyt|rsysryj|j|jdddrnjj tjj|jtjd|j|jyyJ)NrFzDetected added index %r on '%s'rz+Detected added unique constraint %r on '%s')rrurrKrrv CreateIndexOp from_indexryrzrrAddConstraintOpfrom_constraint)objr4is_create_table is_drop_table modify_opssupports_unique_constraintss r8 obj_addedz/_compare_indexes_and_uniques..obj_addeds   11 388WeT%%c&7&7&B&B399&MN5HH$$ s^.-11 388%8%%%''77 BAHH$$  5r:ct|r|jrsyj|j|jdddrdj j t jj|jtjd|jyyt|rsryj|j|jdddrdj j t jj|jtjd|jyyJ)NrTzDetected removed index %r on %rrz+Detected removed unique constraint %r on %r)r is_uniquerurrKrrv DropIndexOprryrzrDropConstraintOpr)rr4rrrrrUs r8 obj_removedz1_compare_indexes_and_uniques..obj_removeds  }}%@11 388WdD%%coo&@&@&KL:CHHeL  s^-11 388%8$%%((88CAHH  5r:ct|rt|sJj|j|jdd|jrtj d|j|j jt jj|jj jt jj|jyyt|rt|sJj|j|jdd|jrtj d|j|j jt jj|jj jt jj|jyyJ)NrFz#Detected changed index %r on %r: %srz/Detected changed unique constraint %r on %r: %s)rrurrKryrzrrvrrrrrrr)oldnewmsgr4rrUs r8 obj_changedz1_compare_indexes_and_uniques..obj_changedsk  $ $$11 388WeSYY9388UC%%coo&@&@&KL%%c&7&7&B&B399&MNs^S> !>11 388%8%EHH  %%((88C%%''77 B 5r:c3PK|]}j|jk7ywr)unnamed)rTmeta_idxconn_idxs r8rVz/_compare_indexes_and_uniques..s* $$(8(88rWzunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)rr-)rr-rr-rstr)0rLrXr~rrrsrrDr frozensetrrrHrANotImplementedError TypeErrorrr_correct_for_uq_duplicates_uixrBcorrect_for_autogen_constraints_create_metadata_constraint_sig _create_reflected_constraint_sigunionis_namedrr md_name_to_sql_namerKr constraint_name_stringrr _constraint_is_namedrrr\rallrtypecompare_to_reflected is_differentmessageis_skipryrzis_equal)0r4rrrUrrrLrmetadata_unique_constraintsmetadata_indexes conn_uniques conn_indexes+unique_constraints_duplicate_unique_indexesruq_defrmetadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigrmetadata_namesconn_uniques_by_nameconn_indexes_by_name conn_namesrKdoubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigunnamed_metadata_uniquesrrr removed_nameconn_objconn_uq existing_name metadata_obj comparisonthing added_nameruq_sigr r~rrrs0`` `` @@@@@r8_compare_indexes_and_uniquesr;sQ ))I D(O"d*M  , , 1 1D!%00' "i889 ' #' ~556&)e#5"++-L<"'27/ G))4KKfLL+/ ''"33vJ'#(@L# G66,-BF? G ))4@@fAL'"33vJ#(@L 5L+(fjALLL!@ B 2  // HHo--  B   B@# # ##Js:99.IJ" l+ h   $<<  0 0 3L A GX$8OO+BBG$H%  !'"* N 3 @ @ LM"+ %m4 / / 3M B GXL)#"!-0H >T,/ /  ! l #%::8DJ&&HlJ4F4FG## ,H5G;NKMM&& "****E"+HS0;;JGH Z(#+8 , , .v6 78] ' @#      2#   &  F'  H@ M s#V"&V,"V' W )"WW W!W&!W+?W0W5 3W:W?X3X X/X X#>X, W8WW WWc|Dcgc]}tj|||f}}|Dchc] \}}| | } }}|Dchc]"\}}||j|j$} }}|Dchc]$}|jrtj||&} }|Dcic]}|js|j |} }|Dcic]}|j dr |j | } }| D]U}|| vr6|j| |j| vs(|j| |=|| vsB|j| |Wycc}wcc}}wcc}}wcc}wcc}wcc}w)Nr) r _get_constraint_final_namerr rrKrzrrF)r(r#r r!rBr~consmetadata_cons_namesrKmetadata_uq_namesunnamed_metadata_uqsmetadata_ix_names conn_ix_namesuqs_dupe_indexesoverlaps r8rrOs*0   / /g >E 3td6F . D$ < ,,T2::%  ;; ..tW=2>MTYY_MMM,  99' ( 4 $ 9 + +55$W-'+, (//0@0IJ - -  w!7 8 9?  Ns-E E E 'E0)EE1E#E!rc|j}|j}||_||urtj|j|jrtj |s*tj |j|jrtjd||y||_ tjd|rdnd||yy)Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'NULLzNOT NULL) nullableexisting_nullabler _server_default_is_computedserver_default_nullability_might_be_unset_server_default_is_identityryrzmodify_nullable) r4rrrUrrrmetadata_col_nullableconn_col_nullables r8_compare_nullablerQs)11 ))(9O% 55  3 3++X-D-D 77 E77 //1H1H HHE  /DO + HH//Z  '6r:c|jj|urd|jd<y|jdurd|jd<y|jdurd|jd<yy)NT autoincrementF)rR_autoincrement_columnrrS)r4rrrUrrrs r8_setup_autoincrementrUsi//<?.2?+  # #t +.2?+  # #u ,.3?+ -r:c|j}||_|j}|jtjurt j d||y|jtjurt j d||y|jj||} | r!||_ t j d||||yy)Nz3Couldn't determine database type for column '%s.%s'z:Column '%s.%s' has no type within the model; can't comparez-Detected type change from %r to %r on '%s.%s') r existing_type_type_affinitysqltypesNullTyperyrzrX _compare_type modify_type) r4rrrUrrr conn_type metadata_typeisdiffs r8r[r[s I$-O! %%M8#4#44  D   ##x'8'88  K     . . < <,F&3#  ;      r:ct|tjrYt|jtr |j}n2t |jj |j ddi}t|tr|Sy)N literal_bindsTrBcompile_kwargs)rrs DefaultClauseargr compilerB)metadata_defaultr4s r8"_render_server_default_for_comparerhs}"I$;$;< &**C 0/33 " $$,,+33$3T#:-   "C(r:cLtjdd|jS)zwe want to warn if a computed sql expression has changed. however we don't want false positives and the warning is not that critical. so filter out most forms of variability from the SQL text. z[ \(\)'\"`\[\]\t\r\n]rj)resublower)sqltexts r8_normalize_computed_defaultrns! 66*B 8 > > @@r:ctttj|jj j |jddi}t|}t|jtjrMt|jj j |jddi}|d}nt|}nd}||k7r t||yy)NraTrbrj) r rrsComputedrKrmrfrBrnr_warn_computed_not_supported) r4rrrUrrrrendered_metadata_defaultrendered_conn_defaults r8_compare_computed_defaultrts!$ Y  ! #  # # + + 3 3'// /6 4 !  ! ($& !$?%% !!# $99$UE2:r:c<tjd|d|dy)NzComputed default on rez cannot be modified)rwarn)rUrs r8rqrq=sIIuMNr:c|jj}|j|j|j\}} } || fSr)rXr~_compare_identity_defaultrK) r4rrrUrrrr~diff ignored_attris_alters r8rxrxAsI  , , 1 1D#'#A#A##X%<%<$ D, >r:c ||j}|j}||ytj|rt|||||||Stj|r t ||ytj ||rH||_t|||||||\} } | r*||_| r!tjd||t| yt||} |r$tt|jj nd} ||_|j"j%||| | } | r||_tjd||y)NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')rKr rJrtrqrMexisting_server_defaultrxmodify_server_defaultryrzrrhrrrerrX_compare_server_default)r4rrrUrrrrgconn_col_defaultryr{rrrsis_diffs r8rrRss$22..$4$<../?@(         ../?@$UE2..*3C/2        h 4DO 154L 8 )%G o% ! 5ED& ' + + 0 0$ 3C/!33KK   % !   4DO 1 HH@% O r:c|jJ|jjsy|j}|j}||y||_||k7r||_t j d||y)NFzDetected column comment '%s.%s')rBsupports_commentscommentexisting_commentmodify_commentryrz) r4rrrUrrrmetadata_commentconn_col_comments r8_compare_column_commentrs|  " " .. .  " " 4 4#++''$4$<'7O$++)9& 2E5A r:c  ||yj}|jDchc]}t|tjr| }}t |j ||Dcgc]}j|dd||dr|} }| D chc]} t| |} } jj} jjj| ||Dchc]}| j|} }| Dchc]}| j|}}| r}|| ||vs j |vr| j j&nd}| |@t#|j%|D]>}|| ||vs j |vr| j j&nd}| |@ycc}wcc}wcc} wcc}wcc}wcc}wcc}wcc}wcc}wcc}wcc}w) NrrKforeign_key_constraintrrrcj|j|jdd|rjj tj j jtjddj|jdj|j|jrd|jznd|jyy)NrFz1Detected added foreign key (%s)(%s) on table %s%s, %s.rj)rurrKrrvCreateForeignKeyOprryrzjoinsource_columnstarget_columns source_schema source_table)r compare_tor4rrs r8_add_fkz&_compare_foreign_keys.._add_fks  - - IIsxx!95*   ' '&&66u{{C  HHC #,,- #,,--0->->)))B    r:cj|j|jdd|rjj tj j |jtjddj|jdj|j|jrd|jznd|jyy)NrTz3Detected removed foreign key (%s)(%s) on table %s%srrrj)rurrKrrvrrryrzrrrrr)rrr4rs r8 _remove_fkz)_compare_foreign_keys.._remove_fks  - - IIsxx!94   ' '$$44SYY?  HHE #,,- #,,--0->->)))B     r:)rLrrrsrrrrHrrXr~correct_for_autogen_foreignkeysrrr unnamed_no_optionsrKrDr\r)r4rrrUrrrLfk metadata_fks conn_fks_listrconn_fksr~metadata_fks_sig conn_fks_sigrconn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namerr removed_sigr added_sigs`` ` r8_compare_foreign_keysrsU^3))I!,,  b)88 9 L!+<< &=     + + vJ $  8  M ;H16%,H  , , 1 1D%%**JJ, A199a<>>5EFqyy!|FF=IIq1//2II-= ()A ! #  ,qvv/A ,8Na166;M NN $?+667JK*  , 1 1::!55%UZZ066  uj )*,-88I' #I. O +::!11!,22  E: &'G ?FJ OsM#J&"J$J)#J.J3(J8J=K7KK #K 8K Kc|jJ|jjsy||y|j |jy|jH|j<|jj tj ||j|y|j|jk7rG|jj tj ||j|j|yy)N)rr)rBrrrrvDropTableCommentOpCreateTableCommentOp)r4rrrUrrs r8_compare_table_commentr7s  " " .. .  " " 4 4^3!n&<&<&D%**<*<*H##  " " (:(:6    :#5#5 5##  $ $&&!+!3!3    6r:)r4r'r5r*returnNone)r4r'r6r,rr)r4r'r6r,rNz$Union[Set[None], Set[Optional[str]]]rr) r`rDrbrDrLr"r6r,r4r'rr)r~r(rDict[str, Any]rr&rzOptional[Index])r~r(rrrr&rr)rrrr&rr)r Optional[str]rUUnion[quoted_name, str]rr&rr&rr+r4r'rLr"rzIterator[None])r4r'rr+rrrUrrOptional[Table]rrrr)r4r'rr)rrrUrrrr Column[Any]rrrr)r4r'rr)rrrUrrr#rrrrrr)rgz Optional[Any]r4r'rr)rmr rr )r4r'rr)rrrUr rr rrrrrr)rUr rr rr)r4r'rr)rrrUrrrrrrrrzOptional[bool])r4r'rr)rrrUrrr#rrrrrzOptional[Literal[False]])r4r'rr+rrrUrrr&rr&rr)r4r'rr+rrrUrrrrrrr)b __future__r contextlibloggingrjtypingrrrrrr r r r r r sqlalchemyrrrrsrrrYsqlalchemy.sqlrsqlalchemy.sql.elementsrsqlalchemy.sql.schemarrrsqlalchemy.utilrrjr ddl._autogenrr operationsrr r!sqlalchemy.engine.reflectionr"r#r$r%r&alembic.autogenerate.apir'alembic.ddl.implr(alembic.operations.opsr)r*r+r,r- getLoggerrryr9 DispatcherrIr2 dispatch_forrcr_ immutabledictrrrrr__annotations__rrrcontextmanagerrrrr;rrQrUr[rhrnrtrqrxrrrrrlr:r8rs#  *(%(6'2&'$632,+7,4651.g!,#,7F, ,dood+ #2< > (#'#''2' '$'TH9H9H9H9 H9 $ H9  H9V-?D,>,>~~!,, ** ++))  -)  -;@@   - ;@   (-. EE EE "EEEE EE % EE $ EEEEEEEEP T/1EuLMN.3.3b '"_8#_8_8 _8 # _8  _8 $ _8 _8#_8D <9~ (#%#%"% % # % # %  %% %$%P (#4#4"4 4 # 4  4  44 4$4" (#' #' "'  '  # ' # '  ' '  ' $' T#6D&A)3#)3")3 )3  )3  )3  )3)3 )3XO" (#H#H"H H # H # H  HHH$HV (##"  #     $6 '"y'#y'$y' y' # y'  y'  y' y'#y'x '"" #" $"  "  # "  " $ "  " #" r: