From 0c8cad060c4fca72586a9a7fe4c67a97f5816367 Mon Sep 17 00:00:00 2001 From: jimlambert Date: Mon, 6 May 2024 09:56:39 -0400 Subject: [PATCH] Testing in progress --- VERSION => VERSION.txt | 0 examples/multiidx2n_test.cpp | 12 ++++ examples/single_qubit_gate_apply_test.cpp | 50 ++++++++++++++++ examples/two_qubit_gate_apply_test.cpp | 54 ++++++++++++++++++ ...ly_function_two_qubit_15:00_23-04-2024.dat | 5 ++ ...function_single_qubit_13:32_23-04-2024.dat | 6 ++ ...function_single_qubit_13:32_23-04-2024.png | Bin 0 -> 12198 bytes ...ly_function_two_qubit_15-00_23-04-2024.png | Bin 0 -> 12012 bytes scripts/process_apply_test_data.py | 32 +++++++++++ scripts/run_single_qubit_gate_apply_test.py | 26 +++++++++ scripts/run_two_qubit_gate_apply_test.py | 26 +++++++++ 11 files changed, 211 insertions(+) rename VERSION => VERSION.txt (100%) create mode 100644 examples/multiidx2n_test.cpp create mode 100644 examples/single_qubit_gate_apply_test.cpp create mode 100644 examples/two_qubit_gate_apply_test.cpp create mode 100644 original_apply_function_two_qubit_15:00_23-04-2024.dat create mode 100644 performance_data/original_apply_function_single_qubit_13:32_23-04-2024.dat create mode 100644 performance_data/original_apply_function_single_qubit_13:32_23-04-2024.png create mode 100644 performance_data/original_apply_function_two_qubit_15-00_23-04-2024.png create mode 100755 scripts/process_apply_test_data.py create mode 100755 scripts/run_single_qubit_gate_apply_test.py create mode 100755 scripts/run_two_qubit_gate_apply_test.py diff --git a/VERSION b/VERSION.txt similarity index 100% rename from VERSION rename to VERSION.txt diff --git a/examples/multiidx2n_test.cpp b/examples/multiidx2n_test.cpp new file mode 100644 index 000000000..0be183ad1 --- /dev/null +++ b/examples/multiidx2n_test.cpp @@ -0,0 +1,12 @@ +#include +#include "qpp/functions.hpp" +#include "qpp/internal/util.hpp" + +int main() { + + constexpr int ndims = 3; + int midx[ndims] = {1, 0, 1}; + int dims[ndims] = {2, 2, 2}; + + std::cout << qpp::internal::multiidx2n(midx, ndims, dims) << std::endl; +} diff --git a/examples/single_qubit_gate_apply_test.cpp b/examples/single_qubit_gate_apply_test.cpp new file mode 100644 index 000000000..aa65b0187 --- /dev/null +++ b/examples/single_qubit_gate_apply_test.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include + +#include "qpp/qpp.h" + +int main(int arg, char** argv) { + using namespace qpp; + using std::chrono::duration; + using std::chrono::duration_cast; + using std::chrono::high_resolution_clock; + using std::chrono::milliseconds; + + if (arg != 3) { + std::cout + << "pass an arguments for number of trials and number of qubits\n"; + exit(EXIT_FAILURE); + } + + idx number_of_trials = std::stoi(argv[1]); + idx number_of_qubits = std::stoi(argv[2]); + std::vector gate_set = {gt.H, gt.X, gt.Y, gt.Z, gt.S, gt.T}; + ket state = randket(); + for (idx j = 1; j < number_of_qubits; j++) { + state = kron(state, randket()); + } + + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution gate_dist{0, gate_set.size() - 1}; + std::uniform_int_distribution qubit_dist{0, number_of_qubits - 1}; + + std::vector> gates_to_apply; + for (idx j = 0; j < number_of_trials; j++) { + gates_to_apply.push_back( + std::make_pair(gate_set[gate_dist(mt)], qubit_dist(mt))); + } + + duration total_time; + for (auto gate : gates_to_apply) { + auto t1 = high_resolution_clock::now(); + qpp::apply(state, gate.first, {gate.second}); + auto t2 = high_resolution_clock::now(); + total_time += (t2 - t1); + } + + std::cout << total_time.count() << std::endl; +} + diff --git a/examples/two_qubit_gate_apply_test.cpp b/examples/two_qubit_gate_apply_test.cpp new file mode 100644 index 000000000..5f398ba80 --- /dev/null +++ b/examples/two_qubit_gate_apply_test.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include "qpp/qpp.h" + +int main(int arg, char** argv) { + using namespace qpp; + using std::chrono::duration; + using std::chrono::duration_cast; + using std::chrono::high_resolution_clock; + using std::chrono::milliseconds; + + if (arg != 3) { + std::cout + << "pass an arguments for number of trials and number of qubits\n"; + exit(EXIT_FAILURE); + } + + idx number_of_trials = std::stoi(argv[1]); + idx number_of_qubits = std::stoi(argv[2]); + std::vector gate_set = {gt.CNOT, gt.CZ, gt.SWAP, gt.RXX, gt.RYY}; + ket state = randket(); + for (idx j = 1; j < number_of_qubits; j++) { + state = kron(state, randket()); + } + + std::random_device rd; + std::mt19937 mt(rd()); + std::uniform_int_distribution gate_dist{0, gate_set.size() - 1}; + std::uniform_int_distribution qubit_dist{0, number_of_qubits - 1}; + + std::vector>> gates_to_apply; + for (idx j = 0; j < number_of_trials; j++) { + idx a = qubit_dist(mt); + idx b = qubit_dist(mt); + while (a == b) { + b = qubit_dist(mt); + } + gates_to_apply.push_back( + std::make_pair(gate_set[gate_dist(mt)], std::vector{a, b})); + } + + duration total_time; + for (auto gate : gates_to_apply) { + auto t1 = high_resolution_clock::now(); + qpp::apply(state, gate.first, gate.second); + auto t2 = high_resolution_clock::now(); + total_time += (t2 - t1); + } + + std::cout << total_time.count() << std::endl; +} diff --git a/original_apply_function_two_qubit_15:00_23-04-2024.dat b/original_apply_function_two_qubit_15:00_23-04-2024.dat new file mode 100644 index 000000000..00819eb9b --- /dev/null +++ b/original_apply_function_two_qubit_15:00_23-04-2024.dat @@ -0,0 +1,5 @@ +10000 +2 176.545 174.842 183.596 178.394 176.159 174.526 185.764 196.628 190.345 175.515 179.988 176.591 174.93 178.4 190.857 176.199 187.605 182.297 182.269 175.799 +4 189.184 181.322 183.454 182.137 183.592 203.339 247.339 179.266 176.318 200.083 181.82 182.155 198.882 183.476 180.763 185.164 181.143 185.028 179.992 192.943 +8 320.075 263.933 258.172 281.16 344.28 336.755 266.493 267.674 272.531 259.63 257.905 261.764 257.426 259.785 260.897 258.122 259.11 258.94 268.418 258.673 +16 23787.9 25444.5 25880.3 26085.7 26617.7 26229.1 26678.7 27656.3 28167.8 28822 29575.2 29536 28568.4 28914.4 29033.7 28474.7 28631.4 29014.6 29148.5 28824.2 diff --git a/performance_data/original_apply_function_single_qubit_13:32_23-04-2024.dat b/performance_data/original_apply_function_single_qubit_13:32_23-04-2024.dat new file mode 100644 index 000000000..79843bdfd --- /dev/null +++ b/performance_data/original_apply_function_single_qubit_13:32_23-04-2024.dat @@ -0,0 +1,6 @@ +10000 +1 177.045 183.401 179.482 177.491 177.767 176.061 179.892 176.771 178.809 178.344 178.731 173.207 177.846 182.742 185.616 194.434 175.579 182.799 186.081 177.499 +2 174.65 177.879 177.104 178.997 195.871 185.893 178.443 174.799 178.844 176.05 181.729 178.526 179.879 176.963 177.265 177.043 186.762 188.596 176.317 188.308 +4 184.946 185.677 178.205 185.135 184 185.485 182.079 182.476 201.217 189.12 181.365 183.386 180.097 182.053 180.133 179.742 191.665 196.478 185.7 182.02 +8 219.992 232.964 217.757 241.844 238.279 237.996 228.896 224.703 218.453 243.654 220.595 236.702 218.217 271.035 223.113 252.001 228.766 225.088 225.37 243.18 +16 16772.6 16456.3 16817.3 16767.9 17139.3 17423.9 17191.1 17600.5 17299.9 17661.1 17426.8 17547.7 17839.3 17510.6 18148 18134.3 18854.3 18829.3 19560.1 19014.8 diff --git a/performance_data/original_apply_function_single_qubit_13:32_23-04-2024.png b/performance_data/original_apply_function_single_qubit_13:32_23-04-2024.png new file mode 100644 index 0000000000000000000000000000000000000000..f4107ee5ab66b5327e6bd10de08de0bcdf046b61 GIT binary patch literal 12198 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 Zz5m*1c;XcO6Fh^cU)H*mf5GCx{{T}cQLO*~ literal 0 HcmV?d00001 diff --git a/performance_data/original_apply_function_two_qubit_15-00_23-04-2024.png b/performance_data/original_apply_function_two_qubit_15-00_23-04-2024.png new file mode 100644 index 0000000000000000000000000000000000000000..8e06a68163f4acd734dada048272e43016a51ca3 GIT binary patch literal 12012 zcmdsdc|4SD`}akK7NNRR$&!RhNZFUEJ1rzsA~Keu#nM=lZASa8M3JpRvZaa1o@I>E zCNUz!#E=+cFqRqHn3?w&-S_j{&-?!I{+`eKdw+jC_h;^pX0Gcxuj4$9<2;V<_j{g^ z)|Lmwmu*;vAc(lxA=6_BA{>DrLOo(4@Qe1B??2&>e!%{d0mm_C1A<)r+>s-$0X|-s z0Iv(D6)w5^`Cq_X+@-FkzFSS$M~Jokl(U75C&Q5bI9HwK_pxS z{|h}s8`HbkLAt)=%JQ#$eBknMdkXNj0(?kWa8N3Lzsm3w*3q!D>Fm>1={X;>Kk zYN8kKfj_m9h!BFT*oQ2JpH>J-B1nzqf4~JF(?^dU-F|o4!QOsp<%9B)s;Uwq+1C$IW(r93c^uBU**C{~ z_lDlJ*Gdm$q>qevcU6a8bKW@IO)|stQYN9{+rqGfb6|58v;NqKp0Lqo&VWIm%5 zXREgMgxcE8(@rR|4)bdzh7sRzmV=diW{Wq^I%cl4YTKG+h2Eza3Z`gjG><-Tqq|}BgHZ_w#qzf)r>ZSU7=D3LvLY1YWC++pVXx|ojk9mvVNNqS< zr+(HM+jZ*HDKv$G8|n5Q(qLfjV0&F2cn|AY+8JZTiMZpKQ!5zw zT2{46NLd!DW~w?Zq?U4l%`WujeC@elZ`n zx~3vke#%L8t6341) z`S7;eWMd}rTGaZXJ+alUIc5^%P?0J5g%~0n-+ab zoEiL792Ajkkxk?^Qb&fzi1jmz@-n9wi*wV{TH2`k=Q)dFsRwuw8{F2D#OE(f#Y6;D zk8|7U-)AKZl87ZGtwFSJ7pxzNibwF62@ps~!~}P7@eS;duERMkDk87D*?~7ra4*M$ z0_Xu1jPgd=wr7-APK3~8i}yv|m1ry4)JWLf#uWOKONK`<2#XUzrlzKF+vMlDSjo)l zZc;&6${am!%lUOj{B1`J_QgGG{8FJzh6HX�?!^8QOT$}7;-I!D#!Cr5!wk^ z9B=nz9LOD|gK2rcR4f%4Roy&@YH#lu=n#qtjn@C$4w1 zu4GZlSQir&&YZ>|MtMYIjc-XiHN+x>*w}~kGXK%=VWzbq%6<#Nj>WTDMSU(Lnd!5LlHxTNm?7 zZms`1uy>IQlR4GaZbfR56GYWLM6|KnJ0!vTd+@T$)?;IQb&`g-M_CI?qz2pDh}uTK zHQ%Ts?%=F~Q!w74z$!i7q^bGLio>3ksj@U2=`TCX{6Y*Nj{dgnMn0jD#3-H~dcuzB z#5A^8T?OCFmdp?+`iC&E>dPH3o_``&9K+&t7MGPfga6qv!?U=)m*J<*afw&nF%5~7 zJpYsy$FoV;@B-&Fx;I&YTSa|+-F0Ln`1Sj!;MYeKgl44)9O-n2ge+LafjP$wQbt3n z%F5cSeOd$2+8e~Pj&0T6aCa&Z_nMn=Fs744)3cS!-~U=IRz1nw5a9cgKYu}YnB_V7mFsbxl=AtX<@XE_a?aH?vbC@+JXB^9O4-jBZe<^baZ}JTnsgcJYDb% zI-;2es;s&?zdli;j5JTzFfcqt(yhXMNW; zk=dI-FD@_d=oZ0prn;r{&bu(b-(TsUT3K%pBHqT>KLhnjr^dIi_=(LsBh7~^i*8G&0J66TD*if}-IWxgE>3 zG0$f_cT~rJIbTe5K9@_De`XN#VAcTjw%@P(c&#(ZqzUtKU0cpIL5ZLJ8WIz-IDEks z$+oERoYza6gKh@GxdBJYlXSD2?mGXF8$MK= zkbJ#}HQCZxdHjLNH>+hrnh4JNP)^Ip=G71s`JmKPi=38D3ZF=wtkE885@NVwFt;pz*R^gNYqwc~D~1)-tg$Ow~(KdF|gx6H-9 zttRCasn3KFU2KaFH14KQ3|kl$^}%z=WNPHpMHLbzr8LfXIf;L^sAG!SH0wyaf3v79 zvA*AOqj3T@x#p6)`+h(psBg1ZSy#FpZom7H8*cE&UTw~NMql;OZhT5(Gba0sRfrWu zXT#lH^2tjJV^~MdJmUCU%~1%G0huJ8E2p$YFWUd&;yrO*d*y_&;3uio=bD>o{G7`ACq^w3E$`A03()X8@5w~{idL}+UqLA{~wubb`vuR4-dnjga3wlQS*0~~kg3Y$T z6530uxF0PQ6~2#lqlJ4>m>xdjrWO3-cWyVWvG8svO=!64k^i@@l#K55q2Oyd78970 zLt#hw<=Eq1k8Pb%SjtREkfnAnib^jwX<|lO<79~~YuMeAO_kh(xgAueI=5!%Y$Jh7 zy6jk|`1YIz`#H0F(}$o%7k0d`!?$)icX;WHbq#Q5DE{BjH7%V3DY|hpx|6KN{p;QM ztxRP}5_f)tZk6%WM0c-+XY$@T_B(8N_H_Ob)Y-|vtHnW0I%(32YmU#z1~*xLVA`Y@ zn&D_oR_WGyfpRt2YbOD1F|W^4zIm2(MjGzt22ZNhdoX{71QqABHjytdn2#U6qvlR^ zpIGOX?CR|zk@TTK;ug2`s6mRH-Z=9DW0EGy@KV98taT;H1o%u+{F~;_oD+{o)t%EB z)s+gMRe4XP4frv3k0OJlb_0~2xXd9-Jm#KxR&wy7tStk zFr=YbwPxq|@}-zb@nsQ20#h_iGm)O-T={q{!eytlkwcwn#ZyyNE@$3XDIkrJ(A;2k zt~R{AclB1Q(_C(JNOZ+#O zJRZYfNWqh5Ij6rv9S$==jo}V8uHxhNudGLH2H-NCU0tnhZEZD%MF7-RN=Q_Wno>GC zz7RvFvu(B_QO%8O zaz|UOp|8 zLib>|SfS|6S%<+w*ThA@#m9`S$Z4o{0+ziU{mNyaKvTF!f1cH1<>273ta1f{_=uo* zGZ|Pe!}%8afT~yo&4=E+#q5LZd0*e1KRpm+k7STCxQT|b_T)%w7>9FM*0?ZUkrOH4C=-2TFn)Q#%le1g1q51h zy)$mwB8WF2&m!k#O!?dWkPf6}l(Bma?S6mZRqeBE9fFv?X{Q>uZr-iYJPF2HYix2D<(DiiA6g@pv8z(p8 zZ`E8hK%SeT_p)w3JhSlj3Y3ZbMqXp##+#de4TPotIGI@M^XuYtzH-18?9pq=p^@~N zi#_l)+rI6);;%dXHf0;i6L*-Y{QiVL(|8cGOTH&bpc3p+3Y%&Ct&8h@4D+_qYO-32 z^sJI}L`$M)-A<|92=Ygi1hxF>R|;kn(vOx~vmc zK#&Mmu?X$@y~Qv@(hta9F#vZf zE5R)hxx41X1aFCqG7;8$o{_OxR#vt|zRV#{5)Y5+$wVX3F6Yi29KT$}Eh#QubIA;B z*?cEBm39Md`t5W<($(GjNSh-dmppVHIXF5#c8di2EFAI@evH5R(x;mfaq#8Kmrrio zxbdm)sNX;I%pvcljTDGd zKi7vZd-df!E1Wkr_L4by@ZdoM0|O7##S(`&)#c#hr-ERAeB$z|s3_yIQ8y3j#>0!Q z;OH|h0Z6eLoFrayP}St0h$Q1>ncS2c+G!a#BU<1xej?A?(SQLwP1GHZ)T8_YHPR1-r57- zR#$DfB;*R{!!;4UX`Xm5FC@?x?~Wft4*CWJWM*V!O!e8~e><%Wm(SHo)kqBw539<> zl#vn=65gmU1>d{vBu`eoytA$>%!J^Or!z(aFbo=vvGkpH0S?DmhQhCki!;v_<-U9O zZt^#AFyLvc$5y!*8DlKDe`}A0@~->s=#wX#-n@BZ>Ldf>Ip{6>GD2zg{*n^UgH-V1%yww9} zM}jvcgwLI>RTt!!y6J$J3%<44nb+?;^ybEL2WRJY9zQv$zl6VZ#%5no(G_#VqNK%~}44&QEdZLSjbG~)!R>*F=pLcj|yMJi#-5qJy z#BVn|Apl9nU{Lw;Z|5kbawzNzQ^j=7G!t-|SuAj1rTW4*J63|vEKP^jjJ35Txb6ZfacHLhV z(eGy;Z@!;d&AIq33vT|Lcc^R0V+-Z@LrQPdVahJ~`-jAO0A2y97f7d2Q&yw+cStjL zB%ce0(10O8i)DwP)551ZA~#6;M8f0S7roAW$j0!)r9e4!%0x~nq;LNF@az}ui z2}&1&g6u#_0>XJFG#uviEb{9Sg@&`oXTzLALqp*)P}~#TK?e5r@=}efgY_Td9S&Vy z@Ju@+7D6b{?H%%zDWz82aCOBch|82F_MjSaGySC6wiL_51}m=vB7l1f)fiu?S&M`a z&CqqE&3?=DEU+_inM9(oe)KNQdFcQ2!NF(Tr1GUgNR8Uu33A@T)e zV=GAI0I$6$7p)f6YDd5YmG>A+A)ve4k}XPWsXQL`$(SgtExcmj;;~!uSZhGiz>cgM z6wM&UP}#tBnCjVqZ*4RyPIDb-%7GHKDzGM?5CvTq?)e~(djXM^(Y-j>6+|^2pZpLb z?}@=!6`ZsH5onXms5utxwO3A%Y(dwWSm#q*L9?eN+D#JL6xcJ-xXaNjPC*meXvKmMWO(#XT9sj1E@ zO}-nuh@rZ}%@u#4Aj79ZV^Cwz$6xP$)UYQ=%u41jBd>TOj~cSEGrhO+X(7OY#c_GI zcVza#xQ(hTWL?aM6Wiih{fW*Z4m=*0(@CZ3>J-4bdu*q4QMf#KGFwnOz)$C4=c7Fz zEl^w34nv;hGlnP_Qfo_&m0(pe+6lMN(6(wm-~O&00VxT23-uW&6Wk5@kl)6Gb_6H! z$|`k7c=JNl_$XClIeytu7t_5$z(*p=f149T8cE9kC|V;bA$LA7@I=|gE)VLCFg`E5 zt0Hjw_cw6)tj*6wF1a?xAm9cmf>n`f6#Nukk9SnRh28*TTL>&5=A$dK@pgovp;o-Z zsZ%XEY1nP#NjH1jZ&`whmibX0$`qB)n;v2EhX_1#sI_43CR;&MtyGjp2+kzz57f06 zd3hjnU0(o9UU%G(VWS@^vZ5wtAv0s?Cj5DSv)kVv3v4b@j1?M#L~4~l%{Q@8SD9Uv zIgaW%0#$FH0$e{JU5A`hUGq~f8YC#rd6$BdHad@5*^KtU*@^yp+u^NA==&=oVC~K2 z;O11geJI`;&P8f%?LOk{z@ykq00K_FFwQRZSfQ64UZo_=?hUb-A;fNMV_?^XM1j@1 zit7=A6Y)7z`F5w!Bm4;s{!=Ry*Cx7eaGJy?f|nEpJQARv%h`8Te`IgvtGXD;VNlaO zuNTGFyN?VHUq4}+2&sD6DE}7gO?!oLa!Yt0zM zpUvYi8ILg4U!Wmn#K-?;96X^kTnN?<{I0~89^-PR*@Is)@@W^T)p^wU0o~p;0(%cC z1}}a|#m$~Xqs7x#2^!$)I^-MXVPcL|+D&T!EH(3yKexJk@MS^gI1d6zW~;h!eC{uRy!?KONOpUiij`u}YO%8Wi~g!&Gm~VL z{M=*+F`vr~2YuKgS5ffd-y)Hjj&o@j&YU?js1;{mZLglVMV3$Qy>@MpppYh8Sh@)a z>QTu^B&p$S3AF!!^&fnd3rC@#8($vV11=sLvxZGNNTJpC(t_%4`a}6%%bT=-urnW( z)_^j<84H4_8}uRMs8l4fF1vB_9Z*4GOLdbitToNx`+7?@mcj-qR9KME-L;ah)c;jv zU$uH1$uI&t3$%D*Pn2NiMzE1t;&9~MY2O|{s8+W>^oe674M%6 zHiH))%R08Sd>fcs_psg*$@vEmxtS&mZC6w3KW0b#Uv~Bly)YOMm487CQz?X>2~a*L zNOu9sD@P+UD*230r6UUjH%U+UNhYZO0S2;{)=Hqc=7q*ZSk>vdV+0f zG}>EU$PqTDvyQF5Z2FQaRg;yqMf=f_9qQ`QlUDHF)y*CyYhpg!l_Sw6*7zvLEv*`c zzRC#&lmHDJBDy86Zgssn&^K3CS2b+_N7voeV~|wXus)t=yF5%+Gfj{K05TmHsnTZ- zNa9x3cIz=Jz*X!5_J-BqvJ6z1Rj(!B z`nwtA+X8~xVg>|wpVcDyzvV&J0a#DIS|-R@t>h`GJ(N<|IpsY-0-ERNy zxgfE^H}-*f7Brm9zRHNWy3EYJj4O#6&bE2BjL$kaumd5~77tqJb@W=~bCk3OuKe~OCFjEWn zL^0Z=PlR*3itcS&B)J$Wj%KVtTbyW}9txWKh#Lg~kZEANLcsx|8F4=hG)MA7l*D|w z3f+G497vEpA^U~aEnRr-FV!!CE|C2WOw487IfGtV!x9Len}eAizk@~E=L-{)qM0IC zrU&1QEp$Bw1h{o|+oexeOn#xn1}H9`i(!VbbS8y_r4AsAk*ML?p!~s6Ok7BK0f&0# zAF`iNrW0_( zav{yDf>%tJ;9B|N6a0mL+(~r$w#D_ppX#g~N$w|Vy3UT;@&TsySU5UK@J_4hIVXry zSz4csY~v853_3hF@vo3s<4Wf{S<4n7*Kco*kouAKoFV&C|HQ4LxxUHQy-YQLG6Rc* zG!^wu+%mh&ZGKmvE{Y^cEUx)uUB8X2@O(p7(v)pe89=)XTE9SIs1hcKaBH^cp8Dgd9>t4&1~&ABB8m+rsYPV2Y`ZL?-`o3l794RhaHcf1Ad4*8-}PQ z*27^T*uDlD2>hqSVaL~pdMBVJDc8*)uK=Q(XDOP2lnC(R=WST<%JqYu2)ezsw>Mp_ z{#c2_iHtAj(?p;sCE0-#3{V7sBnZM#YsfUH_@e4KkeO`pt?VUWh-Z|^lCaB{RoerB zxx(YhabMunSAQ^~{~4kpI%5#(4s`s`!^uJPn29vzykH1Q~V+>BfyEJJi%3 zS3?WhbA5fd_!Dmmv^$J5`sU-8pKgi!D?$K85+@|-p&nvUicv^4>Z@wJM#yivB zEZIf4*(cVc51PYX5|2$#sfd2}ZvUlKLSJlO|NV31d7g#w1Z~%@Dd;Eb7Br596a+5} zHl`TPGkcNq_@00L)csHfn1aAA#lN5xaLtNZqlis#L0DG~ZygvaIvOCnGPM@V?pw)kK; zi58o+zfsjYzRu0aEL8~(ml2!@R@F6s)SWFtQ-h|`oU*6$j&^=xRlD0KKz759SQVTW z>nJt$vH!js)#`YBj*a&wcG z%2Rp1uxK6sDXAA*$@D-+kLrq425ep#MBsw1eyBOpMCnV}feYKy>cT%aWM0Fw?mwkEs{5ebhpWY4Yiu+{;SiFIxhpN?b3i;~ zb5j1~RhPdo! zx)-*gWv=a&&oaFqYV`)=^ntOlrkR!{*8-e2|DbNs8GM)@Tn2=N^-yuHO~cZ2dt`Ng zk=kM4K_IFz4ab@ZSYHRQ6AuUh1cb#73Dw$8P;wbn37IWJLqiYX0Z65il9JVAiOOtG zrx7?`85(-3)EkgAOEzrqlwdyeaNu~1iT?VL54^3PuzTOJu-fLQlDi3EATfNRO~MCK z7HCj7fw7B-xho^2DI6mDxY1B5l(57XZ3hQl-eZ60=j9c4cyZ1xh-#g$N|e3b8_4*WlA=FrzpgRX}jJ z2bzdBv|IfuAK%~KpHGAONpwmyr4H@(fO(a{4lajv3WyY(ft2{j!e4~P=-f~3=XXCK z(*!HYLb+w-6;@u|pI~}He*Cw#{{D_(f1%zaK&J@u^y!!Lf`hXlKEgx|jEq2Jhcl?= zf?Wqu