From 0ec1d9460001b2aee1681350754edd5639c8c409 Mon Sep 17 00:00:00 2001 From: macocci7 Date: Thu, 18 Apr 2024 18:06:50 +0900 Subject: [PATCH] Update PHPUnit to PHPUnit10 --- .github/workflows/tag_meged_pull_request.yml | 2 +- .github/workflows/test_pull_request.yml | 14 ++++---- .gitignore | 3 +- README.md | 16 ++++----- bin/TestAndLint.sh | 2 +- composer.json | 10 +++--- examples/AdjustDisplayByArray.php | 2 +- examples/AdjustDisplayByMethods.php | 2 +- examples/AdjustDisplayByNeon.php | 2 +- examples/BasicUsage.php | 2 +- examples/BoxplotExampleCase.php | 2 +- examples/DetmersReidBoxplot2023.php | 4 +-- examples/MultipleDataSet.php | 2 +- examples/TransparentBackground.php | 2 +- examples/img/BoxplotExampleCase.png | Bin 16211 -> 14787 bytes phpmd.xml | 1 + tests/AnalyzerTest.php | 29 +++++----------- tests/Helpers/ConfigTest.php | 11 ++---- tests/Traits/JudgeTraitTest.php | 34 +++++-------------- 19 files changed, 54 insertions(+), 86 deletions(-) diff --git a/.github/workflows/tag_meged_pull_request.yml b/.github/workflows/tag_meged_pull_request.yml index 5739c59..044bba3 100644 --- a/.github/workflows/tag_meged_pull_request.yml +++ b/.github/workflows/tag_meged_pull_request.yml @@ -23,7 +23,7 @@ jobs: tools: composer:v2 - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/test_pull_request.yml b/.github/workflows/test_pull_request.yml index 698327c..b72af4f 100644 --- a/.github/workflows/test_pull_request.yml +++ b/.github/workflows/test_pull_request.yml @@ -15,7 +15,7 @@ jobs: tools: composer:v2 - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -63,12 +63,12 @@ jobs: tools: composer:v2 - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '14.x' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -126,12 +126,12 @@ jobs: tools: composer:v2 - name: Set up Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '14.x' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -139,7 +139,7 @@ jobs: run: composer install --no-interaction - name: Update PHPUnit for Code Coverage - run: composer require phpunit/phpunit:^9.6 phploc/phploc:* sebastian/version:* --with-all-dependencies + run: composer require phpunit/phpunit:^10.5 sebastian/version:* --with-all-dependencies - name: PHP Lint run: ./vendor/bin/parallel-lint src tests examples @@ -147,4 +147,4 @@ jobs: - name: Unit tests run: | mkdir -p build/logs - ./vendor/bin/phpunit ./tests/ --coverage-clover build/logs/clover.xml + XDEBUG_MODE=coverage ./vendor/bin/phpunit ./tests/ --coverage-clover build/logs/clover.xml --coverage-filter=./src/ diff --git a/.gitignore b/.gitignore index 6989baa..5819720 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ - +composer.lock +.php-version /vendor /.phpunit.cache .phpunit.result.cache diff --git a/README.md b/README.md index d6fa733..b38c67a 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ composer require macocci7/php-boxplot ```php =8.1", + "intervention/image": "^3.5", + "macocci7/php-frequency-table": "1.3.0", "fakerphp/faker": "^1.22", "nette/neon": "^3.4" }, "require-dev": { "squizlabs/php_codesniffer": "^3.7", - "phpunit/phpunit": "^9.6", + "phpunit/phpunit": "^10.5", "phpmd/phpmd": "^2.15", "phpstan/phpstan": "^1.10", - "phploc/phploc": "^7.0", "php-parallel-lint/php-parallel-lint": "^1.3" }, "license": "MIT", diff --git a/examples/AdjustDisplayByArray.php b/examples/AdjustDisplayByArray.php index 29e5fed..359e422 100644 --- a/examples/AdjustDisplayByArray.php +++ b/examples/AdjustDisplayByArray.php @@ -1,6 +1,6 @@ qm4F8gzRKz#=c}2ODZ9|F_w@m zJ6VPdGjpF)pYQj3|9;PNznRI?wAo&-Zb@-^X!WFZ6ZQ=uVzL2|*B@ zhPsL&1d*FV5Lq1cad5;(g7Y1Cqjb5ca}$CpV`+{Yj)A|q9n}qWASn1U1VucBARIUp zu>?W>q7bxV4?!~EJIoK#kp^<$#PK^?YAO(s^e-D#m;jEPc%W|K3*Nye!Ot)ETYV5D z&8MMq)A-@|`XnsW7@M)Vwf`+er3M0*>^D3v}rcYd$=hKMPzMj(gUGd@t z$IG3((kWtMi`d-(wUiVwm*&L;F|keQ#gJw@HI2^HI8u+!7ozFFySgOhRq&R;SONam zzTHX=L87c=G!WE!_y2f8xRecol&)J;7kpZ|{Ns!%{7OO}^Xp~z)8HDSW8<|>rcz{F zR#kbU@t8~YWRNKB5n+_`+D$!v{z#{C9j-s^c~jCr5e|M69zXXxEgS2uu2H9SFAVEQ zW#qbKj-gk5oihrAu@_v6xwoDPf96{S& z{M}j)gP*83TS3&v2nhA$!{NrIQam%H!Bf9@>==)+$-+9)#$pV9bmXUDsH|KX+8n`K zTr1JfH+Ah!|QL0zqf!6?0g(?3{rZmrEv`@gTjo|6;+7lu2xn$ikX;U?)aba zh*AK{llMw;cd>g}%KKqsW!XSet#|=}RAc?PGH~c(lyXV2t3gmuf*fb_w&M#o3Mej{ z{1H70x1uJ$p*UHLlFbr1C8^TR=Ec5&+ZQZPx9EtZi-J$V^IG|D{b$C%kp75deez_S zfi$EJH31$e%d2-UF8@{oYr&pH$inbGPKHXBd8R2S0lVFO2p4`KbgBaSG>qTRD(p#f z$F7u`DBH2dU3vGqKY-dig3da`Bj=pZd5nK!twd33s-(x5VPP~|Dbq=d$y=*#Gy8!{ z^BOIC>pO1kk!MQa_c?yaaL_Nmf8|r_VTD4cMLj&%-bpP&n!D?U^8vD0Op9qzSugY6 z?}cPN{VrLrB!&aV$#zr5C- z4E25UB}Qi`L65T*8FXy{v@O-L%)ZKZ>2vYNkK$n~M$)OWQhIudVa91v82Wo*%r2q1M$X8cbFp7>$e@10~b=GV8Pea48r42IBhE?=qeAC<1Mj_MR^fiNb;q$AjeOXnosRjPVdO)#TI?f zdZRQ+^wMW$LH{A0IlnQdgY84v-Pu=(6bj^*!0-$X>2aaQTwL7R9$&*9^z8@AkC^Fz zK(Fy^ZcvY}an^ak>xwS1DJgM_F3F5wMfR!Q@OLW%(K;30X#MONYpQg0wtE8-dCp_> zfjY)oOtrij_hx0qk`$*sX|l0*78eUk^YbTHdNfYbik}=E9j)X%_T&N@?N6}G5aTn` zO41&-@uht}fk`HmZFP`)=51FKyG?w|{RUS;el``Yia729Jt!w6xZpVRfxq%pYSj zv=9)*bv{)t=xMJaEH8XFS01InzKP~J z8$T7cpXdDT>syB#?@K!E2!@CbE=71k4HGsVZ_yE%_W@OCGUfN<}K z^y1y+jKCFSW>#9-doIE+We)lAiyFaOpEbiaL&PM)LxVA{Ujf_{a>(ks;c+K52H)@q z$pm~W+zj7Ouc-U()BSLLdJ{bto3+eiXceMFBy29OYzkJyXcRx)V zd6wEQ{6cN5|E{^2IF|Cb;Gp%>o*qJlG*x$(O!+AGfZRq|oLwQ*5CrsFUew`+Hvn#a z0NiQ69@64h%$POf({-chxfJs4h`6|b4LRS>{cTSQ{eJyOX;yor1U43ruC9~BqAMa^ z%O}m^{kHEeGFH6dk&XQ}zgT!hN=mg)5q5PgNG-OmC}&1{IwqaH{!0vYsf8dI>N8eS zV#;yj2Rdlc>De)Om!_S$UFFZ85xVL3Ohh04WDYbk3Ne#CKIaE38ETo$MQHFU2MI@f z`qIc=@d6-6_;!N)_Cwm9)I>zk&TW1XkxTbez}3NYl~(ul8VA%_37ffyJYJt*`#SOo>%&CI`ADM^#82qlXv$M-7w|h%ti*xgx0Ziu#R6{ew>XjKcWQStf zu3S+!2?zt19X~=jHcp+zPgR09LJ3ZnsjvGq|op`dRV%*;gQsSVKQjZ z4~+D^_3`$SqF$M({5ShAvz-%*xx~*mV3X$}Yg)IS|Dq z$$xe*&h3t~{2NLZ_F>Xqp@Z7G9WC6zt5^U1y6ygCy%j5~a5QH|0dWULzmyv*Q+|B+ zA#F74+`!=`!~Gv^NSPKl_X)qwOF`pE?6*;UX6rZv94_Wi(mYiThS(;+B7D^6*)!Kv zIqBRE{x36kS?KYxMDHXYU!&bDVvv6P`!Wp|7MjgCFVKh4cdz<0Noa}MHO$}m;Fv1h zc-0Q<0wo0nI%c*O*`TrO*R7ER+%-2(PqW})zg)GzeE@g6AoNGfT4Zio)eXCTzY$x8 zs?!J2;?OO>qutPqUoW<-y89k1*xMEso}~Q;%rd$_N20xIGIFN>8MCuiyrB_YH0zLb z|Gj{KmzfV|pVM<~tl5oxXMbLDnNJUw7(Y7<7K-a9>f|~vujjZ1_3(Ci<{Xe5MN4HO zu&aTA@(NCxG27dNV8dJs&*NqXlT~TcnCkZ(>4zI3t*cYbsGE`A>ZFfeN}gZ-HDeUKJ3xWNj+~Gm|232qp2z0NQkp0z zt5=+um@&Kwv%ApJ;@Dcw7X9{YVUkeV#o`@5XXPh$VEd}|cGQW5Saft0a9>OJr`-Fi zoQ(YDzw)n7PQVlRCUg*dr>#=Dw5`l4Um~X1RoV;;t0KunK#tg%Dsjm{?VV>MLd8kI zNMBhI;qq0#@+FlYrJzV(E{!ltF2-(C4jVS!oOC~1=3g!-SHBw&o0Azm1pQ-#d^=hvl ztd3STyU>2^-uXJ`y($8e&TEp3b?!MY)S_7AJ$D^kZi?xv!hS=ifIyd_s%io{Ek&Q2 zl!)CZ$CMNIiS&Mx3SpF`B9D~RFea$t;`I9Ga7nQ7ht1(MV?CI*$P;13!zx;nSi<5N?|&z{sE?b$k+>A5XiG5 z_$b-I2omIYbKhz^+j2WIYwx7-i6?IN*Vq~Q)+OhCq!;{T0My<4_D-8aZZ!Ml%gan> z^Hx*c3%<_8xw%;y+x8BWKDr39?zmR+M==%j8}WWWl%CMD-w<kU@|}Yh75y?PyK(_QKHHtgMnRUjkSoc}f;_Qm)?$oR(M4&!@v-%NZEUBHcRa{4OoEXPSWw^1#xdFbe6Cox z`Gg74;JYIp5>Q79P3y8HT|Q6}gq{ONMb3#2wgr>m9!fZfo3Q)vPAmD z2W)x{{_LqWm7)Uc1)A7vdpSZU^?K;*8&CY23m085$Anh0My$GKeXu(ORb-WpC|oR8 zth4(_30KfgOUiLCV@22zd|JSEXJ{nL@LM_~-r>gE)D>gyQ--1}D}gpNS? zRryj$-^VOqir9K`Z2h@EuaOj72Z5T3tdv2_`EJ*;-;(Tf%DJsA8j)`UTtxHy#Vo~< zO=MGeY!e6j$Euf@&B}SYNZsLS%fBzvXIA8w?ccVt6@PhZ2IkpO;dDxzzr`cva(YFR1puh3jy4xlPFE z%4G`hHE{SpwZ{Lfy8K&qUW=Cn7q{<8jW0^JseG@kVAsELIhTQSa<&!3xBP|`3TeJS z)mW|e?xOW)Mbgsr&aUqV+2{%56VFN26Lgse!~yi~HK?>8`|CLH2d_61oBd_*S*6ov zm1NGOIQe^sbn@SyBwZ__lN9&=?GpdDC+>4qT-Mdb4CW{7F6ADDak!Ab^45Li<$z*jt1 zuA?*8(ODn=P-!U}ATGeyfoR-FW%QPg?db1H972PNmqx_6B>z(OE8#9QrbR&mBrqVF zOuYd8@mvgi8G+yk#$(+y40U4~F$-l)RZ2X!S#Yt$QK51vZjJHET!XPOPn$68J<=U7 zwbhXcS|096fMt&mw9YU!m@)G9u0!`wkfuKZ9s7hzPeX<&z|Jz&sM^H^cJ!`c1kV2= zc#KJ~3rq(>n9=_H9t`UI2=M>%U4I_9WLR+I2GTu}lxUZfj3^}c^ymyI66Vf2IU{#} zJP9!|Tigu9{}V2oEka~GxgBA$FQ@y1WSP6DgWER(!)7JpmPUzldaj)TJ;IGIgRP$8 z(&kEPW52G(&T5USu(zF$h>vF%vX#5Z#H4_qWj;iYj&fpsnH9oXnuPnZZTEAsw4@Za zYz{&n-ISl+m@@ZqalzxCl(uBZ?e28v+U~*dJF*7r3Cak?Lt;N|1L4vjR*(1`$8Z{3 zPl`23YYj?xk&vahZq|YJqs)+vcak0@tiN_pq!4>TqzJ)t9vr39vtBKqcI;%kIsi8} z7@2EEm%j4fM9GGv$Lt&!^5(15PUVbb;bHfRT57=yj`P-Oefjad>YO+z+QN_KWq0n{tLgv#NCkc3BR5qnYYB&wQrPzw zV_&`u=5+pEIhO~J5ANwa_=EZ+B+K%300;VzYZ;S^+j<6O4t_Oxd)rVVEZF%|M{dLR zDJViuKyVet+8+1V;BLX}oznW_St_mZHC|a}-AReJL)YwxSc=j#DoEWB|E%!d$3zEn z6w~uhuKr*tK=E{cd871;ln~qd1PRe55JL7wepSaKN!-Hy*SaIEzp@$rC&A_T?l_cW zpREOTg5YhvPV0Aq+XCe3<}V)!lkxKWmtfUpBv(pjQSX4s>{4t+gHZRr^Z8{J=RU&L z1|G6GImV;SSO)g0XDQU?N>ZV%A2m_ydJ1-NVM52LKZu?oqe*(v;T`uo;@H}&2pTcQ z3j5;giP*;17nE;ei8H3~*$eei4CYV-E46urHEf1I^?}p#M{y9e^~B*kxaEHlW`)#3 zXJa#(9JtnCkZ35i`8mfbD|7xS;pXGh4bt}50th;- zpVyY-(wD~PqNRoLa0zK7%uM(;dL9<&VKO^7Uwu%B?XbW6?8cpm2=w@P4#uuLiFaZC zLx_#%RMP-Rj?gXm396FPRk=I0uog4L-)%ui+{yqBzZq+R;)f#0UPcwa57=0fj`JH+ zW-ePL^~IU&UEyJyr%njw%P*LOHlF$7Ea;=uV8&?b)~u|7%+8|(2Q9$X#FaF=FQfo{*z*64gE56Jd}%cYPRW2^gL zC$1gA?8~QlvZkBE$b%=s%csTiq~1-go=41-5cTa82k878i(vOFh#iG(gb$no0CVa* zN-@z=F-A9Umbkf%^ZL`v;fnPZme%W6;hvn(yOm9|-h{^WZ#T4WXWM9bDT>h>*$nvM zXQn!iSG%>EQk&x+t|BaLyj341iDVU+*~ypLi{`nP3mJn22x!}nD?c5mXC2ttxu^U# zcN}Z#UAN?Ejt?_XE0ORnv^krwPn;?h39nSQJG%1*RPcN2?jwM~<6a?{JqI-kUc`}Q zAX@p1tFbc_APwUR*q_i+ zWCYXV+7#6@Bjfhc77?eY@%ebIOD{L>ybxvTv#bTd3J_RsBq_)4MF#BEO| zdG6?U%LXBQO0&Ug9O=onP9~Ic*i$y)KlExhs$)Z90ejf^wf$alFWs)LY#->2hB>e7UyS{cvH)>|2%C+Y#ASo}=svZ%_t%Z;F*O<0TEC5T zoBAF()n~uY`4x`4O;g3m0l+oRD;*8+7#+rX$w*T`rx^iQSK$OCcZJ@qaMlsbptx`U zd`O|;(=sTz)X(acvPCoxP#uFJKK;FMCWxDn#Lfex2D(Fp5LWhPfM`(@#@1-^N^ z3j)r5F2SunGWnH`@_-0*pH?V8BG7|8WcWLKMX(hav^2PB^6gQ;M7vPqlth(n9f|lM{_TKup?KwC#)*p!#l!C&6roGLIU@wjh+gAk{u#91vL>@ z_~_ZKYwZuNTzW=xjtoMr3W*AxV) znFgqEz+ai85UmmaUg&I-CMwWrt9|eN*MDZSuj2J*=H+`fyeN*gSG-dc9rkYVU)4l) zXv{^L&5I|zvffuZ4%IkmWw6t`ZqGB4IAmdzxSrzSn3}1Vps0PXy;8E=AvGCIMDg*{ zr|tw%_GxZCpd8XJ$f%!as5XdI2v(Ao=EvbMd?bog@u>Z7Mp!^WIJT4m_p9Bxw4Mp< zdzZC23TE*8Y*@l!bXT{QfoYOeq3$tbn@P!CCXk5m#yPNdqRM*v-kAa2?u&I1%gG_~ zkvt6^oXyYv93wE!{pBro(s~&p!qQe8uQofl(bx6mP}0CKOJU;ZWjS^e)!`v$6Y(3 z|LDs4v5&j^$L8)OSPK{Pc5Q9Saq?Uc;futJ(w`A+ip)qx~ z{Q`&V&ms466IV=GK~6clHy_KIto^Z!;tYKGZ%;CaHo}$6eXOdJakCG^#9$s{@WH~I zsh4|8ue_Aj^g*w&$E0OBx>V7SyFaH}xEll3^N?dK$4HWpzo`_XQv9n0>xWQetSedf z`iAtCP&GAmCZ-Ivh$&dhz>3E@#zj$9Gci#CVH5IUwb>;Lp$`}VK)MV7TW_ z_rty8wYA6md!;Rcam%^ms5IRTbzy7O<4}7CC|8{IllK9MHxQ9k4TJ&o!~|b*cTSq; z`9iQsf#k;YZ=u>krZ=#$rmmfP4r9WNn3kHmja|kC*(Z{V&R;i%&pI5+T3BEl zCW%F`?_%zU<$p7T3kb*T<6)G7Q|*KHq4?E=`TfAB{yui~W!82$!#AWol#BQ<_SO@2 zk2^C%``xSCPbc^F-##&;{{-q6bwKk(ny|_BAp_rAZcs6NLo=9q7`Yo47Bx@LHUEoM z;CdaU8Cho&hMrz~^XW`6fg$nTG}XqdKE>=v+^_IF6dK08UQ<=pj>T056ZwMi23Z0tgSY6u zLJ}D|!copTyC)W@7*wQ8`T-k|l-ad`(A_d8s@(aq7|WzhXAbJu3}4-(sw!)r8|?AC zQOcTnQhp;AJiEWz53i1Wz4!E1M!TkVrra&7`jIGkNe~>o{4Cn9+YBG6C~=AM|K5Vt zp{LKDFkC#CzSqkmR(WyuHNf$7-|JX}myU@ji=l@{+Lu^8OxqJ%Ku{a_`jQgr%3!O* z;gOLX5=@(zMaQ?#^fzuweqHvvHv)fy-0mV@AN4i_)jS>kS%d=Zycr7JGD2pw%bfZC zgjwVO@w(FMlyeoH$YN5lPEuV?Qr@zxE>HnmifxcwBp|6vQqv|7QzPN>*kOajE8 z(jkA(T1&GV>gc3phLqhICBLYM?6=7qaz8H=zQwL8^CCsWT_?-dl2Z4f z-Q^Skk$sJL-OT%D25;23!sZh(Z2G#ovwm{XOn-Lt^mJuA)k2JI>0pl(^RieLe;n`n z*brPK%(Y4Q1Gkmbq`2Yk;8tSf;lW{3-^k$A-``&bfR-OfKR=yA=;Ht%5`6wE(-7DP)oQJq zY%JvSBCtQ6RM&)sJOQGiDHVPC%GSdxydS~Nv6Q3jgco-F`rHkEquNDPv^|b|gro)n z_1Patm4FXKPk3QgfXGE{0zuh!e{0;F-|SQ#>SU{9E`l`x1$w3Vw0wWguOL^yEPY|? za9!-Z?J;Ft%AjzMefN79xV0B%wO}7qPwK4*EMSqe| z?RZtbE*ky%F+BvWwGB5=;|cU6WcQd@NqjS72-p=(O&@U>fn|LH1CQc-Io$wAw!PD_ z_<%S$u(%7QGX_7sSWcCZPwiUrwLEM?x04KA&(hsxiFAm5!>76P)FO|0K^N83P%~i_f$`E6c)-I=BW^UV*mLXi%%=4 z4MDf%dVu~3(j!o0feF(EvPbdzk1p6fGU)v$=7!oLm=CLAt7U@^vOup-Uo8sgk`^EiTHp5vTx#b% z^RkPSr*F#Hs!~Gg^psaeO-a9oIItIl`}tk*S~W%YWVrilMUVkrFXGsZ$K#4>qDAjr zvM$+QxB!y8R&w^6$KpxamAY51q}pj$-bHnmNmiw*2b8kn>$QmSdeLjK_Q0efn3#xd zdF`OycIDQYWEFDti@i$v$#UCQ$!J=+v44Zn0c#2syhHiqr+awV)Mq@35dMJQE1PJ3 ze{sEG-?lXE#O^Clt3PLxENnW;g7A{*+ARCll-)#nXHdo?tD9m$jhFV_8-gyD)Ki9BGoODC9%g$B&wiDH6)dFX@UT zKL=@eqzDUCSLy5GXV$sbA)2={w@H0`jl`u?+!np3+e$ur%8U_^z#q$@%y^vL* z`pfkErE34luffMG)S|Yhf;v`AfgcL+!aP@i?pKRB=l1O#$UkqAz^{dfzgAoGpqA!N zHzRGy(wK{hl+-ns1S+U;mU@KG8YI;u8h^4eZTFSk8V01Lsp76rn-6;UO{IWaiI+OY z-e2s_(;O0{WCj&jdo>vh`4d5)oqPuOw7I`4X`;v5dBcQZt!D*4y+ z_Y^85mV!;YeyW77aayi9AMK}#x=GG8UoCVj$R+H$gu|j&e zdaaqrkPN<1Q0`j2$0DrrufWO>XNv+c?L=OWzpbo}d#X zE}DX24Gr{dUJWXS%=qqwe&%M;0Cly>bAJfZSajNrD-4P17)3nKK`1b+T)*OVwV}G2 zKxjk5KGYF&PGc3BCzdb+hiCN?YWER8LVjrBUK)Sk~D5@KoW-8M?{PE;Aa5Oyolgy!D z`m1}Sbb)v20z7tNbBAx^!kzNzGiWw=y>6!B!|X-T6I-L5Vzxxxfe}U9&+ax-Xava>vWnW*wVV_OMKL$Ec~<|x1=MzzH|eJ|4Tw*t&yp-^ ze>mMG_(O5RKN%=O>Y9{STQ3HD&}N0!K!lXb=sf8Qcnh08iqjm5qO+Rs!{1y+#LzEzOqL)Ud>yxaI`{VZ z?8z!bK%Y@EVQ9KMMa)z(lU;qTg&kD{04IX4MJmQ&>CPN~Ivlu$zzU?Tqc^~I}Ka*+T5qxg+( zFKsls6xGz+Y$0GTl%`RzajTOl`Ec7~Kh9mN0pzlTM6K22+Zpuq-Fh(et<>fy^Zz20 z`uj$z<_#IVf&Zn}SvO{&B04{R$8R+L(ivcZiu7Ze*&B2k+O?cK z+bT}R!&9;laJD69CqVcu<7Yx&2<40SHFrZ6sn?xpFS@aSEXx|EXI;C;7=*9HpZ-Zb z(ovw(-7kT8Jt6{YumcXg;^GV!y$sz>QFcuoe}Plf{4DI&oHoCA@!Lo_Q?H-da>f^J zh`X^MnTC6IWjFmLVb4?(UI-7Y68rn|*|L5MA1WTdWV=e#@9f8HX>9$L_bwn*Dt^4# ziW_~+n&KnFf$I$fW}KssG`_nXil)m4i?MWWc-t1WsTfN6r&#a9Fv6$x`3-Ey)u1Oi zM(;6McrInedaTsJ*`TIoJva%@Vo3%|`H<9*?~1VS9NPArWIKg2V4*_yP(t=!SqfZ! zGgc^=+HJ#cX{LwpbAZhzud{XiZu-^Os?m$Bkh zB=<4dIhx}EU;g|F{csFzYwaEF>rrhbkBHqmM$vlJT9uj<^rUe3PauK*{Y%6B|NDfm z#bm@oF(4M${r+g)lb(_fq!nQ38OkCU=Oe6E5uQKVnkC9(UOp-L8Q~}@)sQpRnAg4#SUyJT?5i6~1y_Di>9My6`Qb3YHNYQ+X z31lAs?^5fD#~_U%ZP^(o8%2OvGge)#7)}d8*)ZTBnEzR@#6|Re$xgrAuqXic1a*b_ zshIe9i3_D{jIp4YAQ?=-rnH+j&2H%Ec$kf;Mfs(m(||_rA=I=KZsI@xc~?UEF;g3e zwcV7yvr7$&F|I=esTayOyO{}%x~#6IUP&I&>aJ*h;5#_^Z{NW(u0w{Tg>sS>Ssofs<1y|Ek;%7CwJ-l#`@$Zx-VdRXpPF%gF%`*ts+yPVJ8M#SHernx|_X0H|M! z;sK)r!<%y`glej)axyUm1D9#GcyOI6L=gZ z3NHNY5;)w}WP6>*{!#-l@Yx0}e4ytz$@QWciQH#6q7nW&qRgDbGm#Xbd&;!s*H1R0w3>LS_M=D7N2Wf49>zc4&*E_P`(qdIx8(!MY=vxVg1#-sb z0N+h+omYX6KRq@)NV?Cf&r*h(5R8w0(nIfL@dNtS6)@>d~wuQ9FS0_(v# zLyzE0Owc8}e(fuU<`+k>T;EnN$&#C%?(Wff!;2oSQN@$S89jpVci6vnV(-T%B;hFI zBe?$L6SQki93U*?r@dNAV-dKc6u?OXPr)jfLwCZ_t33Z16+`Xx7+TLxD5=? za)9TklMTLNVMKiV*mx3HR7qMXaIH&c?5$IsU&S%}#Kv=w3BFkPS#SlE&ZJrL?K1)D z-16)z-`e|Qck$cFR5iXXj-%T{g)U29-<&%}o)eDg<{ia@nlFGTYhgmP^2*2-EV~lN zODge6F5v{ebqw>B5p1ALKA0TW{f*0jL2xHcF&M0+)iE;AAjv9gq{lIk=9PI+aj?Ww zJ~%`N{03zm^f0g$j@KbJOM8%dkMW>R;u_=~?d(~+O_nGM! z30Q!WcRRf0L%a@r71mBSCl2uJFCQOl{oEfIfa=ryW$lVJuo-$_I^~nF zS&~A^z-DaOaAbqIB=|LG=~w?g5?{z?JrdV>yxR00n#?~T4+Q)04D#X{^ANdUuL^> zwk?4x%inlMLtPoP;j4Yq{MJ`j6+uzSBv`Ntz_Z3h&liIiPF7Y`T^_G5w+J}Xjq@5a zWH#L&0$e?CW&_i9hl!n6x%byQ_ye&xOf?Ny+p9}UM-i;Dk~%QFI|^*VfEFJbE@rhv z;j|T>0p}zz1Mjl1Z;1bUC4Mj;Ar2R33kX>5u6yaBBk9oKE(L*uhso?L@DqPdDs*$S zAPyBeDHb@ z{NYc`)Mw^J;4?yWh{O(Uv=HUM^DKL~^KUMgoH;E*} zYqv-rW@*6H&4aGw{l~&&+mf0EQPz0>EX6`0i|Yo$$?bJU3m{Slnldv^Rb+d?LP|!; z%PS_6y_&KKBk%utwRZq7h&_UlhZYb%4}C43;;df%^I{N*u^&r!xB(tu>0~*7sJ;dJ*Jb z!=My4b?hi8&dITX9XTdSdX*&(OOx#g)xX9tz<%d|>M=eKIIo9+5Jz$=dB`$~Ma+B# zMz?EH4!4laM+;k)EzP$`+mpY4nrEX&m9?-M<~oTobhk?@s;Wu|{?&#G2C8@199u%- z8%9Fo0}?%q-{T)|nJy(6>w)baK>`i1h!S``#*K4Pb@Pn#-06>95pDcJ@gpQ6-HW3uWe_mcj2M~tO zgv>0*v)}Mco|hfr(IC;RKzmyLnfA(W(%*4+K0ytT<_`X>5brfmC_Qgb;tq{D=;UYWnAHO(y{hlxPtqd|lu-LK zqo>fUu1$s=F#03sJO|Z~D&d}oPCLP^Aq^O-r;*JhcT@WRwR`j5 ml;HoMiui9NBIyxAA{FoJLAQ4HqDasSNJCXurR$gpll1sKh8_C+pZL`!>qH&lI9;A%sw5A4~RqEJcOvCVP@~ zEZH;6%

