From d2d944bc5836fba7604f2cefc6a6069553bd8046 Mon Sep 17 00:00:00 2001 From: Kishan-Ved Date: Fri, 14 Jun 2024 19:40:11 +0530 Subject: [PATCH 1/4] C++ backend for BinaryIndexedTrees --- .../trees/_backend/cpp/BinaryIndexedTree.hpp | 106 ++++++++++++++++++ pydatastructs/trees/_backend/cpp/trees.cpp | 7 ++ pydatastructs/trees/binary_trees.py | 5 +- pydatastructs/trees/tests/benchmarks/a | Bin 0 -> 17800 bytes pydatastructs/trees/tests/benchmarks/set_map | Bin 0 -> 133064 bytes 5 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp create mode 100755 pydatastructs/trees/tests/benchmarks/a create mode 100755 pydatastructs/trees/tests/benchmarks/set_map diff --git a/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp new file mode 100644 index 00000000..3022d7d5 --- /dev/null +++ b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp @@ -0,0 +1,106 @@ +#ifndef TREES_BINARYINDEXEDTREE_HPP +#define TREES_BINARYINDEXEDTREE_HPP + +#define PY_SSIZE_T_CLEAN +#include +#include +#include +#include "../../../utils/_backend/cpp/utils.hpp" +#include "../../../utils/_backend/cpp/TreeNode.hpp" +#include "../../../linear_data_structures/_backend/cpp/arrays/ArrayForTrees.hpp" +#include "../../../linear_data_structures/_backend/cpp/arrays/DynamicOneDimensionalArray.hpp" + +// Copied binary trees and changed the name to BinaryIndexedTree +// Start from the struct + +typedef struct { + PyObject_HEAD + OneDimensionalArray* array; + PyObject* tree; + PyObject* flag; +} BinaryIndexedTree; + +static void BinaryIndexedTree_dealloc(BinaryIndexedTree *self) { + Py_TYPE(self)->tp_free(reinterpret_cast(self)); +} + +static PyObject* BinaryIndexedTree___new__(PyTypeObject* type, PyObject *args, PyObject *kwds) { + BinaryIndexedTree *self; + self = reinterpret_cast(type->tp_alloc(type, 0)); + + // Python code is such that arguments are: type(array[0]) and array + + if (PyType_Ready(&OneDimensionalArrayType) < 0) { // This has to be present to finalize a type object. This should be called on all type objects to finish their initialization. + return NULL; + } + PyObject* _one_dimensional_array = OneDimensionalArray___new__(&OneDimensionalArrayType, args, kwds); + if ( !_one_dimensional_array ) { + return NULL; + } + self->array = reinterpret_cast(_one_dimensional_array); + self->tree = PyList_New(self->array->_size+2); + for(int i=0;iarray->_size+2;i++){ + PyList_SetItem(self->tree, i, PyZero); + } + self->flag = PyList_New(self->array->_size); + for(int i=0;iarray->_size;i++){ + PyList_SetItem(self->tree, i, PyZero); + } + + return reinterpret_cast(self); +} + + +static struct PyMethodDef BinaryIndexedTree_PyMethodDef[] = { + {NULL} +}; + +static PyMemberDef BinaryIndexedTree_PyMemberDef[] = { + {"array", T_OBJECT_EX, offsetof(BinaryIndexedTree, array), 0, "array"}, + {"tree", T_OBJECT_EX, offsetof(BinaryIndexedTree, tree), 0, "tree"}, + {"flag", T_OBJECT_EX, offsetof(BinaryIndexedTree, flag), 0, "flag"}, + {NULL} /* Sentinel */ +}; + + +static PyTypeObject BinaryIndexedTreeType = { + /* tp_name */ PyVarObject_HEAD_INIT(NULL, 0) "BinaryIndexedTree", + /* tp_basicsize */ sizeof(BinaryIndexedTree), + /* tp_itemsize */ 0, + /* tp_dealloc */ (destructor) BinaryIndexedTree_dealloc, + /* tp_print */ 0, + /* tp_getattr */ 0, + /* tp_setattr */ 0, + /* tp_reserved */ 0, + /* tp_repr */ 0, + /* tp_as_number */ 0, + /* tp_as_sequence */ 0, + /* tp_as_mapping */ 0, + /* tp_hash */ 0, + /* tp_call */ 0, + /* tp_str */ 0, + /* tp_getattro */ 0, + /* tp_setattro */ 0, + /* tp_as_buffer */ 0, + /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + /* tp_doc */ 0, + /* tp_traverse */ 0, + /* tp_clear */ 0, + /* tp_richcompare */ 0, + /* tp_weaklistoffset */ 0, + /* tp_iter */ 0, + /* tp_iternext */ 0, + /* tp_methods */ BinaryIndexedTree_PyMethodDef, + /* tp_members */ BinaryIndexedTree_PyMemberDef, + /* tp_getset */ 0, + /* tp_base */ &PyBaseObject_Type, + /* tp_dict */ 0, + /* tp_descr_get */ 0, + /* tp_descr_set */ 0, + /* tp_dictoffset */ 0, + /* tp_init */ 0, + /* tp_alloc */ 0, + /* tp_new */ BinaryIndexedTree___new__, +}; + +#endif diff --git a/pydatastructs/trees/_backend/cpp/trees.cpp b/pydatastructs/trees/_backend/cpp/trees.cpp index a48113f4..5cbb3c18 100644 --- a/pydatastructs/trees/_backend/cpp/trees.cpp +++ b/pydatastructs/trees/_backend/cpp/trees.cpp @@ -4,6 +4,7 @@ #include "BinaryTreeTraversal.hpp" #include "SelfBalancingBinaryTree.hpp" #include "RedBlackTree.hpp" +#include "BinaryIndexedTree.hpp" static struct PyModuleDef trees_struct = { PyModuleDef_HEAD_INIT, @@ -47,5 +48,11 @@ PyMODINIT_FUNC PyInit__trees(void) { Py_INCREF(&RedBlackTreeType); PyModule_AddObject(trees, "RedBlackTree", reinterpret_cast(&RedBlackTreeType)); + if (PyType_Ready(&BinaryIndexedTreeType) < 0) { + return NULL; + } + Py_INCREF(&BinaryIndexedTreeType); + PyModule_AddObject(trees, "BinaryIndexedTree", reinterpret_cast(&BinaryIndexedTreeType)); + return trees; } diff --git a/pydatastructs/trees/binary_trees.py b/pydatastructs/trees/binary_trees.py index 54bb7be5..816d1bc8 100644 --- a/pydatastructs/trees/binary_trees.py +++ b/pydatastructs/trees/binary_trees.py @@ -1760,8 +1760,9 @@ class BinaryIndexedTree(object): __slots__ = ['tree', 'array', 'flag'] def __new__(cls, array, **kwargs): - raise_if_backend_is_not_python( - cls, kwargs.get('backend', Backend.PYTHON)) + backend = kwargs.get('backend', Backend.PYTHON) + if backend == Backend.CPP: + return _trees.BinaryIndexedTree(type(array[0]), array, **kwargs) obj = object.__new__(cls) obj.array = OneDimensionalArray(type(array[0]), array) obj.tree = [0] * (obj.array._size + 2) diff --git a/pydatastructs/trees/tests/benchmarks/a b/pydatastructs/trees/tests/benchmarks/a new file mode 100755 index 0000000000000000000000000000000000000000..0dc74d3af8e2193115e2001d44910fb5105d7ece GIT binary patch literal 17800 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 literal 0 HcmV?d00001 diff --git a/pydatastructs/trees/tests/benchmarks/set_map b/pydatastructs/trees/tests/benchmarks/set_map new file mode 100755 index 0000000000000000000000000000000000000000..28a7435e194939066a51ee869271b691031b5134 GIT binary patch literal 133064 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 literal 0 HcmV?d00001 From 34d5b1dca69b677b2194dc6ac6fdead39f283d1b Mon Sep 17 00:00:00 2001 From: Kishan-Ved Date: Fri, 14 Jun 2024 19:48:13 +0530 Subject: [PATCH 2/4] updated --- .../trees/_backend/cpp/BinaryIndexedTree.hpp | 2 +- pydatastructs/trees/tests/test_binary_trees.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp index 3022d7d5..24d1467d 100644 --- a/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp +++ b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp @@ -44,7 +44,7 @@ static PyObject* BinaryIndexedTree___new__(PyTypeObject* type, PyObject *args, P } self->flag = PyList_New(self->array->_size); for(int i=0;iarray->_size;i++){ - PyList_SetItem(self->tree, i, PyZero); + PyList_SetItem(self->flag, i, PyZero); } return reinterpret_cast(self); diff --git a/pydatastructs/trees/tests/test_binary_trees.py b/pydatastructs/trees/tests/test_binary_trees.py index 523b138f..3a4d151a 100644 --- a/pydatastructs/trees/tests/test_binary_trees.py +++ b/pydatastructs/trees/tests/test_binary_trees.py @@ -365,15 +365,15 @@ def test_BinaryIndexedTree(): FT = BinaryIndexedTree - t = FT([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) - - assert t.get_sum(0, 2) == 6 - assert t.get_sum(0, 4) == 15 - assert t.get_sum(0, 9) == 55 - t.update(0, 100) - assert t.get_sum(0, 2) == 105 - assert t.get_sum(0, 4) == 114 - assert t.get_sum(1, 9) == 54 + t = FT([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], backend=Backend.CPP) + + # assert t.get_sum(0, 2) == 6 + # assert t.get_sum(0, 4) == 15 + # assert t.get_sum(0, 9) == 55 + # t.update(0, 100) + # assert t.get_sum(0, 2) == 105 + # assert t.get_sum(0, 4) == 114 + # assert t.get_sum(1, 9) == 54 def test_CartesianTree(): From bc84f6d8d32573bf0f0cb5e3e120a7cc1a3db8d4 Mon Sep 17 00:00:00 2001 From: Kishan-Ved Date: Fri, 14 Jun 2024 19:49:13 +0530 Subject: [PATCH 3/4] deleted BIN files --- pydatastructs/trees/tests/benchmarks/a | Bin 17800 -> 0 bytes pydatastructs/trees/tests/benchmarks/set_map | Bin 133064 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 pydatastructs/trees/tests/benchmarks/a delete mode 100755 pydatastructs/trees/tests/benchmarks/set_map diff --git a/pydatastructs/trees/tests/benchmarks/a b/pydatastructs/trees/tests/benchmarks/a deleted file mode 100755 index 0dc74d3af8e2193115e2001d44910fb5105d7ece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17800 zcmeHPe{@q-p1=KpZBd$_=wxI@B31>F*g#=hkujkSysRly3Ts91ktQk4m?kB8f!0x| z)0XvZs8-L}(NX8f%yG}o?&{Gw`)k}Yt94P(okekX+|~6LdSFaM1&RtYu4F&o`|eF& z9?dxG?%BV3J?Zy-Kll6n-tYb1AMd`)z3%h{R+g8QF_|jZcNlTK7a530WZb=6Jb-vu zBb$N0PBw>~1HO`DM!v@&$TiaI<;ApG;1!^x=b(p4=(h}*Nh&=gN_wTz>GO;nNtxZ? zNpBiG3f@YOoNLHQD)S5FIgNZ~p*uzWBsJ?%Y^oO;detI+lG;VR+hk>gUu2H-oI=kj z^dz;5@+6hXJu7W7)R?4H2Br2RTKMaf*CzC;o!ktw(v1ep zB$ege2tA6+@0(;Zua)JMXou4xo{~~~Q@SP=?OfV$O)R`H7LBL-7WOqRUAVNtl}fl4 z@qF^ji68Z;Rjb!Cm>DBXgprjG7`(Jcd9y@5$!~b;%74E9$Q377Z@+x|;p;v-{NbGy z^GJsLCLNNYMD~P>oTq08ek5bW<39dO7^Q=emwPUJ@VsV&JNxe?P(1%^n5_mj8UE7} z@-8?snfwhU)je{~7`4d9ctV*~8ZwH6Bg2nv|VW;2h+$h1>|lvH&~Pa>|Sv|v(G zRi^sawW{GrGO{I_(jv)qt8H*Tsljm#*$J(~_Fm*$_wx~&6+o@{FNJNds zQxRAV#=~kd(iw~eH@sQgo7Q|GdcL7uTN2Xxdn5jk&%GEM zoX~A*sQWgxD;SM2NT;-LXu$%Sm6sB`B?NWi+{A?pd{uL^y4Y3ERt5Ykn$<y-JiX-K$ zn$=*oo{nD`5Xz^g?_;dVao%=CKUN~s*+al6l|gD$NUC{mp$pz-yqA zJudk4#nBpiYy5pde;P}PJhJz1Pu_-CRt?)LFn#BIJXN!o1s^>90G_JYTY~R@^-1_M zjU5%dHvfJs9m<(}U&{52Tu-!pgGxbtM-GQEkT)^O*pL+Wa>8Ie0?i2dQG^oPB1e1Ot_3S0aItjexeuCfu@vX{9utlZTu47P;k5;nv8PP9&4mBlgwvRjY0QMrlpyGf zCY;t^Q)wy!QxTYmz)9OBzf}f5s#Y@7-nfP_Wq3?0&mU9GqBNl$x!ry7((-yu*@=E58I%l>EEv)FrvhN_IT`t?4Aq0>D z+MR$=TMey za_+c@y8Y#f{(>3Z`JpoWuiE*Fo>TPKj=m!G^aFvWBicEncjqn7*29z^6-%QyMelG1 z^fSsx8^|$bzlXes`!8hw03F(|?}t6x&>#j2ic8n{n|@^*z8~DPG<@KhqJNS-@FnaF zq7r3_zGx(_R%9w3<5n^ZLk1X7U&$%w!v9ZAX;|S|X#dg)$N!zW{7NcXI zv~3v6c5!$1XLn%aWq(LE^}X5qKuHN2%KX<0N@p-SxRP5a`AI1ZVgLU9yfx4O)w0b3 z8LiIQI{dk9=s)3hKtI{4A31u#M4Kv^TO7*po7(KavhO)}o=`H)cH2l5ME&~PZ~|HB zBY~z^-MsXS)}|x2p~p~n>IeS8{bl~U@>JFI!`WZ|mvD6fiZ<8qM(OMjuhjnRBWP8l zkCnr1C4;^aRu&jN$2PnY1!FGjaF5-x$-B|J$$P6;-OI-%j6Oq+7tp`VzKGItyHWdq zek3;^)SXwBZE$*QkL=Hd!E*mHI~>_Zc^5j>n%QRO%GrCMiD0DP`(1r8=S0iN_$iqi z9Ar-!eo33HWVWIc_B#Si{mz|fMgI-Z^oNFj=#dvG83p;hj=-`$=Z=V?AE%D$OE1ZVxoz0f-}US7WS7ICfd1=%eu`TB-Y@cb?x>>g&%O^v8H}N8`J3KOzmoeC z)U0dNuOCqK6S*F42J;uSk^bV*fj|?+lx;Wyq1+r~X7@s!zby0@a#x}hF&+q7uZ%35 zwt#exW#6JwGRuE7pV&_}DI*vD1dll%;KF?9{@Aa-daI(puM8eO-nP!?9&^8>j4VF^ znf!dYNFpGKB%C0irYzDuO(w00q0Raek6B2<$X_D4xl+9xZKO-mt0F^{uzqe zbDvzVJa@W6Dch&KdPbWC1D|1Rl7Z^{p)T&1)TjCkEMIaJOr;mBR|c2=r7;H`(auA) z{vAxV=C=q3#eLtj8IUX61YKs<&uvGh@CUP+@p`RNGM;Q8^H|k!m~I_DthIOt?!aWF z=wE8z_S&A&>Y6EjzxWNc((~1u&}80?xsSmH^bfM@QKmmrS@#UR+5qI+>TS;)KYAd$ z5gA<*;Tko~rGp>MQ}jD9PY&m8Ll4tP!050C(4YAD-2$W)y}FgMucHx~S>>R~wiKrO@*J8T{nTs%VQ9Jyutp`!*!}6caHMd_c8# zWS=G}!0>NOd(^K#pL1|QRm$bFKj4Pm)T;gZySe8vM*NvuW$vkL-$d>^xgR2z+%U40 zjB3wzi2Uh_zOl}pqcMgipJ$q)CK{CbBeiK@WP3G#N8)AFuIOJ-rwTM-8h#T|S29=m z^-q6Erb(NFpH&$6GMLLvG;DNWr@+wLpTwt-B@j(DbL=GKBk zFpYOIs_RGFI4Ld;r77pPtwDf1wnz6N8tL}}`um=t&uzn(LdQL(G#v=o)*Mo7tNDsC zpdT{VfsdM^Ty;3-{49<*<1N0Bxffu{q*77UwFGwL^^Syuc zaXwED?wrTcHw$lVL*%8BNwcFhM*Ca*JyGx%Z(HeaKD~~7eOdaNTZ8tL^F`(+r_X&@ z$*gcHO+IG3cQNvgjuzqp#lhPhaH!>w-{yNQH;b!!SgZbNpef|guB6fVz~?kd-zUE? zWjo>1(R(1!+VnxXLzIJT6q9=mZO!8%!$19KE9WisIN-Mhc-$W;iu=&r(C6hoN#)Lw zb79(@Nf;!`!P>oJ$?rI1dgsR&F(U@8KZ2+%$>tJC~tvn!U-zq!)-!f_lQ zx}c3G^7)^GDxe2JJI3>QC&c?e{{=6AMod2~;JZQlC?C^$7W75XS;&77uk6jBl;qx9 z+3jmtS)aXZ_IXv+qsSxtTli%^%jd5k!ImmJkvjYu@EbUWGRa1*ePylV4{hgeuO496 zUwrLVi|ghB<@)4zAAIJD1R{}L4ZmK(g%5<&YHl}v1Nyx3+Pxs-<>w z#S>+rgpGQ<`wpN`x zaVFySwg8W2)x-Wv7@I9)+6MC!zsFGbr}0%(`Nu`&P3HRzwWDPft>q}O`K%IGA{5Mt zAGL8kY|_4W<#+H0N`qCq&e=U}r1GAMd&?bwvZ&)nC-ZrH4lw4cweKq5!0S(JK3`U~ zuk1|u6IJwBIm5hPP5D!4Dgsjxn2Nwu1g0V|6@jS;OhsTS0{>qTkmpw9ITd*>g_ix4 z=nM@d$V%w}O&;vP}3^qYUfL9d2uPn3`E7M`RW{tbZF55;i^TUwkS5Q^A-J+qIP^(|RFJJ8`mc*&KYn}7fcc$Z7+Ua)V99;cEcbc>A9g7yZ>Ko<@xLD81QMajN zC-PRDnyU;syG27fg#ew|noNEU@N#Bnn?;A?-|oPI0zW8l{+$l&mr`CF(voMjUK6++ z=lnYrSPs83oNK+&iwFK}(9R{2NTp0|I72;8d=huO!~XmIxc#FPv-yACGcMYzZ7=t9&WZUkAF}? zz6|A0W`8;1Tk>=92BIP zk9Su^7G#fk$5=f58JJcOa;;4Qws-Gt5NK4@Xo8O4Gt@ezrSUK7AvSS)LDhOx99fS?QV2&lp>ByKa0@{V zYl&n^4W|28DACg!i)fKBRctZ|I^`Z!gUMvDU&UpEWIyXl274lEINj6J4;2%~uK^T^ zs_M$M-d3OLTirr8D^%PKQhka5m6o+kZMk{1x7FWVsNkBFE8BetxpzgtC+zdju+#P`h!fgYJaT zjgPN+FQLc{ezl;eoR*th$w-&0^u-K$*P_VI|L~qju`abX>PMFlO!pZIUg6?_5f|fX zLjmVe*?{{V#ny~VF`kM03AlG)aqp`xU=$m)+@vU!54ZRrP*vR5k=^YpuB(_WyKpDKKxkFBV2Tr$jk=?8O-;w6ThkG>H<7{w zv}j_E2_@nwNaA8s5OV;ZZPvECX>8IMFq)iUpi}?vOr<0+`6ZsS>M_~9C9@DU|0K7J zOdaHRU%x84i{p{^VMwHn@tZP&KJzB66R7)DPTRtJMkz_A(#S>b@ zwI!Z*^(GUzFQxUHpw4s@S1+Ss0pVWGLV5*p@$O)%o4LaMaTH-tEotOz!>y}mB3{I( z$V*0IK~fM;y)lisct>~P(X}N3mL5`(5Od+O5m-KeUC9KW(p-^lF+q2SVNG%<2KS93 zeW6INh8HB=Y~xmqx!bTIpHXe9mS08556-MFzY8UG7D>}L zS#i1vEdH4`A^n&8Ba+S&;&Ok)>VFXVw1pw{<^GAJwC<-wK2n^ezT8KN0>e_apfC4h zB$fLw5aEeznA27;w6`J4m-`u#HV9$qzm$`72l8pJMDlXKMA9*#PyUmi(tiQ75j;># zrM}$1k<=+1mgP%*S^o!w{t97G?gvRK_m4=QmfTkT9|NNzr2WEog7{vL`(zN|$=d#p z05$77g_!e*qNkL_M3A8Z&q@4rEpz>w^k^2Oa(ishN zl6n$*6AxznZl{qWX{9tQ6s-OnvFOL<8iJCV?*dYer8}@w!06fsjSWh2A4UHE8?5n` z{*+mtd4y=aLFG7?2BeHjN0m@MDpF>)MIpNyN5$Mj5( zmx=O)cp+En%Y8bTA)&*pA#t@u!NRit20H>cx&QzG diff --git a/pydatastructs/trees/tests/benchmarks/set_map b/pydatastructs/trees/tests/benchmarks/set_map deleted file mode 100755 index 28a7435e194939066a51ee869271b691031b5134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133064 zcmeFa33L?2_cq+sGn1aAvyzYvLK4=ng|LS;2@n{NB|t!AO9BJ|LqJH_5oD9F2q+*3 zKSf1F1;iZ{H7F9?SX}v`A}VSC7sL$}&HLP2)jgAe`2T*Ow`A z{{{|?l=&9*El0k&I9lQti>lKU)$U1FW0YOwE-L39Bjw#wtJ84hPm5aqBsFxUE4}_S zO{&o>>R)b>Wse{2rOH{9>Y%@&UzJSwzo{=rmCMa!HJU%&sp_|=Ro`HgBftD_|Ez8v zqUx)uAHr3A7PZD%tD?!{I<#w5G@)hDda}WZP)~|D+w2ksXhaT zY3P=6%2VnzeX-;%eS}3Roa7(N`20ZDs?+DEKL5<;RSk^}GgohamSo6oDnl~#NBUHk zGf(L{xJX9&V*{rtkN%Dq9-UfyOK?xgUHy3{veeYB2Bt#cwetJakUydZJwMbSzZ`~N zOaBKo=owf;{@pd`DXyX3-8IPHQGXYs5g5st(Rgwjgx1V6wb&U(6eY-aba%3xS~RdT^kuWp(tn8R4s4hz@gKM zW@b-BYG_Hj!r}=pm(1)tK0A8|^4g9om^pcT-n5w|GYSi) z_RY=9P0Pz3+5sk@Xq!%XL&l*%VPW3n;+cgot)O^9-i*R=1w{qL;|s^-KtZ}KQao)! zVII^K4o%A&GE{2tfhQM_pHVoqu(+g#Qfzif`s8UdSxLLT#gj{Vwa%VpHz%j}kfGCt z=4G>KtvlxBl}ws3Z8n4_KX@B@ z-L?H=8DRO=c4*$jX*2Q)XTXIu_{ef=yYbUXOH^~wy;ft(jq)kDhsLQrp?7w%%l$)b?7> z5hJpC^v!FX+BUV5lo>GsCEKO8>Ewg?A~c=BO1navIMyHAwu3Jo*zT@r}YW!ADJ=jFp#L`(5Qdyuob z`Q)o1$ffrC1|I!0Lh1L7Rv-DfHXSM6Ud79=~US6VC9rr9f zaSfWPqlL)zV?(?dus`boM;J9?|gw0dHxODEI%~PPbbnXe8 zr$Bk>+%8gKeGy#HDjtHcx@! z(z(_)PXXc5xn!HCKyc|?gw0a`xO7g~d>HdT{%y6FCOq12^EA=Xew(KWj`mwTyf=ou z*Gpsnfqw?u`>;eWzsHY%(2xI*AHT_uU+c#&_v07(@uhzJR6oAZk00a55A)*(`0?3( zd^bP7y&vDwk8kA5xBjkg*@>~9vM)SK&tA;Q&2C-Z`VG(8Zg0ZNRkb4_`SZlou*79x zF@V>0%R-K4t*bMUPM1q+V`%@1Qy3cBfmLV15*L%)Yl=cXg5}!>5o!9jr|hEV;P)Ax zgO?p1aoBU>?~*7ecwH%QSDl&2{brS?@xQp63*D=gHXr6$+HD3M_;|{`Dhc+i?)DIv z%HRL0s;ZoT!F1U5De4eoP}Z)W%AcDJkP^dCZYXBsqzRtY&PFM$D7&(Cxo2(mK2KRi zWlKz?%0HmaQ94{S+1+(iI!LpTfo-oEUaX`NXhdRPBnR zwnNi>RA_bWyGIerx__XSO|k9S!uBMs&faoOOG+{Amu7E)8C%$lk1AW$XvQ5bH@%`lZ2cT%C%wbzWa zz41A6UPPa1R(IWlxL9`5vwB$N1W)rQ?$44&7wS<@d&*w3q~<`%12K5G3K}XOWyNDI zzww$iBrqbv%NAZKE4{pQ;T2KZ<<^CltEw>G+MsjRDsy&HskN^5Y|g7ll`wD^V>g2H zDk=p;)_b+SOgdhn&|P^a#@`rkb!7`Ld&){LdRAv&ygGNiPZsR*knrm4%N5jcjZ)MQ zxL89~e0QKhZAp15GI>!4pKvKpSx&f5I+n{RuR&iiSnaN&V_ z_oK)5`G<|w!}dW9AXXE>inEW)tcuF!l0SohfeZOktPQf4m1A&m$%;x3i7{MJIgX3K zwgLN)b<$IIlv-TOB}$C_uv5F>+K*3YC>i5fJ!U_&aOf&gCAk!v!#Qh*9fzVbs_Ly= z)qrEL=p+iB>05ThQ+C3$w)V&-GOJGi^0GZgsXL!r5#Flq_9%Ml0R79;Wz45qln@jvd^PtI(@` zvz7&~_M&R>%hmOGg9q%x|+uSC6*QE%U}L(sK@SPz@=8dwypsBFS4 zLV5Q7{$-zg%1%*cU(U=vg4`p-7a*{*>6n^4b9rh$Af+%h9S8D*%g%?sljCwj^P51K#N$aB-B#& z5}J3x$@0~l;;Q`YXYz%A49c+vhHs-TW0hAuTz?{MK7+2SgmUhs+p)7j@H@#db8U`W z20`wtG1PV$$PK1BeRebHlH72j|&_xXaUq&HOLhQ!UGl9h-j?RaHT$Wq>z|Ab0|j~0rrG#M%?pM(uEY(cD|as!)0u1Cp=%IVBvY?V@h zlLN|N_kRiaTE>t{O!+jP@^<~yqmxkkF4VpQwO8eWIq~>OGe296zV#? zhWpI2@~~w)u?De_5ja1fz}E%hyR6K0q(a_Qa&i9PDLV*c3(a&|)O=RC73&8qV*D31 z9j)?%*o0R-71>8}0b`x>?peKmgAIxU!;hBeMskfw+CJjhncz zve9kXvQ~C&xzdcn?b$3p_sqi<1n!xL3d^a6Z~nw^Twc!JFKOZR3L>0)AX8=63wnd%F3_{&HhaV%;v1VdaykBUA4Q5j6Io9i(pb(j@ge%G2p5_ z&C-SCT4_&s0#X%~73BL)+51ac!@wh!Q{&{q?$xFHP`3ZK)OJ+1Ix__~0U;~SNr4D$fzGJ*CG!{n>$d{(X_~Gm%>npMSu{Zw#Uf0p2(?sfkR6Z8DKgV4 zjXg@dE&MqzcTu;Bl`l#j@&nehQ&(fStCq&nG{>o&!k_~i2!&l_^Rjnf^6$d*1+^#t zUB1yF2OYLg3tRprd5MPdTDn8>eP=GIkXbua)T4T14M*o0doF^^S*R|foV2XFt z;&z_nJE48MSFWsh7AMO_pM)8>>=CvKt0`oiK^BHE+usM0=*ld(giB^gS5`s{7Zzkv zEJv2Sh%EF7mkg05{qN_98&Xpw@C%)(s+ZBF=!1&NNo*Dk2h_z%o~9hWU)dJbWxb_` z(UaM(+4aY0SP3mODR;*+a5) zMdc>iZLv2`QrU5^XF%D-{$=Ml_On|X!z}Msb^X^gjA?&F%UkZ?b(k`ho^QNc)zL_+ zt!e=!<&rgPOxD-{h%(n&1-1Wy zho;XeC`9GRRnQ~wgzqXSg>FFCSOuN^;;KHbp*QEzzJqpDyx_sQQU*wZ4K!A38^VB9CGWap-JDImD{( zK{Nz4pYY?;m44N1!ZEFVr?6UAR(kfD;S@e1`{)b;$%@J~pHr>4`SU;qQoX5T0Q*K( zpVM|$LdQCMGnUc+3^j@dK7Tz0rJS8kQIV_UJ%CJ?<)mEegsNJ+4)->?+VR#_+$Mcp zbJfV86Tbn}OgNXL*?hkeS0C?K^Va7y`ysZQCvNrHeC(37yntv0cXCw|QI&Uec<1QMoloK}h~wt({y0{Owb(+NJrO;Q84?Bk#CJlzYT+ z&%rZJIVCQtf%Ew3>Z6Y|?tfJN={_}G)&JD*6_xZYB{sJg!|o~%d$ycT2{z$u3p=;{ z!{ncf&{?j^7}Qhw3rXC}(qo|b^egmGP30WSSB$0p zW#9KN`=)X^vMwah(CAzCI%FuX2on9vxUY|Mi?dJquDXjTZ|R{C*l=f!@o}*|VZ4#X z&Z;){tkpGna&;}gZ+294LhqDfZ!zo#zgdcy?d!j4(!L`XV$}MML^*9RT0{JuK(x zQ0;@NsvJBwe-G$%(C0u~K<*vT{-9?-i$H@utg2cA+7EO$=oHYmL05r(3;HN%F!a3% zS^^sIQB~DO(8i!ogH8ZF3A+9y>;ZiNv@RNV7PKp<^S@P9qd}uU7l1Yd-41#?=mF5( zpr3$#2zmwdXHfbIApR7}gJyz`1|0{w0CWxLcF=o34}g9M`U&V|&?}(bKdGu}2&YET zz6F%_H1zHAXP_%Ve*xVE8jMZc5zv0L)dS53b)zHpfwrIy`3!yn4F@d(Z3DUnv=``Z z(D|UpLDzy_1icqD9G&E6wo00Dhad_v;;IA zJHm~i13{k#y&d#@&}KMBxD1*J8jIg+tOQL5eHwHG=o!#Cph-A=-U8YKbU)|_(37B{ zIK{gHIvlhve&6vBXjjm;K}UmzT*Q$xXgkmypm%_lgMJHo2J~-G4Zj0P!O?XR=t$5^ z&?3-$(9NKWK@WlM0BwhFpbmld20aUUJE#*|+})rJL0<;#1^O=N1kiB$q7gI&bSLO$ z&_kf*pl3l>1Ci+R+7RTV{s09dzO~rG|DUp$PQ@;oU%;r-QvZN~8{wNrw%~Ak!SW>^jJf1Yz4T z8Zv9%t+_uI0N?x%_;%nsfY;O?2NaHJ<+Y)=x1FB=Uyt%N;a7k!20q2Nyk212Ul;eK zH-Xpl#fN$IcLja~cunJNH1K!-q5J~i$AR`bRd8@hiY9fg=of@xI>jb#Wg(1w7pspXSB80>4y4{WMnJhkt(t z-Wy}YxeYf9tBrluIF>pc9cZK^L2eoJ)Ox?FirxWY%b=Zlg}1I)Cs}~n zdIWg>2Q~LK{S;*o@S0+a8*6~ z$ybwrZw5|d%P#LTu2ury3%t26K2GXSL0%Ht@B;ADNIPfy*l^wLj(4E~J-}P|;^V#ee&D(PfS&}O4?NSiylMma;4<*Vz-x*X zu?W{ofM3i0B$Q7FJ_q=-zWQlw@ABF>8Ztrnnx>{UE&$#JcunzcJMeM98~fIw?vG>x z^}{6KSx7q1LGvD$BUi%gU*HFHVFHXT0JeA)8yw*SHFIV-~r2h=?P?S&g)n6#} zCs7`jcXfeJ_r+x#9r-pi3ul`+>g+{8~OvL74;a@%zBvLfZK! zf`U~?-?ff4&ZRE>d2e0Qp=&1g)-{cn^}r|o1HKRV2;j-Sw)(93jsqVF{964@ZMg`1 z67X!_@(aB7g=3Gq7I;m4l?Hq@@S5z;0lx4b%1;MA{~z%6z~=(zch*>b?C-U2AMlH> zR#gr6wO^N;L~7r0;Ei9as^WL#Smot(r4m|Il`yaWK|k-%mO8N<0*jAr2_mWp+=5EMB>GAvlNElxzN6RyodJR@9q(DH3z3y~tyy;8W=3GHD5{{8#c1OIy9 zUl082fqy;luLu71z`q{&|Bwf)_d;6lfwbQHsFr;EPD(P@;^`fjzC6A2lK!x@kbmk+ z4lJ+vuWkoPt#>tA@1?Axa3!wAE8cn!C9PrUkM@7`_sic^(}?b)vo8Eu>qo^oQdY{548^biJZG6y2w2xuVAvJ)`JFMe%ZE{tH($NzpV#GZoEI)Zfnk zr@Zx^Q>z?aOWQdqW!SjV;*!#&)~)fH*|e6eOPOtbOPe;SY3-V-Z0%c&ML8>E=a%t) z9b11jRZKoh(lkZ1WR*~2T06xzRdtV5Jbzt>yn7VSUk8DI*^fW%$N%le*HdGczZOIJ zk&3tU%~L!dBLLs8c>anD{8=@IE&D>%+_w01#asGDC_W5j>2H!BKS%LXB&>a*cx#GS zvBA>cOvMTd_b8r^$DpIwkKd^HWTpRE#Wz#@8O8Hf9(k7(pRVv`DppzL`zxNl&Y{0M zRIK8!ZNN`T;B4(hNwkK_P^+8qoE8g<|J%0GpiXWu(JC&nz6rZbjtG)?} zudnbGinrRkMe!XKe#{U5+>igsj}J(a1s7TR70+KwATPC{1o$fmB$p`uyv){$8p(ue zmbOaqmVb6A{(zDntvcG0pQm{KY5+2sDN@iXKV0#A><=hk4Wu4Q-~Ed3toTn9Z|VO- z@s@wusDaa5$&Xe1X~lO{fYm>16mQvczv45M{1=MnV|3)*(ozDJ{6@ull>8@(Z=ra1 zs!UjXJH=-zyhQO<|8G{jrGK~LpH=eXTFHb}-=m7R#@8Q;x8_??nv~B{nC6CCx2e?s##jBDmY!0U#WPjzPlA~wf76f zTm7%Kt!`f}#ar>ZvEr@yIzjQ)t$u;xi&g#S6>qgKik>6E-&>MspDEt5?~)(yY%c|^ zc+^<&R(o?5pRM$5RlL=n=M-=0f5Q*|#*cS(kcw(6ef}hMEiK1{oAQ^4WjAVCvgJy9 zRjA6;O>(RmhJ*HSXDbBFx=!chFc7zMQ7&iB12N*@{?HRKBT=NT+h~WVVmynX8BLNu^L{j=c4uZ%oDZXmYjgWL(w zw$#}@1kB*DmS9#oOE!YJA*2lytam=04`x(MM<83A&2IuTIxY*$4(G9@V8*aHyPREb z0W&u65L~~{`3u5C?Yy9YVD>w2hnm{?Y+Jc=FZp_$yEhaZ(u{0$L$twNQdc)>8Sr^q zG;5{6e{!J3MGNz1%s)p=rb!*>h*@h^K%*mOoyuQtn!SnNU^ZcThj|0jJIzw28_ms3 zHn~yTxYaU~|&%D6&Nz+7MJ7S(PTQhyy?9cQW^G2r6 znoF2IXa0xjese$5=gsB)sN4(YHl{C{FETw~e$4bG^G~KPn~kp{xmV0ArU%V&OkXo^ zVS32Chw1C)VWx-8Z@I#H`2k4Ksu3n`S=Kx6E6azHQ#m^d0jBrbo>W75#O)*d05SsYf z7|__P;IA+vjGvGj+pFcnkZbxnrF%#GVWJGMJ-D92rSAo(HQkB%9D7~eX^5qSzJ=?A zjRxlBPS;3DW?tSbP9P2~0G#+9q6O79G{CR6vS6-lL#U?x2EjVOlX2-!`PO!OONn*@ zl3}A)*Cw=p^H5?mNrBSgfmCw@-4)_uMLe}Tw>ef2v5SL3at9Y7@nKNND$x<4OT_Lq zgW`S+r_|$S5Iv6Ec_}^|)BVN)YgivA;7nVKLnT3 zKo+|p^d#wE$J{P{Lm$NNGoHs%F&HJp5gXG2=*>8e_}uWXkcULCc*CJ19GB$tq68X4Z6 zbVY2#0;%pukxa{q00IjOZ`LM>&5dRApCECPl;VX&C0dc7Wi|QcXmv0$a3ge;2xH=S zO{4ko6XBhyFn{p>Iv2Tj5`@ZxQJRJJVG4u>DO`(uxF?`Hh4CD+s6<-}5+o=sh`hKK zLiY)y7Djdkghr4MC44K{&80UM)vXKjyqr^wT_+)|1=xCMDqE{l|P={%bgjQxT9N|bvGv_gF zZLVP2#=L`RJ2Mr{b0oAkJ2UNI_Ga4A9Ky7dd6eZko2Qs|F~4To)x5;CyZI2yWtg`! z%`)%d{2u0`OnaKoGVNu)%CxsRmgV}GQ^gz%^>Cnn9)oJn)R9H zm`^etY~D?@UVHOprX5V@4a9de6G4sXScSz74WwZ2NL*yn%i0}@i_J+)SD5cGEi*4L zU1J7}B7Ch`m+9?h8>Z__57Q0iOr{&n^-MRL4>R3rzQ*)!^E0N~Ol>sj`Hz{*bcfl4 z=>z6)rVpCqnLcEeGJV+G#B`VW4AV!<512k?e#>;X8G-@hNW2)mjqUs;dLb5%j>KQ1 zn{xi;=xnCHM{i^LNAxJBe@4$|dL{Zab(cHmw zlKC9d$>vd}Q_QnWZ!+n>Byl7anRWAsPBptRz1h5h=?rrb(-LzB(^B&w(^=*hOy`)t zGo5RO=TrGx%mk)O%~nj8nb}O2oB2#{GiNYeX_hfvZ9dL)t@$F;b><1siFa>8fJ_xx zcZj^CFPzJVvt*Fz?*L+D195YJT?!4?b|nxp;@ zGo*m%P*X6?H7huOv{{e&LbDUoNoFq7$>tQ$8_T=n|IZ53w1jn-(hd5w5=f^W+kkY@ zs~G2RtkkrY$V$hh9|a>$;zLQC$!jVlXkRc=ZY+90D}95u($sH-^{wL2PhGt-!MH^1yle5SdHtZ$TM-p90u zd4Oq8^CPCc%u7tOP4_sG>uok*+Q;m~bdZ_F`f|)c;8Pkmb(#w}(adR1Cy6GV%#}<# zn>&f7v@;JfZEv1u+QD>y|@ zbgcOV(>(Kpq8FLwn_&~Ee7@O=X@NON(PF0K%(aT{A=;v|xevE*Og-jMrhUy4qOG#bO-y^3FEH(Co?_a|tO8A3)Chf_ z);4HB1n!!|q_u4{;#T}93cQ|pBX#**qBo|8Nb>|GzSxTr{etcTnm7%95^4Q|*MgZ$ z3#_#Msk^ZHxs{4GL{ae<`b5*ZkZ#Sne-lYuH-Q*!c+&*nfd?J*!>8m^`S``+>yF@_ zsmMHpoMX83rlca3Oz5!=rUo8y7+*ohSzzZaToOk3xDN0+)hJ~u|+)B6*;Zr2S-J>89^LG}Qm;?1thn6@Bi;*O~Fep9}jdDPzJ|(Iow0CQvVE-XZxbs?qS z6kZCz?R)}JUN2%M+!<8_W-2qWQE#J<_35tmv$2eZ=&QH{B{X9IDVx;fNhp(2vt6SQ zRY;*V`xAF* z7K+{HUMc4o8QAs6EV&i+YOb_^9VWb9$A?P|4 z?INp=rj7kwkNODg#Li&Smj*{^S<99n)gk0py`kl0I z$jb_?9|KE**^nBN8KLhbR~GB4SZs%qyrQDCTpTqcQix z!r+)Mp)4fE5sG=I1*AfMi(Sy4O*LsP-bN)JN{SY@qNahA)LYzz>IPHN(V_|J%%!BW zMLsINo|3K>Z=&{*lniL`2TT}4Nuxza*fE}x?iMe@n8}n3Z1E~ADyC#mi?cARgpy{9 z2VvVhN(O89is@5lX!+ek5?^dCC-T8KxOND_kv);qb78GDkz0fDPUOazAamiyWw`VS zlhKrg_|WW${C6vyfB@TRtv)uVvh4TzE64YdC~WSWw-kq7U{e6Ltu8Qi{}!12Zd06{S%AEu zXaR>&N!$p`7ZJQo1ouQ!BOaIzKkpPF)ZLM@g27-5UK@q;QFtvbu>pv<7bz{`4UD?r zdqfE72_P`yJS2mkLUG(?W${mik3p|#>-h)!=i!!hy~-) zAEnAA`n|DWBfh{vMnfRY2z`yv=pua3VABGQp{B$J2o^Zd3LXcE=tYS9G#sOsTZ#FY zhjc=v#Wmk*J^&~bQ z4_LoFxGz?*&N&Dt`uf@gXwARJ4P3v&SiT%9AY^<&%6=icC9=hM20`;zdswLG5>*Gw(T1MKjv`DB(AC<5$E-miZcj-;yx< z%JouPB#-Jw&J3k2APMsym-02^@9IVqbSRf^46Fs=vi$Y%oc^J1oV{6;yg zbfYU43tWC8up)2yDF`9@Y2Bb~?vNEotnuQfW&!^~H|{D>_(Q;U6V79yWhv@^S~R0@ zq`O%7Yuz|`hmv^@g8%g@dl%iWf2SK)!ZEkV2R{M(-B#ve{72pB*-RN5nT%kCOE$KB zDUA6=e=!w%C)C#lfFM(}_BW?vmEd@>fwb{D0!Y6E!W=UYXi0Da0pta({c{+Rk&av8 zHEQ)jZwUfo9Q#(t5}UmxsPa0Fb?_rq{4IBq>JEJ;3_m-gD zZ4<}Y0$Jh@ZwUgLJAQ_ns6-^KAlO`2{zy0>#O>;jSx?J<(GplXF75`=kLO+bOoVYg zmV&+rAkei6kw|apcD=Sm6`O$EY1NCl+V_XhOt-82dL>i_fvvU>rBnr<1tNGl+7_b& zglj&;^*7wEuP{Z}q;d!zzgDsOxI?sZw58u1i`Z5I#o_~9v9VJ6SClZ(ak3%QYut5m zD#w07bFEpRD+MbD(%le}?W#-joR9r44Xw_Bu3R{i1P4H9ge@p#Ztnz{B@Uy(R@v(} z17Bdv3?d)KUm6CPQHJZpTus{mY`cw19V-R^FEU(N@HN%*4DdIr$w>2QjA*eey})p- z881EhB_uDCG)-O}yWGEgchzFk5K#0rhASIuZqgmm5WhLZC0#@H`|4)t?S|{!u~IiZ zjPJ9}Q1Aj8SVL@EyRvYyr|B>yd`O;4q#ag=KIf+yrq+ z2i)MbMR>P$uATYJM5Zy{er(o)EmOSh*4(H)E0I9pK zAvppoUFCtJ4g>26P3(c#OIM3($q$gDKZ1QUlHY^GX-i7peqFSd*Ix^8eFS%pB|9!d zz=0qkTglFJ^&SHLGl%g^l3dG(1PC-BAsO~RrLg>^!?=Rm0u2?>4OmZ0iRNPb8;5Za zs~DcZV}Omf%l9nA`K^Az@!Wb@d_Is{?a~tc!C@e_Q{k;Z?zPLd994|i>u8^xhH72k zY=$8}IgFoNQbrtx;M=yUmct<2*3q7hoRsiy4kJ5M%7~vJ_`9vyH7pCt{&X09CMac* zO%VTav1>GmS2>I&xPMa}qAjpagiEh1z*Nv3PU9UBHr0KmSraq_IfUk-FN?}s8OnDe+~dG0nAa{WR0d~Q{Wyq64Uj@3}$K8PSy3j@8xMUQQ z_6%tQ{>MPqpZUt@W)NuaCsam(`4^`#e}k%S5Cle&5cdY(Azdu=yVEE|@Zjo7Ah5{R zB!$}MpwM4VBMI?=y}cCzJN-1VkZ>7)$093vHZ>$au&?lLB08Vf!5rxWBp(hr)P)MUp-*z*VpkZ&HLn zMRg&miG^+pa0Si5{tp7*Ru^JTEg#1i>*xr<84BXVBKSzZ&t*KmP)dtPG`Aiu*^2Q~ zFoauXO~u%EgxtU-j1qt^yNpM!Q+<^U>742%Tn&0d=v^G>XDFd55SV8R@jzhRt_in6 zveIR|(N;-rgw)P!NjB*Q$tx}+YLc{2ybP%~s!3`t777S3^mR(;O9*^#3-NGE?p+(2 z2I~4<)cAxJa0jk>^Uzje!j0+ppyQ@+K5mkp;I#lDBI71}1S6%n;@nVBpzH5o`$Gcy z6qH|NDI@0E%KY_=BzG+cG)_VvkN+o8^leKIG1u0^e)Llo-3+%wK7}ZPiF8yET?;1_ zcVciw|A<*Z`}F9+g$Nv&M_RzZ1jPHzwXhG@(W=R*2#|4DI_V+8NX3n&eoLHw;nJU? zk zN~K>S#e6`fJ4FLUHgwcJFR8a?bvL&P7w!#>GvsBR; zP__k26{BA12Nk_U1i2!D_SbkSpdoFr`TRy68j;O$C-LFdJtDYn8r=P1ASACBMi6|u z0V?kzwQsY#85$*w#v8FWLiTeOBq*iaoh#bXcXd+FSYb55F5$m`&)UKtvWsa?pbr#{ z*=+>I4jO`-aZnGpQASuRoc`d_Kjs45f7gk4I-ZvOH&Ga2fJmkbt}L%C9dPRXMLeCD z$^M%nj8hw=%#Dzn>XqgG8!B4TrY3;$Wd{`tqhF?`eT53PAoCt7z;2LmsW9RIll*hI zUbSG~{#z)F(=dQkd<^_^OGfqIGGR0YOe*LXATD^HYw+#AO(KGP>(gaqX1Aw0;3EiQ zB+=Cavk_n3^+Po5d=KKAedbS&wa@&C@t*nLe+Q~Xb#ti7^%Ou>;KO_7|NADKt^(U) z8R!QYfoLYCN%5`sR+Nv$<0frEHTXaRK7?e!PNW3TsD!DUC6 zX#T};^hV<5mn^2oJdTPOR?fI^q@C*pp?YQ(w=tpfj z<-fWf>r?vG%*$53+$hZ;i3B?Ra@@qHUjZb*s*X7kJw6BbtzBd`Ni+D-<8AN)SOE03 z7S|&d5IC4BJ3F*LJ-rB`Zfu04_pImF*b*FTuds)F(80xHb}J#uf)%9 zVhG*}bb~EHCiqDFk&g}813;g$CD;zu(c_^pXmqMD?uUnuK;S(~NN##=rcF}M9PTP5a?* zO&}4m7avcPEbHYhlVg?`9WGV94dh)yS(8K;iBOMtEPmM`j#y70W{r;Svb?+3Qai}SNN&kEy%i3)!e*by)OHE!9CSA=m9 z(}`J5vES#AunAHR zR+r>Td6VqG$w9l}O7ay*y;)6CZnqsF*prV|LT4fHgDpfgD4`Zk}ls)4dRQl!SaVu~2iD zvABWKbO-{+NXR=?T_Ks!O^e(PVF??5|*l zS$n8q-aXV<-1WMxMI7tpx)G@#``+{9LN!JdF(N;k1qD z{k6#5Vj=P-Zatj#ZXwqHfS$8p@dK6ShtnF=N7KN)4eX=pIIrO3gA#Z+jRLI}Ku@W} z_0ETJu}`>z%`VtQ@WW|Ox?}mrLUAdWIE*#%#oD4_THK^9gk=Q;_qVYg0kugn`^Qa- z!o&`XaZ3q&F?dE-I6tK!u$LkdT4DW*GBa`Mf0OMJDUT=`qG`7w_YMmYtmOg0C0~m; z(Hm9n0{E0I5JJ_oV*F6VV#M+aK=0acErO-`w~S?28h#DvR~v2`0fpD&LyP*)2pD(H zXo*%)rQtAG#87F8d~0k#v>>DzAzZEV#i+;^#l0PWRDpWxEz_o7-qhMvTOd)WH?i0msCBt5-T zu)qNkak3WFMZ%JLxVW%X{vbbo9#}4-f-u*~lynI6tS%%iI4q1eX5bhM*mxUnPi7>4 zln)D&bmRH}D4z?Eb_KE)Ze72bEg`U9==Dl)1O{vmF0VJKEq>mdNzd}iXOOgj*=SYV zNHme3(4*5E`w6|yRR3_}F7kDOeh%TYGf9hw1V1NyNss6Nn}rAk5{FCgMRjp0`6Thr zdPH|voeHdzjngrZJOvEI7hEr)b^N5$Pza2*g+72CN@%UasEuL3LUSOn)E2selzOOn zkHZLFfXcTbYo{$hWwhj4cf&tl>v|Q2w0IZbr?~0`I&lbwL^x0HF|8KMg_~>x54CD; zBFDtdc0mI@n;L}etL-LkP+agGgmnuDZe?TLeWp0q64#Y(bQA}2Z6U+~`tcXX0XmV= z;zmU&O>=D_Xd(kxh!R@dEn}1r?WCnC5TbK87UBcAW=EGp2(h$7rZ<+hfSs?P%kuSWsfnY_J^o13n%nZ6ir?Gra+3xHpr1>XrMdPZaHxe-O8>471Bb}()f?jpjt z-5LBl1iFv{^}x^_PGc=HsA#j(2!LHAa~AjywhTXN7@dJ| zEYG8;_PD>$ar~^>;2vm#^{g75T-nd6twLu8XJP!~5-(A0*CFM7R*jzO2_W#=&#GM% zviQPk#Rai7JgfErZW52#(p0sq(SBBqegH!@946>hSmb?HZ9a@4TRyj;zQ6T`0aZfp zoPv3bR-!wnvkUmxHwroaC#MlB_Yf;+D_VoUmd7Smj^0w4`Q{;n&|OKTa$gPNRLu$ac?3D z@b4LpLuiT?w+jmf5t|(l{EJ;UxN9400^Jz3L=U`l9xgRcX!RX9d$!mfw1d9TPt{mcLC*u7DzpJu7oqHaf0|HE+_ zw@Q*PvyqaUFs<7i#n3O=0-$3ACQ#(oA@Fj6%hkTGyzL!_IDXeXnQy7yduqpLF^S}z zGU~-85FOy^y-40}e?ke4C)98;a4HR!xjOQ0cDbUOORY^1R=ry5(Y+-ZS@QlOI0Q$n zYs6|-lw!>RP5pqgT7I7W=rnQ~Z3I#CC3FCtkxjKks8_}JHn#yt z#Mv2STr)IP$2r3UQ-kP$DSTK>=?Bj8hgjWD`3kofWHcvQ#ETt#D4O5arcWK}`& zR195AR&-2ak*2vgCPKy0*{UrRm&FH4FVSZ8@TsrHs}( zaeBMsSFWWQShZqS3XKuJ5jaKl%?JWY)}C(WX_a7c^Bo+?K64>H>v(G*NO5r#pa zwI>-j%n`&1Vl_9t7Q~#7DVEVxO3`~eq)Yrn&BswJqmkg2%qA)N(A;B4!5Cer!vxLjv#OTChen_f%tlJOcJoaBzDTeH1i`G-(#eo=zSs5K31%pH4}G>j4gUF zJ)%s`qPL02u8;!eFBnQ0Q4Ssv^okKtK|bJqG7aj6LaBZvVLW8GBZ<}Ax8Wo5&vuZi z(1S05QWf-K5`RhaL$Y*+RP`tc@Zhp76|66kzWdEMst4}{B~`~rlI!zUYSzN4Dr2ft zMQ`Jf0#d;YtS>X((t{_1k^&Q<#s@dwECik^yQ2kR{K3Okc02vxJG2CmC8K~RLVprs zTgd_~^qqcyrf^r&i&VVEX`wf*0JM}Ldbf%%w1QfHJuCc=pTZ#A0W%KpIHWhQ_>?k# zO97PYVC=MA%VX?V0lBNwLmts68{Bk-AP10w#i)Bxh6Hlrp1& z>34-G&Ni?-vvwE_>ohHZe$^UUzcCu~8MkE{EarA

