From d2b2cf631f7198b2e0fdf51fd7abf478ca0eb4de Mon Sep 17 00:00:00 2001 From: Francisco Jose Tapia Date: Mon, 1 Aug 2022 11:47:00 +0200 Subject: [PATCH] adding ciso646 --- doc/equation/Thumbs.db | Bin 103936 -> 0 bytes doc/images/Thumbs.db | Bin 60928 -> 0 bytes .../blk_detail/backbone.hpp | 8 +- .../block_indirect_sort/blk_detail/block.hpp | 1 + .../blk_detail/merge_blocks.hpp | 8 +- .../blk_detail/move_blocks.hpp | 3 +- .../blk_detail/parallel_sort.hpp | 3 +- .../block_indirect_sort.hpp | 31 +-- include/boost/sort/common/deque_cnc.hpp | 52 +++-- include/boost/sort/common/indirect.hpp | 2 +- include/boost/sort/common/int_array.hpp | 1 + include/boost/sort/common/merge_block.hpp | 1 + include/boost/sort/common/merge_four.hpp | 6 +- include/boost/sort/common/merge_vector.hpp | 6 +- include/boost/sort/common/pivot.hpp | 1 + include/boost/sort/common/range.hpp | 8 +- include/boost/sort/common/rearrange.hpp | 5 +- include/boost/sort/common/scheduler.hpp | 20 +- include/boost/sort/common/sort_basic.hpp | 8 +- include/boost/sort/common/spinlock.hpp | 1 + include/boost/sort/common/stack_cnc.hpp | 4 +- include/boost/sort/common/time_measure.hpp | 1 + include/boost/sort/common/util/algorithm.hpp | 1 + include/boost/sort/common/util/atomic.hpp | 1 + .../sort/common/util/circular_buffer.hpp | 5 +- include/boost/sort/common/util/insert.hpp | 9 +- include/boost/sort/common/util/merge.hpp | 1 + include/boost/sort/common/util/search.hpp | 4 +- include/boost/sort/common/util/traits.hpp | 1 + .../flat_stable_sort/flat_stable_sort.hpp | 17 +- include/boost/sort/heap_sort/heap_sort.hpp | 215 ------------------ .../boost/sort/insert_sort/insert_sort.hpp | 1 + .../parallel_stable_sort.hpp | 6 +- .../boost/sort/sample_sort/sample_sort.hpp | 9 +- include/boost/sort/spinsort/spinsort.hpp | 22 +- test/list.txt | 15 -- test/test.log | 37 --- 37 files changed, 152 insertions(+), 362 deletions(-) delete mode 100644 doc/equation/Thumbs.db delete mode 100644 doc/images/Thumbs.db delete mode 100644 include/boost/sort/heap_sort/heap_sort.hpp delete mode 100644 test/list.txt delete mode 100644 test/test.log diff --git a/doc/equation/Thumbs.db b/doc/equation/Thumbs.db deleted file mode 100644 index 443d09230ff0d20fdb1db6fd651a91bcd55437ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103936 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

}Y@esD@t?tdMr@2t zlF{rv2M=WG)&$$PDf+6K%oMtJHb~~k(+R8sY&WOsoRWH;HL2)c$Qlo>BUQ2@jEC?1 z`1I<0_1~t-WZ@V^<=)jS6Ay7nd*+)iy*Jk`;K!J(Ye`XG1uZSTa(SN`Fbwpe#KMu9?0)HvqSxs2JWrUu=39ZTK-ko z9q8hcs9-0y{9|NfU|?coU|?osU|?ZnU|?lrU|?fpU|?rtVBlb6VBlnAVBlh8VBltC zVBle7VBlqBVBlk9VBlwDU=U!0oc$)m$iN^BT1(2vz#z)Vz#zuRz#z`Zz#zfMz#z%U zz#zrQz#z@Yz#zlOz#z-Wz#zxSz#z}az@Pxtuf)i}pv=g?pu)(&pvuU=pvK6+pw7s^ zpuxz%pvlOpvTC-pwGy_V8F=0V93b8V8qD4V9dzCV8Y12 zV9LnAV8+P6V9v?LIn2~`Ygpq+El#ziU3~GJ^BLhPuBLhPeBLhP;BLf5I$g5aJ28K9B z28MV>28IMi28KjN28JX?28Lut28I+y28L8d28J|728MJ-28Ikq28K*V28Jv~28L`# z28J9)28LWl28KLF28Mh_28IGg28KdL28JR=28Lor28I$w28L2b28J?528MD*28Ieo z28K#T28Jp|28L=z28J3&28LQj28KFD28Mb@28ISuybj>`J=_dtqxIh~ssEV6KJv`U z?=@X7)?NDV?3P`ZODyvlrPp4ZviIyEO%_AX^|=dY-eHsp+?;yERr_{{FSq}Puj_Ao zxe+GeZ9HLb%yQ<=w22;vrzzy= zaOVA7dqT1AmTH?Sx0FUG^8$th#xEj_N3-HIuh?i7=;qzB_1SsKInV6gTlMu5%vDy| zcR5^OV85%j%U;M@R;?m=msq$sNA80;Ju{xo{$8*l&fH+)l-3g`A1kl*UzTyJu5aBm z0Tsn_&$TSe?2o+tK6mep$?t=*tYZ7tb8O$=X8DLmMyE@HEiSad^04Mp|4<8sCdLK) z1|Ndmm%irBf0V6lYaD#(ZBkE6bd3169nr@QB&9~Ah%>&8elo-3VXA8C^5ERy>%v_)>VDedV%@B0C4`dC|wFg;~BznG`Ac`Fr==n`aqn zRrz)LIz-0MBP&vKSo*k`3l@gO zix7#luXxOQwtN=;>5DD;JWh%Kj%22Gy!hU)yJf<@OJb>I9R`Y1|Lj;^(PgzIcZ((K z#w|?z?bEN_I=8U0l%=Y*W!tK0+of_pr!JcE@AtV=CvA!ca-jbC$5c4C za%oExH9A!WR%R_QJQp_i!|jmE(c*cjZ2@Sc`wzUkH><;jKT^-UI^NmF?ryzzV$ z!CPR;MK8hvUh$=u z-7l^!n6TK&Sl%qe;M6IP``#R;PAZ?Na{s+Ib1gxfb@?Y%IbP4{N9h zg!D;>s>tl_XLu=IzPj3C;)(3^68$NYyq$daOyWtMrKWh`j>xXXM$=psm~_P-vCUnd zeZ5Y8%fX$S(mk(Nbt-FaVVfk}DQ3BSzLJAvD#w!q###SVezY!qvHjb$_)ORG-2#3~ zBPQ$%=|9LUd8hNlc}dyV(QY5=<}Zp-J)`ES+9tNWb7}6IiPoL6%z}Hj?^>8Pac6>kA7@TcCZ$Z7_r+YT?IUfG92NrN`pQpOD-F14*w!eS(6mFR*uc27H zW76TLp$B!26fBq{*WN$>(HFCCMfXlFKR5C4GRIZBHY=pI6`h*6L6YfdPwplKuWbe? zVUKqA*1K;1C^xlq@jY>|>jis+-sG;`&Ee4 zOWse8H+{W-t9Yl4;;Pt+%Eev9%l%asPCclrKH-?|o9fNEcWO_rUpz;3+1m28WPIo)-uc~^h4`tYqM>sMuMK6R`0vgA9S`hwGn_Z4G4 zZ`o;Ge9mwd1L2tuND&Wff31SmXa8*dm<|T492)Jfpb_8xf}Be|^v^$RK5TU+&hUfI zec1MKU-g_Hn<6Q%Bj9LmcZL9$UZq$J{SJOW&TZ&0LiEUHF*W{V%(()?3bW zV@Qc8YitlXt-!SX?LX;^ZQlf6+~1QcC24cwO=M$Z!M~)1G3*r+|E09KS4`(xXr`rg zzC7)koVxdmJF8xWJ-Ya@_tdw4DHlDAIP7&MuTGJx*~f9WfloZ-`ujhIkB;x%F|X3Z zHqUys#iC4!CFa|*;`CJ}&*;6AUBcnC;3P}5L)!C;iwu9*J2)3y_M0|Qf5w})CTn~0 z%PJ!_Kb~%xRA8{+!`9e6yh~$Vmd)~8xbKs;bw}Q!${Uh4FH%1*2JIb}DL!y#$?6p0 zxxc~72kso(bfmy*S6h(d9V0$>7A9K`_7w~G>JQvA+4Aw;q+MHQ8M*k~nHRE+F=5Hu zB$2sGro>Dr;5ca0e)zuVma5P$d8^lf*VFg!-`eFV(ec*i(Z|i!?+p*j7)2|s;Qf4R zRcDjeFW&xkle1<=zx?)aDe#yrpJ_cK_vW;k_i5a%JZB;p7;LzXG(S8xH8Ve(b<5-< z*QQO1IId+OR6Eai_F~=bPvv)ZXS)erSQa>Ck_VgkAHB6|kG=n0-LQSuBb6=NcFzo1 zks=;6L-&!SbzG)OxYoj^Hvzx@RW!e^i2MCJIOytE%agbBORfc`FLGs4EVAW3^T}9l zsY}9#rk#>CoV@q;ip@^sDKiV3ZWin{(c{eK=o@Z!$J&g#M6V?+oL<@E%4HUNPIy@? zr|ZA93x95M=38NRL#3s4lF_RTJ_|M^m`hx}+BA8lio9m13Um9#_oW)9-0wMFm6!YM z+7z8tRnk`Jvhk=*x9r_L#cV>183$DZBqmH}^t@#l`(&f;@-A_YoV|U^m!EkrEtWs; z=A({np6W)fMXR37nXk!Lo-(()pX=rH@>_Mwi`u;J8m2^NdLGuF)nsYBovVC>qy)2q z02^!aUGL3N`#$pAG|V*X&zsn{WQX_6*%#PC8pXkr*9V3Y~llHA#?XR6B?vuX5@b6)r_L|n>bC;gH zJ#TR=1NXcRq;w}t!peWx{?BQ>wR;}_sCoaN$n*Of85tOwpz{?ij0_B|j0_BIj0_Cz zj0_ANj0_B&j0_B2j0_Cjj0_Atj0_CDj0_BYj0_C@j0_AD7#SEQGBPksVq{>L%*enn zg^___DkB5KG)4x7>5L2vGZ+~dW->A`%wl990c_R85tN3Gcqt7VPs%9%E-WQ3~K)gMh1qH zj0_B?7#SE&Gcquo0rlG$85qtnGBBKHWMH_!$iQ%sk%8e7BLl-_Mh1o}j0_A{85tO^ zF)}b*XJlZw!N|aHlaYbp79#`0ZAJ!$JB$nrcNrNN?lCej+-GE9c)-ZO@Q{&#;SnPP z!(&DUh9`^+3{M#u7@jdQFg#~uV0Zyqr^m>^@QRUv;WZ-z!y85hhPR9i4DT2j7~V57 zFnj>@}o(sur45qdexNcLT> z;_hAHGoMYfJ=GK8o1VwS6z1;xn|bt2;nE*x``ZDYapa3k?R{aHu(Ufd0+OsNcfbKvj2qo2M# zNDlgb`1e!%?{)^mKbgrheY!-+r$H`aY%yZp@wPx~V_nT%0H8 zi`b_MkDq${6s?Z1+COdnO{P2h>guOR;L^GugzxiJKbOiU@6@2n~e*bjDM9<%g z&m8Bwdi2HjTfOHy6ff>^m;Ktd;d=3%!)24$H}Bov=JcAy%~JYwyyBv?ri!HEO>S(# zdvCA1YT_XsyQ3}Xe%f`Ne`htELa#31|E$dyUSn)DO(Hep!up`FSpNg3OH&Ib-tpFb zxp~&LYu;@v4k|Gz9EZeChTMA>6&89cp64dR>sQjzGu|skE;@JYNnX(M%M%V5{Bc-s z-TrXx->DC0U3%#fIY(>f#J+1=`>qKbFF*Tv@p*H9qez=W-U_F4>!h=$T^F0K^wInF zx_Q0RCOpjz^EYYozc+K9!ExrA!YMiI3JfJyx`%K6SR8!udm1zE)-TzA4_kYStg;o^ zyJNciy@}_mR<8TwdZ}b@(7EGpHFm#K?J5ZEWK^8^fzRr_D@)JEiTAeHSZC#JjdhPH zKC@<8;ri0Pi*t(KefBgiJa%^GbA{~qm!7qynI&gJ*Q!*C@byHQcQn6Xm@v<}(ShSu z!~V-r?|mj2rS!~*^J%%`$PvBp_I`$*l)gFFXZ^9=yX(r<2%W7RTX~J+H*6KUcl(Zq zO4o-|Hv6}@>jZi8OkA>B?PA9~+ZR$2*AwKXuFKf=>+j5sJ2QohKAxO0XE9snHJ8JD zZn7d1FE-q|8RYnU>w3mz%k#DVE(+hXW6~AxLgn0gB~F)Kp-LrHpY=1uv-LXjG^epD==ASVW?T}M5VXq z?oU@pnH0S)`t|oop846lE!X%Kdfl1HnbSYRs5M11SP{GRcD|@|W!|i6?pj^(;Igs|wk5HWHvJ~k`VA## zWlU{SGTjzpdGf7|=~C|{ncb;MuH2e6Dm-tcm^>M6?o4Hn6JY4R7^1>yFczUNB*)@ob*BLVkc-c#P% z=e>K`4pWM>ExMsSjXYmGMha0>yk~H$rpHj{b%_4y6+=h^sm%M&H{K%Q);~=*?=F;St%Xua@B^JfFU7RNCkl52uah5@C^17G59_^0sQjIuw zO+m1!l6iu4Rk-ehwNC%)g(@Z;d-u${BUkV3G)A@ich^jt=yhtLsGIq2IY*mMzU2`| zi^b%)`+ctHZ?%rTy>x!yMAi8-W_r6dsoauM-okM)oOzwm%_L9EX+hZd?`i0In(Lf!DtL49!)&tm_kW>a(~wze#kHhf9X?n%ilc+nJpGS4_awLWJ(70c`B^@(z@tmBspfQhph~B}F>aNh2_APuiyq#S^1i*~ z-{oCbl=nnl$%#%4%vpTRc={x#D)CAWi=WB;6T`Rmzb%xiPvI{5`Sag}7@p+b-Hev! z*GsIK&-)^LSMA@UU+?an!*A7l?BWvX8#2=-N@$54{Lc`%lp6y;8 z_41NVxK(XW;VqMfE!o9In=GeZEr`%sqh(Meeunw|tWy_LKeB(Dw_k2@LCWRFTbrcK zcTZf>la=75F1Y*Mgae#gBN=s88%$MZZ0Rz8|79V2N1C?sky&S#-@LiVI;GFM;Ax86 zbC%=Ayf;*%EKabibVb=8n$4?pbuHh*l`#vm%iQL@*zNu;?X$ArgjJ$7XN*_!sAw(x zt{2jfT4S>}H#j6hf5DY4XOsQ6vVFVs$x-Q!=`p65H5)y3jJ39ibF68VEEo9b#-#D( zb?2pP;`4mo^m>~yCN~%rtl}1KJisvd0#o*+tA99lwWQ~KvOTliY|c(K}BXeE;alULsMcmyf=O*4=ef!UvHFch5^*Iid! zT$!IT(de&w#-FJ%lMJPtJcB>|oMgS?blR@oY){{;3%5LuitO>9c-`>CCdTtC9r!mc zV7+YGt((U-?@*vh)=_Q-Hwm7{&zLvLZj4cHw!8Z%*FOGoDfiCQiqh!S8EUl)A9HNn z;#$TMkW{?0VDZFrmFqo~d&0#`SU;G}UKx`)`LyoYzXxXmONRXq&x^X&KlGLt%+gVge48*UxVhny);k8CIr%DlR-y8IHO`m5&i=hyf6HR4 z*q;U(VJz#XN`LY=R=)dF;W75CmnO1GvdmsvFXf&zxaBCrHau3fA1Cic&0OnJfFz_2bo@JHI@xFgq$ zICK*Gj!8V?RX;7e=UHaM!DBC{xQo5tyW#wf`KFr~@7bOyJTt+p{Dj0hk%^xkTPB#T z59~c6eA~ie>I|)Ew(M$qw*HgM4$l0~kUZ@tOS|8!GrJ_&RHo&dp9$bN;L6})@#*81 zR6qC3hp}9b9r|8rK8X~{UYXXR_eLep?a0s0gQ3i27U_4MOnS~Bq5IL=P3qCjziaJI zEbM(4y{d9<2SB18vXP&E2_R)ouGJ#J2wia{Nmibg#V< z1Ct;lvmhhro_hucMpn=r_n=LwkOmAR6Eh1d8#`>CRDgkrk(rr^g_#v}&piWUEh7^% z1B)Q5kfNa@n{Z$vyHcTuQRBpg9Li1`4~hm|{Gei-RMf=DB?h|WUKM=Hy$NyG+>>?7 z{X_UQ_a71W+#dn$b!CQlixK8CG=B~K`QOiHVkS<0%{Fo6Q+DZ7Wt6PblH7QBb@)_b1nyONL}w(_s@*O^vAo9f1z}o@R|8}IGjt_im$I1cUbxZo^J3Pp@Hhj-N^`e0mM2OXH`$dO z^Qo#{y06`4n`Xh}mWdrZ?_K)YSl_WT_f7+&TgJyjvO5;=by)_*%(!8|vhv_Ljt70# z%?D+Bt@f-B`pCET;aj1bUrL3XW`$gL7o46xGqh&wiC34s71*2n&lTS(ohNp6Yxc8! z%>kjt(H<*WG+mRQY8G+c{WPc#@r-h_sT=T5+*UgsqZz&79Z@To;$)?*?ho3&FJ>aKutAO)x^1=mt57Rpr z3u|k3^d4-KF1&8}vZr|7jO8kwT5V2}{!V=E>p!j6y%Lz8n^zK{cXs*o6{k&i?}^J{ zP0V;wks7liE%*B9&ff?w)-~Y$O$K*H9I_w+yhTNXmpU3S#w%i;(#9G0dEc3 zwqrxC!|mHYm9D?laID!e>A~$=di?%dR|qjrQsgmy#ys(5RPC{)x}B3=aa?+$f1=y4 zG|$M~(nWjn!JpF1^Qyw^Z|(8kp8m~u-W}HCxA_dLcxvY_cw-&FZd>?h_HX{Twtn|a zW_|wcci(?|ms@IV--NdT4k~$>^U`wUr#xxnVvV`Dr@FR&o%2#(88ywQujR`gl-)Y9 zq5Ysr-KVe=4x@rzwKq(Qo_Ide&{y5t@3mFPf5Qp8TLqD9S8HnLw{y4XSZb}}zbi4R zHa>pSZIxfSJrye2rr+*GuV6V~slGxsgUL7hi1@dtqf6JAP3PyH=`8wb!|xEm-g9dV zY8_VX7cw=!{3SYjqjA*Ey_?yea}<15+GNPiBB~>i(qw!k^w^${CViW>P0ctr^VYEs zlZ+1@{B18OBU8F4d%tju-pwtu&Es}tA9Aagu40&Vt-SlFaJ2hmo^2ET?lpejl>X`z z!}r^M}0Rr|m7OgH~#a6mO+nafV23BvCd_-h%6t9DxNntbqW_>qgRo8EXz+stx1 zAgAr5yp#9bvpYxfoeYooimYzleny3X@!BMjln<)lPtfowT_uk}XmF4_QOXuvWJ)+}s z($Fn!`xL>ayN>-ZdRuX2os3411N$oGS=y5}eB9rz`|ahmPn$YIlev;7FtB|IoV3H{ zpoYxn4fEz)`Q_hNGB+r?I&|`1wWne(0h4kSC!E@m7V=u+ZWAN>Q=17K?7k6o`q!3! z_||W?FsoDLV&g`c32V+A3@tJ$I^)z+uJHN7^NQ(#*VpF1Ro=M0b3x{zcji2;$EO`> z3lwf(l)snrK+Zb%p6^O-(Tdzf)84$jE9?`>UfgN3O+E9NeVOrF2bsM7$A8^^M@p4^ zIQ&HVba&`PZ>B?ch0hf5xrsf!bzjnYo5@Vasp}nnyC@l(ef@Mi?8I>yxvGMSU)K$n zXYD%r^whB&ohG;c40|%(n{TP^KU3Bb{>)~MSnP32+t+N5Dz69a*c>yPdCl#W?-(+~ z(&HEIxIMp2slisQ>(lp-<(+(sb+Q(}2|QoH%^_{)yGDEG^!YPyy**R-q5N2ngE~vu zG^xJTrHiBPE)hIgt&(wRv1O;D_OydH6(8(`?T8_#S!m?u1QCKz9Iw9$Cz4!YLOB+!A4t@z%Abs38qv~Na4 zzx?((J8ySV%$!n{$vbCEo^e+O?_io39e<#E>&@MI5irWm-NZCdIgBX~@n+T?}7k zC6)XAwnccGB&l%4Jngt;5b+Q{_nYp)oY+y4md>M3@>#)?Zor(+ro+l4{RiFHIQ5VCqTYS@= z>t=JRH2+&$)q6m0Zc88g@3(&+Pm<;L*1f z)-+UoTXsg|*uj7A_zGX%Uv59$B+x<5@I&*ld;A~wcjP_!aP+oMj?UvvpJuA^D0@oh zO!hQdIn6!i?XCE%rpRtf=4bvv$_4BzL;~?_4TZGe2#~P$D{TDo z>p=#qKQ&H5L!tf3$FODPFz_%jFz_-lFz_)kFz_=mFbFU)FbFb1&VUhSVqg$qVqg$uVqg$sVqg$w zVqlP9VqlPDVqlPBVqlPFVqlPAVqlPEVqlPCVqlPGVqj2UVqj2YVqj2WVqj2aVqj2V zVqj2ZVqj2XVqj2bVqnlVqnl_Vqnl=Vqnl^Vqnl?Vqnl`Vqh>}Vqh?2 zVqh?0Vqh?4Vqh>~Vqh?3Vqh?1Vqh?by33M@fx(K2fx()Ifx(7}fx(uEfx(W6fx(`M zfx&@^fx(f9fx(H1fx(%Hfx(4|fx(rDfx(T5fx(@Lfx&}`fx(lBfx(N3fx(-Jfx(A~ zfx(xFfx(Z7fx(}Nfgym2fgzBIfgy;AfgzZQfgyy6fgzNMfgy~EfgzlUfgys4fgzHK zfgy^CfgzfSfgy&8fgzTOfgz5GfgzrWfgu6v#v~>NhGZrNh7=|ShEyg7hBPJyhIA$d zh72YKhD;^~hAbuqhHNGVh8!jahFm5FhCC()hI}Rlh5{xAhC(I=h9V{ghGHfLh7u+Q zhEgU5hB77whH@qbh6*MIhDy*_FVvnICI*IDCI*H&CI*IjCI*HECI*J%Cr+Nabot8F zYu9hwyft$BFTcD4K5qF{-fwEX%-sIww$GWfjP}oXc8PoS(#*I@rF$!m{QMU7pF!i4 z^~$2g?(nrQcKKB4uD`i>T4rZjS#@VzxXy9)XGOQeH!XVWBBRxyJ!|^Iw8p~4Sy3YY zYNpNFbGER2SK7TxW_QnQ;;~8pp4r=4mK!^}Kr7b$fWa%Po>|@J4kadS+xAItm&a1p z^S79V+a~1s?%@$lp8QOJ!J7B*wVtle+V@))eLJLWXm#Xb)SUwooH9QryG+nIvis>w z(Ubx{W97w@qHNEcjeh9*_KUdLg?KGzN~KWo>s};-o(_e}*MbyX9edTtTjX;?HYg+t>bQNY*mH`DA{jvfvi&p5pU!RUDrG zopk&P*C&ZDp1FIxmsezYPn(rpse3OhMN?|UwCYb67~XDuR8s2`0(ZoX>Nna=)L$ zeDF`$_4T@@Z^aHB)O(&W=|4m8j_sSLF0Nd-r8(=+(Ma)}?ZyZD4Ia)k+~G>zy>|+0*HxeFQ?gKdq_3u4ux9tYt9B8c z3hCcl^0^!M-L9BQ$Esb5etlC+J40~E#M=$47OTu(@F#QEyp`FDZ_i$ROj|%fNOaDV zIs8+Z&ExZ|uk)^`(cX3?_x+z|o$uDCHGbcdIyI@oai5Hs%9>?&x0^ZseeORc{lX$= znXGn}26krVe#aZtWiK5hZl!mB=}meNb<5+eHj{(Fsb=QMpRKh1?fJIm%g$WqW5Tyj z+}M6OXW`WF1x9ymR-LQ$a?ca>e4#q|+O9L<`l~X!N;j7rH^?$ucIY9a)_wJvDt=3f zI3m^Ep2*MTu-9Z^Zf|-YH2a9=k{?adx3gF8b@I$H)vlcSR!{d~{+6ZdZrrh9eXFdk ziH7~`(KHt8}yTPW$NGQtU&AwwI6Ar7+T{_RH{+h8u&Wx!Y>~As0{Rn@QeV;SZU1Zy~yk%+=gbu2@&JDJ| z+nXY|e$fh%@FlP88TME|KE3>-+TLfTe?NYXKAk@`;G+;v&!mYgP6g&hlNi`V0@w*` zWQDc=lA!aE?5D-5ftA*xgb+cVbe9YjfL69&MULRbIX}K_LoY!bX|Hd z_sF&rZy)<;8wMK7Hmo$g5K-~Y<16=+s|UKyMs!yy1#6vJUcHj1b*^ku=d6%Pss|6c zrM_ak7Z`K@kNP~h+q>U7GpWsfXIG}plH9xVL|WkX_cBkIEY~uw)jrWJBfKR@Ys2&e z4rZPw?-bkE1HzRrHJECw<9Ge|*wglKwnWp-l!&)C1$Ld1nJlf+5%Fm@^Kq5JlQJ#M zQ&ZHl{|V3KE|kxZuJbXwrmV-z^Puq4CYd?>GkBgWHCSnB%O5fOwfF3)7((rtX7>~X;NBC!-DcQ}(pR}~%L1XVK z#v4~TP1o8ZFVCjfPTT#Tf#dJnJ(DF()w>e8-^EER zKMuKw1S$6tNzgRX9Q&30kZyG!q`owDC}$0;e}%p|>=y6=)^7znCQ7o50F z`|s1vBVCRRUp4fUc6FvVUh|m478b-cp^`=LAWMmIb5J-Zf1ldMiZ{1?OFF!+y*g1B zqimJWCC=4y}^WEZZucRS*Is!Cc#OPl}0pyWudi9Jl_Ex(UUJ|V%o zg?Z!IqIv=4-*MBnX%}4UH(9x@UgNCLjPo;X$RzksGh8UC&vz zb&_G;qB#-qgVJrk$1UuLjM-XD~~-2CBtcTSCA z*0fzyH*Vj*<8HCR_ReX_6BUJ6Cp=TFSUdBZpYc@Ep%=H#yori@bGPG`ca)IFL5Y*omr1r+CC(@}Wv<8$D4tf$ zR6H-|d|c&!hUj5}OYx6641 zf12IuF)#`8+bvaj^w4I}O63UAc@Mpo^u1XqIJNQh{YQFJHmp5%vnRbkIq{x^&$ioT zzh*}8q{z)U`DoqQrP-j%h{@B}} z|7~CQLHh3l{wRj4mrGCU21!>gsNr7m=f>1F$>}{GUl|!Oo;bfWW)*E84B&&qZ?zKO%_R)-Wk9Gzw;+SC*ld>(mZ|(;V zYi|Y)A&uNEj2E|l-Q;uatx~6;%`wT}tLLyKUvyM>Y;o?|v9dYt$*XTQr+17c)O~5=+lXX`$s$v=yYI z%RZF#%*%RNHE-)f4wmw3pRDo`1A0yR^#Ls z$tRWBw{ae~ILnZARppw=PrbThn~&ugxt%>+=B~ncr|~r73E4uQZBo5kjP~AE`NZI* z;}L8jU;eC|WpV?bgY4_`CQGi>SeAeL&!F_mTXJS`dQnm`>(wi(pViKaxN;()$7Zem zjB_(?KbgS1mZ55{=z-%OgEo~u;9XE08XdGbX0ld-hmu7?!Sh9PYOh%` zFgH(P4>E3l@Y*)&l4RSW7a@1<8U#u!*IeGMojUhlSnyN{8Nu`GWmmoYzA?j2yXCg0 z$o5I6ayE&7pXABp%I&_jll{Dd+k-V0ImxpazE)*+@`uV#fB0v`q6THNY0uYWR2;u6 zYdoi}=5JPlfq_+^D}&*}-j6#S51u&jqU!nUSsf9#8r-MMusDCpy5!FW!r=(L4Rj3BA6c zfOU%%{SG%3-)7H$$hR5*yb3E$_eC)l4AF_xVc;9S(j z@D?<{mOWZMtb>6aV*7IiTgx{3raf^e6{q6V&P zrG4fM1x3a;eqD5BsE0MnVC&zK8B7^c8H^ZG7!nyw7?Qvze;F`>RCiGg7!?7S8R zQwB4Jc!or9n1f;gboY%p1LzhW&}vN3Nob&(U{Fm!@Ic`YT1p8DPLLZAGPqfjm>3uy zLj4bGf4_mYzhjzrBvqH4E*J{!Z^_a2_poVy|LXcs_K~6c=&ioBCK)E(yML6V?+$02 zuq5(9!o!rAf2P;8v1r76m77xIxVR$h9Y0UR!A>!aTNX(-_A7662r$;H5lx$%_GlHi zxe62G^+2~wPUgv%8pOI5SFgT#Bg(&8xvlG-`P6SUN3@vEw#G~<;A40)k2Une`;N7L zJoEC_2DT{luHPvcuWYaFc8<@=;4$xU+YIKUuDq{0!S)6W6W>(HU-%aqAGjyi?o#y9 zF3&Sr5v~HP_vH^YOl9p)h~Tec*y>t%OKpGsx^sDQ8M=#lgmSLy8(O?H-Vv`ad&y!( z^M3~2h=MG6x%+Ilzh&p`_|MSax&Np5uM6xYpLD!pPlU>PS}=cHxWwhyBeutlldt^Z zk9xW%*4p;n)TH_={-rZ*IeNKQ%}+WYQ`H#b-;=uAYU!~h%G<7%XwO&on`Efj_wJIv z$wBRC&G5eXnTL1WXIXHp;GHN_Lp85xbMhl!Hq*Xi_ueT5=XmWtXvv-+_gpLd6~}A8 z_M^9Kc00$owcb3$R{Hah{ggAiJ%5%ztUSola6nFjxv1;#N4NEbOCwIJ?%ng*eySob zhx3M372&;;_bW@j4E*67vE%BO-IaL@=4tW>8df&(K3SmJb}VoCtE$q&cB=!t~D0 zGQ0V?kM8olY27M|c*(5XN%SA`p?>zZx z!g%%i{67wnTdh~*Wb5A|LeRiU> z_MF;_=Y9Gzn7I$`)BNyn=91{+dOCS|A~Bvh<%aGvB)NL{cef@rGe3#nW!QLmefJjk zsfy7nZr*j)h?&zgFXIW5QIcFj%)6Uy$2iodTzT_$Yvqz1yDw}Nn-tilmK;o6X>?{jc`xuCdL<4dD~Oh z+}?U^&cBi@j}t5@eTNI=eZH*uU0WV9E40toEaGAZYfp!R+!E%={aL3kewEx}?Xq$6 z#jS!|1q1Axj|P>iD%&o-(ObKCUt{a*=-8CQ zHX2e!lNuavsiaPjbEvqoL21^%E?k(!RzID^hFLmvY60tk zV=TRw_wfgCFx;Pf?3YfC#GT_$B$8*JIr)3DK}3hdNgXU&F7My6 zQqp0$^v;6}+YI}P=lg`S@=Z)-YK`R%I&?f&fGxt~cGfcw_dhlD+>`v*J0CRNy5!a5 zjBTCC>5E=5NqpX79KG?$^ObWZpIpFvIO^Zp+Lc*i-@_*9c$TeLbFRg0e|qb;2Sskr z(td4R^Iq_-?*1dTOp1o_R@VdX%g=Dyc9HGy)90DW#R+fEtIxXG9lxt_NyQiMrhuc6s^TqHRmtFZSG&Z(P8;|A*U`{>`)F zH#t8s{@H5AyY%ziC&|*A&s9C2x7F=G!@+A+bFbf8H}}q(ri?2OI_@Yq1UxQkV0*jZ zt?o31$+4m$j7N`t_@rHWoA>RhCJ~tpmbXsbdA`EBY{NTF*;nr-KX`gMPjO!K%sdve z(>Y>339SK3Z!@IMmYMuI)>edZvU$5slvvlzx-(}&-nT!^pW56w-zkKRy=h7F!8Ptb zDpNSjK6~?@Irqp&#CRji#?V90p9VHC95`ladgG#lOy&n^tK3PyiYMluD=20%;{W}2 zhIQYQgb%)@VP7SVYcBEp>iuM>yz}^i6_+0#Ynpgm!u^O=C}-IT zUV|NZ)$b;TY^!QuT(_-@p)VqNmRXzQP6<(k?<@(;UqzhrMfYgu3$=ENXsvi5!o&E5 zA!*5?2IEH;zPv6=Z{v8J7PK>zp`k({d0F-2wZ-Q@96r3sN%xler$3torEgC${HY@U zgW*`!lgU?Ry~$X>=V#wO%g0ADDo>C1BwN_QDUY8iFFbZ}OG)5?1I*H4QZ`}c!S_=3 zd}l2>zG=ZBg>QkA-+9{lW(GR&axCml$g>f?-#34n|Fg_1&?~q_0v+VyKdO7~*`29$ zdA*#iSNYaSoSa_6RpX(TS?P?2@PCr|`fni><`UTm6 zcWPx233LTxcuxR#dl8=uto;}XZBH`mEI#Ld;>ww!(0=4*C>iqe_oMT-%z_N|4B!98 zA2E8l&*a*k7~Lx`w}o5fb(%hNdtH)h6mw^hz`>rPd$(PUH!xWwrJe5R3g7th+AQ%F z1u?UGzN@TlmU=UsJ5z2w>3FfBrOt7ce-bN>H`W-L{GO}*+v@fk@ilSJn5AYsOM5yi zRGBZDxiG=IUM%}eO({$EqfTYVtvMy{ztry6?6KW@?}22&QUB?Zw>$$*tYb)JVW{ex z_?TBbYSWf|+jsUR@9j-(OiAc_b@P^!@VtTos}Hq&693FE*j>!b=Dibqy4tWwk$cU2 zi{53{+a_!LIDx023I`+Xx#^00w|+~h~M-&P&FDDSwOW#X@#0WmOA_miQH9Q}`ci1GaxqE!=9nNdo z2`7KAn9vl%{MoJRNVSk#<*^LrwLjWQJ@tb_E+uce@^;ILH1k=dca{mx6jkXF){wjU!90O41%~uOnw!w{)%LY(88#Rm*Tg z%=*(kwf8)f7qYV}cYT#_zI?LyValX5owtQWN9HZra^{Wy%Cxkks!5(UvlzC1_eWw zW2^M?TW!BGJt`74c6iF&&_400_3t$nucFUdRZ{|vGrjF}S{J!t0pm2)84t?SR6AdJ zs(i|xcgaq!!vFBE=B!(B)6;WT*!{hHluM_*^3Kl!X4&V{o|# zTXrYut+{eqNYO1)y*Jh|o&8yuMqS{^2Yp*FzWm<1^0uT(Q+APO?4*YEU!^5C@Kq>o zo_K4?{!LB)O#2>|Yn_y7Na>$tE~NNazVxb}l}tjDk=ALAQmw;H1{utaKfFH4ng@Bx zd9qZUTP`ITyCk8r=+)|-rwzFlFit99(^&i4pZQ1G!ARYl#Ln1TZXCOvtz|aPN!B?& zE%~&Zr&<>SY}g83CBf>Sh0yVoi#!TvH{NUS9vbye!hqL5jZ6#-O-u|7%}fjoEldmy ztxOCIZA=Ud?Mw^|9ZU=iolFc2T}%uN-AoJ&JxmM?y-W-YeM}4t{Y(rD6POqnCPLR1 zO=e3w2GBGe51FefFtfX!XqN1l2cOC(lau%ic3n%$}1|Xnp;}i+B-VCCQY6)b=ve9 zGiNPYykzOJjT*Z#!lUO;Jo#KwTzA92X- zk8LkziOqlbIyrmUp$$jQT{4i3yz_K!=hK<}s+}i)C9PQBSYxuQ_T1FJ^K-v(U(+w< z?DZ)&E;_3D-KINP1aBRg;IuH=m1~t1g9Sr1<57mnv(MJA^ey}FV^^k0 zwd~Vmu_GNRu{VO%7T9H+X5gQ`?d+9Ft3EaE_-@sDbZ_6Bh;zD+Z*5$%P%7yW?{+YabP!`(^Gh^_};!%+cs^z_N7Ac zN@8Edk}ma>i6RRX*w_=LD-t9t4o%=V#>!Ax-~6DKJG|NdW9!zn+ZHd4;=CTTZHJol zL_@Q8-<3kUJeHN6UgdRJTWrE{W09<{Y#;6Vl%|F3ZakuK?qRAQ)7<4M8@SsJO*+DG zgiYD>Y{hkl%Q_|Yn;n^S!o_bD`4~=mb$!CIQ%|1G5J~e9Dp<1OfW><0E6*p~y#M*% zX5al~-!r#*+Fbt6kju0pr@(2&i&YHl7q8uVH@DPatLLNNfe#KpQ=Ax`_i1U!_A}y> z7;S0}OntUfU$(|^_lIeVGgI?Zu4`JJ-t|t=?PN5c)7)mm_B)HxKV8ee)4S?;=jCPf zKYVqgZBDMbEB2r$=-4e&`%w2%mJ+`I4EJ+>w@f&$t?aRICf`$)l$8f#`kl9SoOsUC z*K&c~__4Ni=A-Sq_m@vPCsupSt6O1Ly3@qtTQ_*GmOa_D*iz4_>9qgDzw1^%>}S0d z{p#HJU#+{0PAKJ@Hhz{CXfN8AxIIYG$e68OW8=?0?eZgWf){GyxuRcxGy8tw$nA@I z%8{bc(&Y>X8g6?^$~>5OVb<=YnPyh9bE?W_vy@#cSa;)5r<0O?jMh2^NtFkDUl>pQ z$Ui!L`md>fw|omKLq0!qW4nUmyg#`13!a(qYM<0JO;x8~hg=?} z6s&2x^{{IflVID^;Ln;0jXmMHnW_1iDxaKo$5q;#X6Zf5&eHP$>3Dls{e2SJe_V8=wcX3~5!+Cx zzj+u&?++R#>wkW6hklg2Y*V?WV)B~3!FhU6QhJ zPCB#re}*!r$GlIYW~BK%yzx0|K3C-ILmxKFZ1yfV^6|9Exib|9e$JfP$Hr*Ez{B{! zYW?y53_|yGu7!tP6OI--b@3##)du#(+Lr9g3mxP`vc$LDa_zZ3-FMTiduo&1Y#s`F z8(Mw|D4zA9zGZ^*%FJnT{2xX8C(12f&ReiLSv=R|S>&PuOV`atx3!K)OzZPFoa2(w zzb&gux4+9I{L)v8(>G(CpPrSnJ|-z!aKa~N?bb%EQ_`%S>`q_Ff{ z%~)Oev(pV%uW)DQ?PS(kk#AsEV0>Z$uf_WuC2pRgBMS>wEu4}(cL4*xOz(oK9zHj% zr!_CDmqvAa&z|a_67c@eif7Lwj_f>ePEz+#Pw_;l2QqW6@BYt_5H-7htE67d+1nq# z%{-L8{?~>_w)@}Y+`OGKSjn#kS13eM&O2P$6_ObAhC^ijzc&K!xe4 z*ZVAfi)~KKlrdjqHmhWc?vf)G9y6zBa+LEPFwm%Ew!9ruC!V!AOKN-P<0%?~ua598 z_|I^jWAdEIw@ht!s&8X>_wLK?>eH*McN#y7+Po>@<8)`q6YoE5JnmPyfb0A8-0CHJ zu6;6HGWl4LrdrQxca`}nsf%l5+EWh+a9YT|K5N66uOf9Os=m|Y#h17Fo?F5`zkMzo zeRu7_Pf^K=5lcVUoS6S)hwp<^N9BCaWnU@nl{+50^|#zY`Ppn=Cg*wmxwxSuA*6}R zYV}I?wg7j9aK*>`+%F4WcIPDf?H zCiWV=`1;#zn)>9%(|5A`RqitUXNZVq-x09TYvSY^8Q%;JKK9U4mZ*IHHLQlgD7lX# zLUsgtxTRUD@?OJ9vN?s+0SapEiO1skuq zEzQ@tcHx|qk%Q-=3U2`;rk@KdYwe;%bSrDwGli&q z%&sS2+zv0U{dVBAOi1^GwX6=oS!>+ObUeSS%$Za@`J@d}JqPcwqA_6gp9AOuH3kL- zCFd&#m##Vg^FNX2_fxumAGZDia{rhagDHbCgE>PIgE@m4gAoJdMz~}K{Od1N7#JA% zNmzfe4zxE0>R*`sMhu{P&LH=$nSt*@vjm?-1-gGNg~1Fh)DT?I`VY{$2N*`k;AZUs z^^2h61u*+T{srB@mco$8UcAKhw(ne(4UButj>sgOIKtKRxYq&HdkRz#kz^}>|i8JlZ9 z+ZCLPy#0LYCU3LIO<67<+}j>++<95tZ=0C;lC5X#f_@f@{XQ0Q>?U`;U_yDlSoXO; z`O9wU?b+rn)SdD6%M39CgGHKKJuXFju(+w@Dz)j0)`F6=3{_kAtxYVKpUv`dmylcN zLCK)d_PB+OETt?0l_KG7KdK}4_FW6uRJwal^3)*D?3t3CD(Nbd>ZORiyBL(IVCC;a zXntJZmEHEtb4fqF%3n~{BRBu?FyxQszhQEI8h7wV$;&mBtAF&rIsB&VyH#A%_r-a- zJ*QG<6)ac0eRj{5?GtA(N+r(Nb?oB&jJL7k6l4R%Yen|jA`d+oaN-eT*P zCeNkkzbiYvo%5ez)3QD84|QA2XXVas+~b*~_}S!kZtCJ1`K>2ymOlT?@O#mvVxh|D z{&)9ekEp+!e#`VOv;W7q$$FDlyQOa2*`Km;^`69wZIYb56Sr+pF?x5Hk3(tU{6ki* z#}=oq_7>jyZobTf+a9UYwI;O+X-aQ9A)}P{nR!y6rzOJ$wkhS`lm(CL)K1YzeSfHd z@qH7+H-(bbp`X`O`K}S`F6&}h{Kk)i%W~({)OmRg1?O3mWha@&%{;%Gm+fj^-SvHs z&)kV;dsZ~l{>%CL>D&MI&SrPmv4H)h)YEx8Hk-~&(tSSZp2Mk-PGyV4HiijC2JS3H zoT8_);;hAf{hhnWxke%5-JYXj#jq+u=Z5d0*QpaMLY7_pDC{K+I4KET<@C9X(zdLjMrSde7vY! z<)q$?x%W%gbk)3=l*-z9XH%YC=bDT%sV|zmf2uEOilrPjnmW<$@oL2|o|dN`Hf9n< zj55=^YD||qn7mGPI#e5UFEh%`$flpmq$Bppo#UCE43Y;NHx}#(V9(k9ZC$U@X-OA` z&1@13JxzWEj51ACeVM9PavmO^X_7rbBCk}EeW9c+|9Y>V_inLX)=`?p{BO}^xA~dJ zt`|S|@@Zh)Q~7z%58G4@zfh;E{@i}E=6;*GG|n+!ckQ~lGJ$I*Ebg%}I1$;*wC2DO zrfI=jBR?29GRVW{kznP2Ahi5Hy>B(ci!VD*4TbVwn!#$c{2w0W|Lt9-TSi;mns+z$_2%Acfd(OC59UD+}7jguZ8 z^HiBX&vEhrON9V-*Eso)R=IAUk9C(Wy5U-1`Eak;;{cb*?B?P@91mO%q#4b~&9_&X5|>2u&saQnd9fa+_Q5C2;fDlXn1^XTk`)cS9@?k9Z1=52 z-mN8U<`WOFZkX-Vd`N?9p##${tEV=m`t47*Sn*9>emXO0t`LchO0ucjW?>9mezC94tD%Q{@8t)ouS6 zFX&EH?BoC9@$B>CZF&j zuWkLZbFP_fFE?W=(r;~Q-x;yZ(5=s=J;kUcvS!X1kw4w1Mc=MIY^PPRJp9A`F4f82 zJ2JX6KQGXsMHGXsMnGXsMXGXsM%GXsMPGXsMvGXsMf)Eo_F z1_n)L1_mu=1_o_r1_m8w1_oVb1_nK51_pg*1_lFW1_ncB1_mQ$1_onh1_l#m1_o1R z1_m=`1_pCx1_lde1_n!J1_mo;1_oq1_oDV1_n1~1_pO#1_lpi1_n=N1_m!?1_p0t1_mEy1_obd1_nQ71_pnq z8v~gc7=l3a=*$cZAk<1JXQOpbs(aa1CG0Y4MvCIq% zam)-1@yrYi3Cs)(iOdWPNz4ok$;=E4Da;HEsmu%vY0L}^>C6la8O#g}nNWMOnHd;z zm>C#ynHd=Jm>C%InHd-gm>C!fnHd<0m>C#~nHd;Lm>C#KnHd<$m>C$#nHd-=m>C!< znHdC$VnHd;rm>C#qq2|>yGcYtTGmM`90vZ4KRegBYl{)cI19&P|L9_{77nzu%+# z=<$j>{?;$74&Aw-qpK{^_30|lge{Sl9e1^2j~(P{Rtd=c*>BgGyZw-yymQgz819IW zQ;;i+i#}~kJ9t`VqlHA^#jM>w#JzW2%KcL7er8YGtw-8hz*iWji3{#b<=~8DUvOt< z*a>x8*0XEGH%jOwM<(T@#yV>rJaNL39dv~;TZ83$=89{Vk5>g;&6zk!sqD$8r42uu zCU5PCc`&K_T;ar%&(^H_dN%sNcB^xpTeqI|@GfN9-J-5jvm)@eR?oIqLPm#^PS_lm z(97O)sl?absrk*X8gHS(NtS5`4(J@$dBVV;}JoW0JpGWPZy?i@*lMl#e32dFSb7o%3?j4hgj+|F)eAwe5oFo!v@RX_L z)1psT9g^oTf7l=0bau_!QdYx80VZd~d&!&34nBSIUg=5q;(K8sJf{ME8LGAx#o2sZ zJH2Jg>6KEYec!Chr>UlRs~&gx>(R2yPlY;8 zgeeF%RnZS8w_g_ziDjV_}z9-rdRY_^MJWwz&9 zJoWodrO3d=Id2mj4=OzPP~fio%2M<=f9o%a%eh}Rq=|j|wke{=PV((i!A`|A27#Up zE<1hunC2Mh9Bt5!s0q8cHP+exvaX}KRPWloPYh3-nzYB9>ztg$ZMm#ND`!vY@rj<^ zc3x6y?%#9MAKtAw^q*nhho?s--`c3IWYT1PwPW7vr#|0~)SuVk+jBitzS-o2-lUh# zQ@ZN6x^pTVmszC0xxGhlC)4369#>nuIJFu+$E?{E{OX_lyt}uve=K@2lmENIB!i{3 zcOo5>zkH6E^Y&STJ-oLD8nHvgu=ay13q<^@d{K(nC3()F(0<@%FdOjp18n{SbmIl+ zt`AcNLk2?zO9nFr1BO%v0|p}oGX`@4^FO)_3=D=O%zrS0>Op9H!R!ake1PUaK)ZcG zHm8DZHD)kjNCw|X0*PHr614vnHunLdF;!rSh=S@}H2YJ*`+rjyj2J+BZ$USIBrzm0 zBr||^RwbeVD4DU18EI}d5et<;C%)lRza7kWPA zk%CJ}b3Qdd)_zgb^I{v`!J$0zPQ9{k?}-Lr_CM1s{np3w3{!?^Ze($po7 zN9&)_^Y^hXtZpJ}Wi_Gs+h5F~A9-e#gUX-Ux%HcK^S<2Wi$36xU6QI_SkUFj6O?^B zBdv_VT_opbp`h2dyTVSF|JY`Kvo#WJlRfi9zdU(bnz|}z{jtimiVx~-Zu5(m{AWmy zmgYXDU(DF+Q?yxTv&WLe(*oRLEZb|Yy)ihRFLhXeTZ#c(0LeEj;5VNidPQ&DEqRIa zY7?_!))d~Jw86uu?EMusX&r{YH^lNMg>W+5sm`t4_A=-&?}g3NQhwVA&!3&Lx$c!1 z!{28@R=F&Hjx*al+ZTAn&h*FYbF=ujH;X-wU3QO&>q(Eyu_D8R=i|P9U2-dT-sV&p zs}{raVuIg17EUjC8o_)(t1^f!q`{4Yt-+octZUba zee7yW);g+mCx2^>%Dv=9ZINld@8dc_#ZbQP8FPbE8}%LuMSMP~wOHrWg3V3cJE!Ea zdV-1}V^A?<%^e*Ps5ColViWDozw^3yxZv$&b8auas&eV__tTSA3QaC~80>$w zNN`WF%)3azL!1mjcg1d4Z-xL#{Xv$%1_!04yIiI4d{46!Poz8`PpIdS^alSd8a zFVtn`O+DxQxL2uC%;b02b49nDcT-a4@J#DquzWI!;gyGI@X_tQW~-NE9Jh15dSsH1 z{hnzbO&0QR_I@fRD;YZFiQxjiU0t8-<+G~Vrms3*yW-Z_@`uaYG=$!rOBIUniCsJ` zQ}^_-_idBJgbt-lGw4~Q%Gmv@Z7xey=^V4V%*iKvmG8Zsmb*ahnfjzN?kb<6ZC@}w z6}j}vc#_4F-?g$rV0r)4Fq_zioWS ze1EBujjuNBJvyhsUB#1Sx^#14vxv8{(fmh0y&AvoSisNqBktmz!->nYrwJTiR* z6>oPW@G-uODct)Z**#S_vz*P=viauvZ@%|*Z}2WSWYd3l!p?wTiJ*|0C0)1vGqim6 z{?9Pas{J2#e*KTL4AGZMU$6e%$g(T<>81((GtDP&NZ$DA>BLP{JercPTnpmG)-L_X zxBuaJzFW7Qi;eEYyjq%Wznke4)5gkn9w+JDvvb}C9noa&nRv7QQ03D94CiH?|1+>| z-~T6Vb9Bsy%~{P++1#5~>ZB6vpJ6MW`5@TutTa-Q(! z6ldPfquVckskO4m-E#A5bhJlElEjwVUwn^6s!wR?GjSENX)IgSu#v5&;K2&^jThsb zdCz<}p<>mxTupaRkLS`?Dq^1=^;dGOo?}wvJ%3+Z`RRutVOv|jHS9{=+qRZ(VXX@D z-<(^yzr~Wj&wk!{L+qHx-G+()HU@@QHtvsJ%k!Si&Mt7jl^=PDMQ`QaiRDIZMXO?Z zSRA}}+VHMAvs=tuw=!Gwu-k_%9qW=OFuaIh-g-cVE#_f^3KJja>$vpw%iBv|yIoq+ z_qSxG(x`}JyrH=Xba+gY-GZ;OE3ZE3ELX{8Y5E;+-=U-6_*9J9FO8 zRK0Rh=uM&OZSlG1{Lh?={Sd9{Y!JiTwR=H^n4H9hexJ($$8&{RU3H?lRtdUAt8=Yd zW!v!nZ01D=*2Ev}Zj%G1o%(k@|JIxI&lAiUuU=d zf0-qJAGn=Rh%QxVlb#pgY^HsA#R7gydEWd*`*-Z``(-vMbw|wEycGNWbJJD(XDr;a z)#G8O$E{AG0>@HY{}vl_{+2H@N_K3M*9|dN%DETnl%F_F^@fJtkx6GKzl`1zz!({I zy#3ABoeHxapNU*MbDnsgo10szMntZHP~gmhgKZKY&t_e8ka64n;ojxoHjcL`0$X&8 z&A$6v&dYq5!LrGCgI>Un8nfa}rmUjkqB{S?k0+YgxgHR^5O@2oN}7@14c*pF$D+%F z0#o&SHZ$)q^Q{sUVLb4o_<*<_Z(pRz$w`s7PFa_R`*x*8s!Uy$Bla`$d71{J)~Xe2 z97M0Ys8Xt^cHe#}XGYR3(N5W8MWKaz85a=qx5G33ob!yfnTd}lY_ z?flu3u{f)DdHa>pz2W}zUgoY>_cyW)X-Y}Eu`zz>rWU>kZ5@OC)Ba4ER4LEfu!Zpp ztLSIj^+&kZx@Gg~#cyGm^y!^j$?mDqr#|NeD)8(`Sh-2Z?CtI3Tf57}>-&VT#WeAwztoxum4`vNwOHXEYjqWx=` zmh?(&*%EM;(`iZF?^B_(B0Y3clbQurDeV97IQ;4#U$yyqdw1rqHSx83RB__=zv)%$ zpBrl&;OXYOV8Appg(2+k{=>Oq_YT=gfA3xFtUgn=+rU6i{!EB=!+Rn7GZRj{7kU_? zcEmOE-J4s7kG!mwo*L_QC(6!nXWacWvozTp*`H2I&1pVA{h;&)#zR?EfB!SI*+i;7 zJ@WbF!qa5*T^Cm7#=lN=xZH0&WnpSOZ+_HME-eu1#=J#Av3wf{jTQjTA<(XHK7wN?0{PjUz zQ0OMkbALgTZzke~Yc`tSa}PLGP<+CYeFDGoT883%tRMHz?>D*s)>Yt!!QrtysD*SwgKTO1s|vo-RN@XpRYiMyLtoX%Nf(aqbf@L9g; z+3vgQ&X>Pf_?QW-$*TJ(vpIR$Gt0DN1?Iwy2M#cVt1kEvC%<`JSK2JKi+Ok7rnG*0 zm>QPR%*3^SI?r3d@GvKb8sXjr0)K4wZM&BLUhhHQzeCXh)22)1eokF9{cri)sgo+6 zd|q7fQKx9vhTuu^73;n|duAQ+=ce&?EsLPzI!=8e!dH6cB=AgfVCl1t_`rUvMK@h9 zEqbQj^GWa-xvVM3GjeO~A8uQ@e2szbi;AQj8>Z`A%1_rsqKtR$}V#c zh*xvpF{#MyQBl_z_s3K4^08u=3MRZ~GX*Llgh3KAuzKSpVSg68|-xrA8U|Z8jM$_^1hw*uRZgTuij(#eLT5&i!+vR6_jl_cu_ZI1csGnD&M??^eEK4u=y`)I%Tt2oIYbu}^TpS`luJ#($^?EL#$ zF&(LeKBCrjn?XS-%fmM04?WPhfBXQ2;dxB`QO z)jxZo(9+;E?z%0>K{L5MkR(JeSaxz{s}bWmkd4u*o*;m@-65LV8{%ZDMJ!N z8b-Xq1VHA+6!jEV9byTHXXYYK>i0E<)J}>{acwC82X^= zof{b#7@8Rv7$z|=Ftji*Ftjo-Ftjl+Ftjr;Fmy05Fmy67Fmy36Fmy98F!V4mF!V7n zFwA6NVCZLHV3@$bz%Y@4fnhQO1H*C#28JmN3=C5l7#OB8FfdGKU|^WRz`!tzfq`KO z0|Ucs1_p*X3=9l&85kJmF)%R9XJBAhz`($;kb!|=5d#CmVg?3=r3?%VTNoG^mN76e ztYBbZ*ulWSu#$m+VHE=d!)gWwhBXWf3~Lz}7}hZ`Fsx@_VA#OGz_5{lfngH^1H)zp z28OK+3=BsY7#OxOFfeRqU|`tE09n_zi-Cb*Hv(O()VzqkDnO5|BJz%;dj;L<8t!* zc0@;4Z>fwb&SBu~w@#m>q~j3qR^YRsC+p+G%bqICmU`d$EgZ03St&!A3PF# zZ#S~oF}jMHALW;*C_Z$};OHZ7PrbM6W=;)Mc0cIA=l9KbNlI?2b>kC($_0GW-S%BA zWt)`!+A%Z#_>^9S%Kn&{qQ*jnJz6IfU+?Ifda9!T*sgocwK-=q_NUAb-+oz4U4HLO z^#I>1dVL3$xa{7OFEn3^bH=8Jp36V1K6Wd-Yx(Z&7oYCWt`IX5jL)gpFHG!s%Byn5 z;)&P$?abK;53=t4h(7YYPQy1b|4rLmNk))zng9kxmRcWBCvUGp^8KApzh89GmG>(qr>A9s`mv)|)VWI6U~0bk$wW8e14 z_t~mtdoLBct&mE=G6$EWA^lEbmbmYz7h=|thDS?`tGEVhdTEbV)C;F!P9oKg#h zl+O*CUl@;iew4a)=ifKZnLL->cRDpRNj~1Hy6MT>OI}M0EMq3IT@KI7|N8VJkJ-nA zoSO`MJdHP;Q|VyWelkHu+f2NYUH#c((<^}va@tGXAFZ_yY!36b?mcp6_n{Zj+ND*O z&T;C9O5MA5Pj!3Dzi*Ka{u7sEE&RwF_i>J#G^t4LC8voeJSE-ee4A`nkcOO;|Z;g z1Qws{lD>DN_8#4n#J2L}A2QvdhCo=;>7c&Dx zH!}l64>JQpFR1QdW?<-NW?-1W%)l^_nSo&vGXuk9W(I~S%nS@unHdP3=Auo85mYEGcc@XW?)#u%)qdgnSo&)GXukVW(I~0%nS@0nHd;1 zF*7i1W@cd60=07+GXukRW(I~G%nS@WnHd;%F*7jiW@cd6!_2_2mzjZKA2S2Per5)S z1I!Ez2bmcd4ly$@9A;)C$ZF*7h+XJ%ly!OXyL6RPhvGXujN zW(J14%nS_om>C%EGczzeU}j)=$jrd-h?#-mF*5_h6J`d6r_2lt&zKn)o-;ErykKTv zc*)Gb@QRs%;WaY@!y9G>hPTWN4DX<3eqd%`_{hw_@QIm$;WIM>!xv@-hOf*F4Bwa; z7``(zF#KRNz03>@|3UljSr`~Z_{iV?&CAd;R>W8lP_c5r^i8GRC>Z%k~-6AJC{G7IzOFJVWJ!6XI#O?do%*_~1ezjmozY(-Y z&~xsI<+eqP=L+Zi`XWE!iwNWKxIbQ(w_KZXUS`ci-$Fr+)t~;(3^;MdyQk?KlK`X2 zDp4M{^s8HQt7OZr-8y&Ad~3;^CwFr1Z*g-r_;g#^+l(Q3&XZZMe7ERM2=vH#-gvI+ z`E?7)uLr)Y%wRt8=-QsZWu7(H#EML=mzQr=m}agOr>V4cYeUf@i)Wp_M%uyQnMaeHrLKo3Fr7&0G*>B{#<;9s zMJF%%V#We~-3=e>d)C<Smt$=i!_xeVn(dQx0jgZ57AV)(Q>Ub5n3 z$;yMDxvhM}t4FX{oF~x?b$Z?!&*X2)>wfmUG@Y&UcqoRk+(u?JMAu zPI904viaV=sXMl{y|dRU;cICMZF6(HWARNv{?H`r2&MECS6=13;=afY;_6o(I{ad= z;=(*H6|MQf0Be8nL;Iuey30QI%52c5SNnsK`iGC9b+rB&9{XQ^)gP{c?Y}XF?Y|LK z$vC=nQCkLAuJZSLL2E9Za!l41k?0L%>pwg!+r6;k6SWQJ|}NXV`Dx1v#Yg0_L2L~Ns_XUVzgRr zb*whMJ2|3aX1;RK>Xo;--EXlyt*$r9SR%0+`HM7EHLMp{x%mqK7q!4cexnO#!XOZKX{94>tSD;u!;IJm94!M znHis?P3+!h6uar@wk8qb)>UU83xB+x$aZB z%|v5E?==Gba&{MONGY23xzaT@lAGy4dS(Dyjm_Sz*Yeiq=PusAsk(Mr@yqK+ zrZuIWIjb(@FFo_oEFqP?aJNtvvqz71ukP-6JHck=t;q0JouV@$1q|_mgi~1S(&=GIL*6uxn-Vhu49ZpR`%L zH;;C%%(mdUl%MfnTZDvh`b?FnF6)llrA1i&>{!6>wod!Vet|7}#eQ8n|5jt&^(4+K ztA#|4Dt~Y|R<8BQ_?UZDdXtTC?ZfDPqw0w!xtTJ4j5RY`Hl2F^S@_exAMSERVHQ`} zM2fFuMR{cf-8%IqcV(9)Ro%;JQP;S7-)G|7FDpj&-$6a zRLGiB_jyX%DVuAjH*v-!7uzJWI_A#4sG=1s+Q3pL|MB14N48m?T{j<`cl3$p^{Sr} zO>zV(H_F&#n?=68&$H=R&w~{QOuznT=&16WxH9s_>?vW@%i9VyQEaaTznbZ(<}xpB0ovcT;ELluvU1`NDw9GH8m-dxjmL9g46#2j% zMo&s5S*n_}8+U)m-PimuV~=>E&f4s1#jU)?Y$;v7m(H1MtyEns)N(?_dY#|J2F62w zihnF$@ke3b=6#p0s&rF~&`1afFgSGLJ6Kh{7#r-@PtKaueBJ;kusat(DAb?a42h%l z=P;>1cb$J^w!N~HbV6j`gJXK z#`Antj1zSqs##ZBTCfMmn=JX*!ghA{yBQHh)%s$RDi`1Byj^#+_vw|~++54&DW6t) z%wTX#l4)X4m{Z^$_0yv!`{UWu9cladr8k5H=jS=HJZQ4n=cfI7ue;~QYf2HN9Ln=d z6JBl7NRUWjlYDV{^42!4d5&xiHrEdZN5A}a%^m&>x-Np$tpckpQpV;PUFz@)QKJe$Fn9m9=LO0)$`R%>{Dib3+Pp0vUmV%4=w{^e!Z#iOf<;?68+?(gmFI3RG z^JD^hpzqbM?U%OYY}vW<{`{|8Yqv}MzCF`$&c~iFw%X6*+h)D}d%j~!wPcLx-mNWy zM`jB@iB#U2&hXe$Rs5NH0dt0;C;Q8HTNr0A$$G!4T|c`pceDKKtKntE-^(^Xmw0aR z%If;Giha^6O{HhQo}s%npD%0E!R4IEQzv~oIrrbOM=Tl_PpmHRIdkze&x@nyR0I{| zPDgy(Cw4JMJ$iPuNAgt9RILT9Y3H7Y{$6-ny|_VkQ<0ya1BZ?4LcQA+`MNs}X{}jN zWj;-W=PPf^@z^8!L9FaYrCf3zRnJJ`dM}}`lVI5E>=Dl6e{wgUgtjKjRPL?)4GpaQ zw+w6!eiLVBZnoQ4sB&D^zT(4?GltDi7aU^{*)>i5@>jJ9OeglKlv+sgK6m6Re*M&2 zCE=T!mc;=EdH28T?*FS&|NBK_z0|*3d;k6T&#+JU4>617F^g|_`3>5y50ZYg=*qF& zx{YZ=qx_bnxcr9Af0{E`fKS~_1Mh$YoyKVazW)?-`lJy9-t#X>K7aBI^!x%)c*E>B z0?%_MGMItS9Zh90XE0#^*=-JX1^)9tB^ekP1W1_wyahTF0$N|g?1${TGyvP44Br0= zy8YFX!I%LwGmF=LlKuZ4H2(`7?}yo+$Y228cMIBmY6!jy7PJr4n8A`El>sy#4hk!5 z7&QN@&%nT-LxTS~SQr@Ep#EoKW?&Iy6;d>GWD^cdWLGK_F>0K+kVDyNAKiu12%DQ*&6Je1(TO*Ytt_qnst!FybukFclQfbK~kB znD0Dunnix@%sCAUQ=L3@H!v_h*Z;&|-~IIUQKRFBX30%eI+>czqtl$l;vmW>VJ%X# za!0{!2OZ}r^|ZdLD8kVcVoQj9~7@Tb#L7&|GN?lznK3C%~dq7 zyl!x0;a!nE8yo&busQ8WJ|x`EyLC!aq|?K`>9-dAXPDRhpP`oP=eFO%FU8j@uukF^ z+%$)$EqiuF=dYhdC*`V@H}zSp+yA@h_wUF5e#C#kx|<0${-gv=j}6zZS;Rayxiu8Z zUl|5-ip$^8{3k9UDW#^ap{ZqRW^Q3==I-I?g==FLjrLEzwA1iZJ%97E--PGE zQbGT|8eN)EcOinO_QV8(Ig_}IJOsSAPy5esC~BWxt=v5m!|1rUIGw{~&Py978mw*H zrJ3e&M@H{QV_1Mh*Q9IjA6}jFA;xvZjZWQldU=o4zVfN<(tqyZSYw!|)3x)2YtqWb z#>jj5jbEyBElq5L4)V=3`!Vsovf|>5GeRyAJC(otmGQpiK@fuXdBrL(eT)Jq%lM-_h@m!DlB(c{f}^z810_dK~v zGh!EOF_!8|=l*mS;cP7@9=dyex~bNuA}E(=YJE8Z1NRZKipSYw_>?g zGb6*T9orXV?_>UObiu~UrPd-1LJsB=w;6dJi#&Nio$iN{s+L_7uIcQ#nbap_ca`t%#?6~1n5V0px@mcg;egDu>78Hu z8Gr0L{@XnG>RR57B@@<^pOn;<<`mZHTiaS1#%yt_=SiW1l-1cIv(h`atW>gBTW~qb zXYcG3|6<|4!6zp&zEf3r&fT<0?W1_>yRF^UC%1Mp=Pp0?FD&m-TIG^>o!zqc4~l(d zSJ^qW^Vr253;15YF}wfyr2YGe|3qrrZvU%P|NF`Q5a@E!e}{AbGuTZ2_f!61T-`tQ zD{E~Wmu7ySCa^?m>DjkCS{4W&ns!p9vm`Rg;~u9=249$&b1{Rx*;BiT@$!GHe|&xv zFI-c#`$O&%v!t_n>)*D#l>Yh8cfo|?0%a2?2F_)fl-ujQU**FBhT6h!()mB1%>RDk zKLeK?!p<;_1zi6b61V+lnCJPQp{D=CqBTfE60q_Uc79qz_|2<~Yv(u-TYfUKFfcH& zFfcH)Ffg#NFfg#PFfg#OFfg#QK<4i`Sr{0&SQr?%Sr{02SQr?1Sr{1jSQr@iSr`}u zSQr=tSr{0ESQr?DL37D03=EuCinXoW0n6fZ1n6WT0n6of2Sg-S<|VDM&PVDMpKVDM#OVDMvMVDM*QUikjlcqkjBEmkj}!ukio*hkjcWpkj28lkPS66mxX~LkA;CDpM`;;fQ5mfkcEMv zh=qZnn1z9%goS~jl!bwzjD>-roP~j*f`x&hl7)exiiLrpnuUR(hJ}HlmW6?#j)j4t z9%>$?_Xkime>3#Y&l_Do0A4@vYxMlI(eu+r&rch==cnaC`(H1AS=>}&EuTVc`(YsK z4`~M1(f-#knZL+Bw&A|s;?fm&Z#%B8$Pdggd2eRv6?Z9B({ zw@QtPm0LWHOq-xSb%V#z8Cx35H>Rm}s@vR|72dogOs;H^WcQq2yT{F{H}*~M-~3qU z#6-6PAD_B(S*0{oE&M1pTl&Oie-S71jPEuR8;*(?zx~(DoYpTK|vxhyu`WAoV zuHT{(bce}-o9TUC^<(A!n(LEeU+xpw8`-is%X;agZvlr6Juuq)rq0{IKK)!$$0pZ# zT{m(bByZjH@mOxTZR77a;pQAv}b1@O)f8M z@=W6DT4~%8bYT9jRRV=`dW5R3>URiai%*|+T}mgcs_W%zmFZErcaDh`YRLJVRy&z2 z9wQ%XhK=&fEXGHgSZ@r>k?S94nkN-&FaZ=~-dQCA=AzH&Hf z?XHzpHE-u{KCHVZzUoc`)4BIscqBb1JlV{|`1;$eb8{=sOuKGy;$-hZl`!o&jT1PJ zc}+0B&VJ!y41e3#e7=e@%gJZ|%#e_FtA`{CKPxpJxm@?$|iA6ys9$so*LJ?+OYdaZmFKuDTuqh+mg}gRLi6zs~Q-e>u~jy zCWI6j`fm8JtbM7+rpU;{oDQK(3S1360$p|?cPw%j92g_x1E|Ql)o$_sq_{C#|g(yQ-M|<~q)P z6|pCqr{%m)dKcMQuKt>z``mXc*FBdKcCSosU^uC6!^8N6fs0{n=A+Ja%RT&N*GiOe z?|tmBdfpqCmImtw@=H_yIBvaCTCsM^U(vU5zbvP{eDm(+CG8c;r)=^*uIcGgnWV{F zS)^HURaR1R^_HV)S$49Qwr08>eY>Z~Z}kQbHyKS!Et$lo$)`1}qkEbg9c1boO3(7~ zn#FpRw0rH^J1!gZPi*Ikgap%zCq^&zM%ond(wS7j+s?8hL?eZ6V+4*#$jnAaY z`3940w2p92?28au5uW{)C$!@ZQ(Nk1{SGs;)jzZXbEa$5x(yclX~nlbf$FIXsx?Anz9STB`O_<+SaB zUJVbXlqODM=5th@s@T3l;fqq&NAK#HCTqh(w`{&GBY1a}5^IoX&@C2MNp{A-P=^-` zBBbvaN38&0^&jZme2|Q`e#(y}0!g04)_((A{z;9Nf5W8w^N!s%?{!e+Rt?>+@qF3e z0}kd^vmDiX8~T`Q#l}sd6=ELu+>pw@D1PCL={y?`SLeKW!pf~B#lM^;{;h0NPUG6O zIVWx{nc-8OvM`A|b>`ifpPw098zx0ee%-k`)~HRj$gQH6;SYm^yyH>mK1W#o3xc*M zVvn6^_}a*XL1DF3lc^mwZxth~xod5@3ionLGB zcW&{X7V%*3_Oc?T)~TGTouLfO=ORQUUL9ERBxz>yLtkO9(n+VzNqA|7a5QK!88~VD z3@&)Mt#L=~o9hiP8yw{(U2Ir-tZ_H&5z%QCpaqYbJ=-a z|4qs3+0vC}xA%mF`RopP#+YmP>62rQ(3!~1JG*zLsopQY7AHCLUCHdqB?rrWk25e% z@`N@&R%bq{%vWngCI(sjBgH^8vxdE>lKnI_lEayDMx)k=l*_u`e^KrH;l5y&)!$tV8{Jp1xH2%Tns8jIvG3HxMH+8bF+2#* z`4(XNq`YV6Jc}p2(ep%48TXVtIo7U{lKY@%PD9au2I0F;Kgew^Xp2ydHG37J@m8ke zHM7y5iyIVHGft4`>3g(GmT~5n*=|MN(iNTR>&keZ-&=aMWVUS4C2w9YksVv6kGjguP~WPbX%{E7Tv z`u3yRpl9}4&$#HFtMoH(=k57-^(P%}IC1uZ8T(d8uIOVMj+iZCSjC=T!Tf=# z!D!2Q;g`4OJUbh?a9@Du_PIVq4@whydtd%%@Kx5Ad~@Z!K$iKg8iQ^Qsm%0w7UeAW zHfqmHo9L`)xIo@aLe5N1jT8$BiVe2W__}tero#BS$8oA@IVV+~P;J zPWo>xwyDi6Uln~Kktcaxwr;od5x$6L<}-e#?DSk*%Jaw&5&-sooC)a(6E;Dvh)|Gjuq@~)L?slrP@}^SF66Q&c$}(T$ z(_4x+7SH)2Te#i+`+0dktKdm0{njEpk1Zt5v9Uj4W8W^q_*ClH!bjeJwcTdF$@{J; zv%P*-*#wV|H}+4NWDs#^X8IJ_HC)@Lx%oLP{cvynqq&wQXE}3yt_51%wmmZO#Cp|T zT5g-C*7VPu^thr@ETHXPyzY^n_G_A4Z4$P;3^kRH+2f`M&3G z>>;(MtA|4Q$-@v$arp@we@tWmjXWkXSc1oXLFZqA?*1`lNMT53NMbMmb*-^ta_+y$ zVPRl+01a=L{VCv+wm_$jflj+JV@P8#WJm+AgHB;cWJtnlH%O2i`x`*(anROZn=+U) zB!XAKgKi=MjRAw!ep{&L9KXg$(aG{7k*Uz>}}U#cCLL| zyG;36c~{2N$F~klG&>;8yKUEc&e<m`O7dq ztup@;Yu~=BJG)+`cZJu(xBuMTn^GsKyIFT_5)Ebly_nrn<#*DeMJ)kLjScJ$wuUbq zB!qwLy87H~R!mX+ot3v9-C>qV-#^n>w3XxC>@z!FO0JIjvuoATJy9XmJ)74Qdro1K z=t#P>YCoSdYwVu+^9#amZ}~XSu%pK8QvFsN3*SASCWU|d*RE5kk=-blc+8WDt<&@A z)SYYY-?BeCYku<|zVEk!SNWPC; z0=3LT$Zikz4Z#U1y+s(a8w$DiYEWG^08qZrxSG|4y zN2UFUK}SvhhDzh-cIo~`GI_^OKFhto`F45E^>9~)ihc7Ro)?LDH6iOm zmpF=tuU0*frt;u#*FA{^TBrAg^E?fWxb|`KasP+A+jf82cmJ8}6812|fA2Fx`ky)Z z&)g|Fr>AD!3&-_diyAEC1^Z?8yxJA5#J_pMQBf|=d5=uo{=SP@6Ck;Cs@vUzp#kq~ zZe7;j6SQI1J*THfKDVkWsT@%){Bk)}ImPL3k&VyushDH_!h9(vUhGrH9 zh87kEhE~wt5Ecf8b`}PP4i*N6P8J4+E*1ucZWacH9u@|MUKR$1J{AUseijCX2`mf@ z6ImD-Cb2LuOlDzVn8L!qFqMUYVHyhq!*mt~h8Zjj3^SqY3}>@2Fw9|LV3^Coz%Y-6 zfnh!i1H%Fq28M+!3=E4{7#J3_Ffc4(VPIIw!oaYMg@Iu?3j@On76yiuEDQ{*SQr>q zvoJ7#<~Y}~FfgoRVPII#!oaYBg@Ius3j@O@76yjRPU=Zx-SVPM$L!oYBVg@NH93j@O;76yjH&^gJYEDQ|CSQr?N zvoJ7#+5{(A7#L2mFfg2EVPH7J!oYBrg@NH53j@P>76yh3EDQ`6Sr`~Du`n=PW?^8s z!U8$h@)`>R!*v!0h8rvl3^!RA7;dpJFx-Z^?=A}i!#x%ThWpSu@F5EW!y^_3hQ}-n z3{O}X7@o2)Fg#;nV0g~L!0>{Ff#D?!1H&s828P!x3=D5r7#QBNFfhDhVPJUA!ocu> zg@NHC3j@O^sM%jw7#O~?Ffe>$VPN>q!ocu@g@NHGsH|sUVEE0#!0?BKf#EMmEeiv~ ze^C9)3Th@XFo32)ouTzn_Qth8wO!Ny42AX&A43(z?Vr*5Z*bIq^`xBtG5zr0@Q9B( zyOOgHtbMw!Gr7D_Qo8=qd*(Ggrwo|g6eclLW&-slbji?Ty>7rsZr8~(dM_=#<0G)b$d&E> zoX;=HZr3P2{9>+adthseWbE8!Q#XFUvu91@hN9!Tb9gjfY>oZHz4UIT*)O}r&*GeO z3q>#4yy2NwV$9ufXHyHyn&u0sMQbPcRdLUb&`&amIkxG@jZ?eYf}1B!DB|N_scy(% zp7+7LH`k_oDR0f31kx2TR^2iCd^F`aCD4sB*RT-r}$iy5}}8%FQhf5;~7@ z`|io#@Y{Et@!r16*^<$#b5U0A?bB_O#BVvBS$C0*#c2O@k+*{GVLfm8n+mru$+u6x zcI)ilr&k1Di3#0m*|Otu{%l>5<=^j>g?T=ne6IH~Q^eEKgykxBALH6%+%`Vo-^vkn zF6PYkpx8T}mPzRo4tzMK!nu)4TcW7ZsWPxKYk}c8#vk!(52oe3-HLwu?$g$b@3pnG zji#_Q*hX#K+Ao^%i)S_4;(`q)Uhi~fvy?nm!MAg(rZmtbg6hUtfIf=4#9`$z9Um#%J8;@W!>WyyGjc z!|UxDVc$d@1^>ge(;**XR{VH$F zG5NB!;cTJp)`|D?MJ}<2)CkCzvGkqZ*(Iq`(DIaNs?!2lixmrY_C2qkK7V4DSxBFI zObSn5MdDQ3&V%cXFWZS{MHNS#*xq%?`J2&mqoSl)(cMiuZ7SP59{D`!uIRDkc*1tK zM*r%%T$cD8MqGy`J4NHKOKtW|!(jWd&jBT{})IBr#r!ZRGD}o2h;_ebo(r zm5Fm6pV?NiSjU!UVoYn2;lGvEpW{tm@82rkX`{F*wxV)zSMhRx)rC_J>Z(sTru(LP zbMBqmlk1nHPgu6Gdi|Z6lS^*y-L>dLMMmImsr3`rXjx2YmmvHMIU&)$~^N)V#}|heG`$ z%@8|U{|uAy%U?}}amEjOv(6vc&#(HU^U?OwzF*g}zXrTnbm>N0hH`r*YidN3@rnI= ztJ`u60;SZpAHKb}IDEEu`;psii&Gay+_|I7Bfs@-zGvid=9;9t*Be`nPOwKYeC5(U z_Q!EeY=!&Li9ebmQ?0~SU49vK=+eecy(HgnlNL>K$+g*d=a!}KzT}fx{93$KygQl? z{FCO@`zdru;F9?4Vnb#~2$Q zIr3XFzIo1^n%>TUT!w$&EWW2q;h9l9_u=Z-zV3(1rOvJ8zO(l4k!KOt#OL-TrL{@? zS#kBoDwhrpE(hzoJJU=UpT+a(DbIe>9J;Z~R{Gd=skzTSu%(q1t1jJgI3r#y*N}VF zJ2hwS)ekJgeo0-s#w`(a>zZj7#}zFljnGh8rWFSm$`}~5o3qcen{Hh@^Wr+*t=;Tf z`+qAvPvP04?X=HNIhCbVgE7EELiFbCtPimf{~0p0d^S9soqbTtyH!R0&Zf?y!cPq| z6Pp$^X)yg2J(4-kX8Z2z`8pA?63Wr}8nsCh$CMB^jg%-p!FnCy;jsDTH>&P$1 zW`~=qA1A4sy*F$)&*ib!#?yf1*m=1SI|ELxNap+izRgMv#c^iS3r;`G%|3F?;BMyk zTa}r-QxCI=UB01N?(t{)BxTt{8}D5-yO})w8RK@w=8wN0m978K_v_ey1{aR-Fi)E+ z6N{Lm-yCkdIa7_}_>Nxo4;R?i-TuMtur;L3!v3Pt?DKs$c1sBP9`k+4X%}&%Wf$-6 zz<(*B2^<@X7utV&lr8pLE_LVD9WfKU*o<6Wxqozft8iR0GUAB{!@G+P63K_8EH4YY z&l0ws{HIKoG?@JdoXh*#Kwkt>J-X+sM z#W`9%e4few8Tt+FgR;#JSLw`RDZZ(9IU{{qhT&D0bEzeXmpQff9peABX?4#^^}Jcn zx%?L_;8(rA$9*Ml)oa%)OZHuQx@(?=N%xD%wUgOMz z*)PAc=su6p$@*!NWP7l{y7u!tzlxWkTjTj6UW*Idi{TV|bvHI?nx&kXquSjEA_@Y( z#jP8EFWS0d0bhE=hdJg^h9CY;>R7W*UYuo8#Id*g>ii;~%zx%qmh3`#1w9xp0Kac6}l<`R=W_UVdKA#pyOe8 z^9r|3J*>kr6zU%yMuyS)XL!^MKcWjv|V0b25XVs@e;ueC3 z^Y^Am{1b|PX1Q+GrSR)E<|UWBRl==$pB~*&k~B#{oIh{2WI^bnF55fhVYX+>!fx5k zPuHKH&yuNbZ?uB_nPraLO`AET?<1|!`jhhYk}{@F<6c}S_HgbbuiZ~l&pVwvbEiD* zO`(H?Jx^)&dVy%^UXT6Xrp;UKw>#+U_O}ANIivH+<{P>cD<@2rS$&Q-?!)^&_3Ng; z-%7rXQrYr*)10?;?04;tpHz9Ecd?;dc;XFLmH_dLE1DCxTQW<}W=MIw@&L2?90u#) zX(nMhtC-D$*wtltemw|apYLzCa7D)VwaZV7RINSxWy1lrGS|r`ifrb-ki1}Hu>Z`e zqvgh}wmkb-KFW6A@GPzU&mi=BrurmH-P9dII=S3`=ltY9P?1ui(<54L{9x6-ketYu zVd3K6w-q0m+^RkLIteP3x7VfSLq<{q5Ec&>OW_ZNos3Ug$fALZt}l!}>N;I4Bf zxy+d>{~$+%;eUqo#`8*>>h4+`#1_`>7OIH~xmYL8}` zj>lb&{?iBF?YQ0iRfO^E?H?uZV9l+Fdy?gwq( znsGB$rt-FsOG&}YmdruQw#k1{tud3GKeUdjA zZ!h()U3P2f)809Ss~k4%`5nT*z39)9UysY`7W!w+KXg(5M$~ipJv*j(%KX}xw0}Y< zmud&2cruZ+FrnOo8|nbmEQ?5gII?uxT*gpO{U^Ob4mZr?iDu*XMc&F@Ib z*z#BH#Z6~EueTl#`od;&w`HbHN)t?;+bz-mEXjYVb2bmZ%ET4C+HA$IoLX7_GaLxv zKeYPf;>^!6wd*{TvwK$F3lTf@_mY3n-u}Q_4L08&-dnuNbjkI3YC8HkI=RXv#hRVTEi@483pWYy*Syt|xn0LXj6H4Idrz_5czp8KQWXoGic>%0D_3Pryydx8 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 XFDH)&`)lzdT}Fqmq8ODMlpz2B_Sl29 diff --git a/doc/images/Thumbs.db b/doc/images/Thumbs.db deleted file mode 100644 index 7572ba63e468b4cf660c748cb4841fabb7e3f6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60928 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≫KRYGEG_jkT>;XnHd4tew(s`P*nynM$+3 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 #include +#include +#include +#include #include #include #include #include -#include -#include -#include - #include namespace boost diff --git a/include/boost/sort/block_indirect_sort/blk_detail/block.hpp b/include/boost/sort/block_indirect_sort/blk_detail/block.hpp index 9c14b61..c7a2571 100644 --- a/include/boost/sort/block_indirect_sort/blk_detail/block.hpp +++ b/include/boost/sort/block_indirect_sort/blk_detail/block.hpp @@ -14,6 +14,7 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_BLOCK_HPP #define __BOOST_SORT_PARALLEL_DETAIL_BLOCK_HPP +#include #include namespace boost diff --git a/include/boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp b/include/boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp index a4185b5..3feae2f 100644 --- a/include/boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp +++ b/include/boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp @@ -14,12 +14,14 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_MERGE_BLOCKS_HPP #define __BOOST_SORT_PARALLEL_DETAIL_MERGE_BLOCKS_HPP +#include #include -#include -#include #include #include #include +#include +#include + namespace boost { @@ -103,7 +105,7 @@ struct merge_blocks { this->merge_range_pos (rng_input); } - catch (std::bad_alloc &ba) + catch (std::bad_alloc ) { error = true; }; diff --git a/include/boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp b/include/boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp index 6b556bc..71a6488 100644 --- a/include/boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp +++ b/include/boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp @@ -15,10 +15,11 @@ #define __BOOST_SORT_PARALLEL_DETAIL_MOVE_BLOCKS_HPP #include -#include +#include #include #include #include +#include namespace boost { diff --git a/include/boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp b/include/boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp index b11993d..71c74e6 100644 --- a/include/boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp +++ b/include/boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp @@ -14,6 +14,7 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_PARALLEL_SORT_HPP #define __BOOST_SORT_PARALLEL_DETAIL_PARALLEL_SORT_HPP +#include #include #include #include @@ -159,7 +160,7 @@ parallel_sort //-------------------max_per_thread --------------------------- uint32_t nbits_size = (nbits64(sizeof(value_t))) >> 1; if (nbits_size > 5) nbits_size = 5; - max_per_thread = 1 << (18 - nbits_size); + max_per_thread = (size_t) 1 << (18 - nbits_size); uint32_t level = ((nbits64(nelem / max_per_thread)) * 3) / 2; diff --git a/include/boost/sort/block_indirect_sort/block_indirect_sort.hpp b/include/boost/sort/block_indirect_sort/block_indirect_sort.hpp index 31ce3fe..0b59120 100644 --- a/include/boost/sort/block_indirect_sort/block_indirect_sort.hpp +++ b/include/boost/sort/block_indirect_sort/block_indirect_sort.hpp @@ -13,15 +13,19 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_BLOCK_INDIRECT_SORT_HPP #define __BOOST_SORT_PARALLEL_DETAIL_BLOCK_INDIRECT_SORT_HPP +#include #include +#include +#include +#include + #include #include #include #include #include #include -#include -#include + // This value is the minimal number of threads for to use the // block_indirect_sort algorithm @@ -141,7 +145,7 @@ struct block_indirect_sort destroy(rglobal_buf); construct = false; }; - std::return_temporary_buffer(ptr); + std::free (ptr); ptr = nullptr; }; } @@ -223,7 +227,7 @@ block_indirect_sort uint32_t nbits_size = (nbits64(sizeof(value_t)) >> 1); if (nbits_size > 5) nbits_size = 5; - size_t max_per_thread = 1 << (18 - nbits_size); + size_t max_per_thread = (size_t) 1 << (18 - nbits_size); if (nelem < (max_per_thread) or nthread < 2) { @@ -233,8 +237,9 @@ block_indirect_sort }; //----------- creation of the temporary buffer -------------------- - ptr = std::get_temporary_buffer(Block_size * nthread).first; - if (ptr == nullptr) + ptr = reinterpret_cast + (std::malloc (Block_size * nthread * sizeof(value_t))); + if (ptr == nullptr) { bk.error = true; throw std::bad_alloc(); @@ -271,7 +276,7 @@ block_indirect_sort // thread local buffer for (uint32_t i = 0; i < nthread; ++i) { - auto f1 = [=, &vbuf]( ) + auto f1 = [=, &vbuf, this]( ) { bk.exec (vbuf[i], this->counter);}; vfuture[i] = std::async(std::launch::async, f1); }; @@ -322,7 +327,7 @@ void block_indirect_sort //------------------------------------------------------------------------- if (level_thread != 0) { - auto f1 = [=, &son_counter]( ) + auto f1 = [=, &son_counter, this]( ) { split_range (pos_index_mid, pos_index2, level_thread - 1); bscu::atomic_sub (son_counter, 1); @@ -334,7 +339,7 @@ void block_indirect_sort else { Iter_t mid = first + ((nblock >> 1) * Block_size); - auto f1 = [=, &son_counter]( ) + auto f1 = [=, &son_counter, this]( ) { parallel_sort_t (bk, mid, last); bscu::atomic_sub (son_counter, 1); @@ -364,7 +369,7 @@ void block_indirect_sort } else { - size_t level_thread = nbits64(nthread - 1) - 1; + uint32_t level_thread = nbits64 (nthread - 1) - 1; split_range(0, bk.nblock, level_thread - 1); if (bk.error) return; move_blocks_t k(bk); @@ -443,7 +448,7 @@ void block_indirect_sort(Iter_t first, Iter_t last) // //----------------------------------------------------------------------------- // function : block_indirect_sort -/// @brief invocation of block_indirtect_sort with 3 parameters. The third is +/// @brief invocation of block_indirtect_sort with 3 parameters. The third is /// the number of threads /// /// @param first : iterator to the first element of the range to sort @@ -460,7 +465,7 @@ void block_indirect_sort(Iter_t first, Iter_t last, uint32_t nthread) // //----------------------------------------------------------------------------- // function : block_indirect_sort -/// @brief invocation of block_indirtect_sort with 3 parameters. The third is +/// @brief invocation of block_indirtect_sort with 3 parameters. The third is /// the comparison object /// /// @param first : iterator to the first element of the range to sort @@ -479,7 +484,7 @@ void block_indirect_sort(Iter_t first, Iter_t last, Compare comp) // //----------------------------------------------------------------------------- // function : block_indirect_sort -/// @brief invocation of block_indirtect_sort with 4 parameters. +/// @brief invocation of block_indirtect_sort with 4 parameters. /// /// @param first : iterator to the first element of the range to sort /// @param last : iterator after the last element to the range to sort diff --git a/include/boost/sort/common/deque_cnc.hpp b/include/boost/sort/common/deque_cnc.hpp index eb3b31e..8445d50 100644 --- a/include/boost/sort/common/deque_cnc.hpp +++ b/include/boost/sort/common/deque_cnc.hpp @@ -14,13 +14,16 @@ #ifndef __TOOLS_DEQUE_CNC_HPP #define __TOOLS_DEQUE_CNC_HPP -#include +#include #include #include +#include +namespace boost +{ namespace sort { -namespace tools +namespace common { //########################################################################### @@ -61,7 +64,7 @@ protected: // VARIABLES //------------------------------------------------------------------------ deque_t dq; - mutable spinlock spl; + mutable spinlock_t spl; public: // @@ -94,7 +97,7 @@ public: //---------------------------------------------------------------------- void clear(void) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.clear(); }; // @@ -107,7 +110,7 @@ public: void swap(deque_cnc & A) noexcept { if (this == &A) return; - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.swap(A.dq); }; // @@ -123,7 +126,7 @@ public: //------------------------------------------------------------------------ size_type size(void) const noexcept { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); return dq.size(); }; // @@ -134,7 +137,7 @@ public: //------------------------------------------------------------------------ size_type max_size(void) const noexcept { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); return (dq.max_size()); }; // @@ -150,7 +153,7 @@ public: //------------------------------------------------------------------------ void shrink_to_fit() { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.shrink_to_fit(); }; // @@ -161,7 +164,7 @@ public: //------------------------------------------------------------------------ bool empty(void) const noexcept { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); return (dq.empty()); }; //--------------------------------------------------------------------------- @@ -172,7 +175,7 @@ public: //--------------------------------------------------------------------------- void push_back(const value_type & D) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.push_back(D); }; @@ -184,7 +187,7 @@ public: template void emplace_back(Args && ... args) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.emplace_back(std::forward (args) ...); }; //------------------------------------------------------------------------ @@ -197,7 +200,7 @@ public: template deque_cnc & push_back(const std::deque & D) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); for (size_type i = 0; i < D.size(); ++i) dq.push_back(D[i]); return *this; @@ -211,7 +214,7 @@ public: //------------------------------------------------------------------------ deque_cnc & push_back(std::deque && D) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); for (size_type i = 0; i < D.size(); ++i) dq.emplace_back(std::move(D[i])); return *this; @@ -223,7 +226,7 @@ public: //----------------------------------------------------------------------- void pop_back(void) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.pop_back(); }; // @@ -237,7 +240,7 @@ public: //------------------------------------------------------------------------ bool pop_copy_back(value_type & P) { //-------------------------- begin ----------------------------- - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); if (dq.size() == 0) return false; P = dq.back(); dq.pop_back(); @@ -254,7 +257,7 @@ public: //------------------------------------------------------------------------ bool pop_move_back(value_type & P) { //-------------------------- begin ----------------------------- - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); if (dq.size() == 0) return false; P = std::move(dq.back()); dq.pop_back(); @@ -268,7 +271,7 @@ public: //------------------------------------------------------------------------ void push_front(const value_type & D) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.push_front(D); }; @@ -280,7 +283,7 @@ public: template void emplace_front(Args && ... args) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.emplace_front(std::forward (args) ...); }; //------------------------------------------------------------------------ @@ -293,7 +296,7 @@ public: template deque_cnc & push_front(const std::deque & V1) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); for (size_type i = 0; i < V1.size(); ++i) dq.push_front(V1[i]); return *this; @@ -307,7 +310,7 @@ public: //----------------------------------------------------------------------- deque_cnc & push_front(std::deque && V1) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); for (size_type i = 0; i < V1.size(); ++i) dq.emplace_front(std::move(V1[i])); return *this; @@ -319,7 +322,7 @@ public: //----------------------------------------------------------------------- void pop_front(void) { - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); dq.pop_front(); }; // @@ -333,7 +336,7 @@ public: //----------------------------------------------------------------------- bool pop_copy_front(value_type & P) { //-------------------------- begin ----------------------------- - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); if (dq.size() == 0) return false; P = dq.front(); dq.pop_front(); @@ -350,7 +353,7 @@ public: //------------------------------------------------------------------------ bool pop_move_front(value_type & P) { //-------------------------- begin ----------------------------- - std::lock_guard < spinlock > S(spl); + std::lock_guard < spinlock_t > S(spl); if (dq.size() == 0) return false; P = std::move(dq.front()); dq.pop_front(); @@ -360,7 +363,8 @@ public: // end class deque_cnc //*************************************************************************** -};// end namespace tools +};// end namespace common };// end namespace sort +};// end namespace boost //*************************************************************************** #endif diff --git a/include/boost/sort/common/indirect.hpp b/include/boost/sort/common/indirect.hpp index a55ef82..6b9b116 100644 --- a/include/boost/sort/common/indirect.hpp +++ b/include/boost/sort/common/indirect.hpp @@ -129,7 +129,7 @@ static void sort_index(Iter_t global_first, std::vector &index) }; }; -template > +template > static void indirect_sort(func method, Iter_t first, Iter_t last, Compare comp) { auto nelem = (last - first); diff --git a/include/boost/sort/common/int_array.hpp b/include/boost/sort/common/int_array.hpp index 22c3b0c..dfc339b 100644 --- a/include/boost/sort/common/int_array.hpp +++ b/include/boost/sort/common/int_array.hpp @@ -15,6 +15,7 @@ #ifndef __BOOST_SORT_COMMON_INT_ARRAY_HPP #define __BOOST_SORT_COMMON_INT_ARRAY_HPP +#include #include #include diff --git a/include/boost/sort/common/merge_block.hpp b/include/boost/sort/common/merge_block.hpp index 9a7b118..1a7eb90 100644 --- a/include/boost/sort/common/merge_block.hpp +++ b/include/boost/sort/common/merge_block.hpp @@ -14,6 +14,7 @@ #ifndef __BOOST_SORT_COMMON_MERGE_BLOCK_HPP #define __BOOST_SORT_COMMON_MERGE_BLOCK_HPP +#include #include #include #include diff --git a/include/boost/sort/common/merge_four.hpp b/include/boost/sort/common/merge_four.hpp index edfb2ff..6b791be 100644 --- a/include/boost/sort/common/merge_four.hpp +++ b/include/boost/sort/common/merge_four.hpp @@ -13,12 +13,14 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_MERGE_FOUR_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_MERGE_FOUR_HPP -#include -#include +#include #include #include #include #include +#include +#include + namespace boost { diff --git a/include/boost/sort/common/merge_vector.hpp b/include/boost/sort/common/merge_vector.hpp index 84afea5..aaba93d 100644 --- a/include/boost/sort/common/merge_vector.hpp +++ b/include/boost/sort/common/merge_vector.hpp @@ -14,12 +14,14 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_MERGE_VECTOR_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_MERGE_VECTOR_HPP -#include + +#include #include #include #include #include #include +#include namespace boost { @@ -99,7 +101,7 @@ void merge_level4(range dest, std::vector > &v_input, template void uninit_merge_level4(range dest, std::vector > &v_input, - std::vector > &v_output, Compare comp) + std::vector > &v_output, Compare comp) { typedef range range1_t; typedef util::value_iter type1; diff --git a/include/boost/sort/common/pivot.hpp b/include/boost/sort/common/pivot.hpp index 3fa924b..6422a34 100644 --- a/include/boost/sort/common/pivot.hpp +++ b/include/boost/sort/common/pivot.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_COMMON_PIVOT_HPP #define __BOOST_SORT_COMMON_PIVOT_HPP +#include #include namespace boost diff --git a/include/boost/sort/common/range.hpp b/include/boost/sort/common/range.hpp index 072d98a..73dbd5a 100644 --- a/include/boost/sort/common/range.hpp +++ b/include/boost/sort/common/range.hpp @@ -13,13 +13,15 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_RANGE_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_RANGE_HPP -#include -#include -#include +#include #include #include #include #include +#include +#include +#include + namespace boost { diff --git a/include/boost/sort/common/rearrange.hpp b/include/boost/sort/common/rearrange.hpp index 5c65c4f..fe48ee6 100644 --- a/include/boost/sort/common/rearrange.hpp +++ b/include/boost/sort/common/rearrange.hpp @@ -13,13 +13,14 @@ #ifndef __BOOST_SORT_COMMON_REARRANGE_HPP #define __BOOST_SORT_COMMON_REARRANGE_HPP -//#include -#include +#include #include #include #include #include #include +#include + namespace boost { diff --git a/include/boost/sort/common/scheduler.hpp b/include/boost/sort/common/scheduler.hpp index 33074a4..6e54db8 100644 --- a/include/boost/sort/common/scheduler.hpp +++ b/include/boost/sort/common/scheduler.hpp @@ -14,15 +14,16 @@ #ifndef __BOOST_SORT_COMMON_SCHEDULER_HPP #define __BOOST_SORT_COMMON_SCHEDULER_HPP -#include -#include -#include +#include #include #include #include #include #include #include +#include +#include +#include namespace boost { @@ -55,14 +56,21 @@ struct scheduler // D E F I N I T I O N S //----------------------------------------------------------------------- typedef std::scoped_allocator_adaptor scoped_alloc; + template + using alloc_t = typename std::allocator_traits:: + template rebind_alloc; + + typedef std::deque deque_t; typedef typename deque_t::iterator it_deque; typedef std::thread::id key_t; typedef std::hash hash_t; typedef std::equal_to equal_t; typedef std::unique_lock lock_t; - typedef std::unordered_map map_t; + typedef std::pair pair_t; + + typedef std::unordered_map > map_t; typedef typename map_t::iterator it_map; //----------------------------------------------------------------------- @@ -184,7 +192,7 @@ struct scheduler //-------------------------------------------------------------------- // Metaprogramming //-------------------------------------------------------------------- - typedef value_iter value2_t; + typedef util::value_iter value2_t; static_assert (std::is_same< Func_t, value2_t >::value, "Incompatible iterators\n"); diff --git a/include/boost/sort/common/sort_basic.hpp b/include/boost/sort/common/sort_basic.hpp index 68a6f54..35121ae 100644 --- a/include/boost/sort/common/sort_basic.hpp +++ b/include/boost/sort/common/sort_basic.hpp @@ -13,10 +13,7 @@ #ifndef __BOOST_SORT_COMMON_SORT_BASIC_HPP #define __BOOST_SORT_COMMON_SORT_BASIC_HPP -//#include -#include -#include -#include +#include #include #include #include @@ -24,6 +21,9 @@ #include #include #include +#include +#include +#include namespace boost { diff --git a/include/boost/sort/common/spinlock.hpp b/include/boost/sort/common/spinlock.hpp index 450ba6b..5944e21 100644 --- a/include/boost/sort/common/spinlock.hpp +++ b/include/boost/sort/common/spinlock.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_SPINLOCK_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_SPINLOCK_HPP +#include #include #include #include diff --git a/include/boost/sort/common/stack_cnc.hpp b/include/boost/sort/common/stack_cnc.hpp index d4d6e53..e040b1d 100644 --- a/include/boost/sort/common/stack_cnc.hpp +++ b/include/boost/sort/common/stack_cnc.hpp @@ -13,8 +13,10 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_STACK_CNC_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_STACK_CNC_HPP -#include +#include #include +#include + namespace boost { diff --git a/include/boost/sort/common/time_measure.hpp b/include/boost/sort/common/time_measure.hpp index ef00dd4..2660c7b 100644 --- a/include/boost/sort/common/time_measure.hpp +++ b/include/boost/sort/common/time_measure.hpp @@ -14,6 +14,7 @@ #ifndef __BOOST_SORT_PARALLEL_TOOLS_TIME_MEASURE_HPP #define __BOOST_SORT_PARALLEL_TOOLS_TIME_MEASURE_HPP +#include #include namespace boost diff --git a/include/boost/sort/common/util/algorithm.hpp b/include/boost/sort/common/util/algorithm.hpp index db7607a..abe2d99 100644 --- a/include/boost/sort/common/util/algorithm.hpp +++ b/include/boost/sort/common/util/algorithm.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_COMMON_UTIL_ALGORITHM_HPP #define __BOOST_SORT_COMMON_UTIL_ALGORITHM_HPP +#include #include #include #include diff --git a/include/boost/sort/common/util/atomic.hpp b/include/boost/sort/common/util/atomic.hpp index 15906fe..00af766 100644 --- a/include/boost/sort/common/util/atomic.hpp +++ b/include/boost/sort/common/util/atomic.hpp @@ -12,6 +12,7 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_UTIL_ATOMIC_HPP #define __BOOST_SORT_PARALLEL_DETAIL_UTIL_ATOMIC_HPP +#include #include #include #include diff --git a/include/boost/sort/common/util/circular_buffer.hpp b/include/boost/sort/common/util/circular_buffer.hpp index 2fc7e97..3778e66 100644 --- a/include/boost/sort/common/util/circular_buffer.hpp +++ b/include/boost/sort/common/util/circular_buffer.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_COMMON_UTIL_CIRCULAR_BUFFER_HPP #define __BOOST_SORT_COMMON_UTIL_CIRCULAR_BUFFER_HPP +#include #include #include #include @@ -70,7 +71,7 @@ struct circular_buffer circular_buffer(void) : ptr(nullptr), nelem(0), first_pos(0), initialized(false) { - ptr = std::get_temporary_buffer < Value_t > (NMAX).first; + ptr = static_cast (std::malloc (NMAX * sizeof(Value_t))); if (ptr == nullptr) throw std::bad_alloc(); }; // @@ -84,7 +85,7 @@ struct circular_buffer { for (size_t i = 0; i < NMAX; ++i) (ptr + i)->~Value_t(); initialized = false; }; - std::return_temporary_buffer(ptr); + std::free(static_cast (ptr)); } ; // diff --git a/include/boost/sort/common/util/insert.hpp b/include/boost/sort/common/util/insert.hpp index 219fa8a..485e25b 100644 --- a/include/boost/sort/common/util/insert.hpp +++ b/include/boost/sort/common/util/insert.hpp @@ -13,10 +13,8 @@ #ifndef __BOOST_SORT_COMMON_UTIL_INSERT_HPP #define __BOOST_SORT_COMMON_UTIL_INSERT_HPP -//#include -#include -#include -#include + +#include #include #include #include @@ -24,6 +22,9 @@ #include #include #include +#include +#include +#include namespace boost { diff --git a/include/boost/sort/common/util/merge.hpp b/include/boost/sort/common/util/merge.hpp index 5fc90c0..943e979 100644 --- a/include/boost/sort/common/util/merge.hpp +++ b/include/boost/sort/common/util/merge.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_COMMON_UTIL_MERGE_HPP #define __BOOST_SORT_COMMON_UTIL_MERGE_HPP +#include #include #include #include diff --git a/include/boost/sort/common/util/search.hpp b/include/boost/sort/common/util/search.hpp index fbe056e..f051666 100644 --- a/include/boost/sort/common/util/search.hpp +++ b/include/boost/sort/common/util/search.hpp @@ -9,8 +9,10 @@ #ifndef __BOOST_SORT_COMMON_SEARCH_HPP #define __BOOST_SORT_COMMON_SEARCH_HPP -#include +#include #include +#include + namespace boost { diff --git a/include/boost/sort/common/util/traits.hpp b/include/boost/sort/common/util/traits.hpp index 68e5cf0..622a99c 100644 --- a/include/boost/sort/common/util/traits.hpp +++ b/include/boost/sort/common/util/traits.hpp @@ -12,6 +12,7 @@ #ifndef __BOOST_SORT_COMMON_UTIL_TRAITS_HPP #define __BOOST_SORT_COMMON_UTIL_TRAITS_HPP +#include #include #include #include diff --git a/include/boost/sort/flat_stable_sort/flat_stable_sort.hpp b/include/boost/sort/flat_stable_sort/flat_stable_sort.hpp index ac9c517..8ebfdfb 100644 --- a/include/boost/sort/flat_stable_sort/flat_stable_sort.hpp +++ b/include/boost/sort/flat_stable_sort/flat_stable_sort.hpp @@ -13,6 +13,14 @@ #ifndef __BOOST_SORT_FLAT_STABLE_SORT_HPP #define __BOOST_SORT_FLAT_STABLE_SORT_HPP +#include +#include +#include +#include +#include +#include +#include + #include #include #include @@ -21,12 +29,7 @@ #include #include -#include -#include -#include -#include -#include -#include + namespace boost { @@ -299,7 +302,7 @@ inline void indirect_flat_stable_sort (Iter_t first, Iter_t last, Compare comp = Compare()) { typedef typename std::vector::iterator itx_iter; - typedef common::less_ptr_no_null itx_comp; + typedef common::less_ptr_no_null itx_comp; common::indirect_sort ( flat_stable_sort, first, last, comp); }; diff --git a/include/boost/sort/heap_sort/heap_sort.hpp b/include/boost/sort/heap_sort/heap_sort.hpp deleted file mode 100644 index 9e89d00..0000000 --- a/include/boost/sort/heap_sort/heap_sort.hpp +++ /dev/null @@ -1,215 +0,0 @@ -//---------------------------------------------------------------------------- -/// @file heap_sort.hpp -/// @brief Insertion Sort algorithm -/// -/// @author Copyright (c) 2016 Francisco Jose Tapia (fjtapia@gmail.com )\n -/// Distributed under the Boost Software License, Version 1.0.\n -/// ( See accompanying file LICENSE_1_0.txt or copy at -/// http://www.boost.org/LICENSE_1_0.txt ) -/// @version 0.1 -/// -/// @remarks -//----------------------------------------------------------------------------- -#ifndef __BOOST_SORT_INTROSORT_DETAIL_HEAP_SORT_HPP -#define __BOOST_SORT_INTROSORT_DETAIL_HEAP_SORT_HPP - -#include -#include -#include -#include -#include // for std::swap -#include - -namespace boost -{ -namespace sort -{ -namespace heap_detail -{ -namespace bscu = boost::sort::common::util; -// -//--------------------------------------------------------------------------- -// struct : heap_sort -/// @brief : Heap sort algorithm -/// @remarks This algorithm is O(NLogN) -//--------------------------------------------------------------------------- -template < class Iter_t, class Compare > -struct heap_sort -{ - typedef bscu::value_iter value_t; - - // - //------------------------------------------------------------------------ - // function : sort3 - /// @brief Sort and signal the changes of three values - /// @param val_0 : first value to compare - /// @param val_1 : second value to compare - /// @param val_2 : third value to compare - /// @param [out] bool_0 : if true indicates val_0 had been changed - /// @param [out] bool_1 : if true indicates val_1 had been changed - /// @param [out] bool_2 : if true indicates val_2 had been changed - /// @return if true , some value had changed - /// @remarks - //------------------------------------------------------------------------ - bool sort3 (value_t &val_0, value_t &val_1, value_t &val_2, bool &bool_0, - bool &bool_1, bool &bool_2) - { - bool_0 = bool_1 = bool_2 = false; - int value = 0; - if (val_0 < val_1) value += 4; - if (val_1 < val_2) value += 2; - if (val_0 < val_2) value += 1; - - switch (value) - { - case 0: break; - - case 2: - std::swap (val_1, val_2); - bool_1 = bool_2 = true; - break; - - case 3: - if (not(val_0 > val_1)) { - std::swap (val_0, val_2); - bool_0 = bool_2 = true; - } - else - { - auto aux = std::move (val_2); - val_2 = std::move (val_1); - val_1 = std::move (val_0); - val_0 = std::move (aux); - bool_0 = bool_1 = bool_2 = true; - }; - break; - - case 4: - std::swap (val_0, val_1); - bool_0 = bool_1 = true; - break; - - case 5: - if (val_1 > val_2) { - auto aux = std::move (val_0); - val_0 = std::move (val_1); - val_1 = std::move (val_2); - val_2 = std::move (aux); - bool_0 = bool_1 = bool_2 = true; - } - else - { - std::swap (val_0, val_2); - bool_0 = bool_2 = true; - }; - break; - - case 7: - std::swap (val_0, val_2); - bool_0 = bool_2 = true; - break; - - default: abort ( ); - }; - return (bool_0 or bool_1 or bool_2); - }; - // - //----------------------------------------------------------------------- - // function : make_heap - /// @brief Make the heap for to extract the sorted elements - /// @param first : iterator to the first element of the range - /// @param nelem : number of lements of the range - /// @param comp : object for to compare two elements - /// @remarks This algorithm is O(NLogN) - //------------------------------------------------------------------------ - void make_heap (Iter_t first, size_t nelem, Compare comp) - { - size_t pos_father, pos_son; - Iter_t iter_father = first, iter_son = first; - bool sw = false; - - for (size_t i = 1; i < nelem; ++i) - { - pos_father = i; - iter_father = first + i; - sw = false; - do - { - iter_son = iter_father; - pos_son = pos_father; - pos_father = (pos_son - 1) >> 1; - iter_father = first + pos_father; - if ((sw = comp (*iter_father, *iter_son))) - std::swap (*iter_father, *iter_son); - } while (sw and pos_father != 0); - }; - }; - // - //------------------------------------------------------------------------ - // function : heap_sort - /// @brief : Heap sort algorithm - /// @param first: iterator to the first element of the range - /// @param last : iterator to the next element of the last in the range - /// @param comp : object for to do the comparison between the elements - /// @remarks This algorithm is O(NLogN) - //------------------------------------------------------------------------ - heap_sort (Iter_t first, Iter_t last, Compare comp) - { - assert ((last - first) >= 0); - size_t nelem = last - first; - if (nelem < 2) return; - - //-------------------------------------------------------------------- - // Creating the initial heap - //-------------------------------------------------------------------- - make_heap (first, nelem, comp); - - //-------------------------------------------------------------------- - // Sort the heap - //-------------------------------------------------------------------- - size_t pos_father, pos_son; - Iter_t iter_father = first, iter_son = first; - - bool sw = false; - for (size_t i = 1; i < nelem; ++i) - { - std::swap (*first, *(first + (nelem - i))); - pos_father = 0; - pos_son = 1; - iter_father = first; - sw = true; - while (sw and pos_son < (nelem - i)) - { - // if the father have two sons must select the bigger - iter_son = first + pos_son; - if ((pos_son + 1) < (nelem - i) and - comp (*iter_son, *(iter_son + 1))) - { - ++pos_son; - ++iter_son; - }; - if ((sw = comp (*iter_father, *iter_son))) - std::swap (*iter_father, *iter_son); - pos_father = pos_son; - iter_father = iter_son; - pos_son = (pos_father << 1) + 1; - }; - }; - }; -}; // End class heap_sort -}; // end namespace heap_sort - -namespace bscu = boost::sort::common::util; - -template < class Iter_t, typename Compare = bscu::compare_iter < Iter_t > > -void heap_sort (Iter_t first, Iter_t last, Compare comp = Compare()) -{ - heap_detail::heap_sort ( first, last, comp); -} -// -//**************************************************************************** -}; // End namespace sort -}; // End namespace boost -//**************************************************************************** -// -#endif diff --git a/include/boost/sort/insert_sort/insert_sort.hpp b/include/boost/sort/insert_sort/insert_sort.hpp index d40302a..c03a96f 100644 --- a/include/boost/sort/insert_sort/insert_sort.hpp +++ b/include/boost/sort/insert_sort/insert_sort.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_INTROSORT_DETAIL_INSERT_SORT_HPP #define __BOOST_SORT_INTROSORT_DETAIL_INSERT_SORT_HPP +#include #include #include #include diff --git a/include/boost/sort/parallel_stable_sort/parallel_stable_sort.hpp b/include/boost/sort/parallel_stable_sort/parallel_stable_sort.hpp index 1a09898..9f1ada1 100644 --- a/include/boost/sort/parallel_stable_sort/parallel_stable_sort.hpp +++ b/include/boost/sort/parallel_stable_sort/parallel_stable_sort.hpp @@ -88,7 +88,7 @@ struct parallel_stable_sort //----------------------------------------------------------------------------- void destroy_all() { - if (ptr != nullptr) std::return_temporary_buffer(ptr); + if (ptr != nullptr) std::free (ptr); }; // //----------------------------------------------------------------------------- @@ -157,7 +157,9 @@ parallel_stable_sort return; }; - ptr = std::get_temporary_buffer(nptr).first; + ptr = reinterpret_cast + (std::malloc (nptr * sizeof(value_t))); + if (ptr == nullptr) throw std::bad_alloc(); //--------------------------------------------------------------------- diff --git a/include/boost/sort/sample_sort/sample_sort.hpp b/include/boost/sort/sample_sort/sample_sort.hpp index ded1781..df1a85b 100644 --- a/include/boost/sort/sample_sort/sample_sort.hpp +++ b/include/boost/sort/sample_sort/sample_sort.hpp @@ -13,6 +13,7 @@ #ifndef __BOOST_SORT_PARALLEL_DETAIL_SAMPLE_SORT_HPP #define __BOOST_SORT_PARALLEL_DETAIL_SAMPLE_SORT_HPP +#include #include #include #include @@ -288,7 +289,9 @@ sample_sort } else { - value_t *ptr = std::get_temporary_buffer(nelem).first; + value_t * ptr = reinterpret_cast + (std::malloc (nelem * sizeof(value_t))); + if (ptr == nullptr) throw std::bad_alloc(); owner = true; global_buf = range_buf(ptr, ptr + nelem); @@ -331,7 +334,7 @@ void sample_sort::destroy_all(void) construct = false; } if (global_buf.first != nullptr and owner) - std::return_temporary_buffer(global_buf.first); + std::free(global_buf.first); } // //----------------------------------------------------------------------------- @@ -370,7 +373,7 @@ void sample_sort::initial_configuration(void) for (uint32_t i = 0; i < nthread; ++i) { - auto func = [=]() + auto func = [=, this]() { bss::spinsort (vmem_thread[i].first, vmem_thread[i].last, comp, diff --git a/include/boost/sort/spinsort/spinsort.hpp b/include/boost/sort/spinsort/spinsort.hpp index 0e9f2d5..726341b 100644 --- a/include/boost/sort/spinsort/spinsort.hpp +++ b/include/boost/sort/spinsort/spinsort.hpp @@ -13,12 +13,8 @@ #ifndef __BOOST_SORT_PARALLEL_ALGORITHM_SPIN_SORT_HPP #define __BOOST_SORT_PARALLEL_ALGORITHM_SPIN_SORT_HPP -//#include -#include -#include -#include -#include -#include + +#include #include #include #include @@ -26,6 +22,12 @@ #include #include #include +#include +#include +#include +#include +#include + namespace boost { @@ -82,7 +84,7 @@ static void sort_range_sort (const range &rng_data, //----------------------------------------------------------------------------- template static void insert_partial_sort (Iter1_t first, Iter1_t mid, Iter1_t last, - Compare comp, const range &rng_aux) + Compare comp, const range &rng_aux) { //------------------------------------------------------------------------ // metaprogram @@ -416,7 +418,7 @@ public: destroy(range(ptr, ptr + nptr)); construct = false; }; - if (owner and ptr != nullptr) std::return_temporary_buffer(ptr); + if (owner and ptr != nullptr) std::free (ptr); }; }; //---------------------------------------------------------------------------- @@ -477,7 +479,9 @@ spinsort if (ptr == nullptr) { - ptr = std::get_temporary_buffer(nptr).first; + ptr = reinterpret_cast + (std::malloc (nptr * sizeof(value_t))); + if (ptr == nullptr) throw std::bad_alloc(); owner = true; }; diff --git a/test/list.txt b/test/list.txt deleted file mode 100644 index 0162042..0000000 --- a/test/list.txt +++ /dev/null @@ -1,15 +0,0 @@ -CMakeLists.txt -float_sort_test.cpp -integer_sort_test.cpp -Jamfile.v2 -list.txt -sort_detail_test.cpp -string_sort_test.cpp -test_block_indirect_sort.cpp -test_flat_stable_sort.cpp -test_insert_sort.cpp -test.log -test_parallel_stable_sort.cpp -test_pdqsort.cpp -test_sample_sort.cpp -test_spinsort.cpp diff --git a/test/test.log b/test/test.log deleted file mode 100644 index e529dce..0000000 --- a/test/test.log +++ /dev/null @@ -1,37 +0,0 @@ - -Performing configuration checks - - - symlinks supported : yes (cached) -...patience... -...patience... -...found 2544 targets... -...updating 20 targets... -compile-c-c++ ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort_test.obj -integer_sort_test.cpp -msvc.link ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe -msvc.manifest ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.exe -testing.capture-output ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.run - 1 file(s) copied. -**passed** ..\..\..\bin.v2\libs\sort\test\integer_sort.test\msvc-12.0\debug\threading-multi\integer_sort.test -compile-c-c++ ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort_test.obj -float_sort_test.cpp -msvc.link ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe -msvc.manifest ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.exe -testing.capture-output ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.run - 1 file(s) copied. -**passed** ..\..\..\bin.v2\libs\sort\test\float_sort.test\msvc-12.0\debug\threading-multi\float_sort.test -compile-c-c++ ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort_test.obj -string_sort_test.cpp -msvc.link ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe -msvc.manifest ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.exe -testing.capture-output ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.run - 1 file(s) copied. -**passed** ..\..\..\bin.v2\libs\sort\test\string_sort.test\msvc-12.0\debug\threading-multi\string_sort.test -compile-c-c++ ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail_test.obj -sort_detail_test.cpp -msvc.link ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe -msvc.manifest ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.exe -testing.capture-output ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.run - 1 file(s) copied. -**passed** ..\..\..\bin.v2\libs\sort\test\sort_detail.test\msvc-12.0\debug\threading-multi\sort_detail.test -...updated 20 targets...