lIp=)Oea?OE`}h6p`)EAo(Y)Wx`?{{z`g}fL&+cg{)6<@#g~4F-sw#@Q zFc_r~3`X(d7!CNuUGl;!@J3~STk|#y_CEH+;eBfGe=chkT}>Fw{}K#_4u!!8;3M=R z4CW;cgDqRZU^l_SREm{!Ti1V{al}L*))q9{rI2&Bc?N)N%ff1=7!pE30#I#^({$1I5K= z6Xsn=RM!a7)fsU=;641pc)dfSrB1;J`)aA~n~SthXn2l&lI0FHQ@vtyC86$+bd2|` zM;b4`$NZ*0;n#-M*VnJNWHY;8H!gJV1!9x3vUYA$z+f%nh867K!I<2Rfo*`%@K}Kl z*`m;3*;e9|tYD$7|M9|#oiw=aTOJ$~H>%m9j4{%=SToMqA9S(|1{44Gl%CH{n&J%0 znKP;7me5~PXu(IXu$=Ntd}(vlb$Yv%65Pdx0Qa)p*_*Hq%*4>MtKBJiF}i9PwC0hF zPqAm%{(V&|&%9>hijr8f@3)nBUaCKT2lMVjtt$&_YS6V~M=4Ig(8qqU_wjYH+9hYT zwcVPV&;9Zs&dDitXRRSIeyqgP97VjIlgBT>bZl7+b)%%Rk~e5GAwl23>o!BUfp>$! zcy;=<1~Z9RIk5f@aqq1M6VuWPaTYQq*u%M6cX!>y%uH@oHEr#IhV_i$Omd)xRGPu) z=-1u3fIY*-9h|lh-^Y@uD4PmKo_S`lm!xEic<8CQ5!;`l%hvtK$lTJ$TuB zrmv_p_?zv1j@D{=-DL9%?sL^{@KMq_!eZ%L$4D`Mw;ZOn1p#dNA17XVi~`2?fQ}*6 z7dmgcx8N}7rZ1gRRfhlB^ZeS{zF)2ko}z90Tm1OB-m9|iY7Rr+?t2GOb{aNot5qnkK2{gL!%Q zwT3N8JB{ZV{>zo4J&~8ecTbb5T``&Oc#AeSb+_Ng+B&XHoOhk@HIeZd*>(=VS)>)0 z27BG2IHA*utSQXOQsvjqzQ`LR@vr8_N_EJXcI0uyS0#SA2L#2dvKGby{DR zQlu!t&o7(uF%@A*Qt_CP{F7reIj8tVE8(IduJ_aTbBF0xN?0f6IR=$Om)!4s(6{IL1ZY7@o`g~qTjAn9=U1EE`#6>+M zvQSrdWi=#fem+-F;B#&)DzK6F^D5H7sZc>Q8Mo3N;YTIR^*H_dquYi>O2)=9yJ$&! zt?IQ}9_<@9J{MwK`Z-DWN*LuFoX9DB>K#Hn?Qc0`3acFYjppWZ7ANXhiKIQ-oBl&A zFQ!1;-xuWBzbcY9i;AGZcyyl{M@f&#@=U}h&3C%?F~X==6kvlaqNAOVusrXv@dz7DF-^D^SnlFmrTm6DuXv7 zvsZg}3=>R|XLB0Xzb5k*TUzp}npDiA1%*u83i+)uew@eQWBLo`tX^-m9wWf&BDqx+~(nhlk$q#DvrC%m-?kbJQoly^_${C*B?& zsSYwpzshg=@#Co-0$$Sp_l&|#kB(wDR6yaCs~p^L>EOV^=IxwE{%dva#l{};1_l=< zJ$h|MS2>d1=es|T;IMK!e0&Q#6`33(_)^?r+VpEoWo2Kl7qBwt;X=ooJ|#+w@IWJW zsn|B$%#An6mL+`% z>`ja8yL^oK7h2zJf0bE~4Dzpcky1C3+{arMZU0Q*pWFEDH666R+MQRi)f}OE1@T zypT^-Th>c0EG(t|aFecS-_G@**WR9gNf}O%&(oGxkGBYXe+T}%l`fh+d5k3a)7&R| zm_%IInedp4f2Wt1>NOu_N+y&hhgaHe{CEURD~CUGWsyf$&qIT}>xNi-%6@mT6jkhG znGyeB5S+#x(PV8eFN?(F2FVAC{-?&UP+&@{;~TW0-yc2UWfAxn}wQogF7WcSld znV?8d$2(MnpR3PG{bchl_c^VM zTcrv7z3TB(ehZktjyN%uNIi8s0Jt5(F_?wyoKGnYm z!ggV9M|MMC1=IIl1B z1@8b;u_sLdc!iM$&yVx*>g~6T#Jq2+Xu8T&nbBILdyxp-vP~k#hH*ZtTaQSAQ0S|l z)b5Nf!SXvon z<&c};jZ`wJb5FgMftGT)Ua;w2Gl9fj@U`;C?s?6$6h+tcJAv-q|WRa3STt1sMaWSPfbMT$!> zm!YY42h>^W*PAJO(vpkPWt{cRSNk=kqwl#EBOD#QC;b*2Bqgf^B_$jCvtzn@WZeHS=PoC$djVZZ2_mZWN*Z?fEUgdgr|_zUhS0loY$}QS4U6PF$x@00y+2F<0H{Gy}NTDCoZmW z+WBU!TxIi_iZ}?@L((A@ezs)BX0#;r% zZzgV-kNvVF@4S^e7?m)oDqIz+0x62n&iQ3-hlbEJ{g9W>xXNYpw5qG6{Rl3=K-b-3 zyxPF$IC^I2XFH?0|K6m(h^drPo|bvvOuObyRP%73|HbOW{10WWEQNh5?YG&4m6Y&j ze}VEZ1Y>D=+C6M3BjCAy*2#Uz-=#Y)qc-o2DuWJG{hESVSmy<#r43jk^+EmQGacRYc{Cy3MNm|9=s61? z_mMNolu(r!@yO9p6{?t4W5ek^7Q0iX?CCyze)MI@6GR@_w;;uq)H}Uww7`N)i$Efs z0=N!_@-7L%;Rti^k-7&XOk z;9p66cSFex&n9X7zP@$_LA03^sD?@$%)}I0~s`d6MMyQtM{$LjR>=|evT9_`< z@m=cptIh{kU@cb1Im<3-X$%kKBy4}P#$6T@`?xX>T8Qf}%7V)7#%PRe&QX8q(KJ+0 zC<2);7SDS6onz~h{#5a|u67$&?I*^{b99d~h?k4N-W2`#ai<~;mcZxI;^g8oTNvgomagKd<`jb*tRh3lRW6lQg?=Zs3v3SrZ@EGXKj69|1A5WG&aH)fe#RBc< zi@*}@yxQnI-_JjDV72oRS(9HsHfZZ-YYQUzo6(*lFqlpRdN^EqD!;$dap}ufEho#Q z*Dk{tNIlcr*^ouyr3y?sz|^ouKff&wOw zpu)&~TV-WA{ch<~+@;k~J$_I!f=~$jK$&0L;+}`c^mNtwWQ~T2kihUtHU*4pW1{hX zvDwro67waiof-D&SG=XtOaq^T26L|jZA9*yG&jn__djz}w=X`gdN`}#KALXFsdZ<} zqOrV~WU=f(9)GuRIHW zqP{(Q6!zih%{pKh|37={e{Z_WLK%%t@#i`%4XFCBymx+?oczEWzzXu`Rle07Q~p=y zDaD@wN47h@1p>r#u!h}rcq#mFCMq>8g_98m3sw6jWCRKhV2*0jWYPhl$1P^Bey!2( zhDp6=Ji`T-Au*JnewtLGImZisyzam0lus8g`s5Mfq zXz**9^@ScUARI1iC1$Sc1Gle677xU542Mhu6e2WRqO)4YA86)zObBphoH7S-c%_O&An;3x%0^Rd$zXfpFE}yrfgHMOBg`acxSAo zgC(i1H+s0yudbd&>a(iaCQG-R|$2Go>y?SRbpM&hPh79`x0uXThYi!WQKD<$RP)d!k~?vYua^>HfYs zN`h5=ywlmTDrqCE8u938Zj}!FS?*S($owrR5&!kHeX)xLSQb(jrVYx^XQ9^aYt1vu6Hl>I$TTyR z@p9bwF;H%M;2$W*^uoe#4g>v+YEr{K2vB+lf}AQ(x!jA>!H=*!t-4@oO2Gjv|HT_M zHG)N_UBcmgo7}cL6|poCqQFO0tb)Sw9=0X+*zM}T`a7Mxfjhx|(Eqy+-{to?^(gHc z47TwMZF>coKm+3Q%#2yu>KGTDEbF%^3Ooo;!g$`njq~-r_lCB42mg3 ztf_KNll6CsEzHOGG?+{JlK z2k4omda{--xHQ^x^oQ=n-N*Oem~+WNNz?K8Vim5CR~4WGWx;lz<2MQmHVVtjl?n=8 z_rbFJkJ89DTD^KI-jkk|ZCr6>r(rrhe)7T;?iq}*plg}@mAqGd9+t&IAw&n-24~RI zja3$C3=dy0E`}D~ca_qR6JzKIV%1IGG93V_yqY`@BKeV%)r^LhMIt+=cwGOWMk9#bHt}LAEk1|Bdniir!5)>R@$R)9z1U=Mb)-bbqm&w{vxao zPQCIs-&?4S8p*^#&d_H20Urzeq54eeP!IdampM(2!w$k@^l&6dH~=-fOk74N&+Q#e zd_Cda+Ut}E8j<*f;?4ahn+G95NavZ3@So)}3Q4jjN%VU68$4!XLGbPtH8;BGbvPc0 zs2-lipZ{(+JIJHd!FWpi^bYFX)jh1`E@P13&%$0*3&Qfe%>ji}Nj+nsGfxWBLXU>k26DMYC zNFlZ(;m(wXV&1ET!*3Nd&6B1dDQAF1S_JQ7mX{mtq))+^vI(@>GoeE4*)&Rg;8yVQ zBu#$qrOXxY$e0UrGLOKKvG_29l*kq(WE3BB{*mKodC>h*?EQAtinR06gxBz%b;Q>s zkwWuYam?zCbSav*RIpbuXllL0!b+Uhkd$Q+Ybi0MTC{uJOGaw+n%>pp2pBqFzU4{5 z;TbaCHCi1Hif5rezD;`~dh&v0|B=6Wx_SU7P0Pt&&da8z+cP^&dygwe-=$nts-?Wi zZNg2kt(|y>sl-)k{;l8FgxbB??3Zw7%VHoFBr8>(KWI>xT5Lo<)Gy&odR2w zZ+Y&Xgtnw^s9F3p@!>|RY~4=(E^7Q%u}S&&$1iMQFh!Y;*5~eqSZ$na!^nyqC_jV0 z)3V;dSaOo+%0NBXw?GL)BbmyW9(;TrFWNOyEHtz{oMYa0dWJRvZfPoM$)N3VV4YTK zpuV0yPO6ncrCJyfKfG8;WAu&SrxFfbTnYsSqnZmSeb!y^Z~o=h=kk4}CSXXhdkNroenYjQAmsqfSz>WR(ybFlYD=bL_pUqXZy@jxjVFxpy0P-0{yIE z{vCyyPQ=j0$90t$BeD?J)SpiabrmiRRDaG*NmZ?-L`NPo(uvW2!KOxvBvZhmK)cY# z6A6FwM5MvXW@e(*jV|IM@vMjQWPMxNh_#ETC#ahGc#3*U@gs8TEqBZW_ZL^cO_qIT z9Wk)TKDc^uSK{RU+{dCx^gjZJ)Dm~YlR%4y>=I~+shV0eY<~F_S zGhgf?eN)if_Q!u4lm$e_belVP>xskuyC52iXW(4xvzNPi_o|)EW!cFRkA+)=txO@P zPZ$lSU@O`BIVPoDlqBqnK3+p{%7`duzPDmRX&9yU4L$trTOmNgDp9DA^78Ybj98j1 zS@0aIbQ-=!O?jKR5zFF)++7-TuGooo(}?dqGX%o49VadN`pG4s2-wrRZ8ZNfU)WM{rFig64T?Q?c!Xs*lN87`0eLvz>ybCUOAKZRbC|J)6Ra9|2 zngCF*3@=ju(lse4+V>>IWcj4;Bl3DKg+GYs3;i+;}k+T(2f6X$;geY{zLciY8JyBt*3tS=eF=NvKh zxjeybY-vge;tLRJ5RRRLVn6pd@?8u(3D3#+ukoHGS1Gb%`BWy`+n%&u02eF=lMmaX z89&?lJQWV$J$#I5_x`Io3#(e=QMwZNt}}QYPT7fV^0hT3HhrZ)O3I~}qbe-Pb^-5H z1Puzf^@_jQ3~KZYnPU%dwMAqeC54(vmGdYJ4nE>F1TUXayJ!_=3mA@604PH(m4QB; z3zu#(P5@!Gh-wur)kC_$wZGBCY+rvvRQ~?k+#*lFtxVC{o7fXf+)3{D82#u>w4U2L zSGp7HWfxRySH2+E{VMLQcCh<92opcTfPlfalc(b}$VF@&EEu^7zXdi3ncUyknp^PE zY(3b^M5wE`tk{8ob@@)qvclb`<^bOZrEt^u0uFPdb zT9+v5u>9LC@t!{;)Vq>a@w;`X{p7tKq{W2E`z&6}&ffyw{q*ZM>L?{Xd{1*hJKSk` z;z&64bOH&VIUb=*Gi7r`@znp;%`_a->`4D8-z!XkrS*2}kE=V;gQPwA;v?t1)}+as z)9P8@mQ(2^=GrkqJ!F{0;Od%;WW!oCy~5>nlpxM~b1E^!Z!`1i<7<+okG2N*s6 zc7j#V;cT5rxy_TQ;07&l!`of)huit;5RSj!yO0)y0red7{ckLoakt*V`JTD4`l`Y% z54T30?76NJ-ExLp%RBbLQuF3V(2KT4El_n8!g#JB=&N1DWr1hxtdE;Labl%;a=shq zN}8*kn$KsC^+uGFLWnlN@~;C?M&jC0&1$mHhU)NW_h;O0)-siGd_ zr3dKy6h&ECO41YJcR<_a<%a}>6ri+jp^GV><>d9fR0;Z(5$NfBfORdtAmV3r`_mPx z%m0$w0aP$M+wg-&z~B2#UD&S;uk=PWmk1A^1R*aDdIkq@IfnCgQCD({`yM zmZe4cbYb5RF*!+%WU=|8*r2|RKk?;uGe??c>W!HB!L=?gueb<|4n)WP0 z+}-0}#?ADFoscsy0Db*^*we_T@G>ZYtCM1Oe#E6vBtzdX$;(rR8}UE8MH}J%{@2kF zki5o8h<>Jr{W7TX5E6n-yq$97ooYM5Y~jPR6Ly?pFvT#VW3?M!7lk6WDHQFWQe)PG z*30E^#?>yFqn(i?TB?^70X0qwR}84ozjX_B0m>+Elc0H3GT~tu6S!N_nZeUI>7~tZ zwDf%88!mIe`s#oMPA<(#U5xC^K3osduA1K0GD@30bslXrgZ<5!rO-%U>0;CZc(f(& zeLd~;5e}c9jx%ljgiP`c$K8z|*@XJ&qAG*UFcdqY68jzW3<6U$CNZCWEeGrlIgVg7 zDq^cl|E-n3xIW-&)T0MwfhCDsK=^)MP!yG&`RNzQU^~8?TIU8O|DkjN$veR;~nx``5-w|yA%ustV_NM!f>0IQ2MV{397oDGT5^LEfIkJ zM#!Y;^_tjKFW{f#4Nk;zlIh(gM$~od-M4H=ayG|ovyq9Z*YFX>P~jsmI)=agykX-M zpYLjwF=#a;Y`*I!cjW~gEJL97qqAi&u8RahO!px6^X0n8v;DjmgUTKxw%^yWuz2ph zUV`78*q9ZC!h@Q6Mc3SOZ0T_dt51*4T>bG4ePkq660v8St&{G1S8@b<0bO6gIM56vDw zCO-l16H|-pmg4%W=U2SVE$ofl#1V`NX~Wley#}#7jvxvkrcV|Wqg1aSsbgjB2qg9( z?JKV|klyPeD#k|#NvCp13LhhI*t2x>MxcH&5B7U{<;oaAR5kwN#hl!+Yxmp4WeJPS zdJOL3yDJ5Q5H}gY{JF3Mi9hoq0}0_%IRL4ZZ19UX`cD8u#G?(VGjB#gNKLlPD1jJa zfbBXt-8v^NYS0EYDz62R#ndO9v*jQ33!<>;JFUg(h75Pe-Q+g z*lWg1f!nnc+Rkk5go*v^a;jPcATW`D>ug&?QN!db@dDTAKg#D3>rASV=J$>8O5+BS z?UaVVxHAGb-vu^Tk1q!{%OAXP6KnD`j64%NIPQi^3u>H%WEZwwyF0%R_qU1(>twn6 z-d7*jwwt-g{}9ws&BTARNw5qG&%MKv8g$*9jkV0lSr$|k=C-y-RoAz?@aY0Zxaa4& zO#z`UG(#)w2aU&jibbJYVW&!5o`03g2T@hTRM5cemd<1Odmy^t``%sx(DUr}a*@5) zpeBzeU`IzgX}O+@pJDH2jYh~a!J%EwO{nwCo9q%pILv)~_|q{<6vj;HtiEyaAxnp}KLJ zw0jzmz#vsegZ|yXAhC1B8o*N##}pPWZu=h@tH{#=Nkae-+-+?d5DFh7a~BVcKz37Q zrAO%)=-Vxy(qPm9*7D_OL4ENb>WmLW^~uVySB9+kX~&JB|AEqRr(R!ap_9C>rZ&@c%s?x(}o z*Dld#XJ2;B4X#aAja3yH&dnh!Vi_0p{zAvt7d7Z}a+=n;nC^Wwbt~8<;17^3-6^3$ zu=_K#q&{~27LzKc)Lcz$a&QRgcPDLPlGLa5g^}A_!ojFgimrjN!b8n8eHr_h zQ4wk;Hw|nk=QKF6fq|8=#{H-%|H${HU~6vVTC~Nwfiq&1^X*&N1t6dzN6{!fDB>cd z6|QI;K|fBba!SNx#60#Zmdh+@h6=5*%1mXxM|R zyubkQDGz|4^&Dv~sRfH^D;enFXOl=Bud2MR%`abAZEdcDSoRd%@AFJ~oc}T`!Vmxl zUb}z#^R?eHF3vjzzH2pOoH(s6+zD;E9{H}jJXT(tfaW1=CU*+S$fyEQhpMi7In;+P z4qSC@p*btIU|AeZ0!nN-=d9^vkK za2zb9X1XL9wAbaf34j`Jx^)2yxgWc9#zyhPf(_!{4&~P zTIFHw@rtT~x$NfqaS_4GDubYzhP*5obuU|4M$!ivqm|M4W`6!LHU%`8FLit5+8&SQ zHH{fI-toqEt>n^u+x?L^c_F!* z%l1dHdFTC2O5#uc@Y8e*F5@Sp<#>}P9e24IKJh3Gq_d-hYsT%p^=NDYHojC70u=CM z6<_JxZFSVL%`S;2Cy(G`nqWE6x4H?y$Ohp95*&NhtMgnmL67Wkx^#iFA|;6QY=|VY z%(*Xgo(dDGtBZlK=-JrJ#mxzzA4r9xUfzw>(os_CLRYUtWWK1}4QPk{BFduJxkS%FUD}^3)iM7V$v(jA{Hk-U>#MONz@o@RzHx9XK!47-!PB|Tlirv*N9MH zE)xaXAOG3tb3g;7Vl2$sw58PqkXJzM*COj3Lm?UrKt3VU%vnB9?y!vG7p)S8}Is!(KY{g=)7{m(R{_y_;`NQ}(!M`zBS z)LN+17AY>SUw(Y_6{8pWm{B@a2*hoTy$=zm=FM6op#RPwh6=Q?paDDw`<|6?Ct-Y* z{~pES87QJ1dqxD{4=1CF^XR|mc zPHL8Ure80HaZBBnET%6RnW_DW)@FTWty3qfbbe=t= zj)s_!i-PA$-q1@@vZ6zW2H(_AE+OAcu8IE^MXMh(QgN72O!)o}Vkh*Hg$4|Qc<=Mw z;e>_0E&X*`tG0Z!TaFf{^AsHxns_V-MD+Qx)JgD$_63SkXwjC;-r4z=)giS_f41IF z?}I87*^fBGXg@U3jZg&CqMKPOA;NFVz0z}um*dvAd?2dKmvR*x1TEusv74qu!=GsS zkh&=0KMWjHRNswv@A?V@HF9q5?e|(_UeD$KR7bRy2 zuo$4paKeuWu71;z{mlW35P6Jt_g*(#ov5>`p^}f{w(^QkOymu3FAP{q!6aK0_KjAE z)Ng*7F=_OD&C6Ua{?k9TIj5n()Bxep}Z~%2hD( zT>^Zk!d%?11%C$9Yt33&RitMZM*zaN?^brOo{#!j`Viza0WlvTI2JF~`ry4vyou?N zBU9CY2N7!F6RxOj{Cc~o)eJNT7R@p2`K=?UPur5WD>`{bS9NuK9lPDs6S`!|81E|x zIN>w79yF2cGRZUzsERfb5K*B95OB1RG_2`hZGU%8Ny!)xT=@k8^>QhcZ0`mJL@k-W znlzgk#^w>b4r9AC|lCMROT<_{t zRRaSN|HF+0ZbT(8==X-0%S+|mOO;;i@3LggRH-ncloU%qc)1LIQYTNp;+m4XO(Bno z80H#2MakNy+8FeN680(tP3?K-#U1X41PzE^^nWA`R01K!JxJg( z@{N#Q>A#g5%!=NDJu4~$I&4^k9&q5}1q~9Y`U<4^Tf}gh*B3YJB+;M>yBNwv-Ew)mb@_u+ zBJ>16w@~F_A3fRwc1_}ou70JQgEvps$1EjlNgy~0{@otpghU<;nSi#&yFm%4L!VK& z{gd~>V9yr*k<%@iE%fib$TfB2$gw0Y=Yz&EK4DyR&A2$e$4&=SKcM3aCbw)Z{sm8` z2E97&_*XJ7z@E*=*8TMY?BQP-I#*jedDyAn2W#55x`i`K$bl0JbbH|_JNa=RzjSx% z+E828Ka?Sz>py<^k2oOmf1m_mA7GRtN?u-5$RqlC3EE&u%CYs`$cvzgW(IXCH2zUy zwR6AyX#$wy0B6Mp2%P`koc?b{M*dya^1lt4{5QYRFiIaG)gCUhozffCA9ePunsyC- z;zlg#a6xT#%G}<25LkZ{mzCF#|BalHW(Es`Q5y0~PhPtNl$P7;@&PhWw+}i7GqIQp}h-8R4L>|1t-N?~8!?0yKf4=gyfNZ7gm& zNJCcS3q2o+y5L#_$U^0jR82c6ye?mmE1^ULFfOhGF4nNW%l1){`}!+oBegXv`Y#RYyK{yW^y zhL(Pm^Onlx)x6db&JYD+j}r8XZfC(<-wWaFzGq>9lQFUg+QEP(@i`J@x4Ys3CS1aW zPuQPa`Bwn+!R}0&X#CE4um7`)1E97noT;CUxfRWUf7yAe@4dAsM9kd`kdlDgDAtqG zHG%Ai{5y8A%FVJVcq{FcU2@y$xDvAb?wQ_WMvp{=y51rzZWNv3zoVR0TDZI)irN`Y z@&6gevl`o;PSx;lXlajJ;Gj}DNyBi;fEN!3ae{;+r{;s{p}d6*A%xma;%x69meCB~^f(k`aiXrf@&6jD3z-WWoh(fb;>gu_wX;m+!`z#w+tTEv2 zJ7TpBfCd>^gAFpSO|Yu@n?7-D%Hf&lz>auPmaZ*tBR2wfk%4Qn9&d zJ_KGQi6q)3^JZN%Cx3;gxzuxzKKf;<)76I4xe=bkqvcp%<(B8xAg9N_1LEax@T*`2 z02ZY;?%@4)j@Y1*x6{)1AR_-*Ee;N{7`!zidZScRGqDN-tiLdhAxb8ZppS$c7iy8T_ zdi301+Z6-03uw9_Rso2goVMoO0o>M;kzQ=ubqNoqDRKt}p1#-t3YftHy&fR<2tp>S zmL1r66HgKMYz&E5pmeU^=wOb2CmXQ5{i{9Pixl`{hx)lEvG~6TSAu@$MtTwt8nB8$ zT3`)=$QvAVPDRWej1pC8K0wuPJef0iHNNDnqWoVOjbTBdEC44Y6a;q zqq~R7+7^(FvNh9HaB%nIFzydatv?j*P1UA#J zu3`M^)Ac6Y8|RYG@smhL_|muwD}?mqWy(#??nY%$$xNjfpn|nsy9-g~=?KtaLz1hh zrX4UrLpzKMI8~Amz>By1w|r#xxWWVszX1@f_sq-b%l*~u5}{ob3$ zz5R=O0U-$ng=mdOM(=4nNzZ>;4%S0p{fxr`90+(9co4hY`^wR8^U2#wOXVgagf*WN z^~8PfumhPS{ep!|c(&r1r7e`tf%<7G%ysV`$&@d>+QX4zPZ@qmfzYJ&x|V6v5xKjv zf?R(RfAdo7e5^MaY{_B99pG3XC|5rCcnyTl5{2;8vE=bp*13heWdMNjrK*gea3y0e z>Mh;Dz!4Y%^WUGVC@fOPJo>xH`L3^b)2k^ z38qz5H3a9ea^?C2pT-ke@wgH=Ht${>h8%VxI5AloFEgD|2wci@<&`?nQ2_z=9pEU( z_YGWm@u(%|(O4&^&Ckf1#YLUu(Yc6P6(B^Kw7hs-nFnf@X!5Blr zdq%m%-<8t9NT9Kcz|Gp9Z^KLUwY1!04;GOpR~!ciAok@{@RJp=E-q}I@0leW8B8Gb z(M$h?yrQb|H;4!$>S6}GKgG|+`z>UugAoHD%jR9tzX4*v^#gTYD&a-wp+V@;u7x-E zKOv+={_VvGA!O*fr}Py7O8lDE#rqGL?hwl15w%e3s0(W}TU2_G#Q+Wp@11tlo&g8R zHmp0|0}wq1K;HJ_GR#-eZ$APRJ@bDY z>q^@7`k%(S!VutI}lLoD++6 zvt)oNJVsM<{eY%T#-}r&83@oYEq^>CbS^o`m)5_;&!}a~;(!07G~5-h};`y!CNJcU9 zM`~cKNYWgP6;V@iz|-RTSwBIeBdeAa-bpD-4(mQUIIJNM@81Gsyw`X6>`^`#(*iJ; ztgnCpR@F5$)JAyRPV);_3I{KmuUlHjYC>coM&ygf8}A zQlM$`i*eA*iG4Ngg)KhxTL2?4C1#*VQ6;q(6+mh3tC?|2Lwe#x5m++9tBT*I3G@h_ z#GM-^nFl&?NIp3PBtah|J5z!pU_XGCTwZ^y zp~eD;VekBH91ueIV`aTH=;@2O@em6hOxj|E#)XOuH3tDz1XxEr*ywkFQ(bHHhyo|( z0MeLhJm6f(M6500TW7h~ut9r|oCfUCpO)nM?;hYs-%tKOD#l503%SG+euKVz@Dwmr MB`w90J62ErKSc%I;s5{u diff --git a/phpmd.xml b/phpmd.xml index a967895..bc07190 100644 --- a/phpmd.xml +++ b/phpmd.xml @@ -7,6 +7,7 @@ + diff --git a/tests/AnalyzerTest.php b/tests/AnalyzerTest.php index fd05406..557d276 100644 --- a/tests/AnalyzerTest.php +++ b/tests/AnalyzerTest.php @@ -4,14 +4,13 @@ namespace Macocci7\PhpBoxplot; -require('vendor/autoload.php'); - +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Macocci7\PhpBoxplot\Analyzer; /** - * @SuppressWarnings(PHPMD.CamelCaseMethodName) * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings(PHPMD.CamelCaseMethodName) */ final class AnalyzerTest extends TestCase { @@ -25,9 +24,7 @@ public static function provide_limit_throw_exception_with_invalid_params(): arra ]; } - /** - * @dataProvider provide_limit_throw_exception_with_invalid_params - */ + #[DataProvider('provide_limit_throw_exception_with_invalid_params')] public function test_limit_throw_exception_with_invalid_params(int|float $lower, int|float $upper): void { $a = new Analyzer(); @@ -46,9 +43,7 @@ public static function provide_limit_can_set_limit_correctly(): array ]; } - /** - * @dataProvider provide_limit_can_set_limit_correctly - */ + #[DataProvider('provide_limit_can_set_limit_correctly')] public function test_limit_can_set_limit_correctly(int|float $lower, int|float $upper): void { $a = new Analyzer(); @@ -75,9 +70,7 @@ public static function provide_getMean_can_get_mean_correctly(): array ]; } - /** - * @dataProvider provide_getMean_can_get_mean_correctly - */ + #[DataProvider('provide_getMean_can_get_mean_correctly')] public function test_getMean_can_get_mean_correctly(array $data, int|float|null $expect): void { $bp = new Boxplot(); @@ -94,9 +87,7 @@ public static function provide_getUcl_can_get_ucl_correctly(): array ]; } - /** - * @dataProvider provide_getUcl_can_get_ucl_correctly - */ + #[DataProvider('provide_getUcl_can_get_ucl_correctly')] public function test_getUcl_can_get_ucl_correctly(array $data, float|null $expect): void { $a = new Analyzer(); @@ -117,9 +108,7 @@ public static function provide_getLcl_can_get_lcl_correctly(): array ]; } - /** - * @dataProvider provide_getLcl_can_get_lcl_correctly - */ + #[DataProvider('provide_getLcl_can_get_lcl_correctly')] public function test_getLcl_can_get_lcl_correctly(array $data, float|null $expect): void { $a = new Analyzer(); @@ -143,9 +132,7 @@ public static function provide_getOutliers_can_get_outliers_correctly(): array ]; } - /** - * @dataProvider provide_getOutliers_can_get_outliers_correctly - */ + #[DataProvider('provide_getOutliers_can_get_outliers_correctly')] public function test_getOutliers_can_get_outliers_correctly(array $data, array|null $expect): void { $a = new Analyzer(); diff --git a/tests/Helpers/ConfigTest.php b/tests/Helpers/ConfigTest.php index 5034e15..fb9f8c6 100644 --- a/tests/Helpers/ConfigTest.php +++ b/tests/Helpers/ConfigTest.php @@ -4,13 +4,12 @@ namespace Macocci7\PhpBoplot\Helpers; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Macocci7\PhpBoxplot\Helpers\Config; use Nette\Neon\Neon; /** - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.CamelCaseMethodName) */ final class ConfigTest extends TestCase @@ -59,9 +58,7 @@ public static function provide_className_can_return_class_name_correctly(): arra ]; } - /** - * @dataProvider provide_className_can_return_class_name_correctly - */ + #[DataProvider('provide_className_can_return_class_name_correctly')] public function test_className_can_return_class_name_correctly(string $class, string $expect): void { $this->assertSame($expect, Config::className($class)); @@ -91,9 +88,7 @@ public static function provide_support_object_like_keys_correctly(): array ]; } - /** - * @dataProvider provide_support_object_like_keys_correctly - */ + #[DataProvider('provide_support_object_like_keys_correctly')] public function get_can_support_object_like_keys_correctly(string $key, array|null $expect): void { $this->assertSame($expect, Config::get($key)); diff --git a/tests/Traits/JudgeTraitTest.php b/tests/Traits/JudgeTraitTest.php index 6819e2b..0dd3709 100644 --- a/tests/Traits/JudgeTraitTest.php +++ b/tests/Traits/JudgeTraitTest.php @@ -4,12 +4,12 @@ namespace Macocci7\PhpBoxplot\Traits; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Macocci7\PhpBoxplot\Traits\JudgeTrait; use Nette\Neon\Neon; /** - * @SuppressWarnings(PHPMD.TooManyMethods) * @SuppressWarnings(PHPMD.TooManyPublicMethods) * @SuppressWarnings(PHPMD.CamelCaseMethodName) */ @@ -40,9 +40,7 @@ public static function provide_isIntAll_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isIntAll_can_judge_correctly - */ + #[DataProvider('provide_isIntAll_can_judge_correctly')] public function test_isIntAll_can_judge_correctly(array $items, bool $expect): void { $this->assertSame($expect, self::isIntAll($items)); @@ -71,9 +69,7 @@ public static function provide_isNumber_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isNumber_can_judge_correctly - */ + #[DataProvider('provide_isNumber_can_judge_correctly')] public function test_isNumber_can_judge_correctly(mixed $item, bool $expect): void { $this->assertSame($expect, self::isNumber($item)); @@ -102,9 +98,7 @@ public static function provide_isNumbersAll_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isNumbersAll_can_judge_correctly - */ + #[DataProvider('provide_isNumbersAll_can_judge_correctly')] public function test_isNumbersAll_can_judge_correctly(mixed $items, bool $expect): void { $this->assertSame($expect, self::isNumbersAll($items)); @@ -135,9 +129,7 @@ public static function provide_isColorCode_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isColorCode_can_judge_correctly - */ + #[DataProvider('provide_isColorCode_can_judge_correctly')] public function test_isColorCode_can_judge_correctly(string $color, bool $expect): void { $this->assertSame($expect, self::isColorCode($color)); @@ -159,9 +151,7 @@ public static function provide_isColorCodeAll_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isColorCodeAll_can_judge_correctly - */ + #[DataProvider('provide_isColorCodeAll_can_judge_correctly')] public function test_isColorCodeAll_can_judge_correctly(array $params, bool $expect): void { $this->assertSame($expect, self::isColorCodeAll($params)); @@ -248,9 +238,7 @@ public static function provide_isValidType_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isValidType_can_judge_correctly - */ + #[DataProvider('provide_isValidType_can_judge_correctly')] public function test_isValidType_can_judge_correctly(mixed $input, string $def, bool $expect): void { $this->assertSame($expect, self::isValidType($input, $def)); @@ -286,9 +274,7 @@ public static function provide_isValidData_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isValidData_can_judge_correctly - */ + #[DataProvider('provide_isValidData_can_judge_correctly')] public function test_isValidData_can_judge_correctly(mixed $data, bool $expect): void { $this->assertSame($expect, self::isValidData($data)); @@ -366,9 +352,7 @@ public static function provide_isValidDataset_can_judge_correctly(): array ]; } - /** - * @dataProvider provide_isValidDataset_can_judge_correctly - */ + #[DataProvider('provide_isValidDataset_can_judge_correctly')] public function test_isValidDataset_can_judge_correctly(mixed $dataset, bool $expect): void { $this->assertSame($expect, self::isValidDataset($dataset));