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 Zk[+&)dݞ}\c{iQb%$YifGy;7SKN.$W)m]U"@ ^ᳯ>}ׯU^>yx&x8yܟkcҔ n:[uw:s{:%HM'>$wE8߭xx{q5`҂3ioG,LioB>&\A?'l$Kw?k7r?/Y67g>]Q m̈=ުH,5=IҜko/7 F!6DeMiYV'4f]AG3ҟø_g=kIl9֍ C k.$sy5;d[1kցb5E\}A=?^y{{νY'Zv.ߧ "aNXտxۿ^o6_^s& sn#BnoY\΀$gat1%BGHd%E+PsF(5UQFI*đIIh2wP"ޭ#n)bQƃQ.2,"$UXfʅw}k [+7qŢ}]KH݂Yb?v'bҟht|VڵUgCҙ0fK0혝?SLzOo5vd dyGW?tj`"t ~ ~ղ37n{oF`v.F,(`Vodo`◅nO{eLsO3wqgm†e8]z/r0t_ l$% q{1Xb<`k<@iewaXg?yо{i<'BHYrqoA|H] j6{jkvᶒPAc΍ghݚll\g$?}H^ya*{ETwg/{i=]Av< UB3r=҈ZY2JkN5._UxXg~U=4ٟWٿUU?Ypm֥^ ! j}`_`!qG}»+2M E%M%ʿ;鍡czr+ń6 >TMf#A&h2zة-]FfdMB]пrǠ.qVUMc8*wHDz/T=W%"1}GS)Fk!uU*?Y1bg 5T`7 ʠ X32l;'M=F޺d@@% C0@±2 ؃Kٽd.{˂.ruta2mGE^zy[h 5iJJÿ6YWpT.ր ) "ȏTeĔ7-N6t)!D&ƥ  A{(ar"l.ΡXZ l@^P}l4l4&H2]uY}qy! )DW`"n's`bKBB[o1 `kxFB"l'n do,(KZŌH4{Ř)90JMZJ1WD 5x П5 CL&09˸u.|br@xk'ƝU*GbT4(J58TA2 PH-d_}#&[@-l㳏Mcߝ3yF~I0~.p,{pyc4 $\is0M\/=hvPncF%KNu(mt9 3̯N]l[#foV?N-5 {UIQibaDtz+X g`/GҷA  昇ģ] 7M>+7^%=i6tsyp!uYZL8j#&^+]ĕkpjVA% Eu5ؕbnY-V$ϬX mV)U:*!E4WuF ~8jq zkcj;J:[㻲:Z4V[_U$C.|D@^_׵@^CǵZSB8]v|uX]HgFuSUꦊl!Sf[{jx"Nucq6wOINƪj9T|ZZ{@ ><: d7O#nHϓ=ߣhwwGFU GOw ؽcTuiA~p ߇?p>~Ԉ]4招hC~7FY4$4a % dYڔ~cTWS$nw ^1J4_]ڔ~ "ZP:*-bq&l)]/Λ4Tw]+R\i-0pC°o+ ;bqaB޵ʥq/P!]ykSHY·|>!#0܂fJ0{ b' 'eG&6x lR'^Ȁaދ uԙ.YZ5 ,'_soC{ohssw!Xm7qvX^zkYd($Åg. rcLLom.}/X8(`os50WCs52WcI1}_Fб5ag c6'>|3$00&NOflzkEa[wc⁴nnx7?[3I̝ Lk/n,^~eS"Ƈ][";xd"tFr{?)Ƚ#sP!dy2sc+ 'u#`*7h.nA蒟X͘K%!aA@KXNTpqa|3dtq y{e8GJڜ#>aɄ#¥Rzą*w #t]ށ9a Cd^-`l͍{gt ĝ0ռ.4_E`P@n")FOuΑJ6Х/->{&lH_a\rZ?[aA%_&[츩%wڮSANmˌ@Ks충@ (@l_z(7I &K8l㹃s7Y!9)$R+a}o}lL:xApR[d#SMu^^@+(Q/LD0%S||/2u Q=Ut.L{D^=KlnGұ pf,  )ffZuU@ɄMw0C!5!7q) j rME~lB_#klpdA+PV1e 82R2SH^V;r{5L 3ΜM$${bnW,gpyjIQLOobLcJJL@ ,?`tSDg(l6K''CH"P’)=Sf?3Y _HS!yZ'0ER(҂X-aP%Ti UZB -܇䵐eNR*wZa: ɈSG2JĴrrʀB*#!QjLe~k3+%٤7SHrX&6n@߳PkjP˸)ZtK.Jfs5fePVӘ;E#wIV|#lL[Ele Şu;76\Nh}~K=^`.b7vFky(g9tuE٦X%Fikv\*L;M䧮Խ }D|c9Fn) h}ocy Bֆ ( 8c' wI^-Yc:BNהM`e&Bl8Ro>JVQ2.Bii>\zfyZ9o dEX&V`[Hԛ ْr0\0ơ)-,\\-J%ifrދ6#LZhmfzAbmHhhn9P 2^#]Rsvg~Rk% 7t`8%t|C qM|H8'zށ|H8'z̡w78%\ޑ|H8'zs1zǺz#]8HNz3pyENQƠ(cX1*|z$>$SbǽWU-ۊrtW(&āWB,ɮ>~h+6jDڻkх9-*W0f%8[ ?}IBO)#5vpY"KnZ^.HQۧri;۹RJӦ$ȻW{%I[ S=zbHK=paӍ{g͝?Y՝dN%'8YE㆟cq:(bN]A^#5Pn<=JGY v*31uBYx`0(9b^)T_$)Pm ˈW=u-3X< ?ɢ%j-;]AsB_:z>̉ש+];P&*EY+?]OoİlzURLP/o幡S3G~ɏ˘P/Ba13f_4՗Ϯk5Ocb~ iqK7 ʍֲ 禃󒩷!ՕVpn,4N?OQOk"jBPj;=ͳ)9O*puߣ&r s[j3Dmdr‰:o?ŕV`jSq?ȥAJZX"E%m{ޡ/|#~:98 a$~cs|?/J:$a*/`M-K36NH `C6R3k}!op;al%Wrjԩ\wželQ*?(z S,;}Bo)-D鈁=J(ꋀ֕EU&yo^YL9 Trh)Wo8 0Iwvr 8@ hdM -!)<L-+60ĤR~AIߥ<׵Q(B5dD G NC.6PDٰ)]pMf7<G3_/{j-6SvEfTs#@(hI -kae5ڊ`5 .tpK*f'._8oiZ,pbY.l:eQj0c +.fV*u:$Xߓy [)l6~MS 󢹠x.9NiIo09x64)] mۺƮZC1u#ߕ2݀Y_InTV銓 C\}%׋wϭ9# B Ffgxly+,$Ġmp_\Eqŗ/W՟҇N='h- uǧ>\.36IZQib n–ɝq܁Ó*_o=;rTd]%_ӕEಢrJ wZGEae5ȄVT@N/B *Oa]@SMIMMɹoJ6l3Ԯ `Yc{ |_ZF!P6"مJZBmYE@mlngׅk'ѷ3?/%Jr" HQXFc*ˀae`G4eTYDѭGI:$}z.=Guhfa:r*r3X;Ӹc%|9 [NƕfL)jwZ[X+wMF-*=}3ʛhvn͓+84;rO3j$k95բDj&slj,"vJѩBV:7 1;75K弴RYyYoW'7yסnٮ*cn7Hnٲ*7c;jƪv`+SҾu3{4WUwyW@ʥ#BItDA?ab-՗B5)IxOX1fmndd3~- ͋$-rY ̿|lT5 E4'9;ޭA0| vEGa+y\)YrUed/%zx9U-,y&KZݐϺzNxms= z&!Ĺ$'N NqٜAJ w/{ώ<)UAcrJϺȖεisb&E;8>+\ƉHGl7H_fF^ aB:` `,@]p ^RڭC[E%QYUU=_ѼZWwSw&`h97t٪6hFOd7ΏST?IB+ R'k6r+/U/_l-^fQ^,1 <}ێh־e"Ш]RG1K=]|@xe«Pjv@*.nLg|>.\v4i_E<]^cǭHjX30tk)aCIh''I' -nm#Wuz[(Ͻu w|qu)9Z@saOeN4IyVڤ%X9#jUSłfӮENm$ZLiW.(TZ\@q('J3^c)U4lCiNHn(Y.W+]8YE{CH{W ŧ%A'ynt^-~aJ_D+yw1X4 |c|)XCD~5s(z%:Nga{Er7siKOvFԠީS 4z06 7;L ֟`Fo 5_ \GB[ cnccMe7bC88A\O=5q^niR'a{R[KpNӡ R~azAIGQzBymU@:!5$ KvA[bYHDxQA-[09)WO/elwxThAq%]vWs8ܸ|Eol XtqۧZʎ5n]/;Qqc*X^0X`ק[zmdVA5Æ^yVxFGj(v҇#s`Ĥ\ cɩ\ѿ sQoЁ+>$0){q ;h4N(ehe]9Ѓ83&Xeiԏ4 w96{8JQoUw56-lǻm#k7I%BGcGŦ֎+#Ȳ'%L//N9ʼn#/QG |/yq BRvң3E%t:f^AL]3vF ^-43<;["CҗCҙJҽB1-&yz_`& %OpaY/gsT߾,&a0zYNKO铟H^HO+TD1|gd AGB7ƮoLoíя15~ h4m M8ͿQWX*Mw 5_풖hPB>9ƩiJmD_[莫ea\Pٰ?OypAV@bT.Iў8i${r^aO-`Y٠ۂDjDT-$̺K_MsĹQt˙*h#ftGLz*.' 7o i_KƐYl!)7;u>O aDbdK~ʡtV=h*)^i6HɓR2l17fT.SA "%o㢗ч)jjחR-._K ʚYO2ål!!ZQ0ͭƑ0-pl-.Iy Y+A~fTp&lwqjټɮTM\=l4⓯(#AyJKWXEJC8_XTfaNz'<ys۩lKXCJ;e1d\ZҢȼ+ec(e.H(Eyf9RQ}n[}dj2Le"uJȋk=!;/ sc@a 'RA߬,qrGJ`Sg~;S% e6_nIlhmPXj3WFխrՕ0 3Qsuj=/z,sKY ,-͜/ @lz;s;dMH |skm#L/kw.v> G@#WnӍGChl=G*`Ka*X⹺un(94*{.x*,ܶm-`Mӵ:QxyaTv_%`t>*rNo/J$L-DN5+Mt]ȑ6EGu#x+b\^qhJ5 3ՕD\\@%80:T佑TҶ6ˇViWaQydф1DRKvj x/lTA+uERjXe=:B5QVpHZ!XzZ[f 9N;OYz`FGo 9np2eT:aroiBY*m24ló*yx<Ɇ8wHʾ*~T.tX.zW&sY-MV9'ڠE/@UGgnj넧K//YR ;~R͙YILE7#,ٲќ?EƤW|h4;W fnX =Z)^MyT} nM k4{w#q-0M<1%Z>&=eK*.Eh`$hxy&/.Tڍjx t&`EUfμj Lr$`m=LLcVijr.,G{5wӃw!Y2\%Q"V$ܾ*STp4 do[((y+}[ߝ٣$KXkO>2WtcG-c$Ip7k6.(İmTMV¢$g}.ˏL}ni AM^`zn\P[ܪp6?  gWw+6绰ru5D6r΁OHaܔ~l2l̟QXb8e-T.,ҙ5Hw)t~[HwGKw G֙KRK$F;~ޏzQ.JyA(ޭy5D>X:cUrfW4:D LzkR`GƓD\ rp'6$GYހ %;%AK#53$4+`5k,ۜ#}֪_?V7fKf]%'W QA*'#*mNme=;bG@M']FHt; nPVE%A/mqh/;L CrzE Ӱ}tm‘(vF";QU %j~C{)r6Jw"SցGȘ,yDLeёJ)Z5Z,<މECJ,G 06٩BLEpR|KO7#'/z:F8XWLAb)?X܋G@ֵV[߷I^lP>~AaFv%{:8xDg"5fgh '-9Pdz:^)ғߤ}CF{O)l1fʨ?fHlG}W8 =}n:ku (^6~)a7wFXLcRF[Oe&|p5dQ04ٰiޮ:zGcblMdMf޻MȋST""Μ,0LQ3Ƌ%u/T.{bdduB]YEx.]SZDɯ LHՆWxv󐟕dK[,$Lg_: qsPzƳ? ͥ}+U={g?rȁ'eIzCy~0F)1KHT/H %q_j{7:u^柢Fԛo .XUĚl6;aZwM)jݨEӘDD eԝt}-ɓY->HAO :2|.|3/Orx{G Ehh ܈f4Rmx&Rɩ 2TɏmQ٘Z2'}ڋ!~X^YQ%k/1T) уxAM,[w.v 1 'XZxʂ cmRB"T_mpÎ0L=t Zk5m7H4H ^;InRF]xy6KƻO 0Ճq`ӎ)鳒o1K+YuXuW,nkX (z:RTi*D[X 6)Q<7(vmeWviUTuDN͘_yH=p%@&]om|U}BiГs?u ڻfɆ["G:9n͐zq}v&mAjSq'8܏xUK㜎٣IkRrhH Ou| MƉʼn)i cE1ľjd I[L7u]E5~am<5*D=|&jpJqj!JmŨ#DX9BdNTJi\@6ڕ[iCkߎluqڬk$ĪL4"Ъw}nou[YSζw3Ԁvu7ueկU&-̱z$Coa"xkk.m婹#DX9Bdy(O5w#-5N%}Lܧm@-CD.2=DMhbڥ{Z:cG~8{={Vap5&k&SiX4 O(XM'VX|zkE`8<~Hʏ|:A>k6i ֢p]m5XTa^7}h5.d/4S,'h<%Į#nD1;RN!^G)Ċm7o!\3Ìjdԍm8&lJViy2ؐ8zq=^TӣE$q͔d7I;YScy mĺ4mC.Kok&4rGT'PL3q=zj}zE-'{bZn'. Ŵ->?.'],i7I.c.vfm#kߤ6/e y#\~"aÕ`ǫp;Mm96t-|߇Ģ=M8V2rX)I ]d˨S$<W*WF]ie,`)n΍|"OF<^o]Kʚr0p.5/vo=jm7`?7W@w`1|4|TưD0aIo|:waKeSzNULz8,WnU| 9-S0 \+?Xn[KDEՑ/9cS+Ņ*3%A,pUteV_,bMpt[,v'x%I6p* @ 9s8 Y{4j.n Mqj~C QvDX'Q`UԨ( 5٨ЋJFgcF.]XvfUuh ij6G]{}=Iս_֚ZT kjYi^QuKfӲOuC}7d1mZ\43k\\taX鮨e- , Z>ܢ >CֽәyB|e} 7r7sOgLў%;q{:䀹=%bHvvztVW®Ũ'rq6 l&k: ;} 4JR`IjՖ|uׂ pU^ռ6mzUϳEU5-pVfjZ ёwr*JJ:(x_m SgF Z6uZ\^ޢ&[#Dŝb>4{.z%fo ՕЍ"<@Lʃh)TWBNO?J K 9B" 4G(n f2 Ĺ Fr1Pѣ"Sj//uSvZCᶳ~֩^1+O_oE!FP|̧;ӅԽk^ Qm- bE9 dqm*7J۹+c;x vS ^< ;hŽA,e0ąJ]-B\1ym|.E-p ҵx$Ýw*B:q CSprKNYhdUa,~Lp4p{ҹ:j#g:NEcG:;E'YM) #H'ځdL=gLȺeRP)ixlJos)T b3K[9'JF"0Q2W}kwnj7Qagoc;x$}p 1eО#R -=?X Ԭ FDկF;Q D5F5jTj\ոř4E2xޑr\ †r`";QGvjBl5_󈳻Lw.΋tJ\1-ucd hue!+ӭ?m`h`4{!]H9J{ /zNqj7p^D""Sc gq4NLv}2Ԫv<&YYJpsŗ2Nǐ*!q%vϰGṱw]'O}P_N]); ȻI-=*l/coUf>i_y a[\5\sg.{ͩ2xq;!Rѹ:7s#b+q#!qzcȠ{4<v5' P7.OӚ*najGn{ApL(-oIM>J}^G?b C:9q#ꑻ1 ) 1G3DéOtV;,ўz-1؆kGN 8z6-Bq7<^VVL}E[V_ +Oҏe';]DrLScwA8elRZ{ άAgILrѨ[Fq$qXI{g W ΡLPXK_ITHbM5uWk5IidW#ĬTm>Rzwtv Q:btb{t·GfA8_*}곿"cZ:ׁ4\h /4r; _lV\?r]O0ZUb΀kusBjZuN7.{9n-fFjOR6B&GF YRd%Xø!7ES)s1#!p KZoP)#6KH ha#g={uymT*R!20Y1]y[M,fy=Dw[4Q8(I][ x'Ԛӟ!)}Qe-gx~ʍ <}=ƘߍlQ#eU/ӭlexM1;9>P|\s#+]̼1ݦTXz2U8d D4˒FhB=E )Hf5(]}M i"iWjn9aw1Tc`,Gber2 0;lc/?h1-BdpUxqƀ]Eo¹Ӎ܇io:ecIOhpVC=Dec ) -')nn B h gFlwo)`8/ zomm8y .95QI[/y_x{7Oq4h3舜eT*z(%޸X}ٖ`g2QZ c6GQ%FC~Xt2ke Y𒒏 GTXsFc^eu< SyKUy24vɩo K-$vI,@xVZI F :Id߀j7-KaCT⩾zbPG+Ư/Gn둖uq<藽>G4eCpYv1MO3iZXɏc`&cu@ P%_NUD>MuhvRJs@At/oNhw퀮s^n՚M] y J7 i9hȵxZ/<ތ&d,d[~Ncآ 'ܫ$USۙ僐m}?Ed-f,]> lՑ1RnCZu(,pǪ0BRVLH?!y .<gf:vAy<ݖod'E?yJ4-gr<1N2s mZs&Q!ZTu~DJc#eHOLb(R/*8l4(3 r}?mzCdFU孙Ͻ%sܢT&>6fcMucbBTRGeA^Mi!&WdD׮gjnk-4E42 u8:eJ)Rr9x4YSJ m6Vqn*LbPZ^'lp{! d'i2͜CT^)JCM2ctJB urU~4y.pA ͯuӾ:O?Gw'Nɓ#\?i9?;õ>5-/V",^wa?92 c,ϸ2ǐ㹃s3x#~'@ۖ!3 L"[pJ90w] RtMA^t[ZtQ#^FApSSsTFKM]HX R*s()JHu_K:^AlY->FvϜlUIE-f,%IWg7ΏuqnDg)y%djU,Fx^s5՜֨AO?޷|qFxظknan@G<86>>y%/̾|\B p+K9L6 BE[sw蹱UlIKm n}|#g?-櫭 ~zf72G{ .%7G16`νsijǀMArOm¿Ej`Aݷ7 `;O;/z`ذԳq3/~ŠC39HֻDTe$BjFP]ly x?W`_&?m™g.wbyftgҹA¥wndln$,:ؑ0:1;/D9F8f;좍ds~v~gpÝs.\O]Q#(MK3nXqWx 0,nNŐ|~cϺݳ{疌XxK(!*K'NP8nxƣIq͆{߃_6%7ou @"W3"P2P罎cq߹(L:w꒿-̲-|* 7Ϟy1=0nKȭe1xb,nd@uDˈ-lQ<$8B~7o^}S)4p̨.̞I7ߩZ:Z=)i`vv;Ԭi@8@K;h_|enNpQwt:;ݾ*4^ɷ|4|X)q߼! P:q< uנOz`IR ב&ؾ5˄򇬸weu7n؄L_P+\~>e݂N/>e {(f(0brYx ^>!F2{x]l p,i.|FuzΠuQRXoer)(X5p> {]7ȯ@X$XJKJ|e ^>J2ֱ3~}nad24:'J9J5R5kKja~OSdQx$I 3 VZMS1J4brkL/[P7_ohQ͠xnؤܨB(i-n>a ϼq1dz;O,ua7W1ϧ*%:w%a݆ɻOl'JJ -ԡ[@bE򖬿YB-oWSԛ@™>A1$kY& w"K$l#ʎ>)ѝ)gEIV 惱 h7Ixn(jfUk̶:(}S$[\_gS~+B-ig_zA="-}\&H*27/(}󕿉[AH1.a֦!)۾q|*]m'/$qooԍ5)|0%N rń|xs,;X~ &buKpÓN Ĥ/R @:yj%ڰ^akg۰FIZhj)UG(M JAUzye-شcJC[ v24{d$'䧷^`JSXcA)CzTj-tDqQOMU<#3sUov$]Tzn@ЇI4_3g[aJԲb w希'ݭ&F ĎE5>Ϳʜ2$_x҈RjYL$.)+GioPCqĭƕO hZi7Oq7fJfMAvyqI*in-J̉G(.kP%JKbaSzȡϝL`K#S0Dp*kiVJRة]Oc)Lai;3W$h#3HY J^KWG XV;ZΖ@BK>KƉC8)KIlTa쥐,b v5wEuVX߄^DuW!FQ4.Qq )RLA/"8:0Z3A:7΢b(lb4І+š,QQ%9=̀{,"?)FE8:HeX,X3ek/_ ĞQ•|[fIIJN»M Ru ic8_JVml(V.Z@f5 ]Z%WCSΦSbq~iS;(-wT;^ԵIbv-z>p=SV ^qudmhKA#݋ ~ftc s0l*$iBRDeBfl9ت3Jﮗ]/zٝd~6ս-M1)Zl&6aYNSqnSL nRDUqi=%v%(!RCl[z+qm/cmĪH%NNjQbtƒBvW=mffDbHabx!]di֟n84k:xB)^)D[XibmRXoP"ʾz}Sv74o(xrP=61~m+mOMhU:S:gM`{d\`oեٝ *L\C&N!]E&yȔ#|n ]?_l+Vb)HH÷x+%ܰM̑pէ5f<%Op=k|2śé wT>9Z>H% MO%"1(jP-l6WnZgp2Mts[^w!Qh1RYAMQvM*W_iR9WT)2B[I|9[m-i.Aa@kF㰃# {<,~.CC_+ۋǡ*k˿J/Ֆ,/VtItwQpv1+o[0 s~]4Ӿ-?hgt7&WkϤg"ZO2o*lD5 rX'o-:1]zkԥuuZmﴃzWP?ϡj YO&Q&{JK˅-&}1{ 7 LܹYsZscKdXPz[b^&[Mi}gh/EPxN3_ "]}hA=r//*9+>2≓-6ȍxѿr[|/tn!M0$rME1  ;_ęY`jFy^6A+U/r$AJY;,|­T^rnBA.[$aѻ¿㫁78k"lU[x~x3'UrFvoֳtݹ{i>]7pĹ]k6-ݥͧ w|їIHukŕ1tGW Tu zWc͠?_̗pm%=Nop lq./Kv:F`R`,E^ׅ@%Cb b B\Ἇ@ֿƱΈQpPL9E6GR(QN)_ `5mWG`t~< $㺜σ L&uʢ>H^T |EZ[y^'Mf^rJ{ӊIKȟjs /Q)/9#qH 1,~+^ۀC *n A5s-$ CEitȋ%_jgO#0 (ظ`Uʋ3"s~ГWcߓo4HӒT4.fgUX)LvB0/!#ep-~/ rE7R!?<)`͑"Z ]hA8q"rĨw3Q:|޸tȷ2N[olg ^,-mgv ]E5lM;I|-K+ -At`z_Ʒq9oN/ #?h4uB_A3Ɛ_z"Lvպf] ə6'8sGR3r-$}-@uk rC|{eC%*,xE[O[x.S[#RqL1 $!̺@ r&A-EB |*+Nd>Y+0Avbqʽe\H-ڀ,]6&gQ()M *岍NC6ǁcV @E#Hm%'NꞯKq;Q|Aj ۡ^"]ͻU_$Fad٪5OHU0gJ\5 kR-5( h*BJRo/HM{M,FRp:z0oWz#YꉿSWxz K/F~R#_蠽鸸ݝg(,θh Q :i)d)QIWd>×7_}캞tMnH7ũ;.ϔ#\d"ES!) t8E7+$8ɝ1s?}h!q5:c?_}TӐzHYׁ$Ļ-z0: 2jAvnQg` FGt |,K̉k37//YS9+W+:4㧾7ׯyo|xƛxȾzW_68lܦB ?ߕ `=~gHa6]JLP3o ʀwFW_}i 'z~muݽ>bQW/ .j3Wɾ0+/dKwsGO ͅO\y<d++eN-{SR#aeʪ+y=eTT1{7??cv ٦;]ȧT@_s(W'z]@ hx(Zڏ^}u&E8ߡu1;$3w`N!@ȱڅ2b~9{0G3c{.\"Kb7?4~әyǃ@ #z  X]SQӛ4/Å?̎)ڠ=A{a ہ\ $R z{ثg4galr8/ݵw0?^]g\d4`RD3+jAGi۰vq7}igA┍(dUPIZ,@ YQ㉡a}%[i7tc FX rG)Ag2blȷ|Y]oޠ\9Wq6l9˵wtC dqNM@Fx?Wc. gs}gLz 곅9|"3s& ]1qbaI(2$-$`!4",t# "jݢHmGêzz/~@^{!I?隚~A=4HUF²J!m M]FDjSZLi'A >`,gX VAPnx5}~Eqaih8gʗ.aiX*k7`eĎ؄2M͝r4 kYK<:_{A%Jn9aYv{F?#wT))3ʐZ8Q>>N@g@[# hY)-puDNq86}PR&ߒ%q<^$>,ZeSw%*0\PrBz2ӵ bYxNl֋5G"dyD]dRADTIs` No6(<)ä]1˟uyʼ9sNۜt)s'_.pM"ϣPqS /_C@g/ܟ%dX`gJw0R^rXϳ,\Z奮",9`~Em=R 6Ad;N'{b|\{7m#UJw=md=stܜ3&'x"ߞ|EDChQك-V`|0"6 I S6 m75vf Y Byvx̏Oכ0  rgѤHKcӅhƫ ݍXZv=1ʻ3lVꍍx2OqIJ^ýj<