w@&G*5(OqRKHgMk&or7MtTqV37#zgq&Nd3xtkt3G5V`cn?9|Cb9zaD=NE3M3Cp` zk`;3`)K7THmTLigXSQt!xhLftR=&B0Txb}1_%?0;y<^9xBKDQJ4L9$MWErODuP{jd!P^<`6#zex{X3`)+RcK|6YDi!<9jQbOaQ2)_ufu!lASCjCL z7=p=gdRvgUTKV4zW*km{B$uX_2zeW>;6pJ4Q)zm)khfJ@)O%&9dv^j6s+(RpSX!syJy=8OVDe96M`EQ(?@f4AOqe`NOZ>nwc%7z^0{S7L z-~|-#wsRI@P5ctv+@rO-98gS8ER(dDdl45zOzKQc)3pF9@|fstK&X8J3F*yFK}rO4 zG(9<35M99}4;W;;-w$VnK>r{KIxJDh5aS9KL!pDvTwII@tgiw8Nd<2(%C_J!AVBFB zEcet2v{wx19#6ZZ)L*e14j8=~1BRqV;hIR&#lQrmv;=yfARsfI_NfWOO{6pUc>!56 z{~a`C2IMy3+F_TZl$P)qmCWKN5mM>rQvo-ATqb|K^BVB?NSe=nC?$VJ&RoYWe=*Ckz)-i`e}q3RP>l!1?0}-`o%6uDSJ@8L(+0k(ZkJDZ7g=2 zDY&>ff>JdPs?eT@Adnbg%aaB!WDTlCxJ8qaX}C&BjLf$O)rYui5xN%Foi^HlPAmd; z=!>y{d;_^(;1Iq0!q0$^TVx^P3jClo z4Z@fT$}~nm`yuel0I#w{6xz#pI0O%?W5IPlkX?jMCDlz!$D*vq7`IAJ{&FCPy=58g zZ{*gMzuY?wte;WI4iQ2++}f-& z;O-M)Y)!bfN8Ajt&_{)%5ODZj;m*Q3N9gxM%1v*|a}N!m4EOUGJ$1v4eI1Dlc#$~W zHEuIyx&jf6>gwS~Js{5Tk|LC%m%Z_8<=i0#SbD`<5Pc*O8^n2`fdC@$(XcB%vg#nf z)JZq#Rb8{|bdJqIo)$!JpbA=t4>x}>`zHF^*m?)P1#48B-f?Nre+u5Kam;>7C-+0T zN&GvMej6HlrPLKz`Wg$cwCdF~idHTGb5Vt{f-;&#)BVn9)eY$uakS(!Ud%(fWgP@7 z%_u~a>ea4RUy^@n4ASi*hf(@2D%&BlfYPtRA-y_AO{FwF1ko!!lJ$QXg>_q<-)W%^Wq zq<6$~KD}z8*Xzlg-iyfD>!T2AsId)B%8r%xH-KZZ-6wd1%C)>3W^1b6_TV8^Hde@Qm-w6NoX&$?m+OicgeOkmFru13(p-;;=TJamJ z(Dpv5alcaf8ThbI>$n#veF%Q*(&+CZsz@b0FZ_L5K51f z`H|?CK83YI$%Y%yFMTFP$0MCcVI|+w*6l>VaPEO4Jo2rvn)AU9VB}k4-OkJX!F1YxnM~)N=3x3U z<8e;IE!}gSoA${$&Y8sYXJ)YTz-BN5nHl2z1LNP5!^}`;g9c!RFq7-tjisF@mziPC zKIk0JC}xH`mrVmRnwjgJ`$=0KGb5b8lC}b7Zg3`&w(-o2bnYT;h0Kg{_9SgZ%#3y} zCT&xh8KZ^LFY`U~LTS5CuQub@#b-WRUIN03XJK@6WV`7#XvQb-MBkuV{f1-O(wmtQ zzso|D>Swy?bxqF4vH0j09!#j_Oj`q{cJ1L{+?vrT0ZSDlvO75A`_1^>WMZvbQ6!zl z&juv;CBuf6v3Nj$_-i(TCh5DcC+;ssZAwFwLcjq_G)yz9AU445pwfvm(C{Mzc73 zG>8o9~4X%tC>$e_Wl5=ceFEJixb5%x3~_w)FeL+zoL z%<=j}E>g_$W{^@_#j}Lbhvq(q&wV0t9&YG^^7L9nIqYJBNr})#xVsLT7?ufXdO@A+ z{Lmk8%NaD84;bimbt-oW$rkaJ++*jO!%4QQBlHkd(7WusX7QFvemqR(Ji)u3L8Bd^ zp=T@Bu zst+y50{#rYPnO>2=Z~8!G4Th*$VSnN{#ZaWcVjjUdO|vb-uovHe0YI_^#ay2Uq?gW z5m}BlvfdLw&1_9QFwRkr1}$xFefFuL3yXl=+>pjF?RRB$p?A?}e1lg~wEOk9GISMg zhJ%js;)!;}SK;5}17E=BMzmY@;#%lBQoV>5a3`umiIwQ_@SLFV-;wVe9*#&H%&+9u zoEcaL=Y)jOo5?Y|PWA#9>Y(CJi5M*DYBvwr7 z5Hst+axQiw0UDfgva-o$1B|o5x(FqX zUeqYNh(@z!PL2omfX+v5^zugk$s;wqi_PfZK&fFzH4VzhRTx@>-;hSqJ0GQyJo_nX zXy$h_An=zI_|z7l6grVwv8M?Hj_N#{=q-^-aUwNNm*v9qt?aQWxM>Y`%k17Cw*%AA z(TZShRp@)TaSYzV4$k)Gz7vbwyE!-C%9RCr|J)SNd-@E!hTcz+JsweJ<*-*Zvt%x^ z`^%8=cr{FVoM&j><<^iozzz@nXadsjaHKpz1*ms4a~2J(?Xm&iQ8oux_O?4c6l0Jw zgI+@_h*;xZjHDrrt2pw8+rq7)I;v&hSAF-<@X-~DJ^tSFl0OO zS0nU3NeP88bSpvaY7sMqAnCgQ)7-ZJ##vSQf8R{L%p_^jHYt73(k6XEY11Z6(-ul8 zEul>xv^Et>5vP-6(v0LqX40mBRDngFN)_D|vw-fpvOZQ;T*VgO=mIY4`v3b{S5y`S z-%8QlzwYY)_dECA@0FR%G}GPxf7*PH^WFD7_uO;OJ?GqOnAW?eGdB0(6tt4QAU|f` zg={*#6tNM8R_aOP_vn=a2WCAB2pw1|yx^Nvv+qs#bfa`LeORgpGfuo7qxx#Ok*lItOEs$t zMqP=BmJ0Kl8U}q5?_CVT2bH>nsfnUia6YhTj>VE;@asoADCs`X{+DIz4y#bC=KmRl^%&)1jw7 z_b-!Cauh@33olXZ&Z~_zaERkZ2Mq&zlzAWaCyJ9ma$l`viL7;N`OD zzO??}uIM%}AM_kr_R9)<*gc!8ajWd$CcIoJFOjlM7z_vZ$V*w-O!WQ1z4B6CcEKQC zUL`N_vJB(wlb6b}x4#W99kriAVpGcgZ~`#_JNYTn((Uoj{O;;T*YVS-DLy! zBhYIk#*DJ>w&CS~#F$<7=S=u&c{#U?V$p-wNU(WUY&%MS@OAbtQS(pO)2^9jM}La- z>`SQ6HRRW?nQjZm{kTnr{hC_!7PqGV456;6vz;dpvg&u2;bn0pYX1$EHgd75 z-ntLpF0iK)L`SKr{e?{v45~T@Y{WGy?OJ+?rU%t=0lu~i0h&|_bgdee3RPW#!e7&> zQg}y>05!>V(1TtnI8I-zb{Tjsl@0n*Z^GBCz8ry?B@i98Dm>y+Ms3p9oB&~X?FRWy z2d;KSu0-tJ2((E8(TA%_gi9g4(@&k*I6bk(sX!v`TL9Jv4=snr z&028r^7h#);ECg-8`PUso<{iP2mXSQSH_+*k(;;O>5IJXZY1MI-gw!0pq-$0ka{xm zGm`Vx*j$uLa^C(W1ZM!rdH2vp{l=X4eIJvGiu`Yk{J$jff!F~P`P#=;`XYD!3=&02 zijfc3uQA20NBA2u@MJ$Qk2SWf8-|j@*5F*$z_xCD0G%_mj3vU$gLt`qK6AjZh4k%O zJS~1bFGqQ~4Ht1QTTYd!INiy{=|8KS9#-r5R4MMX=ufng9{R*vYbAY**3(%`oR@Ms z4z1+V;x7V;D3@9aqfszat|ub9g=d2rsI6ApaqdWzQ^FqSYdIz9m4wCV?5&)V|4KfIQ@V0Go2z^VUn{Af7^myC za{5-QT)!W$^g&im?`W0$P)ToU^@PRgf~vd*lUZeYK45&Ur<<-yUgES|EMLK|H}aKE z&dTWwqmrI_6*O^7PX*WrnFI&mtLmD9dCPNVH|no(EM7&a#OO#vc86?@I?gu z4gSvAgFr7I!r;1TJ3cLc9rhLaFj3*p`&3DXfg@L3k74-c@>|dVEAUxyGu%tGW^9Pz z{pNFzBG{97zk;9T%M*6hE!e5GkD&UWwr||5zW12u)@STz9OQovBH@RM$j=`8to@oE zSiEZZRWAH7#C*fSbJ3O{2$2(gZ}|Q)^W1AKqeX)QMBqruWG+n^ zA}4yS*1OSVF9L=515(P*9;@sJ0tJ0U;z~ZX(-|>3&K{kTts#Ll^4eZ&NYC{3%#3Z?m z1M20XMv`mKed!XG=zre<(vB?l>+&L~{Oqy6G8rfF;Pa6>gx7G!)hsEBU0o^nL)Ek7 zexQ1>+^y;h)ZLm(&#O=3(Dy+=tC<8ddac|KSvPZgkZX_6 z0q}B*3XIVwKYNUNw^KN>hcyON{w?v3`n=(D2<xc0tP1%k>;(Ekd!V-KGwCiiQhfiX($9@QC zHKVc#-!Jz=R;`WtSfFV)tx?T}E|Z@<)&i(oTEszN2dwhL=WMniX**H!qvWLPoMsVlj4k((+N1=6E8}3+ugQoQbR@Oz}71Xd4ms zvpT=!Zhn{gQ>d0S(Zs)H+Q{f;syIA}z?}$2FBSaNsvC&fAfSR9z0w9~(YsK>@R_jo z*eQflmHL&v(5n>M>sR)wDXLPclE1PysY)KOS{u==;qzwgF>6GSL)o~fMC&5w1`@4{ zY&IjJ>5X6u79h&zafM$2s1&{l{Gkkje*zb>6VM;8Ry72Dke@wvG#K{4_BV`Tqo<;Q z?i?Z~_O2mzM;@!F6<0|l3-s~wPDBcyuWOId)EN9{OySsBYW z;9=Q)048;Dmb%6H1JXd%M-k9ozywizyrT>!>?ZXN%J_lvE$iGP;3ai@w6m_xGC%`W zU-l^S37;Kok98rO%IBU?KKJH!^}a5eKJ?f8V;4^=-Y_XAcf zJ!oEvI3LnO@Z%~$AotCH`Wk7wYKVJd3sfg>RtcL8$N%(e~JnP28s>EI30R zN%5b6)&ni2_9S;9O1#BBk5JW`TkMq&;l*0Qw7OE@ToAKGw*d+*KYJ|YPp_Ieun`?V zQN-$6xuX$3vl7})cnP0&4W0r}X~f6PAd4WAM*$6=lx>fFDjat1BdFHD0%{%eRZFlX zNBuCq=Pmc>hA!DT|Ol^F+ zLbgYaw|x1}VSW*xLOE6R#6t}5dMk2nd>Xyc2=dM45hBxXK-KY=uhI6}3yB8`DfZec z*@D&*7Vty_lm{{2tBb!`l^z4*27h|h%zacsvRZE|Dl{Z2mZMh0WE}TDmY#X4WK*-PG`P!G^_U(6} zFjq#*NZtjPd5xNDecW)Zj~cG^5lq&#f5J4z97@GU11;E7nRnH|9K(E<2tb!oh=dK{$@>K~aK zo&OoMG)9wEOJC97!k34asN|o}+1O(Okl7LEQHM+JirtQb@{Wf{skL7m0VoZHz_#>UZMar_-G8miPfctCBEsRsOQWWk5(Wqet+^lH8zUv3A0zel3#ZjXI8 zShT-5E}URC-mGx+K26F;;)wckYdr&k?N>LDjgB{JLdee(5yCgx$;j-j2&5M( zoAr_%R8TG1!Ndq-+7+3qMl_aNZ@v_a>DRz8o?f7G^cDp7ASn?-P}E?STPzK6y0ViI zX|emmaS^|0B2ubjA~H3JcnKrYj`yqMBL2}tq|m`cWNM5!m!2jTy$P~K{E0(}bMX*z zC?PmaA;d2DpqQZycC95$_g&yJ>F?|>bgt_x^|QzBGU>g3e0tT)5M)}Ct8S8)y`X!u zSqWMi-#)GqUqB#fHcF&TC71^*QTxleU?T9+t>bCTKtKNqP#Gv6Nvp6;QIMCKTY$Yf z>{PeNw6>G5E`jVq*oy!y(_v9a`C%e8VbzQP4v!v^djS2|d=1Fic?h3p@o zL0djHh=EWss|WK7$iG!9ezI?a>OE#p{=T7ZNW2M9U*cwo@|}vAW{INM#_v`L+bF3W z2USTU-Y#Gre^=P*4hcM0dOK;}8!A>RqWJLfH`;HgxcGyJHIZl#MF9yv zUQw+`_~XZSe@++Ss49Wg@&lmGtrb<=<%2K$i3~4%o&ZE-C$925rZmzEY zDxLT31;`PpN~gJH?rVr0HHHb>2bdw0J@M`_nl)FQ1jrl-nYASeyQ z?m;>a;m@TV=X?rXx|!o@8}oSUaX9_Oy;mpa5s@zgTFvMz>D;G)BHzZ#^Z1jrevb~f zwlUB@ATQ?*?9Go$q6W}v#*!qi0{+hhWC{KxiElB9B@EOGOx%w9dYy!x6wo)X0<@a3 zq`l~Ia0o9oI-J)p_W~*iqx(?x%Zjq|+KJszjusjK(D@baX+4a~@*zQx~WpfB1_1A#9_ zfbsq_Hts-txY$@Oel*@>^GxV=giQF8gK)LSTJ(e28(4+fQ)?j%z~{$j@f9Xw>{a~i zu@3|4)`&zA&2gO-wIb&|02I?}`m_~wB2{!QNP0Gxhk%?!yk|{@oa;PnS;92wS>o5Y z-=K5!X2|~oXf>ltS3iobF24&)ApE&q?MsWHKXL@r65kK%w7foV1GJjaC9OAL+S-Sg z*Wypos(U@^xP*bO1qD8i`+S`Q=%4)Tu{!{*W-KQ0CHp%LIE`|L(#|{URG7Mm3A^fU zP(S;6yq3kQPRMopCjdtv^BMcDMnA+cHBztz`Vd8CT00e zMXCrgM+d?7)9!x`1;OV<`tv;)hI8qVcq5|i!JpKWxa?~+7WBYj?0?|?N6pB1t#%`z z)r>B!b{mR*2VUNWKQ}FF2?O;b&OhM(+_)q@4QMrENfJDR=gWBc2L2=oB80Vsfu7p~ zZ(q27dR!9rJxGGFn8Z`I9O{Nc>Sh2OS%!<-gT8t(PQ@|Uv*7;VxD-18t(N$ls(6U; zFd(nf;V#w94T=e<;QSN4x&l`q>^*?K6MvE~zgSBc@R@gD{fB#tPUZqPna=}S%~-6! z)3#_Ve5^VHvfrS?YFxlD`yGNUd=gO+R^Ja<&)A~M@OKTF*Qo7_DjiSX5N{zB8xRK* z@emv^U#5~cgpuo5?MObtTMKAhG;Uo~b#c{(s@Z^+Ra?;-_1a#yz6wOQ(Y|z!fSe6g z12ye+%~c!cbl2GkTfS5hip}&z0pXfzRW-z!L&Ykj&4{pG z1XQ!yv6|}mP~!$g(M-^(2pUK6P?mNHHEorYVY)7Zz(KVd?QM14b<^$I*yhXyIL!9X$HP1{$!s@{o0MvhIdyilrm9Mnk2O0t7}7M{ zTvfdKh6n@ATWnQTZK{gaU^(w^%H{@)`}uFa#YUnGx4=yuMJ1qqi)q$|U_M?K;g}TF zPK(?SQct993bVMy+J?lIG}=vd12w@$TdJE|dVrm>j3rmidV@6U`GP!X2O`e}!A#hg zs$rH#OvC7+Ullabsdr+>bM=a?O5h!*U9x3m{*MDy}XU+h?uLTFPn) z7Ew6W>b0Fh$#v*k)R&4ucDszI4Grk7Rj3~h_{H#RuvpiNPHQZMDs%mfQ<)YB#b-E;N zXaegBUqTJls_xr@*rl3xyVS>YE1R#~7gc(W1=|q@c4@5IX*%-@(wTGB@WsOJ4vZPq zPB1U5vWc&dh6`nDn07JSn3QeL2GyKs8!Ugz&={KNQAxd-sqWK2S zzI8|l^RHkZ{#fq1ePXe6}+Ck78n8g zHh<1M(wo=mHq|7S=#_9mQbU3cA(!|?4PRxuGauA5soI$Z>{KmXt3G1)&D3%>1~A9m z#yM^cyY)AjfcT|Lk5kTz0*c%4zpd=r(Tm)gN~#7tG)s5ak1)DEyb)6m#XgLP$GbuUjdFhzYkmwJD@NmPj1{9^f!*1Y!LG&q1aZq=SG#S6K z*@h$$v}FLn42EBCvWU7(5Gus5>ODb+jKUV#P*qfJ6Elwv)V$fA!)_bV$+?ZqVjWSv zRf8PRm3P=xEY{JBd_2MEIhs5jQ$hblhFfiWU3JxU2z!GX076lb0*H1ciS~_(IEKMD z8A`ys-=HW!*~JYjHZ&j;(tw*uCfnWFTak+6ni5Of!TiXUA+AUV6MB=as5hT)!GK>< zQwOI$a~HgN)^vLs824LkP9Yqwx7pq_%Fus?6;~B%al1XsC6$D~+1Ar?96YWK+|ZPt z-|n=_kXrwoO;uH>u%Z^&YQQIN`p3a|D3hOc(pV36(ffeLqP3iBu%AaK48j-%%zO) zwgq4DN;YJS-K8f=d}cfRr2!!oiSeLKf*i!;Gq=A|iG^Xme z_rh76$&uuc)AnD5iZ0zRO~icu+WRUk82tLa&{tO5C7FK{`bcgMAKj$iANtO=ek24_ z?fAE>UfeJUEY=59INkpWCkX#wxNlIw4cq@D8)Z`!STfn{&D*po2h+5%I7cK zX@>f&l!)>rxRz1#(Pt1O zir{7?0tGdM@k3bB&na>yqZE=dy9)Es7XmF#A&=(%P&U%BFCv|7!Zdy<&L zQXzSLO5&+j>8`7n;rw(Ug@GDBga1tEn@Rr$G>5ec!UhMn*iDdg*tY$LnrhxSo8k`- z3#Q;veq*>kiod7v_e1<~lY9;SDC{|kzuWNle*8u31(B)A`w+tZEMK3*CHhrf2(zw^ z;^{khE&B;!|G~?jaEUl5LD@`Pq7A&P#wD@=7iSAEJ8=Q~g(Yi(mn1L!yd2?WkeAzV ziQLW0pW_nyD_o+F;SxW^r>Aj={4+1#;pK-0aUM}HfD=)iw*^f&!#ixEg-NegVc==1hxH%g=$;(rG{VFg2%GV$9@+)32 zAz9I>y!;%Oit}(Ozksh7;ZnvXDZ^S0);xHvyo#3;E)@g39L1&ljl8^#moZ!_-^Ztq z^71q;6<_Dm_xSW9Tq&JCeiW#JwX9sk*G67iajDvdOQeIB zRrnflY^x$-*xhfix^ zO7x+a`G9j!@ZmZ0;c+|o;g9CSha=`gnN;&mj9C6=KjkcY(K+W+PR-jKC+kdG?Ns$R zQ|@zWtVmfT-iW&4evxw?Zz$?JoSFkp^{vi=2c4$KqFU#i_(Ct{)caKM_=+OJPhag! zD;$0b(zmaUY_E;iqXc$&Pg%7yr#w3UzA{uJ+8JrKH{KFg4OE79Fe1_D1CH&?{GC%C zIloSIf+Ou@q^>v?%XXFp+SUknqu-3#&h*pHg7{Oa=~W9GX>;^XQ9F*F`-w9R-lc&b zb!epds&$s}cG6j?ZY*$Qqf^HlwDclnPWcX8%d?;ik+OLC0cXk1o&V-kMs}RzOgrhs zc1F%+MO1c1Tpzu!!p6y8y!g}3w9`&J zzRIb6gX7#7Df6(^Yz0Msh|ZXE+Bxr}zXoQLDf$!CupTv7W@?~Xz-(AWe;cu#*{7X( zI(9^gX|}_nC-HU0X=hQ^S@D!Vd9%3|{Vf{kym*~6|D@AUAJMqNMlf4-(fg6a1*e^j zS!eStDv6lnVfF<<_>c!mIP;s%+#VGoE`#3eI7VMYW9>NQ>{hg*tU|t;-OT9Mrr6FE zh~EyBD)-vQ?2JaghXTwz?Nnr)hOEDv%zkk654AQ2Tf>XarpVTr&gvI{Kz2D0Z<;*Z z=9Kfk!#VG2XJb6;)UI}_(IG$y)B_)0Yjx!RO$&3}QnJxV2SI~T`TwG)47)62T+sbWc?I~xy?itnlM&%%S z7rwTfa@GaD8byZaD`gnT@lDbgvG^)~(;CHy==Xq|?WdewffS6&Mf4Tm=KT0h=i*39 zt-tGx{zmktAjHnJA306&9;ao8s+=mLQ3r`W2YNF5lyiQ)!W{M0D3(Njf)Uto+FA0l zAFqtMO7x%5FpEz)%UryQplyt9O!P-6dux1`b5Z=kNQ}*@u+nJkgk!6(MiD6YSEFAP z{z`VHB2r#21i*^^04=*P{%z-+(@s@nYn>C>8L99P>UI~NOuaHaq+tN+ZYxz$;`!WN*=Wy?sPU{yXw-+Jk0H={%p(h5aN6PNr42lXhgRymrKCkE8^=SNy0|;cysiJq2V+(MF3d4+DR`lOchssw#r=A9R@wb7o z{EFU}CkbO-7JVgR12^J7cIJN=UE)+or)X>@DjJiv=ttlqW=4FAv+PZdv%{(TF{tt? zQe|&_$X+(qa?$rMZ)v8TxRG6sOrU!vHv(7%h~ zJ$?dV3<;x`+D_vsOkWCpDzH4Mh@M@turH)L{Y_d7(3B0W1(=s7^LRM0Y&GGt!(tmpmVEEJ1v^d zsXVMTx*j36sa%@S82Luuhgwd5MYWD%M2#hJ^j3VTi&lfu$507XLlwjrCP$w{kmgT0 zvG@AF8cXQtk5R71_)X5-lg>;m^zL)YuOvO5ceQgtwDJJB^IM!)gK7KeXnSLG9X;)U zWj5R~nJr^29(~BRIrlaGSo%e#K5#i;K)?)@^)SuI0XPRRbD}_vjZ;P;$;L zA`l0S4Sn>B=*A0PaVoy0TB$;C%$WB_@5cJ?()eZIrVjhR8|MYlKgaiV@uQ?<6}LE% zhnxy62~q1Jq>C9r=1G}ooL)Vgv+nu8gCNOA0Y1f)6S*tM91 z>}(HwH4ZMKFQE%tL1h&RAMMHvb;8`guWNANh?O{aWk+^>Vqa$>JDf_jk9K5RhLY*w z_MM}nZ5`RB)rpQ&U#ctHl*zVtG$#OR=}ToY?f94!KwHxq6FHIYAL?uGXietlu+ z5{bhDBZ;oj(WX|IQ}?A052U&i{i*)Wksc)CRkjU@qri!D)=KoG`%(jgR$^!Bn3dR# z6f>#eY=XI1U4y7(YP7z4aHO*@WhJ%_4rH>4Ey+wOF_axHy^5DNqZBurCRORJ=}!)| zkFslgZSOC7TT4%Rpu25f$C`wd?N4MwoxC?Hz?c0gRJ^K^ruT1g?J2VLkH`8hoabqUiebGh4 z<&A+H>w)%}Y^WHU>Ni;o_4@uHtLJDM{aiAxa_A)b(*x=Lk^Z(k_3~Gp18!?e`;I-M zZ98`LuWoDGfq!ji_w3s22vDwl$K^x&69lv*4hjpj>rQ9Wg9FLFjoIOm)QWmRQ0cZHhGI-CU8+CB zEyLhIDl^j6DNks2Px5Y`>IZP%VHm+itB80k#3V+<(L*Pk3E(pia2@8ED2bguNi zY#r`Q9ZnCBKytn?7ztb@+1$hW$%m$<#C{^HnhJ=<#OJnkphlUa$syGeE=6V>5appv zwr@jfG}Sf2=4n3C)U+0k-at80eTkvLzI4~IrWTTJ^ncT`z@YXWpkdkOrkt%191KEqL2iXIuXB4QomH5lS*T`@ zWs>#;&*A%i`4A^Ia43Vr#}b3X-Jp5H;K6_vdW@}g)9pl85v0aei%0tGiRW4LJ7J zB=&;W1p!U;B{NxTICWUK3|*kaU{4PcZ|zA9aGuO$hqHs-B=6t@hX#Q*DYAhb*@2Xx zP5!?2Pe0(URB;P4R;`L11=Z!`eT)*v@m*CIRshaMuWV;K*Fz^c)l z9LTnJ?&<``(RHNLQ25ej>X9LkO8-plHLsN&JlX{gbRgr=Qz2vH3bnCwaIkMhJ?F|z z7hMEqb|jUMflgK>(Sx2@)9iM#TV9XWDF#f8Fxb|fs)cdkeJ6X{GhI##tu;T8`N z9g=%+nqZ`)Fd%E$K`b>oGpXcoS8vg2Hig(3aPIE>!iq~m#Sb6Ou*vRjnHj+djAHsi zWfOfE@!7#NFxdw~+8qh>e}6yRsiF;l5>1$e!70n^(VmA{#U$UB>>%sid^Y&G085b{ zEwPgHq2*+kG48B^(qp7y%yzNU&}dmTF%2E#Jp(U;szGwmZvS{48fs&!4w7~597*?O z(*syxOU*00)dgRoreewf zf(wRCno5pi8j_=_ZYz_@a?Yo);=fDQ0}ccOt94?*%)x=9m{Nt@__{>(lD}UyFLb7S zhfX^80z?%MtCSpAA7q%$G}|z%U0P~jouq{d4+_0d0AHG)!N9B!X&J_cOWT8ZqgDc8 zQ3y*Q^w#;7CI=DsXGbAda4l$76s4l`WYejiaG{w<_6V0O z%o>}L4G3;@gw#BbOrW*c)qDbYkil%89qjM4CbxE)@2VEII;V3RT;{Z0%Hpmg97 z)X;F5%}GokVA*#khSP_8v;BjateFH$NwF2hye@T&EN)KWsiG*r^z9rTMBa7^X7-E< z&kwOG1TIySffkL;KLW9gC`(2^<&6~5Bv>A2HLHmyx0Qlnj|AxgqX%9_>$Udeud zTOisb`bWDmYNgq<4!*#9hp}w#L=OvLJOXhx=pDCSte%nV$S}wVC5JknQd+91Y25OT zth10^h`Y0CEIn?(Ziv-GdMtwHp5bIyqC0&U+YYK@OUYl&d|TFXOQ(qv@Laq)gx)Hr zJQ7JIGf`_M+2`5Qa}`&ZRu7uDOR))oZ3FVS;HC!$2EpW$Md^c_0bxmLumbGXa}F08 zvZTmT0D^VqVAqBXkbPqE8PM$FBqzKz>-@B6APZqH*4V^KwT$OP1f=1tg%yrkmby*g zaR8Kq=V~zj+y^m&Ug=RP0ig=SDNW7mRcaoC-QpAJ28DVBWIe=U;I?3KPkLCb#8Ixm zDwO*nN+wU1vGDd#i*I`f1>0{M^~9^4FA3YHipOnpdGrn^j9-U zF46ONskJl%rCCNMZODD0VXm0s)k2de6qb6O(YB7ue=H3|epUJ?YhJHNjait8JXCFJ zaB(sr--*Ge#BqV`S1rTu3hY1nD!?viUWdtSXn1fad6;r&&_H1*lNpL`*m@m_PKal( zb7dvVSGD6dB}qwS42dLQyIN(9+T!+0^xzTqas~`;kTj`w8e3Kum~jgQSS55WO%>2=iHx5SPrN zlf3q&da`*DSxJhpwgfqH*9(f980oW!68)W-ENQc5(MzF_VNPxWQ3m-rcY{_D7=t05 zU@p}Pz=w%vI0jHL5StuZi%cBi{=h_bhG}~`G@?JFw9kq(J^jjQ&R#f+I*PIyh3>yZ2jIwaBQ|&0JuWDV$3WRycaY4I5@RKnq1j z&a#^}6OJ$e$!j8TAsG{f7I zm%VfVKs$ldJ+d4Q?5roduIKLh#8vY#sR50+HIzH5HDs#C>hByjqh_!#(?(tlCESoh zYe44~LiSe8a_#E^$}}$C#d6zqFoF3fwAD>`awFaly>0^JKPC1r{Q$Z zF>tB_DJ+E2kg0P4ltV0$doEB2R+z;wJ8K|BT=s${Q+(f@%tG%1EwWCJE})jFG{zwp z*KC~Du(V&8Qq>ylwgIR{Q2 z_4aU1iNkuI9-CG{YXTEQ7UL)sXIzQ7T3nVmWT|2>JUHmetUZ)4f*>WZD2*`qrjdX; zxwk?tWq1W-<++wr7{Ta`e6n)U5Z{a47B#?1DTxTn{esjyBJn&cP9t9_hJZtMum_v7 z803mX`6mkbh83Mq-x0867Ie*rpfRab>O^aEC<#q>NJSuWgwPY(rsOIty=px3;RP&8 z`84XalHFNoQ6i|zWyqG&q%`-AgqU7&>;ZN_oA zeObfhCNp3-A+itiC?n}%wZs8(7GMdQvANzgn)GcW$oz!$b^j3U8c3R;X=<8QLsOJ{RmEflO`@am1!hr@X0R& z4Us9D*yfS&g3=Z)@mi>wW;w@CNOOqPluNL&DS6o~>v!%Qs(7W)AV^!ogV7W778LR3 z(m!m@qkpJu5L88TsITtn5Z=iUCeDZMY;Ja-+dF)sdKgN8r^kO~4g!`$)&$Txlsztw z`A{l?E)Ut`--s#PMGD7Tb>T{B>T%nP`KK78O)qRgj%M()`9tn(TuR|UQg(yBixg1k zW?qRSl@e%hqn4VvMHi;SCNbc-Y2Rt}L+qdJ9URF(tCh=@Ay6tX#8{06lOESLlgLp} zvZS_a3a*YYMzIjg4t6!Q7E8K(nve+y&pTy3uT(#jG7DH~Y`?h%3ZUSk0xR6L$o?nP zou!RhKX#x}7S@1Ni|)sCK42Z`ISN6+Kvu0&vEAd}LLMGY9!pT1ijar1y+WgM62g`FhNqBKiHb=$YVP}D~$ z+ZNgQrOZd`x?Cfl94dxEIi*tR60;7lDqJ;MJ+k$qC$o@fqX~mVXtG)=?@VhI;u4n% z6xt%!0wl}Z`&RV9B^#o2M48z{_AzkIsR-?+kU3D{JeOjW$>WGMt5nTeq3~sEVj)(iwon6$wOAW&+ zx5-kw4C6km83$<@2U$ydVWrGOqdUsIMQzT)h{aF<0}S<|{*BxV(ru!455>4yz$8zK zflf|)(5#2Kg0Y+CJ-_F-Mq8F$JC_KBb z)1*OZ+GKmv84Cmy;`JUZ^`RQ9WGNW(9%(Uy%!i`wU2Uz3yMpGX$oo<5@VwdV-xS9Z z5H=?wpbCqw{9Qx62@Fc5U`1&{W(fWO(vaOe!F2KBE(J&9%TXC9BHa=xbn_h($Lds%_6wdoowz--^8 zAQ7k4s*zd)9bJ1Cbe~0!4vKxmj=QP~L^~$5QDy;K&y64L7lOvvT23G{V}RXM-zcL^ zKoq1KC%hOJ^<@8Wg5f$O{h~`Ps8>`O_6UE+Jqu--Nd0S=ED@*lCZ%9;{xvX$!diEV zQyb*~;qWuqf@ajDu-Y$h5|xoe4>Z#_Pn#yzhFIJRbzFR-!$5A~`au zJ3N0e=ulyUD$|n&Q9-mE=F=NR!dS1?dS}Bh zLho-FrAl3~{K%w6gew_7Glo52E}vsB_l)h}rBBabl9_OZg~pbyejXObx1FN&#{7K^ z#|(NgL1~(|!>)0)6vn!lYcn!%SJJY>9m+=9SxVAID2Hx^V-e1%O8-$Po*|Hvu*?9* zjwGS3BBFZCDz2Vo0~9T}myZ*vS*6}o9|VoshyuC^`>+oTH!aw@^=QBB74Lw=7Q4iB z)B@!tL{-y#PUl5|enAy62#u_btOZms;7dmJwOWGY*%+dguGx=s?Q{#H+gg#~D~?81 zJZGm(Wjb+5P(ij9mLbxiT18lK@s?}vt;(dVg{%zp5oChYP9-Li`Uiz7Lf>Hj%SDBm zPxXcrk_3Cyne0o#dJW`M5Z9DOD42`NXGTWqVWX)iAZ@jZQs+{gUCKxihZey_hVc72 zT?Z5p-K){8o5{CSITN#Apf!dGln#uM$gmhpi{hyeXTb*>fj*%ej`W z#wg*;fMvl4&4Y_b`S9@I$Plzvt*$lAK87YZY+aW%DtYd>6gh8uHq8{=PiR*tQ#Cen zJby-|_qC7E2lvf|BgD9JxgyvIX_ZMzHe9=oQV?x|%#XN&!-8zUCQ`X$-AO2}d4!aG zDZ7K*$CQS2W1fOB~_m=%I(w=558GuAy<0qk6YkPATNRX zkvBtf6B$d;9lM`gI-WSnVCz?zRLX^AG^9(R@BQD7nc2TU?>B&4Wz zDX8V&p7-_Z87hA(POene)KlB%+~U?sq}DF-$*cpAau+AES+qjVjiX$8V>u-5xm5tU zW}Zk15Gx6-1PF3|l;m8m!RI*qxyQ8$R5H;$sa-%Ak%P)F+M^w6p*T62UbJXa})jwgi^MrMCJ5_K%MFy@L7(6 z@C9o|X-M|iLMf2X;JKK6&mx^tuuiT^vwmqfBeLm)xdq%uSVc7dnWBoAN4QQEl&-vp zp~jh=dV{t|`41w1bl46$z zOk$ziObKzg96rZ06G|Lh+s;IHW>7mGD}7c{4Mp%1w{yh15qSECI`1BCQUM>2K_41rXOYOG^|4(+t> zII&>~I*;od9=t9E*9uCADY6CZl&DojF(l5Y%wx3YUdXD!P*~yul+T-nS_jj;fDi_y z^LJK8nb>0$w z6uucM0y0lR zEVq@O2u0B5%Z44iBfHm@Wg4>~+@>JhLhNyLU;E z+AGay8j?eHBpM)UUD;!aH{V_um_dQ`EFg+2Cr6GzJsSJSjS4@Y^X(oCf!rWP#5c`7i$P0Zt1*qpwVaWTgKXbHFu2>8?@=Zw|YNYLW; zjAZ2@<*9l>L}OZ2m`=4&d4pul-3-t!2tA0Ac0j11n3WuwS=3+Xpvw}4hHA_Q6+YH+ zC5$wv@c|*QaU|uo?Id_Lps7xV2QyaWoD|3U(=v3Qf zNiV#R1H*_Q^5n~Hy1=)i-=2SYlJQwZ!D(I3^(uHZg~r(hvYjZBM49euW( z1LZ(r_p6L}3Z*V|7vL zF)*|}D8e1Ay*RSl) zjtrzOIh=x1uXGn)=}h{P(eTU+W^9$;U#)MVv+gq4_+c*=_T&;>u{z2-AI1s}S4eD4ZjOCdw9PFx}3fjEOu4nwiT-l=`^ zfF=Shd_L?#1_-KvMd%)hAEl6g8J|BRcaW~!WOb)|ltTd7@1{2j#cGHbQKF-a;vywL z*zidQcp`PghmR#vEPi+lPs9MV^IVq{y{qacEtANzW69yJwS0;%v@rAFb&HJAEk0i% zM7yGW7xo50y6gSSLSxD@8{z{(m`9sO(v?L@^#zUbHKS)G*`&Ucs>L?9>&#c zNWgAO>4i~Z1VbydJp{7!Nvca)U?mIY&=ufHZsd5BmGIGYwpXiP%I3Rr;3Y~OYv`?? zOF!_+V2hy50!N=IEDhC6&JHYv0s;Mxc&Z}a8VSwrn-?dVj+p?)eP1D+a+!EsL0m}h z$5kK*8*XAXAR_hleOMNgy%_I50q!N#&WX~WEVV^^>({VKz=S8L6*sCCcVW!Rh0sB$ zAGFiUHO;d1&Q##H+_lCsEP7z_hoe!*0|#g@;5wi4k&>boCTqb;4!|!3y{O902S*V$ zVr9{2m^uF$UDyNz*(`J@j5@OmS}k&97yX5Z@Cb_pS9oNsC<9XibRo3nHifAu3RbX) zbA#DqDlkG-=NNwsg*aL62Z((D6{A5C`b7t$bfF4$0O@T^dpdScwUg7KI1d<^mW)<~ zLPrK+;A4(aF<7PDi3@cqN_$SNDK}`PcTVh}0o`jAc`Jp=xSAub0Jg#*IZ(JCmIhP)i0(0#;@5? zk6cT3fZcpNxr>rD%CTugy9vFY`nV>~LF`WY!;&dnFT{kJ%1)%l<9v;3+;01KpqY}V z=``5+dMrUyGAi?lr(Bup3<(sek1K`=(0GLnVRHq_yl8EfB^y%QyalPWoRi6xD-Car z#-C<}H4CL&Gx!AdiWS)^=R@rR_L@CBpMRyCDqaD`lH!5fOaqjljlPAdQsE_Ni#|Xt zJYB14*=>JCeJ8st_HELwT*+Ys8JeQ`!U(D@4SBpigJTN)(}C#u%CbP)sT8L9vZ@9$ zhyWC6!GZ?PybaR$@DrPTA)o3X6&iW`voCgr{ap!ehAqGcg15kC9xACS{di6b;9bm8xGE!wu@j7Vl zBd#_>;Q{JxGEcBB#}1}qb4soUsi-LF=lASB8;m$RIS59?d&JBBwG7ZBQ^!T9#8>tT(Vf5yNv#JK4r z1@MzS!vc}73vFnfY4?z#D?!f@E$P9bjMtB(;X~gza6G#$OdUR9^FrEF>#(j%(CSm$ z&z3mt`%eSRX%L2rd;E}ia6!+&;M=TSa|mMc@JRbOpOi|ZK|;tR`B^=slrtGK5G=KE zv=fe+Gp7m{CT5sPL8stEslSuzi&CM&6S|6pF3ldnh9P2wgt}&v4V_uI2=1y4jp>_{ zCz3I$X%qQ-(~|3dTDIc-qYXL<6AU+6WO3oph8Dnv4VwVYA)z(hH_|V%Ia}M36CZ9?U&`4`P<~u^gx7um*hAFU*>z$JMeZw}pbj^4ZgTjG# zIIlbDD6?gcNh#bdXSgGp;|Nh{#A23RXcMs)7M&pM&?#>WV0H)Sr?p4KX^;eADGoeP zG^lX-F=oLe=TVDO+JDNT4#w@6wU1@8DJ5p7*6#>B+@7qgk(3f*&ba`)wA=~uMrVkJRb);X zY8Eqc&HM~<3b`OoAhr^QB+J>O)ENYU$+5lZt)>m*W#%LA3su?SdO)zqov$Xb=I{}% z0AnnCIMhX@l(Ij7;+oxHpC&Y?yuzKSOdPI+JXz}@pAB}@9loK(FdOMiIUqR-yQzsp zPMslCnIa1W!$WYYl?&Be3q z_Z+0dD=;(q=x4L`%p<(>woafXQ93sI#HHXCa`DnC4{!E>W(J*r)9?J`Wc=eeF3+zf z^P2pG?{}l$GC4Q;dwnkSG0qCl7R~?DCWvPyRuC&SQjGEaM{zKEk^Kk*eY4I{doug5 z$t#;OG|vZGH2Y8eYTt1nquslAT#jITgZ3xw;k3Y!-I&w1YOV200ZB(+y6e~k4!KJc zzL=>1RudR!iWp3cT3!SBe3#3iB!RUfc!PW!TNAOlp50dv!wXnK`VNEZ>BD}Tr{v&K zwuz1;_ss%&iK9#<&N4Op|9qMOvF*RkY@6i5%Zc6XNgqLr5KWGg4f|4bI*+ND+KXI( z!IQjj-jk6W9$zqnSsw4Du^x~uJG)c(CTT?4UQ+o;yV z3fclFUSDm>mpBG|E5)L!?x|qGf2gsAQ(Vsk5@z3wN@E$lOHxpM6hZUIvp7VJ!&bN@ z26fp_Nds6}xN`K?NP$B@)Q~s}Y@pe$^H_yEr4-#( z1G<3&sWdD%s1U-_Vlbc$HGZhHO_)Ub#xJBXwK=5Ug}YpE`cuad=6D@ z!=x%Rr#znNOzTX5z>+BC3TBn>GhwhiAqW+34F+8TH&+;+0I6fx!3BC7T*1xY;9*l7 z@M!wnD=X!a&MaSrRQtpOTvi7Y3%IZ34CqVN6VL>}OvL8~p`-!k)i{^rVq(2HG}s2W zy)`o$@F>-pufym-41EO?J)CLH$xb;U7PW4xr>Acu1IutIX?Y5c?l{5Tr|DwlqC<30 z1@#OrwfU%b(I`y?8h1yf(1@4WA)QgS3s$BV8~XK1N{*3SEEY9$Am^qo$`G1Hm;Qq} z4YTS$>d4R*?aUl)s?XlE5=TT`-bhk%>tkaOhV?RBbn-NCie3g4D-8F9)oPM0yg#Cr zJtD|dgu^Z7B;<7ky!Cdvan>c&exV z!ew@K&R6vg_NP`|m(IZD>#ECBnd`EHL#u}1&MOO#s66*E6M6&Fm&&Zl;@FYQs!p87 z+)I_ajCGdMSw$5W*ibii4GmeVMl!>zFnRQibf;EzU3lRt5ZN5CRh?-ZgOuw7JU%Np z{F|>j+|{)TmN|*mmX&?!fsxUbIGGqJnhb&oj0?y-R&hHpl+(C?s+{@Dq>d@~m$rzU zgF$o_Lz!$J&p7}?hBJ=QEseeM$mZ(}9)O^~n3GZQ%9R*y%8bjHz+!tCI=ebBHzV*U z!&m!K#4F6oh3!X9-Ee;;VY_i8E*>^^j->mtE7JpzAY&FuWC8OXJS=ZCK#@2^Ez!Wk zTbEM*X6x#VEL0J!OHZ2V26pA~E-lDt;zCHwhWUm9aqi-|T}hmm#dmbOf)Bc`xENB; zcc@Cw(QZo}-PP5f%rcQw784Kd(DTNY3KK!)A_D!-R0)2vg$S>O!^(GrC4Z z^x}CtrlbSmMzZNXx-(`+nXwPBI>{?J0!38>8~{Yg1ym+@HT{K>V0^*>c!EwZxZj44 zO25^-VN+pnV9-*#bBYgvp+*7~WI8w&8`Z;8=|i8yw02fd0`3vMa=6>!b6ttcU80m2`jLy#lWK1`o>Pql6SpFlzIF$iZuZJgPGQ z@|54a7%qoEb$`<>j0X&%Q#iR5u z?yg^I7|rysF;tf&j-)Xhl@~ti>N3l6thmKr?9Mv5Temo|s+sC>W~@O!)x}!$(*?2D z>8DF$59+4{u}`~C&$&;3bf4zWQt4eBJE)%)#BR_}m&6{|PallLUYM-{UJ$F9W1iOQ zrvG53q5E{&eJZb4=^c;VuAd%>#TpkY zU`Om0{q$2i*0)3f=g02SPcvf=>!&B|*lU-X&o}6&FGgdV&sV^iv8(jcU6I(K3lwlm z?7jNwqS(Lcr}?qp>!)?G=H)8fg|XM^r|0b0#tRj2PwXE3G&A;I{j@puynY&s#%^9| zvc6wGZIAt{ep(TWH>$5IVlDbMo zWA&@m*UMr_{j@Z8hkm*?_GA5Yb!>B!3RfH3r=OO`ZqiT9vA=V_e%Af^Q~lH!o87G9 z4#n=!PqncJ^waj(^ZE&>y~gBGtDov(OZC$wv2Oh|J9d+P8i@T=KP`{VXi;&$Y{$N@ zAA#lWQ`uVexgoYxKQ+eo>!-HZyY$oi*eCQ;ZR}|m_M-dbw5n9jQMde88=uOo-~1^Y zq5=RLU+#&jFZDV=9qzfpbNEE8Y1Y?jbwGWq*KmsweLpq_!*343+X1(&xz^t6RbZBn zzgOeWwm_o#<<-61geRu+#!xzUNcfr7ulwAf^6-9KbCv%w2|w3*RVd%j3%u5fZ^i?D zraV88=US^`Gam3W@IT6PtyQ_1P!GNk0c@+*s@g1IH~bb2pQ7QI3gnm8@M$6V2@RhS zf`3B8XNTa=Y52SlygZ`HQy+q_(D20}_&yCkKLj7u@D(BWdo+A?2>y>6-V%cULc`aG z;In{#Y`2Xe_!bS{9D?_1_;wACTk7`~z=DK8|ulSgz`=5@Gia9>D-{< z?p&|oPXRuiHQuZMXkPh!ONVzSTMhp&4R<*T4POC7W&gT-n}#0%JXd?ZL5FwQBOU(3 z8tzUH8veY78!qoc&;|acg3!MQIh1XdSC=kb0C=u^uK=9obf!(C2O!>3PC;a%2P!#gzGWq>vO77Y)#+fy1IuGfremA=a%>U0ts z?($0-em~&TBj;N25T3tBhj%$v9sYU1bM^a$H7eimcz=zCyNsWy7vQ)>h+Z*;JLU%U$X4`!(FAM`APUlt)cey_e z{}&B+nO_aRaJovzU1MqZoq*Ryrd#t`H9+6qN_Y??Z|}6yN}JlEl01$eIX@67}MfKJCW!`*eW4*xj~cNd2m{$CpIuFf=k zF{bKV<-C;e2#6)drT^CkILqToKlI1z0Vh2S^BZr_;oW7c4*v+#_b05Mf26~^0ul|M z4bcSib!7({-lO5K177fVsk&Kr06rb-oy|iEFinr&2X*+{>lOSF;Ug_;G4O}!yX#Y( z&Y*^e$KwYz{L?yLEtar;133AvF#q#MfzP!LT(1+>wIQGxGRg$@OJ~At6wO`VR%G1_%I*xB@K5)XF8q#06bSY=hdrxU7?N+f3t?W@*@rZl!m)9 zK@I<+hPzS)4d2tC(l5t%{*J4g^|FS$f*}pRdZ7v*9(Qlla3gZNLig8|i&S`5_@L8y zE8w~6`vDz3Os{^a;jWxcr}L`Cxzo8GaQ2rgv(e!{rQyld3Sj8!%Np*=_jLFxmZ)@G z`I?4*S;NEYptVSl`G&{QjT-KX*K|4`)$lNV`=y45=bcTp>3mniU3s2{!`Wlb z_Phvi*6XU{e&+?7dc z_(=_SrQ#YsZ)I+LusYz2vZ-+pJ1oi0GaH>KRVr z)UWQ5{(f39`re>VmWHOVFQ|W0n3^8D)4d&7YXgR3F-rKb+2#$BtcBFcjJ>HBc~=9ATC}REw&BIqNKc zKwUKPYfvy$W+>S;LEFM-J^KKe4yT4v$!z}gT6HhL9dI9w;g97HstYKpU^*0#R-JIX z3&tfKz;fvG!D|-%ui|X$ZiZ?B{_wpBf2?U7D!pyjo-LQ{LX?rtL_5?bc+_O#ihY;u zZcDUXc{vZKNx)@kqHVhdZohn=mAL%sD=*vKzSWJr=ZY&j+Mt4d*_K^xTIZz{r6e&B zrj8EP`$YK|YLC=5_Dqtbi zMvZ%Dp@MqP(7eo};Hk-Rp}cUq!h{JJg--t&2tkEKR6UPR!XkAR;q+8=E_l41c7dD6 zN)twsI0+1X4|L@`&DnxVy+vum>7yp3-NSn1M?zSHK&@egHtJ5pu+Oxa9P15$xB~F$ zcoyrsL8i*W`f&Qt3+gRz$YBu(bTxc;O?2VWGN&_5i%(f z*ec8-H>6a{CYl?Y8@0bg(}IF^P0B5nv_>g8i;btxCrLiU$LT^G65%GHLa>w}P&kmz zoF}=TH63KhvatC_Q#;j2bC`cj)}AYb?ifF%w0#l&o=Tz1=8TxhQ+DM*3u7pCeO{Gt zzj2a#YH%s7qBG@G=waK0W)DphE3B71Mraxf^FPh|sJ1AwY|b81MYBH zBdmB44(`v+%BQ&{Xnx@x5@_r%gx2`EzR-aX0S2(Kd4n3zMa|5)*oldc)6VB^Y8+SM zpOf0!{JuKYOwLz_oJJ7z*HO}lR(2@^S{+;X^c|dG^Q;+y^MrW9z;w~pb|hCDf+Z6k zyV$P4Km?Pd%xh7Gri8ncD5Z+}2wKmKr!dRzuESxY19^j3IMMw}n|Rz^BbE&bIH~N1 zxUu~Job-Fm0#_pR>8|~|v9~mX4@nHfI_~&#dFecBsh}klD8%F^63_gvlxA!J8R<5I z5mTiaS$_EhYFz~0Hs!HwrbDNG-`cfNli*Sc9kjm& z6DaK4v3oZ8V-fD!?MXeHshV(+phd-V{Ic0`!hj^C0<58#ZeBw?)XT|H}dSke6 zSo(1W-yAlc6MT&AuE7yK^>|{|(g@bsIWin8NcR{zae1Gk!6)MN10JRf4a+mkfR}As zl^o`5vlwcODZd87OIynQ5SDAcX}f^iE6(^lbH(k|qHL_y+*ud}$03c|(vzVz%_wW} zzIu2bxU6vs7c=b6L=BkIP<8ytB_iI`hjRI5EKRoZyHEHZY%^V!R@cN`o3FMPu_S8? zhz@+`mnAwgIJ=sQJ(YYwRN9nRR9d*(40Gsq*SI61$CJ%c8Z*Eyxe0kh8rAbr7LPjz zi^@5QBBb$$ZDHffxMda|31@Sc#CQ8wduPWpqg&I-j9D@%V41ihJn3a#9>&JE$}6de zl#3W|Q2CfBJuvbRM-X`b7E~#vX%-@f?Rf0)C&XK)5=yjBW_=8V%eB=9jKh-2liq}d z%f1yfQfP+Y61(5MsXnlp+U*8BS?9?FhtzgF@tz#PT(8M&3JY8%Xzj=jq(lyqzjOS{L|NyT zEqZvTOVBcBMdGepcQADQRo@{Ww^UnEeHe$XK_wy!n zf#pM{ac-)7l9=&&FKz4e&}gSmM99slErU}P=ucI4VTxWV>A|o4s3$m<@{OdTWGL?L zYGIj=B7r%y8OT@%*buKoYE?%84Wg{Sr6IQYOz0^f#HeMv^pPeXlK zt5GC$jd*N4Jcw65&?|H!HahSsyN->+gQ9}hnCjJP*uC9I&AcI-t}cBv5;Vj~_a#-O zp{>#|&&WL4pGNX3L9Ar0MyQ5U0t{HHa|9lCL}wRp^_m{&88pwy&Q6?dXx`wY3puG! zXjAh@Fh-&KK0I)kM`&cUrh92Om}iNtv^F2MW=BVmG+VSp>Z~T0idwnQ;IR0z!{da%*)1WE; zqdI?chdGG+%Jn^5{v_a4_%rdpt>c^f3$hI@_VSXsTG_H(d;@_t;GWXp&Jr!D| zVV-%XdE1|S<$tb1eKq%s)T?F6Z}KtsoALdRzWB2%RRnW?RL5ueSrk)#4YuyZ1KZT3 z_mqxr?&~$enEXwAQ~y8L@wb=+VFD>XeSgXqpC(1&`0oLXK}`BEWl=wUCw}{X;r<`P zM}Pc!9nai1>-L|J_jh|JbVHoBOX}kMIA5^ZyY(`tyHjp9*d6*ZCvkIh_B$1I8>&F^!*| zU%ysG47az*-`u0f947s4eAh3~wJN>|r`|mLH}I*5Puw^88$T>@9eeJ=3Y&FbDxdK{`jsP?jaS$jB}HKiD%yDBQjwoe`7y9`;ZF3 z^!>lh{uewi()q6r!A*RanFW3(Idfm3;|BuaW$PgY`L#<})VqnN-Yo0lJn`2YRw0^6 zAbr1Z{B3#Sr(RK!c82gb9RJmM;y)TuA=kh!f&UkdpVaZg?e}jpRmj&o;E%2Pnh=vt zU!M3E{k;lt(3v>?O*(!slx5xjaTWjC(124=FErl`?eL(M^&cly$j!R`Fo(6y$DhGJ pgO{8x4et5lum7r!ztRu&>TRGT*SX@4{-=t6kGh%QZo3)4{{>)Y10w(c From 974c05227864cd07e82a634a07fe40358c4908a1 Mon Sep 17 00:00:00 2001 From: Kishan-Ved Date: Sat, 15 Jun 2024 15:56:34 +0530 Subject: [PATCH 4/4] C++ backend for Binary Indexed Trees completed --- .../trees/_backend/cpp/BinaryIndexedTree.hpp | 56 +++++++++++++++++++ .../trees/tests/test_binary_trees.py | 23 +++++--- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp index 24d1467d..56235056 100644 --- a/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp +++ b/pydatastructs/trees/_backend/cpp/BinaryIndexedTree.hpp @@ -24,6 +24,33 @@ static void BinaryIndexedTree_dealloc(BinaryIndexedTree *self) { Py_TYPE(self)->tp_free(reinterpret_cast(self)); } +static PyObject* BinaryIndexedTree_update(BinaryIndexedTree* self, PyObject *args) { + long index = PyLong_AsLong(PyObject_GetItem(args, PyZero)); + long value = PyLong_AsLong(PyObject_GetItem(args, PyOne)); + long _index = index; + long _value = value; + if (PyList_GetItem(self->flag, index) == PyZero) { + PyList_SetItem(self->flag, index, PyOne); + index += 1; + while (index < self->array->_size + 1) { + long curr = PyLong_AsLong(PyList_GetItem(self->tree, index)); + PyList_SetItem(self->tree, index, PyLong_FromLong(curr + value)); + index = index + (index & (-1*index)); + } + } + else { + value = value - PyLong_AsLong(self->array->_data[index]); + index += 1; + while (index < self->array->_size + 1) { + long curr = PyLong_AsLong(PyList_GetItem(self->tree, index)); + PyList_SetItem(self->tree, index, PyLong_FromLong(curr + value)); + index = index + (index & (-1*index)); + } + } + self->array->_data[_index] = PyLong_FromLong(_value); + Py_RETURN_NONE; +} + static PyObject* BinaryIndexedTree___new__(PyTypeObject* type, PyObject *args, PyObject *kwds) { BinaryIndexedTree *self; self = reinterpret_cast(type->tp_alloc(type, 0)); @@ -45,13 +72,42 @@ static PyObject* BinaryIndexedTree___new__(PyTypeObject* type, PyObject *args, P self->flag = PyList_New(self->array->_size); for(int i=0;iarray->_size;i++){ PyList_SetItem(self->flag, i, PyZero); + BinaryIndexedTree_update(self, Py_BuildValue("(OO)", PyLong_FromLong(i), self->array->_data[i])); } return reinterpret_cast(self); } +static PyObject* BinaryIndexedTree_get_prefix_sum(BinaryIndexedTree* self, PyObject *args) { + long index = PyLong_AsLong(PyObject_GetItem(args, PyZero)); + index += 1; + long sum = 0; + while (index > 0) { + sum += PyLong_AsLong(PyList_GetItem(self->tree, index)); + index = index - (index & (-1*index)); + } + + return PyLong_FromLong(sum); +} + +static PyObject* BinaryIndexedTree_get_sum(BinaryIndexedTree* self, PyObject *args) { + long left_index = PyLong_AsLong(PyObject_GetItem(args, PyZero)); + long right_index = PyLong_AsLong(PyObject_GetItem(args, PyOne)); + if (left_index >= 1) { + long l1 = PyLong_AsLong(BinaryIndexedTree_get_prefix_sum(self, Py_BuildValue("(O)", PyLong_FromLong(right_index)))); + long l2 = PyLong_AsLong(BinaryIndexedTree_get_prefix_sum(self, Py_BuildValue("(O)", PyLong_FromLong(left_index - 1)))); + return PyLong_FromLong(l1 - l2); + } + else { + return BinaryIndexedTree_get_prefix_sum(self, Py_BuildValue("(O)", PyLong_FromLong(right_index))); + } +} + static struct PyMethodDef BinaryIndexedTree_PyMethodDef[] = { + {"update", (PyCFunction) BinaryIndexedTree_update, METH_VARARGS, NULL}, + {"get_prefix_sum", (PyCFunction) BinaryIndexedTree_get_prefix_sum, METH_VARARGS, NULL}, + {"get_sum", (PyCFunction) BinaryIndexedTree_get_sum, METH_VARARGS, NULL}, {NULL} }; diff --git a/pydatastructs/trees/tests/test_binary_trees.py b/pydatastructs/trees/tests/test_binary_trees.py index 3a4d151a..3852c926 100644 --- a/pydatastructs/trees/tests/test_binary_trees.py +++ b/pydatastructs/trees/tests/test_binary_trees.py @@ -361,20 +361,25 @@ def test_select_rank(expected_output): test_select_rank([]) -def test_BinaryIndexedTree(): +def _test_BinaryIndexedTree(backend): FT = BinaryIndexedTree - t = FT([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], backend=Backend.CPP) + t = FT([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], backend=backend) + + assert t.get_sum(0, 2) == 6 + assert t.get_sum(0, 4) == 15 + assert t.get_sum(0, 9) == 55 + t.update(0, 100) + assert t.get_sum(0, 2) == 105 + assert t.get_sum(0, 4) == 114 + assert t.get_sum(1, 9) == 54 - # assert t.get_sum(0, 2) == 6 - # assert t.get_sum(0, 4) == 15 - # assert t.get_sum(0, 9) == 55 - # t.update(0, 100) - # assert t.get_sum(0, 2) == 105 - # assert t.get_sum(0, 4) == 114 - # assert t.get_sum(1, 9) == 54 +def test_BinaryIndexedTree(): + _test_BinaryIndexedTree(Backend.PYTHON) +def test_cpp_BinaryIndexedTree(): + _test_BinaryIndexedTree(Backend.CPP) def test_CartesianTree(): tree = CartesianTree()