namespace = 'wp/v2'; $this->rest_base = 'statuses'; } /** * Registers the routes for post statuses. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'status' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read post statuses. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage post statuses.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all post statuses, depending on user context. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $data = array(); $statuses = get_post_stati( array( 'internal' => false ), 'object' ); $statuses['trash'] = get_post_status_object( 'trash' ); foreach ( $statuses as $obj ) { $ret = $this->check_read_permission( $obj ); if ( ! $ret ) { continue; } $status = $this->prepare_item_for_response( $obj, $request ); $data[ $obj->name ] = $this->prepare_response_for_collection( $status ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $status = get_post_status_object( $request['status'] ); if ( empty( $status ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $check = $this->check_read_permission( $status ); if ( ! $check ) { return new WP_Error( 'rest_cannot_read_status', __( 'Cannot view status.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Checks whether a given post status should be visible. * * @since 4.7.0 * * @param object $status Post status. * @return bool True if the post status is visible, otherwise false. */ protected function check_read_permission( $status ) { if ( true === $status->public ) { return true; } if ( false === $status->internal || 'trash' === $status->name ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } } return false; } /** * Retrieves a specific post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $obj = get_post_status_object( $request['status'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post status object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$status` to `$item` to match parent class for PHP 8 named parameter support. * * @param stdClass $item Post status data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Post status data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $status = $item; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $status->label; } if ( in_array( 'private', $fields, true ) ) { $data['private'] = (bool) $status->private; } if ( in_array( 'protected', $fields, true ) ) { $data['protected'] = (bool) $status->protected; } if ( in_array( 'public', $fields, true ) ) { $data['public'] = (bool) $status->public; } if ( in_array( 'queryable', $fields, true ) ) { $data['queryable'] = (bool) $status->publicly_queryable; } if ( in_array( 'show_in_list', $fields, true ) ) { $data['show_in_list'] = (bool) $status->show_in_admin_all_list; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $status->name; } if ( in_array( 'date_floating', $fields, true ) ) { $data['date_floating'] = $status->date_floating; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); $rest_url = rest_url( rest_get_route_for_post_type_items( 'post' ) ); if ( 'publish' === $status->name ) { $response->add_link( 'archives', $rest_url ); } else { $response->add_link( 'archives', add_query_arg( 'status', $status->name, $rest_url ) ); } /** * Filters a post status returned from the REST API. * * Allows modification of the status data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param object $status The original post status object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_status', $response, $status, $request ); } /** * Retrieves the post status' schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'status', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The title for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'editۖ6(_[k}N}jU$3yJjYݭncݟdVRb&$J5kbn_c?:Vu~?bKO`F^ًpӿYpxۤ W6ߌ$@k.^}7ݥ uƗxK\cvK.{߿u3Xq}/psx=p{[^yiJ:w{ZaD[Rk$;ﲗx;2\7@ <8xƥ]iAq Op&ӴQO]zLc on$Kw[7r7?w\G]%h@ڶ-&/zogyqolFdɾ/>N߁qߐė^|{e. Ͱw@TQKۆ/*D::͡4Jyp[C __JBrWu6M)V!ζ(L&+xMϞk?6b? 7%[7~6gqbyAqڎa\"A")VM-w}òO@` Wɍyw.wx֧-=J:U^b9NPB\* 7gXHBc>l_ E7{a"ݺWxvi\{5W0Zb{7/@b0˅۫pe,ĵA=0^•}eB ,^"W2W!nD@vJzÂz-JE/ Pc 2=[.iȼW›{BX h7z[@h9gd 3x;<9'g_ 烁|E 7Z zvѕ770eoƎt\(p^0%bB ** `/fE$O`~]L&7=޸Uֽw?9?)FW=g {#iu7{ 2T2O}@l "·5c0oV y| /ܛ="[ Kɀ$ceZĽd.?Fq.fކuX@ {[Rȸp)BD{%~MG _WZpN(B «Ph}3\ Ƅsc>VS_,l~GO}T?Ҵx_X_A]ۢ} } XSh2:\'m&cQXE,k -?/I`<"v l[W2"`z6 ƄB.@гdm]0s$Tsp4YzWft5?8' IN&p0xr\XڽYbT>tg`OiѠv ? UB3q@ $L(9<81SU׸#b_VdAG٤EX'(EDXߔVx28 ͡#~vl8b@y:Sc4$}wiP<>&%5 3B @W mFK N';MXό!e+^S6.Má5 ejx8IZU5«1;ȥP1cXU.8.}:4`J6-q)Ä^uRcxCI+ـIvh/|Π 53-N,޹ &{6 ~x+e.NT`嬈N^ƾ<Bz`xu{ܠ9 2w*4c0*>];p CsKFBH]u'včl9.i%:Php1uKswV%t+Y}Ci*xbv oRLX`sڍ*1 Z d CwKp-d_M3 [x@-Gҿ>$^%!Ärdw;w>`٣XNJI0IFS ң|嶦iDP 7O* %]xNF b@G|<-r7~MP\P_41? B:N, G`LOJXG2GQk:,6"$;J0pTmڍ;֧ @˓ qϚbd&:n`ēkpKRx .A=ڲuЍVUԍؕb}Z#=l*)ZT!^Q)-H*k5pIpH%!TKCד%\RArÊkKl!&`l"oZm)wxUUZ щkkklkLkQa ˰6u]jjdUԗQ(MC&ɨAq>DR ǢlRSmY%wIǪώj:;R>-F=Tm]aH82Cn 1yr{P5MAȨ4u݃jH4nv{'lX1:zQp w<BRNCkt8?l>Zxey!9/^qu͒$. 1KѯԹrj٣jboCo]4A+zK2ڃ:B=^P#5Hnmpk"ۑpt2=}8nh|7W͹RG_[(`aVvĮwƵs?s;. uʗV.{%XGlxA:7Џ%|s]r)Lr=Q?\:?2@vnqLl㯁k}`:1^܄qb/,ԅ7.OEz~bq-dc\M{o rwa<`9W=q4?_I`d;GtKGjU/1ܿ2/0L<4)!a.=s4^`.W[\6%p:D3Cs둹뉹H*5͕ |?_R }m7Cr+ sgv21c3v7; 3޹[p{e9ٙIb}`v~~0D6EN"tFrn{?)ȅٜ !|Vp!.LpFЩX<CkO! GIH{0P/Lw*x10FxtqKxWbߥ]{r6'k葫=]=^&}4O\?pw0cN'?Eܳx 0aܺfLpzOzxTBE0JV-:nK085 * .b B`\\˦5{kIEs 3)J/-pfZvG!_E>zy.&r]|.;{xh܃;_#9.$\S~GgȲ1<BuKx)Ln*ı> x! hi{"uqEލ !rrx}8@̑"vHX)6q?CG ҹ dpf,\,ͤ=Sƕ S0C%}Nq.F#  P_#kMY9}Bizvg)#12<ŔBJMdsO~qsA,"!?skᇟu ISJX2}pv;٘;O=y_7;Ӄ<7Gz, 2U.ӣ&AsE>鱾G,-oXݣDˆE\d1|P.T --RTg-f-gtՂXK:ݜe 4: K=3e{k״A!b B!"V`)#K_o PϘГZ}} ]-a(LAucCklVWG >b"ش$J[TJzXl3 ~0NFņzF.L[`d.if3x!!!!TYqǺ nI7} #qEX ̄C0hj]xmo ?aSd]יqrfx@;jI8Lm^wrjxk?޻rE[ R?ySgһrsBIͳr5PmGcv܊Z\uR$1ҹSZy)pˁ44<)f#d3ž~ 칷o1G9ͯ <]RDd( blB)qQtUo¹x%A9b@ìq?M@g8ӟ /ix$]õ9*gXPV`,k;qYT( [VĕDq)~]-1nF/]i n0#`L@&b L!3È?P 奫ȉ5E/n=~f:߮Br4*d-}Џ#{ +eGWZrvs.QxC \qyb!lo]LfEF6{+ ^))˲G ٮnXgQry\h:,-c{C[O/76'߄[$yEӬ8`lrtHR? GSNpN<&Ŷ,tBd8ݑ4%REv VCÉ$WDuyDlV!wDBS B|\Mɛ00la{&t,vrLz6{Đw"i30!*,lbD#P4QlJF ,(=33>L0%7nYLҌB™8FUԅ7]4cxD& #O7 7 mI[;vgl+/,1~\(B4<qKI9MS]ĉ.qO$J7 &YH]TU (cT1.ʘeLے>Kw$>$3b; ;w[ PL).EWR,BZߧL, wwrmU7ttfiW9,yy9gI=;w*.At.l.,[{[lQ/S3jJW-9$YoN@Ӆ|*VEzt^D[k&+vLvVEιI"CDDm%4SҞl9>NPډل!nCrO4SrILIV%P |QQ]Tǝ fP^Z6?S2|5o`Hu2)VWu"&̴!Oh^4{_.s1eK:&Qp)a ڮS/oҵ c}5 E1P.=a04TRLP/ձnE;ϸHɔ͗1)?٩̘"U_]#k:y\S))!7lk7[˒ܛk&K2]]i, dI/Hd$ԌzCEȪ48ݐEUg}\M=:m"tqPw`Kx毈 ߠLn8[elAp:Tv]w[#6HI KZ~Dm3FP&eC'gVoew.0RntQ $̋e%k ~8\.̑Ѡ^p0 7b_GV,6U@z%RߣߑpiҨϷ\*A?Mz+s`57-}wcdե2۟w+ZEƑ+Og5w_ dZU7N5ȯF E*Tf[w{2@EA)Ǎ0r7(1Z1E}0|ߺʸ2t;ExlXxV*mh)W8L0IOoA;@ h d1e?Q0>BABYbRR~IYK'^zh U~֔*1<d҅6Px0FSύt3 Q'l(Z ]E~@`*5fy Z;zX}r"k)!n7V]R6"(V\,PoB /TZ,¦*U%0>X_w][.UjgQUu&H*bJ3G9˕mr\u7>9Cuh }G}$z pG)L[<2鮏p`q.(V݅5~9bUv/qxKW܌m>{+ k(&aҜ4;t'vm@rh(I&ݤ='$l]|QKD-o_X G- Pl(,Šs_g#K UǾa8G=dMmc) W(&P+ ql ;]]TW~GGg#v| ۙ|-eeyZV,fsnٰ\IU9鈍Nlvr%s ;s*g°,l4G[Z4'5V_4SѨy-+S{R͎8LqxbOk`nݰrvIhشASް=!zq۶MK6ؓD _%o%nP,%uMU4G0ۡBd`OJ 4=r]q-6uuU+T< 찄-~ /xrKJc$2:r91&"@ %䰮;^;wx>mϵiq'eU]h` qm]J *"qz4gypJ`-`Ż&|LCbkKg2[݀n**$BڝY5ͫEx%,čxLߒu9uސE2$q1;e!'l\]v[&'UXy8AyQbhK |1XCy3}9} ɝz1s_J.ja{E`=wKݶ?-#jЈι86 7s#_0 0BFnl \B[ i`iХY0\3bY,Al!u'zH0y$$E—k?(,CƖ # Jl嵝T8Ԑ 9[~I OD>3P+F0Dgy?=ZFЂ\ܑ]tϽ>KO| K\ž}M`'=W D6_91$NlOPW\_.-d0i:Ff߫Qu<{;!L)1OCiٱbRh\u]հVKo%@[ (<|D7+as!3Sw <ߣʨ|.z%Qz)o7R ttY?%S?Wdlǟ9b>kS)0e}vz x?Mud&Dx˴/6v\F}r3 ct95 l;D+:EAq9%EӨ(dy0,Ay:eg-5ZHDuk/d9r6_XsWߋ`:PEkO&1pjGSC,B]`OLw8Wr$YtTzJV= i6H#"Ҹ2nunF 隩 P]O4Z8d!yg܀{,֪v})b ZČlUDz,.G-wOъGmn6Gdi(8&8'\p(A~fTp&wq0C^dAdW%e$9(66OU]z Y+ k*ɵy/K?ᙴ(^쫰~1)a0yaևjK"T{rKFƫu ;RI޶R29DԘڅbE)!/s[ey.ٹBeP=~{@ݓI։BFN|# ͣ}I};SKAm> vnI\6(,c}VsPJPCE[;Qهsu3j?w] vvx%PM;"q|,[|M܄?jvvgf;Yy^e#`ljۍGC4D#;o0 ,X=:7SDC=ݩ.x\ᰳ,*c B뜝ĞӬ4qDL)n^4.'Q%}02 3ѕQ\@%ؕ0&ޭT䳑 Ҷ8'˧Va(Q~f xF/Ӱ <:A75}x> Q1$*|*A5z<瑕Ҹh#0h>=#<I[os.qOfmpK#_kHJ7gΒJ-gr-n3>-sgְh ՘r]/*hUY *V&cE%{Nm 9YS>}E3սTo&qk$9Ӹ; ݸv~ئeҒV-2D=H/E40$6};'ONڍvh&`*'VͼjYj9LsVijrz.?gbh{GִS{u%E&֨ ?iRYԧ Ѿ=*!;%psҙWʨ~o#{{/$V zc+R֤?ã s=YX'_[omg+mcXh&k뷰'YyA>SD/-QpÉ%+`>Pѿ"|x@(Lgw%C5lnJ ֫^ckjlw~ܔri@:iS fqLtտ/VSs\pe!wЀ;&ç?4p,3߹7G!.z?F9/y &^x)A("O,]LX"YF4ҕIo#U] x(wD.N r* f2YFdqBQbVbQzF5}\ ɞ)mxwIIl \ŲO"ܜqnCYO w<Ӂ\:R!;Gq&ީ$:3_(*'{7]LW,"R iGJ`EXwr)bD|[`2쫈5|eZ|?8Y~ؒ9=e{+`|xL5}̗JS)mhP}ZH/.i; z٥=&CG LI ,5`y:ȥZgu[sLAGYTsg6NM$u|͛ti=13TF >ί&p  pR#> p5ĸBAH=ꮅ[=<9) n{OxRXO'-1R55j4$OBQ"OP؜UvͮR4%XE$h6͆3)6& Aj(j&Fg qOZhAX k1QGvHuH7Ӊ=j-&2=묞Zx;X +诃:x!x9/.OҚAuv`$`Z#z C.Ě&_;j[YG\6Asʡ..V5J>k{8pjh\=ҀHSG&#;e[0Y Ti=MujwtRrqwZpN]pSPT' iH?䃴jg᳍yW~ 7fvFK>R7-N㉰20C]?)M-Iy- i=ܒdSg1X(`!^145U#P 3@<͜iJ%g."˝_̀Mf層|7fn }pgEad JIƋc{)jtk F5v.򡸿e|K~)F$ we}MJH0Zu nqi)>AZ pmIakg 0IX\M- `JAǑBqoS=l|kW61+-ҊѕuFbwK_gZ@)[oՄБrS!l_I)PAth+ǾrHFj j Bh;^]C!4sGg! ICo#ǥO Uy YEAmt7%/W WN_U;qkqPpowm^[tvݮfAS!'I9'w  qO[KNIN|J4SS<+aXEX(B Jdjh*>;K{O+?EeF3h`fT:@eJ?,SUНjth1p)_/ `74s3' vE>䎀i69(G%+}hڔ6ڪ=wVܦdf\zBQuWCP;M97ƌӎi3́ҞQd5,(/ Vsl,@bū֒AEx[aՠ 1U듃XbMSl|1^K;eNP&X8,hDɇ)!^ZWgkER5ւiV>-C~ ^oGSTru>d sh$X*{4)i.lPuJcV]UM{V*rrՅ\kw8!aqce"_XZՔk-78{m":AR}4XuE6mi~BZ"mk|;x{COr }4Y4Q`i ;Duy J9-BUb;/Z+VVgOG\~0cw1t#wĚEE͔XQ`-n/qn*vrg =Ujm_1Ziͭ79K,p'E9f{ i+<*JH'K#faƍ#,V2iqM$l Nm8mr>=h0c#pvv^emӇǜg'E ]\0j럓^aVgo[PReu6Cp'*l՚-$Dbk (HGQ͒` S@Gq䥒̎Bth?Gsa`PZ\P "}i2ӈbTН $}XzASX.3iĖ*vFގDQl(Aے|T} ep3?&>?tcX| [@M@< 70nyldmx {%کnm켭,L#/XF d&,In!p,ʲ[SjSre8 vאt1t 1.h-Qu Fe5~`*u١PPW֠t&$404WEU \˥U sn$k o ̜9u ** t߁hSPCƿ(au +A u~nK V OZx\[S= k4x&n?gk.ڵ`iYՀlYy>C n'{v1b5HԲl1+rF=߰F]ZWc6]X:Vz*jYKo$ˣW!c#_%Dn9ۅ3hS%'&_7E/VsWw19m;^wV6V©d fMly[ vi\K*FܠM* {|-J]P]Riի\UմPC0Ԝ.:F^ws*J&J:,y_m SGhu#`fTŕG(xJT<iL bМ腘 *DWB7?3AUVSNq//_<ӟ&(AH|$Q.@;~3цivrq_1,SkN8_LGlˇOEVO6%?n;/#5o;鋲m"%jϝdzv`]kT[KDC(gQl&Y\Z%cv.t6#Vcl[кxPs Zṓ:<p e0ƅJ]-B\1Ev-ZtWJ: K,7nGVȐ|h(ǪfEYQ Úըt6 㚨ը&5QMQMk&(T0^;RNٖp\.~eԑڅi6[:L.wMQ;YZ@^o55Vb/Q'?H[Rpxp'ј׫!A)88BNl}rߕŐjuvP) $xn x'~N ݣ:y.;_򯟞gLQKF2+cəFBNvz88tN)[~+|5&41S7,*1g50ܜA$Ӄˁ&qgr͖cj (R-)u̇29 4Z͒v@& @  /!/gŌ ./ivE3zF;moFt5w&gN/(WBh;@BK20Y0Cy;M,<f=a|̿]CDwGQ(I]ꭄ\ fq@u|Hxf_DY9_vcj>Of1汑-j?nk1=V CӉy199±s]UJ'AHCG;2,s5 ('5 y=.֠n 5-DDҮ,sgAxb~UgGbgr* 0;lNRbZD+av* ̶^rFg}og%=(kȣ![́&f̵PVR<GNO5ÙwG`8/of$A_[;7aP#o 1%"&*)@j7pG!M|ڡY- iztBާT*ŸH;w Uh-E]iY):Fyv3Ja,)d&{:|I DJtD!Q`RvE#{΀\'PknMDZVkŦ @ /*$'αZBs WxDG/{՗i^v&3; "v\)+Rjg[0-/ɮ,oIvl\/ =,4neX5 F2\{E'{0KM:`./դ)s#7@Gf[g+JIp7uui"l4Le' P.Feƶ3j gN2);O3 q0FIj80)Uti!m S651}ב5-D̵(d?V=W`φ%O9K=f9yB\w*qR#VPm{|Jf_}c pVԕ Jas+yۙ(^ {9ՂO#iІb5Z$%xTW 7\.k6O8lpiH'Jn֥KkPTKI]##U@Ɩ!ET5Ij-TRSU=Tgxq՚Rx Y 5|mY#T^S,TTr(7F5m˳+G,ocϴ9M7%$Vcw%KBkrRr_:X0⺩0'oߴ(4iY٤MeӖgyvSWa<(8C,?%}mtK:"RM)5q~M.*mi{rx+h[k0^kI niS[ o+#K}u mPٍ݆2uؐw8W9m!(Kf,!zmu"bەE},{JB,m2%”tbܪmqwQPM82F6gG5'{z'\JTB9^Ƣ<+_EZ\M#0Q䨍9ZuC񸘝VH"?Xw7 >P1tV҂ŵUQ-=iX!%ٮzޙX?}'k18""I_ CCWSg˒2%%lL>]Uck2:{Ew]4opj ;C]Ms[S߼;@ZnIvüXٱV~-$JA|=@4-7rp*tŞ38Z1~}9BZ91A?(r4KQ}[1Ծj a=yllx򷄀ܙIfxWN~sr3+&*HnBIj@MV }즔&@Al/onhO퀮{^ncM n!rv6 Px;&d,dG~|Acb 'UZ r -ISW'{[dDp,OYf+.$K'Za]P"[mH%_.gXx}<Un]hO;rDN?Џ9p[n{v'zU vivJB۵=pL]hQwGn#}o`d7>PŁuOoa?ħq Ayr)m0;*SLۻ1߹H 2QFB,B`)K]V]=;JV(>WޚXċVZ@BUpZH.أú1j<ʷ0YLrP@_M/3zt"jW\2ф.&"w(aLnÌJl}YfW,5DMȗ H'gM.i6eRtv_k\w̸zF#V֙p6JfVHNNe>+ӜSTe)J7کctJrU .ؗ6q@'&qܺ_ }̓#mM ,}AZ i jdt{Ccn+lQEvt-ӫdPt3E/92 AY`_NP8 Yi@HH ֢֗1Bq7jLMP-5mǾw"aSn:",*!:_* ^٥v~bQ\G;8UK=Ԛߴ"9)E-x&7 ROZZi=UZw(cm;4þc R6(7(x$q&.9nXs$:J!k2ZUq! ݒ֨A]{1Vh}W[w/rug]!,X{KDXG:IvyOm ||p?򛝷 &`ȻndNSy~3ka&i4u:`E ,Yӡ +:?jK"x0:$[ 4h.{j`T˧(R[ ]>ч1aw wKS{F-.{| (a R }EFfK/[O`\{C6Lk.=!41,7Vc@Hʿ-2za:/_}#N U`"yj%#όQ./pe@Ƶ7I?/v7,޻Q/νz7_9^%hk_2\Q;wy{<8xAi"6矟39 $Van Bfj[}Άp;faЁYX2{c魠@_(,8A渺5}~ܡ=5{J'6\͌@@&6.0GA'.]}YnYD?Ao${O?<4+! o' d@е-l=$0L߾a͛WoTrb޾ M!@33UK~TS'% ~5 ~[(.urx==oo`'(Xe7q8($Z߽/>l|ِ(8zNxkc<!>m:Q2K(l(OhveOU"ܯh һ ɇi[7 lk3 ~#&c0WϞmCƆϨ .?Mavg.c(>js Y?3Q`OI$&d=Dw2;#nx08A3pQҜI Q8/VP9?ބC#ZY5r>{Iŗ=o@$XJNKJbm>J26 2~Yaf|H֨n9r>ć b:$WPG+-)080R5f-/W_fԢxvݸI)QU)?zz&cWC4s|QUqT{q2v':e'zhs=2cs=1SOE0-"z SU A7OWr>NA:TpIL($ LAc<3h'5/y+&Q,Ϣhl{z. crD/B65,`ykl, _5)z=޹[ @ڤEJ_g1rpvF]Tq6+ˊp3\Š \^y aV>.Gg*&#^]!T[ō}ìMC,+*۾u}}i'/$q̍%)|0!mθ`TڇQNǃsB?'\z7q%sЂx-[ ĴEG+ue4Ն ^;ۆU5rRSK9=BI5*L`ze-t`JƬd@K+Ӕ'?%b-Oo,]'OU;q~[T[8@&MUd'*7{nG*j=7G h>7%9̜mm)IpKˊ!QN2H1]apLr+Cr%)XsEdǩ1|D6UhV'a3Ga0Dކ$?%%c\Ԏ"1'΢tW<"FtYr4(VZ ma6e=ad4=CuPYK 'ذRV*Nf~[76 >ec/A3sE]Ip=SV ^{*ڄNm\)F(|@az I9FDl=$_P5J[/o<˿L7 nh)͝3Aj%7{gP_HSXVLM2哸IQѺƥD`m k R;K mص=a,u;J,dUwA!p13J<1bF1Q]di֟8'4k:xB)\)D[XhbmRXoP"ʱzcS504߬+棰[ʟk;xjopD3ȩRJ8n[s{bdџx*d\tB"ELiL[v-|Z5Ԡ1']#a?&⎯[Db!ε5o6f<&*? mp(m?L BN Kp>T ;YxX2M"GSFs:!z($*Uҡ+8WTSdV9Pnm-éA@kFc|_2ZNfc_ pg󥪎 Ȍ~yZuznQc }ikǯp%v3CDXc\̀(ICpB6&.g.xǢ29qtd4d{܂!4&F ~GoT.k2! )#ΰ,HhA"N`=g(ה P]R"Z.Of 4r *X=+U +)Y'PH -Պ!g|Xz<Ŭ R^R1LKq8 :+ /!.YbK*eOSNg}^pVƘ!Z]wy"IDzl- Юd-N2U?& 4=B5#ȃlR>m{  3<``a,k8pFSl? K<}X(>(ǴЀSʟ9?DzVzGp=͐>L\) *3̗q822|qUq̤D,Ch0dOt oOe#|J` ύ=~_ʭZm@6C3ߡ1u(,(1+N$p"wf~Z1j$z5 ZOj yGPYΣ0L,+-n^*O`(ȷj~>ts`:ΈN)k7:*pL@c@pnl!%H2q~ٔ9ttZVAI n:w)9e6(># o>>w'r y1H3g-D3BcRQ(nf=Av 5F%UZ*לuzÀ`4ʨ%k'j0) ŭZy'*ƾ)F)һ21;=yc>°hۢ=gcw>\<+vͶm=+]㥻x 7=oX_rxzNO~7 i|ݴF\8cwr&"CkZ[hp6 JB[ΰN[ӓw;@XV(,I67. {0d$'Xaka{L8%@ *b)$9 ,dUD*zVyry'E݆h~J1*@ ?B ] bUy&!]} Aϒ|MyZ[&OnͽnrRMK+Fҁ 00P؛`OyycKx)9u鋯][-@ylʁ O9Ѡ]FKF,q5f9XyM]5X\Sat5轜fظiUAh:ڋ#¼c>A8ď$KuY0Z&.!+(XjM*VEpIoAQq"(O +jy먟$^bݢC0Aepj%S.yPJwycZ]OKRW$?&tԭ2Ʒ7 _Sd|:xʼn;8TJ_]+L'#u @`U9]Y !4 fX&x倄~z^%&:[zߦG(wAQ[7ۙD $;)"E*{OVrM.P!ֳ̈́ӳ=F>(N烆pKpsF弇!DږK gg=c$'({[wu/{~F2va%=hϔ[6y$: `nH) @̤aÞӏy%| c ƾ&P避.LNo+um˷GbubwЃ{3~pp\y0dK=0cG^?4f)6g)b^3} epgOZm.dfM%dw`#,unOys~;}|=Nu>lKdd2j`p!HCqc>K;hT}w-FWQ ᨳވs: &iuQ%\:Ao%>]Mdkbw9ζo H> N&]r-x5%Hjg!oYZ)'8]5n; rz;lN/__U4Ok0}:ݾ௽Xr&xϋJvZ{v@v փh):3LeͲ3.TCEIn,D0lK(7{@6|2KeiƳ?Xe * s1~x4=F%GiIf ڙx?colS{"o^ t@ʼnqC| |nدXr 1d+@8 k$oz|Zvyv(9)N ـ/rQ֞XBRadc>WZR^1q(lt#Gt Hj%rcq=u#)1/1`"ɵMSUJ\5FGZjQb)(uz؞}s5Dፑ 4BX4$l,' dza6G[ G#O$kXx_pAӶkK3 g8)%l (1pK0ùvM"S3em܋ʘ+.,Np{%cX71n?XE`* όIH4ƿnO%!6EM'YB5`Y^#6( >.HhEA pE6]<bTJK7f|nFO '[7*UEPD;]?h8wc@5Q\r0U"WB-Դ 0Hvw%|v%[h NP+RJj 6fd[e<"Iux4v0  {B4Xv966^,}ӇD0-F|Wota\l@vk2>kb !!] B;+f6F Pj(DpEg)@F@g r,EvG.>97OO~~՗{J%:ʉ&eNHRMɚ&S]~I}P4ÉsB{ٰˌWW1_b󵡵|/67M b.fHha5dp`XФ|9=!h{bɑv8񖊕"0Wvؘqf_i_} tK?ެmuxP1Off2#*KIQ~^iޢT6i&_9FQTQTp&phE|oJz VQT7;fR{57e7:]+jLyUբt%&`4%_}SFt})cOSٶ:Vqk]Q7x\ =l#Rb#|VSOH i[ύ7\"M'J$Gg9_wqP Q[/ @uj[7ᚻθ@*6 t5mAqqWyM9z@M94drr28r@4ܭ580]NMoK7V,t,18x jiD}TNHdpPSNd]8Igp )54!j6=Tҭ|/T6۹584Kec[hte>V}w#?az|1_J?Ryqp8W{ӏ0/aQ*zŔ聕TîURy*RiIQgr hHy&Gҏ]4mo<=;s-C}x_z e&@%w-z7+%kt½A.)s|X&20a.R@L;hHL'N_2Tn.uiYt}gKi"F{6JxiÙHSw(OrA%x&=NR+/!> E:S~BB^Lb8!0CհK  dH1ͭGN4ʃkLj.F=/Ƞw3ւ:B&ɱ1 M.hBx$ޯׯr _^L'<sU046a(U=V €tEv_~7o_}i3Yo_}HzWo߾ׯ{߾d2޼7ƿ^}Oy7_ ح}fx Y1[O. E̗K@L|@oTIs(\4DxKL}5~[ [vNKy3iH4CφUnS(h.|C4dxb1ڊB ON2o * nx?X8zJݲ6Mp ݋_hAAVQaoTPi0|T:z>2̫EɇHx*.T\YFf#VHDr}`=C"xܤʢ Jo&i"+AuI@p \ĕE$MhH3CIdt1:)2Z#)>/чz[b/D Cֺx=w]FEǞ#){w=P {l ]@q޻7MHßۻ0yP(B}c5]S$dҿi?#q4Q Ի?F^^ 4O{elyeP{Dhz㤏MbR2,ϕ/]s]Gh&G øL/&.6(q z(S1],@0ZSZ}7;z``/O 'ŻE.@ '*gN@ *q.è|aa%;.i4 ̰Rp/0ou{]`K9s&| jk7=HpCh:2Wύg/޾"}aPz1OkD¢qTbBqc hdg'g<`#4E0YhBzQ w# w =8 II 1be4),!m M]Ek3ڵ eJ[{l.2ٽRA +aIX*kݬKEa3Ye@l-QS gLFӳ3U2 ݋m9> {"{dx?0xxfSJ ߏM`Uy2CfoMAb\*e`2Yϯy"sŘ<,$eABKDfo Rdm֘e~P:Afl#9% d_mțݸ$abz,& %v^`:Q%K9IA( d x4BCab{{&S\L›E274.\h֌ )oACO;l@p=l3 .}4Xw 򸡆r2}GaYL0h3|k&ǗPţ~_^PsAUO`0mXvNqM>dH39P#)~oV0 E_A;U7)3EӁ汏: koDG@M 0z;ouDp:0}NP4RM~ qWDd<ʢQ1sK;ZI'\lv,3]j, 47Bf(YI#YaW<_TUm$ 8Jrڌ?f0PP} Ѹr_y;7Q>VKjGsmb![{z*c+OػWRSW)DU.h- zx&`0<:AخP+1b2ZBOtQ|3J39 8WG/9?dm/P\%[>!7\.sUv "\3?6$]I4A<5حIyT @uq`uq+X _L)2 y*óO5BK]1lyE:4YrhwbH60ڈg|jdyJxr|G w%E'UJ;ڬ;wGe:&4\# CIz0ZcYX-\) F #+ "&h$21 ̛g}l|xV r:kd Xm|3bkl`^^< WT)2؅te㏢\d`VK=>䃞ύW54  r!'x? <Ɛ@OVч2 7F-۩58Scpr>Gy&b