Mercurial > vim
changeset 31784:6377d791dcd1 v9.0.1224
patch 9.0.1224: cannot call a :def function with a number for float argument
Commit: https://github.com/vim/vim/commit/47bba53bdb6d59057887149e2eeb2071803e547e
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Jan 20 18:49:46 2023 +0000
patch 9.0.1224: cannot call a :def function with a number for float argument
Problem: Cannot call a :def function with a number for a float argument.
Solution: Accept a number as well, convert it to a float.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 20 Jan 2023 21:01:46 +0100 |
parents | cdee4ac5eea0 |
children | 2f3957acccad |
files | src/globals.h src/structs.h src/testdir/test_vim9_func.vim src/version.c src/vim9execute.c src/vim9type.c |
diffstat | 6 files changed, 159 insertions(+), 129 deletions(-) [+] |
line wrap: on
line diff
--- a/src/globals.h +++ b/src/globals.h @@ -430,107 +430,111 @@ EXTERN int garbage_collect_at_exit INIT( #define t_number_bool (static_types[14]) #define t_const_number_bool (static_types[15]) -#define t_float (static_types[16]) -#define t_const_float (static_types[17]) +// t_number_float - number that can be used as a float +#define t_number_float (static_types[16]) +#define t_const_number_float (static_types[17]) -#define t_string (static_types[18]) -#define t_const_string (static_types[19]) +#define t_float (static_types[18]) +#define t_const_float (static_types[19]) -#define t_blob (static_types[20]) -#define t_const_blob (static_types[21]) +#define t_string (static_types[20]) +#define t_const_string (static_types[21]) -#define t_blob_null (static_types[22]) -#define t_const_blob_null (static_types[23]) +#define t_blob (static_types[22]) +#define t_const_blob (static_types[23]) + +#define t_blob_null (static_types[24]) +#define t_const_blob_null (static_types[25]) -#define t_job (static_types[24]) -#define t_const_job (static_types[25]) +#define t_job (static_types[26]) +#define t_const_job (static_types[27]) -#define t_channel (static_types[26]) -#define t_const_channel (static_types[27]) +#define t_channel (static_types[28]) +#define t_const_channel (static_types[29]) // t_number_or_string - Special value used for @#. -#define t_number_or_string (static_types[28]) -#define t_const_number_or_string (static_types[29]) +#define t_number_or_string (static_types[30]) +#define t_const_number_or_string (static_types[31]) // t_func_unknown - function with any arguments and no or unknown return value -#define t_func_unknown (static_types[30]) -#define t_const_func_unknown (static_types[31]) +#define t_func_unknown (static_types[32]) +#define t_const_func_unknown (static_types[33]) // t_func_void - function with any arguments and no return value -#define t_func_void (static_types[32]) -#define t_const_func_void (static_types[33]) +#define t_func_void (static_types[34]) +#define t_const_func_void (static_types[35]) -#define t_func_any (static_types[34]) -#define t_const_func_any (static_types[35]) +#define t_func_any (static_types[36]) +#define t_const_func_any (static_types[37]) -#define t_func_number (static_types[36]) -#define t_const_func_number (static_types[37]) +#define t_func_number (static_types[38]) +#define t_const_func_number (static_types[39]) -#define t_func_string (static_types[38]) -#define t_const_func_string (static_types[39]) +#define t_func_string (static_types[40]) +#define t_const_func_string (static_types[41]) -#define t_func_bool (static_types[40]) -#define t_const_func_bool (static_types[41]) +#define t_func_bool (static_types[42]) +#define t_const_func_bool (static_types[43]) // t_func_0_void - function without arguments and nor return value -#define t_func_0_void (static_types[42]) -#define t_const_func_0_void (static_types[43]) +#define t_func_0_void (static_types[44]) +#define t_const_func_0_void (static_types[45]) -#define t_func_0_any (static_types[44]) -#define t_const_func_0_any (static_types[45]) +#define t_func_0_any (static_types[46]) +#define t_const_func_0_any (static_types[47]) -#define t_func_0_number (static_types[46]) -#define t_const_func_0_number (static_types[47]) +#define t_func_0_number (static_types[48]) +#define t_const_func_0_number (static_types[49]) -#define t_func_0_string (static_types[48]) -#define t_const_func_0_string (static_types[49]) +#define t_func_0_string (static_types[50]) +#define t_const_func_0_string (static_types[51]) -#define t_list_any (static_types[50]) -#define t_const_list_any (static_types[51]) +#define t_list_any (static_types[52]) +#define t_const_list_any (static_types[53]) -#define t_dict_any (static_types[52]) -#define t_const_dict_any (static_types[53]) +#define t_dict_any (static_types[54]) +#define t_const_dict_any (static_types[55]) -#define t_list_empty (static_types[54]) -#define t_const_list_empty (static_types[55]) +#define t_list_empty (static_types[56]) +#define t_const_list_empty (static_types[57]) -#define t_dict_empty (static_types[56]) -#define t_const_dict_empty (static_types[57]) +#define t_dict_empty (static_types[58]) +#define t_const_dict_empty (static_types[59]) -#define t_list_bool (static_types[58]) -#define t_const_list_bool (static_types[59]) +#define t_list_bool (static_types[60]) +#define t_const_list_bool (static_types[61]) -#define t_list_number (static_types[60]) -#define t_const_list_number (static_types[61]) +#define t_list_number (static_types[62]) +#define t_const_list_number (static_types[63]) -#define t_list_string (static_types[62]) -#define t_const_list_string (static_types[63]) +#define t_list_string (static_types[64]) +#define t_const_list_string (static_types[65]) -#define t_list_job (static_types[64]) -#define t_const_list_job (static_types[65]) +#define t_list_job (static_types[66]) +#define t_const_list_job (static_types[67]) -#define t_list_dict_any (static_types[66]) -#define t_const_list_dict_any (static_types[67]) +#define t_list_dict_any (static_types[68]) +#define t_const_list_dict_any (static_types[69]) -#define t_list_list_any (static_types[68]) -#define t_const_list_list_any (static_types[69]) +#define t_list_list_any (static_types[70]) +#define t_const_list_list_any (static_types[71]) -#define t_list_list_string (static_types[70]) -#define t_const_list_list_string (static_types[71]) +#define t_list_list_string (static_types[72]) +#define t_const_list_list_string (static_types[73]) -#define t_dict_bool (static_types[72]) -#define t_const_dict_bool (static_types[73]) +#define t_dict_bool (static_types[74]) +#define t_const_dict_bool (static_types[75]) -#define t_dict_number (static_types[74]) -#define t_const_dict_number (static_types[75]) +#define t_dict_number (static_types[76]) +#define t_const_dict_number (static_types[77]) -#define t_dict_string (static_types[76]) -#define t_const_dict_string (static_types[77]) +#define t_dict_string (static_types[78]) +#define t_const_dict_string (static_types[79]) -#define t_super (static_types[78]) -#define t_const_super (static_types[79]) +#define t_super (static_types[80]) +#define t_const_super (static_types[81]) -EXTERN type_T static_types[80] +EXTERN type_T static_types[82] #ifdef DO_INIT = { // 0: t_unknown @@ -565,131 +569,135 @@ EXTERN type_T static_types[80] {VAR_NUMBER, 0, 0, TTFLAG_STATIC|TTFLAG_BOOL_OK, NULL, NULL}, {VAR_NUMBER, 0, 0, TTFLAG_STATIC|TTFLAG_BOOL_OK|TTFLAG_CONST, NULL, NULL}, - // 16: t_float + // 16: t_number_float + {VAR_NUMBER, 0, 0, TTFLAG_STATIC|TTFLAG_FLOAT_OK, NULL, NULL}, + {VAR_NUMBER, 0, 0, TTFLAG_STATIC|TTFLAG_FLOAT_OK|TTFLAG_CONST, NULL, NULL}, + + // 18: t_float {VAR_FLOAT, 0, 0, TTFLAG_STATIC, NULL, NULL}, {VAR_FLOAT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - // 18: t_string - {VAR_STRING, 0, 0, TTFLAG_STATIC, NULL, NULL}, - {VAR_STRING, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - - // 20: t_blob - {VAR_BLOB, 0, 0, TTFLAG_STATIC, NULL, NULL}, - {VAR_BLOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - - // 22: t_blob_null - {VAR_BLOB, 0, 0, TTFLAG_STATIC, &t_void, NULL}, - {VAR_BLOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_void, NULL}, - - // 24: t_job - {VAR_JOB, 0, 0, TTFLAG_STATIC, NULL, NULL}, - {VAR_JOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - - // 26: t_channel - {VAR_CHANNEL, 0, 0, TTFLAG_STATIC, NULL, NULL}, - {VAR_CHANNEL, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - - // 28: t_number_or_string + // 20: t_string {VAR_STRING, 0, 0, TTFLAG_STATIC, NULL, NULL}, {VAR_STRING, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, - // 30: t_func_unknown + // 22: t_blob + {VAR_BLOB, 0, 0, TTFLAG_STATIC, NULL, NULL}, + {VAR_BLOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, + + // 24: t_blob_null + {VAR_BLOB, 0, 0, TTFLAG_STATIC, &t_void, NULL}, + {VAR_BLOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_void, NULL}, + + // 26: t_job + {VAR_JOB, 0, 0, TTFLAG_STATIC, NULL, NULL}, + {VAR_JOB, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, + + // 28: t_channel + {VAR_CHANNEL, 0, 0, TTFLAG_STATIC, NULL, NULL}, + {VAR_CHANNEL, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, + + // 30: t_number_or_string + {VAR_STRING, 0, 0, TTFLAG_STATIC, NULL, NULL}, + {VAR_STRING, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL}, + + // 32: t_func_unknown {VAR_FUNC, -1, -1, TTFLAG_STATIC, &t_unknown, NULL}, {VAR_FUNC, -1, -1, TTFLAG_STATIC|TTFLAG_CONST, &t_unknown, NULL}, - // 32: t_func_void + // 34: t_func_void {VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_void, NULL}, {VAR_FUNC, -1, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_void, NULL}, - // 34: t_func_any + // 36: t_func_any {VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_any, NULL}, {VAR_FUNC, -1, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_any, NULL}, - // 36: t_func_number + // 38: t_func_number {VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_number, NULL}, {VAR_FUNC, -1, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_number, NULL}, - // 38: t_func_string + // 40: t_func_string {VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_string, NULL}, {VAR_FUNC, -1, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_string, NULL}, - // 40: t_func_bool + // 42: t_func_bool {VAR_FUNC, -1, 0, TTFLAG_STATIC, &t_bool, NULL}, {VAR_FUNC, -1, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL}, - // 42: t_func_0_void + // 44: t_func_0_void {VAR_FUNC, 0, 0, TTFLAG_STATIC, &t_void, NULL}, {VAR_FUNC, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_void, NULL}, - // 44: t_func_0_any + // 46: t_func_0_any {VAR_FUNC, 0, 0, TTFLAG_STATIC, &t_any, NULL}, {VAR_FUNC, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_any, NULL}, - // 46: t_func_0_number + // 48: t_func_0_number {VAR_FUNC, 0, 0, TTFLAG_STATIC, &t_number, NULL}, {VAR_FUNC, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_number, NULL}, - // 48: t_func_0_string + // 50: t_func_0_string {VAR_FUNC, 0, 0, TTFLAG_STATIC, &t_string, NULL}, {VAR_FUNC, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_string, NULL}, - // 50: t_list_any + // 52: t_list_any {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_any, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_any, NULL}, - // 52: t_dict_any + // 54: t_dict_any {VAR_DICT, 0, 0, TTFLAG_STATIC, &t_any, NULL}, {VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_any, NULL}, - // 54: t_list_empty + // 56: t_list_empty {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_unknown, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_unknown, NULL}, - // 56: t_dict_empty + // 58: t_dict_empty {VAR_DICT, 0, 0, TTFLAG_STATIC, &t_unknown, NULL}, {VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_unknown, NULL}, - // 58: t_list_bool + // 60: t_list_bool {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_bool, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL}, - // 60: t_list_number + // 62: t_list_number {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_number, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_number, NULL}, - // 62: t_list_string + // 64: t_list_string {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_string, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_string, NULL}, - // 64: t_list_job + // 66: t_list_job {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_job, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_job, NULL}, - // 66: t_list_dict_any + // 68: t_list_dict_any {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_dict_any, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_dict_any, NULL}, - // 68: t_list_list_any + // 70: t_list_list_any {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_any, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_any, NULL}, - // 70: t_list_list_string + // 72: t_list_list_string {VAR_LIST, 0, 0, TTFLAG_STATIC, &t_list_string, NULL}, {VAR_LIST, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_list_string, NULL}, - // 72: t_dict_bool + // 74: t_dict_bool {VAR_DICT, 0, 0, TTFLAG_STATIC, &t_bool, NULL}, {VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL}, - // 74: t_dict_number + // 76: t_dict_number {VAR_DICT, 0, 0, TTFLAG_STATIC, &t_number, NULL}, {VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_number, NULL}, - // 76: t_dict_string + // 78: t_dict_string {VAR_DICT, 0, 0, TTFLAG_STATIC, &t_string, NULL}, {VAR_DICT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_string, NULL}, - // 78: t_super (VAR_CLASS with tt_member set to &t_bool + // 80: t_super (VAR_CLASS with tt_member set to &t_bool {VAR_CLASS, 0, 0, TTFLAG_STATIC, &t_bool, NULL}, {VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL}, }
--- a/src/structs.h +++ b/src/structs.h @@ -1462,10 +1462,11 @@ typedef struct { #define TTFLAG_VARARGS 0x01 // func args ends with "..." #define TTFLAG_BOOL_OK 0x02 // can be converted to bool -#define TTFLAG_NUMBER_OK 0x04 // tt_type is VAR_FLOAT, VAR_NUMBER is OK -#define TTFLAG_STATIC 0x08 // one of the static types, e.g. t_any -#define TTFLAG_CONST 0x10 // cannot be changed -#define TTFLAG_SUPER 0x20 // object from "super". +#define TTFLAG_FLOAT_OK 0x04 // number can be used/converted to float +#define TTFLAG_NUMBER_OK 0x08 // number can be used for a float +#define TTFLAG_STATIC 0x10 // one of the static types, e.g. t_any +#define TTFLAG_CONST 0x20 // cannot be changed +#define TTFLAG_SUPER 0x40 // object from "super". typedef enum { ACCESS_PRIVATE, // read/write only inside th class
index bf8b705ed5c00b91ac53089b0827d2c8323f675d..44a8d4b106532168bc50cb3c5058df8b641c5a62 GIT binary patch literal 104218 zc%1EhZF}3clIZ>HUx6ySrPRodB|CAVZQPS4akqQg<ZP0@+{f|ip(NU7Bau2JWy{UU z{q1*N01yB{iISc6?B1)VjU^Ho3<d*WFqoH?co*e`xC*m4UF0In=h3*xMS3oZ%Sikj z&z^{UoW=7(OvB`25ne=lJ3D#0$i|TvUq<5(dsp#HJt(4VHe3|()O>gqN7v=Ucs5V7 zLIisc;MWs;6hNcm>WL~2twm8XS<L2Ce&>9Vj0wl#Bsw3C!aN?gJ3B(aFYz{=MJMpS z-5H3y$l~MzUI>vz#Ue{Ya1-SLJOF4=7`}|d>C~vRdmQF@loiA1?~8ESrsAC)D2+{; z4Uf~=Je~sdVU%TQM$NaxB9BB!U5=A*DvDI(QAAX`zD%c)pt52X<v9=yYCK13y;&qc z)9;gavf7S93mbZ_+Igv)sd)zgvYWPnEK;Ke1PrZ!Cs8h*e*LuoD$T^pS1*WAI0QVp z^b>)cgz+?|diaUPm#Ik7;!=@T(~?RvVX$)y@j8o(=p3H3sll!Yel-XfG5G>`{31}8 zjTYzPskj)pglPx6Z-uwEL`{7@X6bc45WW4bxDMlDc%Ej%Y%z_pf!P0qty~O#f#)Y_ z_KZfm-R_8|$3hPMEG)*C?SQBSJt~0tqX`Tkv?uhi<F{FuOo)toUlED+zWN!aOgMsa zKp%0QE|SSWk*b2E{9FvMd&7&UAo{eS^Ieg_yo%bru6WXc4>H6(F`h<YA{KK(|80@Z zZQ4LR8hadynxR)5!c?Bb8BjU+6}trAAB2k{ou=Ugr^oCAJZZ!KFfQ{q0b#I$XDVC+ zOtGXnjflKXrZ<d8G|^myoyZnR5zivTLQYHm#K~1SjVB6{Vy_y0!hY=SiQoaZPs;}( z+#J~=ouuk(cBAp&GWWdrkC92l139=4N?aKLH%1to_Rg?}c~pq3m_H2=Ss3l{H2`D8 z)er=mPM59c%bzeqa7`-WH1Sb&@2l^5$W@(z;(<S9)*!WJQBoL7`_+>@TB~0~=Q!0D zS=2ra?tK)pWN-!}^0L=E+8+ddcqR3RaWcduJemv@P1dc+9+t(@2`ny)*(l27Gg_<D z)R<#mUQPj=NZhHUN`D(>MrpIIRWt|Wli~}jfU3$kD*C)793_c<i1R|R@hOmJzt<lG zOsFTlL2%}w)OD7^ma6D7Ou|{T1#xJb9@?a!Z7VoW)1d4j?UO6Jpl9LBUjNb2VAF*K z`_%vsbA9_9Xdv}okA8z`3e52FlR+h#k^E}!$EdhWCng7|5{;4TJ?`HTa<p;O;k609 zwn6D)u!36Z<sU?^DeN1$2OlI5tVU4HV6JkJtwGX7voh5^5?sShVBIOryo&)Nc6a@% z=LQG;Kd&!7o>@Icb&T}Kj!|U^R&pRMzQb9Z^KS2ojrjJnijA+*6LWjy&pox{t`#G< z78?=aJiLmAAguw+FX7J)A{MQd;UqnRReVAxH!1&EoohIVN4S0V2+J=SJB8?)VazMT z2SV0u2aos&HnLHe-8-)im2=`Y_}Z8?vO2Z{SS7S6t{X6}bL#;k3Ir?XbyXM8t#(-T z7|~FJ3TQaxRzN&4KzWM+S-J+Lstf~D`B^eywt2f4kE1+is%^+BT0UhStuoE+XFM?t zgQwPfoWskhBO_O*x5G;NP@>m(zEk73=b=dPkQZO(=X>JarBeOG32B2A36&mg944qS z7)kvZ9;V{rQnA4~>tDL4ULtsE(A8LX0B&AH053fk?l}eNs!p{A!>GEafqyhmJeSAZ z9fKv+(XZF<4a85$gf@{0=?YQt0mnz+)vH0Y97l5mgh2GE*u&Npx~-Om4E7m^i;K(R zZurMM^_#rJi?$+x2^-snLPk$Zz@`dd9Un5Jk`Y(%(Tc&V(1J&AlQC1B>Qu&wS1JEM zty)|1!E>nbCK@lYJidzB`ncLL&aHBna7v2%xXo38{TR;6QquwONnU)-u#P=YXW_g( z?TYpgSd#P?6&R;iXPwUJ{#kWV#BNStWG@XZ04@cyaH(HC?d_|@LvzG=IHg&tSjz5M zPfsfG;AQWiKVZ#~u3cn{$TMT`aa)bgj#%BA-ND}3-8AX;{mUxJ<eVDvi*@IARn1l` z2L(LxP0~$|eGhvmEFG*`PAVAC>hcPnSc*z7UP>C@7%ftP9Iiv_^#_M6m(g@8RR-Lo z_=iI5GRmSr*Zek|tgT8_HV``x20*8!)M$(F95xFHYQV6dOOHI-95_7WbVafeV|Z>L zR`N-dY%&7-4@rvduNnad17ZujBU*vN`T2&*B#A^-19k};#xS3U<7haF&eJR!&ciHP zt0SzTnpj1)jp+91@m6$Oi^N8BYl6k+>UwWgqqpv>Be(k&SG??;#N%T4Au_IUP~l+o zY9NB8)SAl%;mHj>`Q&cxAI&OO@lPPA*hsvgE%hzks9JZc>YT?90#Bt^v@N$i8+5OK zpv$vl1!6E4r#lk~(t!2d6pletA1tG8m3mxen8PHd3!66IaoC-5FMnn8W>M7@rzrHp zkegUu4^$n6GONB(2`=8<%p;*xEB}UC557X-K8eu+NCD>oi2&3?_Jcnrz|GVv@(B{; z$Na+B-Iz~j`GpAJa6<3)_V%2e&Zy1z<hr^fz6tZTx~lyrkNmeNSZNq$7Yn+aDS(Ds z+zlYOpJ6yc#X(&$@(HF^_x5YL=28PuSq?;)+?0Y9f3V5@u2}ks6z9M?1WZ2Ba2t}W z2V3+rNf`kQR+tRdt!1!Lnoid(r*&*}LJEoY35fN$Y_y@%UGWXGY=>yj@iLLD*DgpR z->>WBy7f@W7Cb`rmvqGOT((>_{MU+s5b-%4bkd~e;xSP3MYNJsGDoYnXautP3OI_l z>gy+y_`K#V(?i}n?)Q&ayZZ-GK&{@}_PjX-|EE$w*6(lCb6x$Q5ow-0^e(4zOT;B$ z%VqS(C|R7uQ#cK@<4L)kf^?$910XiScbC(7I$z9(=TvnFOV$GFQ@y$^MEvh4Ptx1B zb%S8mHMV-cTDLAqvR<X}MB5RZr*Hzh&bJWZdBcCsa84AMfk5y(RzL623B|e|S#6lr zs9StXC#_syPun-ey0jFf%rdArgE^$PKSppz^0ZU9UrWIxtx9U%CS6&qeo&-Q$u=f% z(xT8dO_HQvE|(kA+qZ}BuRYq-Ohh^!1B!Adc7&OZttT^93`0$J3gTtID-O<BT^7^k z3?SQaXZ<`;czlnIXQnh&k))DL+=oH;K%`B9dIDfdso<WNq{u2T)VV0G<8dUe!(2?G z@B==cMYELDR*lHpX<o37hme#*5N?QxP_++eEpia8id3NBPqI~#UbCKmTmVZF`B@}` z!cxQE6=)j;TM~3AF2rS+6TC2iU(t+=ZLtEcZCGLquSOBKg#^GM<+sOsTP@#;r%gzf zB&!sx(A)CG6sFr`VjYgG0iM>5?Mj)pdTsTGbVl5NDo#~j&OT3H>Np8785Y+m9c0$- z4RuoZcclRC6TRtvJjxeS)bySt?G`BmTYkx$=;$1bOrRPjkzk~M!eSqaV|_?62-qvD zu%6m^e_E1UZ4OnmzH94yjgziGg?2;2JKBz3R}%x@EfUr^@Dn{se8V(=H7JX4C#8Xr zw?642LDlDd+~X={)@0N-T#%xZO3Ix})#8oOhP&$5J#n38A98sUnDCWg3X2O}#F(I+ z4e*fe++d$tT|)I=7V(_7%l@1jcZr)XH1D#TxM-U!DODnJ&+&7kG*gj9L*T})7&}_| za1g@(Blv$@!r)=i&8uz70Q-dvw+5&Kk$;taX=->g5bx3y_Sob`DBVRa&eKdA0u6*# z=$Q67{BXmAISNW>46J8NFpUzuNc#r^YP5r8P`f5L1gtgz`+=^#F@2s41W0wzYPz_% ztfi1@LNP6%;9L*>c=L0ZLG`>1|EP7VEB5yGV1gI+#$c*1k)1OnFSZT8vE3Z+>9LxW zUvmKSR0Lfz0mxaBg>pN39fKk@^XEz;g~*pE25Axn6@4Q;td;{h!8YM7-lZ3{Rq)Sc z7WtdPx?TCY26^Ky!d0+ndlP-iZfU<1(GH4eSp=Qd85#Z_9zBwFzobcb?0$c|0dOHK z!OswVv{o`yzaB+1mZ*%q1o1Y)b2|YkSs<r}d^!|TFXw^F#l$z%fEeJdJ5W-$<d9~< z4G#6-UJUGxtkx#mWv>R<)+RMpGmxu?w(GW_SgR{qF#av6l<v_52WpuQ;g7$UtZ#Nn z&G#D>O!#SS`7RH_#<l3WyHYLTey`h`EM^0_J#!f)43YD~5E>ed@at$4*j{9Y=t5iq z%K=n^e@7$l>ghBW>>gK11;0aVsJ;ps)OZ=BN!4Jv^tHKMHf!_NZLa{(9EafM#!onW zz8-^`>dPfnH`oIgw(O#fE+}CE=SmWLyCNk69}uXX3jL~<F?0#!3suv1kdTe_`Ui&< z<nST>uX`s8x6%)->a_omeh4<T3iNNxtShC{4Q-=|x{C|*$vG_+Qnv`-O3^@R8uxpy zk+Hne*s!q{ZXd0+%~_Woy~dXw#<E(AXhnTYSS}45P3#z-hg-RaaQ6WqtT<1_KI}g| z*nB`N#uaG)&hFG;XoSx@aTG{LsRe4sl|7;|4FjJ3`yxgGh-gZB7$h>tNc49c!ft<k z86{{cIbHy<H|jqw*P(f|wE02mK7jdL2|c^miZ0eH5cfeg2{pIjaPq01ZRb`{RM&(V zYF68fD`oE#SISEXYcwwC2vCm3B!$Lt@Z_+RgRmvrSya9lz}IG!rlPn*(h*f%7T-!K z0{i?Gu4zn%VUZ5cr)gMhdE_KlHDE1*L5d9e){%cpO@v&uLl{&47H%!I5BCnb1o{BK z^qVRoY-ttA^b4HjrB=Ufdo>v9mwV;Y5sR-~tLRv(XUwAZNx#dJ$9jmempu0REIr4b z(IG7WDj?LI1`EAzR}NXQ>k8>O-$W!MuBrNU7`$0o1RL5|JzQ(GV_@KGxQf+ws2m<W zY@pg-iAsrqi`0gwJbo<gA}eE@kl~~4l!`CeAQE;&bG`6KS6~o=&dI!VXzWTT!2tKn zsua(4`6Uv{u*OuYRj0nSfo@M~YmAz~0H4)2$!|@msIvbnt591ekxw5zQma26q*h)- z%Niyny&yHfCxbPZ<pU3HaxXf1xCWik+R9C)@aqNM%a&UQ-vuSsGoSC4wWs*2`Mvup zg04s6IXYM;kKHZmU)&w;<mt7AEZM9x#*F|R9fG<p*%hsqb~|Ok#%^rlr{qJDUMGfz zkDvtAJqa*eskgrqA`PolV(ZNjyE%CYG+aTUEkyKf{mXs*xfsM-bjYpsXZ7e}Fm&wd zD!6Yd3T*AW|GDtEC*<a%{e0pik0)rrkxXK(G}!DcRY2Q#n?r^g{Ma<aP`zSn`iiZi ze0izECsp2yvW5Fkjmtg!$W2)lFd5J0GF?=+RJ<wblmi#U6L5<9pjT-!{8?z9+(I zo~rvdJl?iczgl>OFNX?m_*?OLON^%J_`^n{<qk{D=>7lkYB*l*WTH#cOnE^Gd1Jb% zq4Z4+Wl2(xM}Chs^?@Ny#Mj!^#Uf?TCU@+iHo+IWaA<&|sru2Y(0<2L?V<lF&!Y0< zuI}FFGRbHrjZ}P;O2oxzk<IUDFIw%ygbg)26)9)jod#m@JE!wRZsP>yoa~%=XU#S1 zoeIaZjUMpP6R&YolKRhoG&*xYvw(Bkzm^uU&i!&bSmHH9$F`#I-y;prvvfwSl+o;( zU!8f1uf7YT3igGV2gb@fv4h$>v9d3LC-9!4D68>q6Ya@2os_I3r&L8zU@Z#)Np^ub z@0x{8!H?atZqcQ9tR;AcqEzct{GS%oAF=XjW0vajw|ayO!;}9%M4x$x{+!uV{%Wv* zx8MZPAGGY7E2h$&?9M(0r5(UyA<Pc-SL~_pC4;EIt5G5}GUdB<hrLHRF6Hs-t|yWM zM?rE}q9H>x8+6oVwbrV#@2uCG)Y+&54{gZ<Hed`9_-r~=x@O<&*D`vR{m57HN4#N^ zrnLC@fqY&o)WL7E=hiziau}L|<@0G=wB?<q6c|iwgAR1-ebO@2RTM7)gds9k%{$^) z^!DA?^lJAwPA1W^9k?V2pb}mA?uaIc5M4Zo@S=Je2$y86<L!yc3w*4{6t%zHg@$-& zsy89ZQ*p2*Q5sf~RN1VO(S>pdws8<KCeeL-a(~B}V4I8V(s<72)#AvNB*fF{X1#=| zj5yH&o1f5-vN5RFl;kCheZ}a{2=2+j$?%Br_~8JV$QRr|VmwX9x0i?6X2ZKxt8JQ_ zTeHrss84u$tE<LcQRbqw<i(G_5QDACJ132!18lqvFz}md98!Gh?O|EId2l+<h}%Ow z%rC=9dYwx~*m~r@JNFM=!-0Q>o?}r~quoJ-sDWBLYTXdyLDq?;GmOJ365BPrVj<;} zJ*qOxcg<r-Y{@NmL|;Q1JXu9l3yKS&5f2{iKlIw4?VyHG+R~Kj_PjKMVs+ugK+Ln~ zJYN2}^r{0=uMhIFRo8~P=|uJs@sA@)O^+1FTP~f_YfoEK@uDPJaSLOZk1vrouHrmK zldCkD-kAD+bPt%O>AWF1%-tqU+p$&{+v{*_6G8sMwqkNcpupw_Wu<!@iksXCWejy8 zV><DN8Z(%My%jbvRbmBR_#w(cqC(44X?>wQWU`Ao4=4`dt?lByrUw@T6SQsX(5Ole z52O7?Ru`kid6Ko4%VozkQ(bG7`UZ8ww0P%QYb&7~HnEPVlN0lbWfM|0cZEeNdwSM< z>TYX$NWL)(zLH0)>4)kTOo1X}_enIKh8fh3!fYBx8FHUoKJki-UnAI1ud?;C#32oZ zvzM+P^EfI3i(n|!o2L2}*~lNnqFlpu?$Kj?7n=i&t~t%|!MbZbrwjI#p1(uuyX1Dt zVhD9rw0Q@$2`Q{5v@3Aua0p-j^-jB3UT59m==s)g=@-epG5e>UeU9O~hrI%L29Jw8 z1(pd5;+qnWJP8WQK9NNeW9+|+itmePR=+Kx_jmosuf#JdN)6PX#Amc!)(*yJV7Gt1 zA^B{S_u47=SLkV2@cK;SVJy-*J4@q1Xf}&8ckl9zRwF&{I=lOc>jqM?-xeLpT!E~n zJF3#V>oS*z0@CpmZjc2_Dpb`GcoI*ZQ;^nbP*<4+?N{B2`l!qe-D$sm`|8c{`^o$J zL)nRH&}J95Z2kS|<M(HKdwQnXkbpd08U~Dv1Q3hMEWMtmaZ)fyqm!$`&Z=U6=BV~a zgLRvc)j7@XXlR>wlK;0ESii$Dwhl+|${7OY$0de0-{jWgpdI!M-_CyNR}mgKk)!RE zIqZ=^d7u70z~Io8WxBM>nwhCR)D^;y;d~%4Qs>wB>lh<+;+FyA^{HG6(dr9h#(4T= zwPv)mY7r$G!6Mm`NSu;>FE}F$3REKZ4={j+yvOUb&Y&>1zrrD~0mu@L_Y}7=Jc{vw zF_Im)kDHjId+j32bDTEUDt*pa5#Iid?lZsm&0H~18O|=pjfJ6Yof2gv#+8Ag@2+>G z?Eh1G=b!h}a5kER_Jprn_u&;rIUj`}PeRZ3_V$L<xd1xNnHJ4OPO6afyRNRR)JW?K z_8ONA!hqevJmr@+zr)KmdZjroG?ZDd!zDb5x)+W7crBd=ac{dF%MhESVbQBp`DrdN zSg_XcD6=Gv&9Yo`Z}gUoV3shkZ`_%N0dALmKjyoOc&bgwR!A1socb*tb@eV{N)@V) z&^IQ{%7OFsU`_6?T0AQ4cg63Y2L(nVO(G*72F*?Qt@jag996~zbofV%@NcsL?L9hL zt(7a+z5w?H-}$o<AvsPh#>g@PMoMB1ftc7;!d=N~n^3fO)QF;?VdG61JhAc6asc<* zM)!<pMI<~d$%`jcXJLXv5C0F&rIoPy64oY*%}R6Ex1>h@0WbU<naF0KdKOyEMD%_W zFRJxUA0^tb@L_vZ{ro=(u5v{WJ8H9_FeQNups^8)t`BC<cf-)a?y=cqU1M8Dy|RHL z^q|9-ZL<h8Ivuf`aa@ynK}sPAbeOD7l<kqmTsJ}YH$sasU_a)o%Z7OoW<|Rf?C<ZR zO<freThE&XPH$~>a}{NyG>_Qfl|jVGImWZa6gGQfDTNpt{q8aE7?!;nJY0<OA}$bU zs~x<5|Bs;4LK`6DsEfdL%aG^9A28MfW`RMQXR-Gc9|sSi4xri4jL#%FNAqRx@nnLs zg4$)DQ@AF+cTtiOuGHm%t+EDD#rlzyffk!YiZ`SdXa)v?En_yCSPzZ-eD_3>3W}U1 zIEx4AB9+q(AhdS7qRqWCPyt6+XzFc<6WRNhI8hK)a%<Y*>%}GNXiq5}Ev_c;=d4@- zE(Y!x0h=njPuyYtix&iWzgV_FcJ`~*T|an<hHe7WWc}CX3tVH-u*zXtOjMGBmeJQo z62M{mf%vY+Lx-LC=t$ivVzBf0lRe|q2_v7NOSl9oe_Qzm`Bh)CigBE{Rl7V45;p(b z_*l|_Ot;3GxQJo3nTI`hrE5&rN-4N*5n1F>J_G{A7fCe1cz*7+wob;T(G09S5Unr_ z%@Fs&5*2|Q%lx!88jV_xNi|HZWyhNyTcRYRP!H)+W&J*7?l$F4^ATn%QqUkS@B2oU zJfQWR4SXFIt=nVajdCI0WuZ(&e;H;W%=j!H$kx_~g>|U@;}1pk9}3kvHlTPc99teU zVT@-D3_o!LFY>2-?`*6rS+ewD**m~WK2(OI*4lB<6<-#)TB79K^d3JBb;-uurSW-O zCCMCs52w*ZIKENjDN-`<)}Cft<dAn#w_{A*eDEzS0UwtjMv47Trio4ItAki!sT*G! z6#k(ge;)HaBnerMoUk0_MS-cM41aZ%k5<P@6Dw6<XJt!D2f0y;Nha1cx?NByy<UPS zI9ZG%mhDGb6n>B~mRTYSa~W~#Jc~duD1*vx#4_VF$uTw;#-)(@e|f_oo*I+tH25|h zp}6%noZ+A6A>9?phw>NxIWsEl9&-=i$TS|qRuN9U@<n`(k>n{sm@elOp_w=ypTeuN zs#`dJR8*|-*m>!M@vgwz6rAJx{HZHGe)29CAAvj+77vIvz+6~Bpn*7m3T0%FZ8!v0 zlwmqYZo~CrS}s`4&AO5V#QRw|7hi*931j{B$szpn_WKvd&(X8~Egk}LnKF1-8aA0P zNkV-pf=am2Sf&AZiZ3;xzD(y)hA}3km9osGWI?RhDhC&TF>Eb0*#Y@kIQ>Edr#}a0 zN+)ZCh`ET0EV^h1Ep)NvxaM$BRL~V{C$AoWjjri$5Q>o)i;0K=ICn+`lC&*7#?E1` z0jK8e)_bH`OY48DTZI__Mu^dMJdeJ(lM&z0H`jCPd@*P=lAnprRl{bES`ij1mg6+K zidf0%vW<oL7Nd6YmtnIp^R_PgVvt~eWsl&Xim|~=+d_})&H6sN29~$$)h4Xyr9p*1 z;k+U9uXEHrw4z~AkFC?Um1Qml-$jKL`dxdodK2z)BPR(Fk*fOEWvtxA%o5wgLNxbi zoH#=e4AOC^((lSd=WNQgNTByo7A0dgF`a{O9s`%~z8wk%Ls?RQg0|(C)VJJ|Q6KP~ zEDoEc7)4PcH-1dBpv}TD#f%gM)+AVQ4ZexqKi;IXBt{nNwPA1U!jUhT(3zquMqwT~ zQ#%~!_u?C|F9s?(Mr39*u;q11UVtmV*;emKSCm-|zQh-j+qfb<UIU}QUk5|#6S;n; z4i=O`ufK3xo?weULwr*@&>G%9eg68z%d;x`oAUS~o>DZxA7S#wKj4DaVUg94Kj_@< zn^Nj?F~BTaZ-7tIne=99Po%7enPt2}nK8<fy$?NcAOG~7LZ6J^cDt(YOH-25Nl$Hj zd{Q^-6LHP@+jN1>oIX<c=Jrw7sMr4Zp*O%#7$5orarlX*yC(aZWlx1{b8uC|-a<c2 zjH!W&dzynXYeJbHKxH?eD;lLIF0NBtLs?z5L81q|jzVFK^Em*NojXtafCo=A^@BGe zzv`3<IPydV9O=0MM-(hG7r@$F5?xZ<)l_JbRANQF=9wjG-8n4SGX4s?bVy#@M3q|? zOnIZ$Df$bWG_AnmV5^YMTc+m%uAVw9trr1OK6xX{Q`LYk2=Sk>M~8kls)pMl`A6YJ zYjabin&zav4OUi;u5I!0UA%6cL{K3&Ts@Y<|K=QL<ea(-o42h){@-?HKiRei?kf6c z^Z+-wu$D#surVOlFE?wd`N1xt?Z;W=&AP5Ob)DJYDlX}Z^m{vp*AM9M(GL91)DvH> zPF06T(Q6NF0ntr<UQ1DJpQq$1&Oi$Xs0Hg)r11b-x4+=5DCwNcpg8H&jxfr@8{6oB zZP{hLB;ybml;Nd>;K@0a$z(1SU`m7lGEz+MI_Xma`YnwUbfxX0SXmcmpN_(&^e8O? z7;C9#|E9DB)UW8MZjr`(+crp3&AcQ@SC$TNW&|th$oCe0eFH&d`uUAx?y6hqn<(p1 zv0hiBCctnx$Wpl{Pbwv!Jn<Dgf>Vt|-K}tRWOT_VHp+hfg5C+1fyy^!_K*D)uE?JH z-{>r5OeF22d^E6VEBQ>;!bw}hXk}SVTKU_0StYC@RI?m)Zo&2Ei4BP2bk8NurZldA z`^E>aJdM7VPK?G8RQ46$$f=$;p6hwtWH%E84$)IjCz3Op^AD6;YV~M&OE)<J)}EeB zXuUhjebcZ(bz1bdyTviFGBj#b6pU@t^Zppl%LKj1IAl^(7c^K!`bcn@bN6!9j#gtJ zY-uY6{pu$f{P0^1_vw~wTV)(+Sdk*bFh>`SX2EYsz*_q4Y0&_te{g8`ubJ8Z{-Y)~ zy=C+Uw|RW4VqAHooQ-hd3=<~3^1+LET*z=4QY~o6#_;eo_z>L$cu^YArW!c)De#%9 z@5<I#f4{CSjTPG|;l-A+fwgi8qm~PiA|)F_mm@i`aYctU)JLk$Oc2IIqV6sijEd$7 z8*3#zt8US4^b|T#2c=fD^e2lW)mcbl#KF3BaZmQGz&2l~urcMr|L!u%BipAsho5M- z3AkRt0um?6h(TRL<$H4E(2VhoEcXg)w$I}%r>nD4WjPJ)C!TFX*Fup~mG_La#FFlZ zEG46)=<B}%8LCJHuaP=`HG?(V8xo12tbm^k$&p-cOE37DJZfx^fb>;b$hy38D}CpY z(s%YPeP<Pcz==y^VIl+5=xdY}p=qRhsq7DGqvd&eR80<a;O)mV)>^IaK!#b2N&|3t z^CaWYyV_tEFon?b#h%uXHxE4XCMsUhl&M5KQ!(jfC_u-F|Ad?5EzHP&sBg>z4O#A3 zCyL4rMNzMMTcyw)b!;LHv`*}9)c`oDy7(KESxF0Ogv<Rw<oGF%Bsm(p!B>X4tzGqu zu4%x|F#j|6L#4;7??+Q@1_+h!Ori4M{AT2~0lC_vHthOK=-#W0wG#)2s?!$(>h{w{ z9skBRf(+N4r8^~XcL_Z7j&x1w&%_6aG)fPqy3x^7Y06C36Goi{6^IIfu&w4K;^<rk ziAwEqT@CGi{~3t&dR{zBCU8_TCXG^V;VHmFLubjm7(i(js8X$Rycl2=eyTK`S~J#k zHGyNd`r;0PcU#eYao3yu%1XMg=*_rS7*oBLz3_~o-2w-fbHVghw$k6Ym7}icJ*LZE zVi~u&qt%^yyr#K3V>4}rl@HWtR!mpmnfOYkx{<OMnP_Ro%m?TrZ%?TDT{Kr28M&CM zR-w_O%Dzmd#ns0Cn-PE;`hTta4F8Ypw0Xy%P6M9!wD?+y==zp`&lb<q*$80Cc2Ppe z<$;?b2x>>vE}XB=$$YJFoB*Z1vM1L{>E~!!t-$NP{aP>C^7VoJn!|tKbJ780N;&Zj zwIT)tjeYe>l;rZ8o|hPxz{B3^#zPaiu1Azs<qm9Vn^6p197Bm@Siw>s%#m~kf}@^= zfIeBf2#orcShxb!(SaE(z*O2X(jyn?kwkjbuiOyf5&R_0uET7CEZQ~>tNKj+@+wOB zG~2p~@>V5Hf?cL24X>JweEzjh_EDCl=q>C`@^nwU#Mh|Yz`11RQPcU~7s+*;Oeg{T zWhAFu5sp8gWu$wY_4ZnxY@a+bjhs9sz1gXp99(1#o4_n=<nrWk(|#c%1}5mc9F;EO zvH%Sos$ot{GF2;6&JVY;j4BWzb9m~r(@9j47)?+^F-j-MX=0Kt&|($MQ89ksBr52T zv1inOhMzL=8@llk!34X4!SIc4#6JWK=qKyZJu-ZQ$1`+CE<MdkNDSv6-@<3de6phn z_ncK~0>@u#z)Gs!ZB{nKqcJ;>x}MWiY|as@2HZ26`kl!Zm*K=6zjJo_jxR0?v{#0u z>oUqQDkHy0+zg<(0WM8snPov8DMv|vs~xUCbF}IOi4Eyan!eg;B&Cen&fjJC6zS?Y zQZKKXC!2(_+L-VDLl}-^_dq6bIL5~$e>9g+f_V>#j93gD-p_KQc69w3`%>wzcVN?# zT5fqQ+rL^}0$5PY%Ye1UC)G=W4N+A=11hNYwnMc3!t|DiUZwHm))Xxt^A3+XS%AWh z8ElG!p@8l5tQg!RG=<^YcjuqEBX`B@8}Scbm>&3Vy*9+BcJB512b-ew=*eB6B<>Wa zhj)Zi{UY^;AZ4)-YKBnQmI$1l88@VgJ01_jk8w^uR9_?S9?NZSs??y3C#2Oh-X<GO zfBdvT(^Plcrj15>nv6%=kF61Ks#_iLZ|yb5ymDGQ)&$_03&01q39CGL<lS{a3~9LK zYLpJz81Gz~HxWHayG{$~=IpbswL{d%uW9As!?G2MDb8&`#YRm$lpRt=UuIj*iqsI4 z7sk<=_=O6_Bkb{VU@5>?_rEE2M+{kDROZzXZHqU}E!UUOy&*-d8gkUCA>Lna>JVQV zYG}oNSB&gSybTSd_aDg=FP?PH*!p-jkx5hlvB|Oxy+-qi)~E$d!w;o?c;pvO&5jdu z-BG{0x9#;4omt`aUp>Yr^@lA7H9AZ&Zrzc_Me19(F$yc;lV!q&lrpmelo1hRLV8oZ zrItKdILt0=Ito<@y#Po0t_X{}wkf)R#sJzt1mG!p%F$zZw0kT;)`OBYB&dthI$fG& z8BZHPGfbZp4f6v3YR3a44&F<a<ne|tFY9^eq%VYak2NT+DXZ0AAZf&KXXXYze$t4c zkyweC8TCXXR@U<%_A#V*9vI!@)9$f`#+7AF2RE}yM<XK7u@eNL&(T=)fQlYgp&M9u zD%ZEI07}xVY@;z0WrW{=W3*j6)M}y4daFsT(zqSh6S6QPcXQlUDVYv#u+vEVeUTQC z%8wU{S(tsOuOszcTnC-+N0^9Z7QwM-qRgEzo<u%5r|@+R@YH3wNNaiXd#gb;ik@BG zIQ^7IZ|&HZP$JDfxEL5b;8yXsf-rpT^mRk64@rC;xj6e8>aS>tfRy7k&!Tz68u(C* z(<vN2XP6L8#MU6G2p&3U2WDptRj^q0%^QycX||w(k{o<DD|+A2qd~w+^hH#R7uh_` z+nv*%Ypy8`9Axkda~&>a)Nz^sn=GP98MlUO+1)IQ*%8W({5YyI{UiaP(ip0=&3x>8 zroud+O=%?>HY6@z;)A%9SBjpDABfZ*>~Uqz50%(My;-}1k~A~K3_hQGFEuLoP2)CI zobEq7^h#CU9ySWbT9vEn`@=aqY6S!6;^8KSUbpmMXhsBz6t*E1IJy{bqs<5UDX+bi zxIvy_uHkD&*5+<o05^HvF8%V*y6$6K*IW{CKQ9K)_{&pqbR^%<CVxq}FwKh>*Ll;Z z`s9gX5>w?(ONawVg{a`FP5I^M5Lo1A)(hqWqj5$P;2(lv2bpdWH*hE$nP+gIwTPkk z+YM}(NvT(qJL!b4e!Cp`h__?_l||$9B8h*;dqI-yweKL^J<JIhb&ZfeiNXTV7W^D% zJoa^dL%F&58S;mWGlDN#Ff1=$pR|aLC+QGH2TFF)?hJNHEyoU&@z`2RJ<C?Hw7yG| z=xu6Tgm8$>%V;`HEha9-J{ZkPtqLGN>&xFdr?RZW5}^yXc9y(LUqobjQa?e2UFhYL zg9CG7m~Gubeal#$c_WLWA&R1S)SX7^s*0}gsdLCw(>Ti2y<<L&qB%{iFqtSu`YEC0 z$ecZ9kqn!Fw%DU-B`Y!`mQ{ua@1kr5K-wJ~MHMoJ7i)wD+#hB)f?%Rx1l0*vUc`X1 z3LwRP9IVBs7KiUvbE?m~>&wM_5*87LiiLS}xUbSV@GM{~hjdah@BZ=a-_qQ4-gXuz zRSJU^Tcz+*0ALxHHsBG$bX>l8LsSwLk2t>^fGjpm^T-jfWZTOaHYPZSU;tu{bIbU- zg+Hyt*uvI&TSiBuu!zrRlVjo^3XrIW^Xuntj%5WaHog%V-;EZiechZ24QfczJ>1`) z)vWZD5Jt%&QJvV~IJD*Xf9bpJoM7l#xnFdwb)!_+?VDGH#+?<tbJcdgPNH)uT8dwp zzCM_}6)=07!~DX7XuX$}hF4v`WCakh`bVw_(0))yq5g{A^c(aB*7gWfC&*V7%=ji? zzcf#hsiFCKuj+hDkBuUIe~~^nrf(dm7572Ueb8SiK5nt68fw4H5ts*t$Sn1MD!hnR zFVyaMKSMM2hKD3qPo3Be2>neN<53&Ny-GpQewDt73K^NeD%k5)Ea|9%-`&Tl-0$z0 zcQJ>xpwxNaFr#xo9X>2UNy|?c80RGCo|wLgRbZ}dURk^BmI<N0hdg>UCVvR_-E~P` zikim8k;Qeo0zZs}X8WUB7)okwW`F3wc$VBS0Jf@RQ`J?bi-@3oYBbDcJ$=AwMy9SR z{6WcQ@=c|d$I`!Ss;{F2`Wx!kHq>v}&^ovVe<{H1)36G3zY%DAN@=vKu04lq+UqxK z&tZ1movQo8!MY9}c#VwaaMtnWePN$@L<pUr6Atx<rQ4KkQfjoY)cvOdPXJLF>@TmX zzxa6##Qop*d+gFNnx>;ZD%jh10zaHgSTVmT#*h4W!&enjk-Z@<_Gl}Le>ps2NkLLQ z5JIRzifPhb8NI`hiBfmB0-r!OAzN4-3I{{Inv?(MG@d9^a<pG!F2bj^Q_*^9&!<&U zMBJ8ezw<U#`hBV!)^!epc<pU_3zkMdojXK}*X-M&WhPCOD8Mp4(C@Xs!81yDQopqL z-oMqZ4l8=>HYa;rfk%VdxU&q)>F!$UH^9Z<uv;NxIgpmkQ&)4v0i0!q-x%dyWj=R{ zSJ}z|GG14g>QzK>Ta!d_o7;>e$czKmNVDN6HAHB;8B&9kccuV%g^3xY>1|PmiTU0m zey!<ur8(L0N_*Q3g`@RuI24Uh+HMuCL2Ix=DPQg_d=6aMgUk>&8L^}NLlvECMYqdJ z+}+-7JG=FMQIE-13sv13bvq<(O%LbH)EFUhYpWn-oSzyaM38KxET6c>D1CExIDK<x zNWomYJG2zA)rhUZtQv?<bX8?#JNJ0ASaH%d(1r43Gbr4TKl<M?c;Lg$(d|h4NW07a zmD6{=DgzGSDWYy+=QD<D4a4V4Rj;Bh=&^6Tr&?ccv^nlEr4FaMc_JXn)YjRNW?uGz zgkP;9n$ZMKfxLG2YImAUgT^<=L~^`|Nez-4+M{;jk6)uAH0&4}c|$wY&J86_wHoGc zAkBBRE=G1Q8|{kKfD+8pTLGr*+|bBP_M@vX>z2)&?Kp-SkGoXubpNdVxYKdp9?G}9 zvvzQuW|N>=<VY6jpJB2(UCP#2m5C9kCve2==@?$>NuTW}4*7vM{eV=s`juooG*Bft z@RwpmA^<>X*I@#U%yYiz_Tc2)f}7Ymue^9xF40Sw%6zj0?!>?|?7&o|nJ8(i4c@BO zZHRi{E8P`GM@QZ&@VveTpymx&CM&AAWvl9TYr<ugAa-p{1}Wcd0t}OsRr+mh%WN`R z6N1!KT2Gf%6&sSL0f<egL~2zujrip<N@OA*kF`aI)J=H%JBp_1wJ3<y$ci0JA}*o? zb1KoLZeB#;1OTSz`2OJ|(>#J64AH5Eh>v#@<8X0tS>UrrQqxvsoSKW)IyQDNmNL$5 zr`NDCuIS<c0UkV{cU7o8UiBC-Wso%9yBiu?##k_(_%M@x2tqn(>=+k2K^W9x`NWIm zlQmdAsbZ-IkI4HXn*PXhn=zo@fyXd}-DI<9o{|Nryy#aU^7u+CEZF{l5+O-PX#^w9 z-B;XwwX8)<?N<6$dR=mMnN-&%UQ<IUdArGXVQQ$9U6cYPsmT3r2l-{Xm`=oHcok8` z>}Vn<8IRZDkz%T=L9`r4bEJSC3YnDsdq!FrY7A5_r0wk0pt#J^>p85@g<G}D=DY|0 z5_HVL_c%#ahDc}8svD*4Mo5K*?Uk`%Kl`Blw;Qj+_2adnw~9&r$p}qW&eN0)?86LA z>}zPRhHEm~LleW5V^B%=^4W*us8<e0JyC~<R>PT4k!#qvzzL?}<Q;ci3f1xJ$B55f zX1Jji#)E;SvsHTk1*LHsud4b5EwuzlA2)hO-Xq&0`H-a7$yR83kbIREFPE_E__0)P zm7=WTXqFEEEHQ%y-_}>b9!VL4HM4oQFJSF7%>nIU9?#}e!>l+3Nd@n!D7gpjhpJ6D zg`i~+7r?Au6+wlnc-jN8C;Skp(9!-@F0gNy63%U<9`h_ZmmX)_Ulx&#mIx-uPnV=u z_F^mF?UYumP{o5h9IfC*Ug^LoyM~-mYcH1t)O0!l%}yqKf<xdTy)R$acMoJe>|(CF zW#T{w2Zq<~0J{i(|D?4IBc^$wadn|9lrW;JDA^c>khKgtGdzp%Ab+~-9!_uwOLp%x zOC3NQz&JS|xmg>iK7re*4q)6&yKt-nk5)`295IaalttsBe&|%ExX1OwR${7%)fMFk zHh@x&o)?rJ$flsS97OCtsd%9OAnQD{t?jMV0KN=iPv`aEryR?cvx)0c_Q3~~R#2}I z@^@a}u*$b#w_lg}&_xSs4dI7Ii=l0Tnekm8`ByL!rwy>e(3@1msO?0jjzOq)Aai0& ztMgEne<11mpe(s#gVuRTR1410)TTg_CME53lMm21LT5EmY{Ol!A8;GnB>+TfV({pJ z_j;paJAul2dIgz<^U{U0OV+(HjWYmj$J!FsjhQ6A$Cfg`LeT)9Wa7T)`+(R^qz7Gb z*cA@}1L_Sx-zHBmPlNAJi92~VpYt+M-N*3gyTje!QdO@Q#nj4xPNRM?;3@!yzbHuG zp?RW}%UdZ(Y3H**Kv}2{|JKinkbn;_qH;!f`$fR2wxywDU)jH4cNDBDtzYZ%<2B`X z$2L<-Vw4ZOy^|5yWGAZw!*-L>UqcqEu_CnTEA@;fnN|JZi!Z+L>zU|<t%l1HZ?+@D zJ+rf81TQ7|O72)yodr8J$<aggojlZ(fd{ckvy+Y#$O|XFgm)ztRLZ+gN%Pz4af4iK zH7>@@_2v-@%rl?#1yl|UsBDYLn2j8y`lj8#X=;yl_S8Y;9VwRrHu>`BS>GnofX!Q& z9(|jbkCmR6=U3CYNIjQKrp4T)ev7$?#?IU42H#f}M5|SMw7KD~33K~A>JFW5!yeBx zzWD3gwv4ZBAMWM5#NCkWyAN|a+Ls#<=PXJpK+C3^N9A`WigqwkWI)HFG=tqcoo_{w zESh8?yHsl{Oz4PahkG<9gj7b1K)y`U#l<D(lg4?nn2RD6?1`gmne(V`c&yl-Je=l0 zKl-Ez##5}`AI&5Hbz12rcPQQ;(v&?B!$goy7V*DU5p_q4bGq0BTK*i*zE99eCr*%G zci##>@Q)c(ABaa?aUI45Q9N5rBakEZKk<I^bCkvBH!zY>l)PBX=51)DD^r^w$*Uj{ z(m)*S@9%$-h>xccAiS6pz_&#@x6uQLzRQ=@oS+yC(3${RJFa)zs@m1f;$oVP!fACM z+-RA414ooBk6yyRH?Q!TB{wfy5mwLs+4pDJnxzvm*v;dq_z*?&-{{{txv9>Cz24DU zkA(*;`(q<Uj&y28SD28e=IitGoMj_NL{u<SDu9b5-Tei7K}YOL(Dy~JBmUK3Zey*G z^}c{DNqnPz4UDpm_gS=zxUYaH_X82Xc<^5j@J(wb_I4>4P>HhYyXi_=hE5RLFx(e7 zf$h3=cm+jr&!8QUgHvsu-inJE(o9<iJS~yHW=kXxC1w3>?Ix;f7ehCw*bh%=JCSi3 zDqDulu0sy~Jmj;#%tp95`@UYNlu;!sEaerG$v@v?@MO!w5lf;e>(Y3(MC10J@xZ={ z>IyTBw#^sSCTx#|u2_0E?6L!mhON|nQgij9za;N@md=J8$La3m7!G3%^H)bQQg2SQ zl;XOH>N*$}$$IyxB&qTVhdsSG=d-f-*PM*_c%yHh_z#mSWxncO-amZowSD1&xcn;e znObbaOPH^Z=^iR$&xA>|gc0Wu%)GKtq@|5X9xjC1V}6N~*Ki&ZU-2F3=~*cXOvtl$ zzL;ZKi~we3c)v%%S_Dar#myWllczO#A5(@o<NSl4Q!AG`I$DyiBmP4djTe}QkF+pl z8z(StF-UyjmqRBUYuG75Z&J5|zWVoo#1UT3Jm4!9kZPz;L<t-xSx#Nw@P`<tq|3f) zmtd65l$FB87anYGArMc)*=VwLC^z?R^3eGG13~WT33gO@*Vpe(Wnt9lF3*gD>{TO+ z`_BodM_qAvrgM1S-O);(C^sTh-I~<CjKYa=ptqIM_AiIo<?L+d(YzLbG)DqTw%Y|T zTSawHUEw5H#EbNo(VPzAC8y%&lXtFoj%mBFj$}9iPt>`s(?)YAyqdumw>`JT2^k38 zau85=aJxaU)iU*iU=P-sF_5$mS-~uIA)5@rE|dTMeI5Y#TM{1MHYWehCgJJn0LE&N zLlFAl5DPM5yF9{vbg9Q>;iXkLuWY}HEWCr}9UnF1*SqUey#&E%_x4RZtRC>`v~7>= zhv;TdR`ry31rFs!EgWgXiZ$`c6(>rxQS-L>Bzt=qPA~;VyQ(o)`G+tdqI_w(3{m!4 zUcL|exMr(-kg|%^Wz`H7FWdA?c%I@Enm4C%dFk43ultAS=LtvMRnS-+iB~OUcoQ}m zPErYfqt(RVlJAqah{I|8d-Nun!+Btu&nc5^Cc`{}gmYXwSmJM4ibJx#s>CgyqiM(V zW_TGUlPMggWKrzPv61&ch>s$OHEO}Y#nTX9t3Xf9s%Ir${(i9ZVs_+X(@AOHU*L&w zC_~+a6r>3xT6ool!&bR^iXd=vKh4A9(kKwk=EV(GGN<Z$I3@@5Ca|6kKv-N%=_XQg zE<*D#WF2zYNG;}gp09ZIF8m36WCRQ75Z2y$k0UF5dcgYjyigss=MBGtxkGA4y8M%> zM_!m1#&$PRUV5k=RaBr#Y~*F~38wtp*UPMDM@h0iCgy=H#9E4rbTOafp|q@;vBIHk zTxBd94y{4|mA!Ez!Uiw!=<yu?`4<0q7M!h1L|ik7EcBj!Ovub^Ho$92nD4=IxePv? z8C~}g%3MNB$wQq{|8+9J|8j4<BWQmwse3W=zsMJ(yod`p2e+^G@VL776?XsThFpJx zj<-_BFUkkKL4SZXOL=}9p%K~49LL%iNc(D*VS*`KK=?r4<_d9gp0+!1h~2}LZUl$X zvM;;Gxg9^1pOv&|wSyL!r#M8g3k97P2m7fn6R0!&``<}ZEg>5Fp|sY+?tjg_K7K!W zf4@B(SjpMmCp|qG_TMK$E$2a(x?jH+k5DIy%TpYVrrYRkvGn=W79-RZh;yN4i&<C^ zME^9M!{Efm3xakUpXn1Mmnyd@^Ah0hL|)8Ul`YE1t5Ufn5qxMpuj}xdE?0Uc;p-yC zB_jQZ>msIq{*J2FZ!yMey1Q~DJ$GLF6mgOnl_E4#vZ{fCicz&Tq{Ir`r4^_~ecweI zKh^?=D^EL?OHX@$>r*i+NX;cqhQ6mW*~cZUAoAi?&<(}%6GeCr)^A8_0k{aiz{m=d zx(J~C{lS`mrcHFXgjAb}93&~<%E8grdo-4mklr}A(g1C(hn6buAE^GxqLRIgjYSwd z$D!>RytB}GUKJ*BVO1_WSlfn05(k8PNnl{2iYR*){X!!&_4e&{d`#oXH;y>nFkJ;+ zBnL5RbE9b<mEUAkyZF2!zyO10@~!-)qGyw`IE%s$)jAXmQ`VB--6BOsk__o&NyUuH z*XfO{gl}0U^SZ{$!J<io{ld#PyvI_0{JqE0d0H+S)e|gQ*ho52D#wY6!M_Dd{va8e zWJHG>GZmI9hcVt$mjU%W`GPLOoSPQBn)^s~L0(0t;jRpA!7Z0(&&l4oImavP>Oil0 zBX>2*F3<AQ9S7a-rPb~#gmHzdLzuK7F*<bY8N|SQh5AlZ+N|W<Xxxnou6Qlw$JHTi zB{|3XHn%wVy+}{uX%S`bF5?{Ucf1DIJ8Y-G=0P&QrwsQT!e)ILW%?~&SSkD19Yy~s zU&^(o9Kw`-x2LAzj7)KJ)fFN9e##=g%JCH}>1aYX#rV&%&sRuiyT=T>-NeMIV!7)a zVwMs#%y5e=@WQ8~0)*$~J%ei<agCNJaGqZV^1+XEzXUV@PAJWs$1_vmj3En5VuVvF z!35cWnA8^160xXyi(6f7LR_B(N)C%|0uW)3Z)9^~myf&wlwFvcU2VODYOhim(Ob?C zhA3S)w~QC>qE=^jM9#d>=M?Wi(ey|x=F+V&6tfgB8fWR1x~gqpkYu;{F+h8yU?3im zwvMAFLuV)$Fc}`T2H|MjYG|6|0N=(Oi4@TUW_m-(w%J`)9>xQ1;S0+f@M18DC&QSg z25twgLF-SzrX?r`g3UFmWxI;~tG2n8z^RQ9>4So^yHGHCb!La7bu<p?Y8VEUCy%%$ zYdAcejPUY39ADa@>f;NH3atsNk>EADL?j_&2AUmJ>Y1s)oNbdKXm9E@AZ<c41FQBE ze&jI)^K_An$kZad)%_k<zK#=&|EEmA=pM#e7!COjj=At2SH&Q;uU$%>sn{~8kIHFk zo|Ek}u~BM{m;ADSL)bVLj3?pe*RFF7n0F!00s4jWi$M%zZ}ojx8O=L=pP^1^nG~MW zT7#YZBp#(nI3CCT$SFXwM0_p18_XaoAe)=d3@~CB?b+@-kNQ&TjnAuFA_z^3ERV0E zGJRTExxeq~ULPGjdgylJ9V}SCgwqe^9fA@^P&ryk1wi2m6ry_rTbCNr&S(w$Iofm2 zQox!n8Vs)=+GK;l9QFQj&VpZ>-BhB~i*LloQz(2k5GIZ`q|PU|)&L*d4_CMs!CXS^ zKDIskfSn6|m9Idseo(*@+<fM5Dxt-DJx&a27ROh;O38k|?=9J{lsq^%sFXw$sQ3YI zfSMF$smc|~X~4M9DGZx}2~p4h^BZXA)0u}Xa@{YJfZ!-@xy<AhnYN(~7YEzgSQm1! zZF^6)YK}4wY}e%D$A{Z#d$ww=E|ogQ!;R5yvq9oTe)%ietD@%8IN7O(rgwLM&(g8X z91J@`$0^)CJ(C*xk40Qe@tj7NZF-r$&;U>us0#Hyxr|<^z5!P7KVwlv?+?c6@8>$x z?WR=Xs_i?+1&Ff+b+*QajNPKd4z_Bc20{iR#i6z|PHx;TfPtqc1L_+xfIe~J4+Lx% zO%T%>a6yV6C{luGKlG@gP0j9Y?h<H<r)m3dVV0xhVwiqf8WZf*%jH}~Lv5SanEJac z${DOMuMY;Y1K3!vxjF6rL2u>KVOjp^H3Ux5LM4U6-|WvQub(E%9rHp!4+s>(`PeDn zItAdTD&R)_>&oI@%NB)evcR-yR`7~->)ph*9RZmVInx01$>OtfR(g3^NkyxKF_M8a zfUhtNA8oMc!?zJ%Rppu4WJuChERO|6IFg6({lJD<>Rcb{LI+aI>QDcTF4}ksQ4QoO z<WhMQzsA^G+K9+K-Kjt|LPH>HWjxu<pjXj^z%Ax`8w(of)PcVE1s{}@eNVV3Qq&^< z=OP||IEk0fXA{gvB)$SnO2cGC@fnxQU&J}yg-y)c6g<%M>O7R`80y@=B&ljx-m0vC z&Ii9J=C~ceI$s+7C>u0(+D)!#gaO+%uW^R>En1JiOIZlE`b<Ci@Z*4o8~cP~hAHOK zMOIwWKuN^~0Qoj8+8)^an9c07^jf=%sTTOm=vC-*UM*!rq|Ccza|-9u2z*tHo+`}u zr~UV5dwUAj`_n`H6Hu1neEMcIpHi9eCfa4qYd)vT(@dyqf3$C>YZ<ZzD7(YP0Xg#D z1Z@QF*89}9^e<1~a0)fuUX*VPYf04yPe4o4vdQ*_F^=h2|98u`#;fP#e_%=Z-MfL^ z>aGzMqo^37!X%pI7wf6`7xG>kO~XrV<+TvsF3x|6lOH0C`t+5!x0=4BfB+yhiUz~f z7Cps+uZ$eAvI^!+V?D;^^r*`7Px_eo>M>SWA6!b(iOD9XAu9}NolbbEl*=;}%7v=b zWxp8dm5MW8-hE-d4uUjV#8UudF7$Lwkzs)5koJO&xqOr1Q4}Uc5t;{mR2E1B(GI&} zMC@!29FN)Vu{ky!J1?E9$+AW(NmB9k$-%MsdaSe1L7$HqwXerIiiVXq?%?=+MCztB zIkAxLZ*UmOK!DXOXl9|);N>GcPa<p3mor|ua!MS!W8|DWK*Z27#vrdJpUWtP#^?rB zY8@LM5Z!S!Zc2j$jVJ4eQ5U`cR2)>FDqXT?Fz!juV`Njrc8s2j7z|l+B=v{fq|~N^ zAEmTh;Z~n;w3oZS0+i;~eBqv3gf2DMpN-P0-*-)NP3}n=$&~L%cXxrSQn}F;^>##N zPDZK9r1IybFD)G((I_bR1ScNURg$Xm<EPW$S7TppLg+u6M`sfd*A;KdGr%1M&8VYj z+3EHCY1i|WU$x2JlUGrA<y75myO{QsMR9ih97w!m=g(EDbPOxWuL9qCPUZAMjx{+T zZh3{IWLgp(WUNZ!m~)x_stmk)urEVVmM}Ey*s`t>j`A?*T4J#w&HASz17FJz&Y6E> z!)-Z;foXnH-kzzCEQpbof|nyxX7%1SS;a%Ye?B(!JPY&7+J>H64MBguScBQ~nx^b# zY+^qjy&Sy^pQF@X&fTrNFERb`EJA(RXIkb=RfwTm@=R;nY1e>99u!vGmNu-2S7)7$ z@;^qFpPUB95^4JOI^MmTE|dG8YmLl5#B-b&`PQU&i8<oC*OI0-6RqcE;@80gZPWW; zB8K%Z=O8K#y|4)zytCbwG1Iv=uQIYXE4djJH(cWB#o#r4LDBi*FFQIi2-hE0Lb{UH zM}?*cp1pl>A~omAGcedOScKzom^CoWFx7Ab^nW4w+!VPb`%n``Knzwe%WxRBfL%4) z;Z7Q|-8#D+r-I*brvmjJ1+*{iVpvAQC=o&uvV#)aB+lp4@CJ@&S&Vx~cpcts$E^}7 z>M-r#c-4i#vsTMpEn(}S2c=YrtjSwYgQ@>zI>(^>X(q!9Gfwhl$#iH&dMsqJ@E`PC z!Cw5(uJvIKre3KGI0W6MD5?rMtX6`!XtoM2{z73Rlc4%)I-O39lOVA`ohg(#*oG}s zL!&0A_WB@8zrgd8G<!yKKw6XA^2Og^(aZt!cQ4<d8XFCx)Z`$mr$?PmQ&4nf73c>m zV{N1h3I$JI1b~wl{=-gZ3+t&?8Rlb*izX^S@L0Hvi<)o`6fk7#C`?ML@(T{@3k>#Y zUiQC`{)EA=+~f<D9z#zsCjw4=#2eyKRO370IzQrWiyjJB7%9nCao9m_s$p*2pdV%s zb|gG&gUBRHGjV(_zEG@4+r47r-CZ81-LXLo`0@8eTv%)OPN{HoodzYj&<KSnXwyw9 z!#GR3MbLF-syI0^GamPC&NU1o@dUHN!mmo1+5FtUpR5`gPc0?243Umct@u}-t2G8- z)>l!%EAWcz)PT3O($?oXQDR(q-|t!&;Cov-qkfu2){ZKA7jI|(Uyf>3<gFXti41w` zi(+Pvu3-q~9d7ylV~n@pdIT}x?I+)$z;+I+*-5$SDf9PwVHgHuvKQl9@9VzxdMlZj zy|gLt>X3}p<)ih3p|wbCsQ(}7$hk1XZaLf?<O9;-4#%UwSiIDG7jjveu4BCw7$L%P z_qbfMgJ0RbWDj_z)Xu8>66HJEi|ih({=HN67lId_6F3e6M`ggU4=8%A4MbVT;l1|K zA2-+F!llh}X7xT+UlZMViMviMi0|4bGI3zXyk@V=g!6$ox%gBI=HJ`aEq!fYCVS^9 z?y)tCkWQ;v9C~rec{2XJ4M>CZ&-NlKu4$Yq{Z5(6@4!j<T34HHPt#dM6Zu?*=kG{g zDtKw7ko7x55u?z#6pa?vGYSo?^wz$r%JkMUL1qxjr{c;hG$>F;QB%A*!KC)s4*p%$ z3cjyxgMjE_7JRZqy0W9StZE0#)wV;xbTO+P+GkWafd=hhx!QIJm@a0uL&vR?tC~3O zD;g|q>`!W1l@N`xsvL-PmmwTi#+M<8hf~A(o^X<nvHS9?DOOZbk%f%zS9U-R)2!e$ z`x|r4ZzkjTn)}V-oN80QDdsUC`8~xqvBlxxi_Sw7RxJOg&8HtqW7YYy{ba12fvTa~ z&&IWrP&H-Fr0pi;+Igs&GAGk^bF%qVRBgIb=@wIS>)EJqx%0_cJ0VqzcQQBccupF* zks8m$T7kltbiRSBpP(9YbuM;zE_$0XUaV<|r>KNjosDZ!e(0&!tTCRX5^{AucI^4+ zZOrhoUeg#)Qwg~`BRl>H>21_GAFOHEn5W#*hBLCGXQVMFOmy70&TLpQS<5y&bFxEo zvZhV*&D!>8x-!hWo0SxQ2+r4Zl;Pve_BYIFYOG4TyOU@<-QCp>z74bX)VsuDWqLc6 z6GNZ+-LQ20Lp7xCky}s{Q&P&v{ViR+h4xd6T)h74jyz4C_A!17WyPBsE>@<2ZjC-= zRdqD~J6j8*0gztL1ICvy;b0)1Nx4S!24u&qbCY+==;IDGb&_&(`3cBO$zvcx>c(a! zF{~H;HcLN5Mqm$_#uiRfANlxbjG~MQVpLJ1c@k%NLGK6Bo|yugY2%@_#CZq=`6WvY zr+lUl+KAp)PRwtkahgag;p-Ib5Q^-^w4c5RV_ceS(=P|>fE#=Q4XW@Wc*R3EC^Eau zKycwe>PMxHfgds|uVk1Q*Mu7nj;7hemb5=Tb7`;cYbRA-@O2D)k6amagl^U8KaYY{ z2RgDDnQS2Tdl$3s2@D(L*4|Im*$w%uIwU~68z|jls4uTSw1*uRb~rFDg^fEk$3Nx+ zK!*DGr2@6E)?-xO4Jq8B8ChPo)}*b1JaHsg-IjexaN5K03K;G5^xzEd3MdlQfiLFn z>D3uMrAOEF=$g_=+(iUna|G8a*@nI$Tst?a3s3KHZ_prY7qH?`hEdueKGg=$(HecY zHS}uGk2D?5P()BOYOThT79aHPLuOZ_Oe5UuA5=$o1!kv!+R-C6t?l*p9}PrbFY37f z%miYFnz)s8@gg+51x5x!uan5wXPRPEv+4jawXIik-szrjBDD(3mKRS382OHJqe%ya zy7}ef3a@TcUf8i_a}?&=`X|4;PM>L>f}WN!VvNj%cGsZ*yj<OT6Rg|)o=$@XgxEdC z=Ld&(u;Bd3{e!-7XEqvMTa4`2i;+^TqNGReMSxZY|I9>zsm(+=eE4WvqO6durFu{i zg)!g8sobJSNd!vFQnLcwmLkE(GIW5&?p1pI+)RkbAE2D9u&iF(;Kx&QD@*5TO0lX& zSvZb{VZjk_hv_*5K5nQls*Tb{Z{+vYi+v5AGE&cT@?ZJ!Myn(FhI~d3&^r}RIZ{03 zhkK!+J@f^y`w*d7l@hzE(Px+yjC46=ba*ypb5WAvPtmHd3=*tj`+0EFX3_ZLm9(k8 z;Ot>WXkP|NA(OSx|Gtf}d*63Bit_uOjt#7m4e5BmZMLUYEl@r(a{d2EF>en0pE{h( z%kpToP8fg)92_D{NuTdHVy8l`QFl$-27cqyRk~Df=7EDya~X+J$2b3|u1+NvnXmW$ zJ(^NHaLZXkOQtQ!k1elwZpOXTtxck6K2GO1ZMz{YubY*InitVNu-&@w<JMA>3Rf?5 zt-TmfIIRt8Z*H*?$k##FMR#>k12ZeWlLf+fZj|@rRZEAX=q61jLwJR&5%gX=(n>=% zG>1~>;n59nJ$n<A1!yusLpuB_-E`NeP)_vvHI@-{jCE}D6UpI`<xSqAPLUb}0|UWf z9V54mS-T<=bg>QsipL3ik;9=)uqmElQL8dv=;|uJ7uy<>y)TltSs=TM!LJMuV-zfn zTO3bf7Sp2P(~f1kX&4x5mZBF0xgsI1geC?$c!s~epR|LEh{f5U(-m+&*w>X@mp?Qy zA*ui1u+L#o?P61qf_ZfUpsGWG%-Z*bXJs$5htL*nC}6j>UVl3dlTwE&<5AH5L;s)+ zcSX(6emRR}G#M`7=6gYI!6a;AYKL^fdhMuVJd4a&(q-<ss=>(H#jO22O^OO~9Wpf6 z5GYH;VumS=_xANutl7q^uJdUc7K|@W$giJ16|Y{udpY3w#tg;6S`K_nr44Km@cpOa zs>HWK8z|!K1BdjO;nm*h!QMU@dj?0^Z-N9g8jIPqvwMua{S4A4^~aUSJ(AT77B&jn zX<Av{<4}NQy1h`m`ss%s1o<b?b<O67xo7PY9?&lA?|Z=3d6f|j`b!!stWLUks?9sK zO!KV*zZTRp5G_v5>LF1A`@}tJ_=fmb7~yZ*SYDO-m2J$M>Pqt|n)pv|#3Vi^sSWko z6nt*OslAT4=CsiSA(`cW9AT?x2XrpLYYKF-$3jwkySwlXe?Om^avbymo5aVpr;Wxl z{^;nadI9rnGI@bwJ_vEf`R@WFx<Egp$?kEqETBUBG<RaiQ8hUEwd*Pbu$04lHlWj) zu$7)x2^z5bUJNuAK>-y|Y9~tyz0P~Vqs$}WSMYi*k8*W*y+#9b*7Ca;DAW9l!TKH| z3KG<g9o`QU*0IGuRXf2T>ScS{dfj|k_4Xr#?8fQ-uf$IE(=nizJ?siK25d^Gz5<c^ z@^4T6-B(3qJ!yeoHf$bd)U%3sjB+trB3K<;5qc0{#0_Q-)k|ep`QyYoK|ruS|K)$} zyAMk!c6^gts^AYE9uAyqBE)dVFR{<Vyr_}WS9iL&PVG)t`uAsd+BDEF#dbJsqd0*% zDwVaqKB1E`0b6nXn09tt_qf$y{N8fwn%*=(3CDPPKAT{rmngJ|uS6csK+?H~Y2@1a zz{_skFhjCp{*+cRkom{g6B!%e!LRTfgN$l&dwjqY_Kxcp#zI98bcXN%u>z@Vf}l8* zDg3Wump0t<70&ZCD|GHYG$Of5<4MU-W81T?#g29Vxkz#SYWY=l2#rgadd146m~8cL zA+7=5obW0!Q~A*Km?_g@x`@<}SVxuRAtd|$h8}jt*eJ(34r=I$79I>*au-<@E4+qR zYeI(mf|9@g`ei;omSM@)`oz6MJy!}R(ra9mC>$HbQO|FZB3z0~kReHq#0bpM9FEta zRxj-BDD$WJO>vnf2WmT$k@xuFQ2N2iMQeU@AmSNu82d`_Bly0j3btT7Vb3PIy_OoF znqb<}p~%>YQd&ey$*+PCCVZWwV*?>QD_);So^ep5X|f0Wke>#VcoM@#ZpB|v6>B4Y z$4Ut%k=VLPGHh7YC>JoA)wJMcUk}=J5!wR=4;<P6j8gW5*B-0|-S{G^q=*ZkieUw} zJPm*|18H(JU4=KkCam{lsBg~*8W>9D2sdRc;Nny^9+V54&Q(Kh6)%_34~r13KQx+w z-M1fpdgi3JX}O(DQdHhzTDlU5T~Rq|=--ug?Q}S`@rmIa{!>CqF_86Cn7M%{ai|^P zd6Z3^ISEfR1&tUUYxY3TE}?aX)iqow4<G+KngxId65Qk?^Sk;eTbGFy>;*p+KS^Eq zJ2M{73cE%IikYCLW=d-aS8IxGTEh|wv>AvZfBIPD*H8P<<sANntr6BTjIdc;KYhF} P&L^{{voQMr+u8pG9DmY^
--- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1224, +/**/ 1223, /**/ 1222,
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -5822,12 +5822,25 @@ call_def_function( } else { - if (ufunc->uf_arg_types != NULL && idx < ufunc->uf_args.ga_len - && check_typval_arg_type( - ufunc->uf_arg_types[idx], tv, + int done = FALSE; + if (ufunc->uf_arg_types != NULL && idx < ufunc->uf_args.ga_len) + { + type_T *expected = ufunc->uf_arg_types[idx]; + if (expected->tt_type == VAR_FLOAT && tv->v_type == VAR_NUMBER) + { + // When a float is expected and a number was given, convert + // the value. + STACK_TV_BOT(0)->v_type = VAR_FLOAT; + STACK_TV_BOT(0)->v_lock = 0; + STACK_TV_BOT(0)->vval.v_float = tv->vval.v_number; + done = TRUE; + } + else if (check_typval_arg_type(expected, tv, NULL, argv_idx + 1) == FAIL) - goto failed_early; - copy_tv(tv, STACK_TV_BOT(0)); + goto failed_early; + } + if (!done) + copy_tv(tv, STACK_TV_BOT(0)); } ++ectx.ec_stack.ga_len; }
--- a/src/vim9type.c +++ b/src/vim9type.c @@ -628,12 +628,17 @@ typval2type(typval_T *tv, int copyID, ga { type_T *type = typval2type_int(tv, copyID, type_gap, flags); - if (type != NULL && type != &t_bool - && (tv->v_type == VAR_NUMBER + if (type != NULL) + { + if (type != &t_bool && (tv->v_type == VAR_NUMBER && (tv->vval.v_number == 0 || tv->vval.v_number == 1))) - // Number 0 and 1 and expression with "&&" or "||" can also be used for - // bool. - type = &t_number_bool; + // Number 0 and 1 and expression with "&&" or "||" can also be used + // for bool. + type = &t_number_bool; + else if (type != &t_float && tv->v_type == VAR_NUMBER) + // A number can also be used for float. + type = &t_number_float; + } return type; } @@ -821,9 +826,10 @@ check_type_maybe( // Using number 0 or 1 for bool is OK. return OK; if (expected->tt_type == VAR_FLOAT - && (expected->tt_flags & TTFLAG_NUMBER_OK) - && actual->tt_type == VAR_NUMBER) - // Using number where float is expected is OK here. + && actual->tt_type == VAR_NUMBER + && ((expected->tt_flags & TTFLAG_NUMBER_OK) + || (actual->tt_flags & TTFLAG_FLOAT_OK))) + // Using a number where a float is expected is OK here. return OK; if (give_msg) type_mismatch_where(expected, actual, where);