From 35aaee7f3efd05793579948c53ed33882f9834ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brayan=20Cer=C3=B3n?= Date: Wed, 13 Aug 2025 11:34:12 -0500 Subject: [PATCH 1/2] feat: add slot to extend the profile fields (#1254) * feat: add ExtendedProfileFieldsSlot component * feat: update ExtendedProfileFieldsSlot documentation and images * fix: format code in ExtendedProfileFieldsSlot README for consistency * feat: add error handling to ExtendedProfileFieldsSlot component * feat: replace ExtendedProfileFieldsSlot with AdditionalProfileFieldsSlot and update documentation * feat: add Example component for AdditionalProfileFieldsSlot and update README * fix: update README to reflect correct slot name and widget ID for AdditionalProfileFieldsSlot * chore: remove unused default_fields.png image --- src/account-settings/AccountSettingsPage.jsx | 3 + .../AdditionalProfileFieldsSlot/README.md | 87 +++++++++++++++ .../example/index.jsx | 104 ++++++++++++++++++ .../images/custom_fields.png | Bin 0 -> 80606 bytes .../AdditionalProfileFieldsSlot/index.jsx | 32 ++++++ src/plugin-slots/README.md | 1 + 6 files changed, 227 insertions(+) create mode 100644 src/plugin-slots/AdditionalProfileFieldsSlot/README.md create mode 100644 src/plugin-slots/AdditionalProfileFieldsSlot/example/index.jsx create mode 100644 src/plugin-slots/AdditionalProfileFieldsSlot/images/custom_fields.png create mode 100644 src/plugin-slots/AdditionalProfileFieldsSlot/index.jsx diff --git a/src/account-settings/AccountSettingsPage.jsx b/src/account-settings/AccountSettingsPage.jsx index bf89102ef..1564ea3f0 100644 --- a/src/account-settings/AccountSettingsPage.jsx +++ b/src/account-settings/AccountSettingsPage.jsx @@ -53,6 +53,7 @@ import { fetchSiteLanguages } from './site-language'; import { fetchCourseList } from '../notification-preferences/data/thunks'; import NotificationSettings from '../notification-preferences/NotificationSettings'; import { withLocation, withNavigate } from './hoc'; +import AdditionalProfileFieldsSlot from '../plugin-slots/AdditionalProfileFieldsSlot'; class AccountSettingsPage extends React.Component { constructor(props, context) { @@ -732,6 +733,8 @@ class AccountSettingsPage extends React.Component { emptyLabel={this.props.intl.formatMessage(messages['account.settings.field.language.proficiencies.empty'])} {...editableFieldProps} /> + +

diff --git a/src/plugin-slots/AdditionalProfileFieldsSlot/README.md b/src/plugin-slots/AdditionalProfileFieldsSlot/README.md new file mode 100644 index 000000000..26c4dd9cd --- /dev/null +++ b/src/plugin-slots/AdditionalProfileFieldsSlot/README.md @@ -0,0 +1,87 @@ +# Additional Profile Fields + +### Slot ID: `org.openedx.frontend.account.additional_profile_fields.v1` + +## Description + +This slot is used to replace/modify/hide the additional profile fields in the account page. + +## Example +The following `env.config.jsx` will extend the default fields with a additional custom fields through a simple example component. + +![Screenshot of Custom Fields](./images/custom_fields.png) + +### Using the Example Component +Create a file named `env.config.jsx` at the MFE root with this: + +```jsx +import { PLUGIN_OPERATIONS, DIRECT_PLUGIN } from '@openedx/frontend-plugin-framework'; +import Example from './src/plugin-slots/AdditionalProfileFieldsSlot/example'; + +const config = { + pluginSlots: { + 'org.openedx.frontend.account.additional_profile_fields.v1': { + plugins: [ + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'additional_account_fields', + type: DIRECT_PLUGIN, + RenderWidget: Example, + }, + }, + ], + }, + }, +}; + +export default config; +``` + +## Plugin Props + +When implementing a plugin for this slot, the following props are available: + +### `updateUserProfile` +- **Type**: Function +- **Description**: A function for updating the user's profile with new field values. This handles the API call to persist changes to the backend. +- **Usage**: Pass an object containing the field updates to be saved to the user's profile preserving the required structure. The function automatically handles the persistence and UI updates. + +#### Example +``` javascript +updateUserProfile({ extendedProfile: [{ fieldName: 'favorite_color', fieldValue: value }] }); +``` + +### `profileFieldValues` +- **Type**: Array of Objects +- **Description**: Contains the current values of all additional profile fields as an array of objects. Each object has a `fieldName` property (string) and a `fieldValue` property (which can be string, boolean, number, or other data types depending on the field type). +- **Usage**: Access specific field values by finding the object with the matching `fieldName` and reading its `fieldValue` property. Use array methods like `find()` to locate specific fields. + +#### Example +```json +[ + { + "fieldName": "favorite_color", + "fieldValue": "red" + }, + { + "fieldName": "data_authorization", + "fieldValue": true + }, +] +``` + +### `profileFieldErrors` +- **Type**: Object +- **Description**: Contains validation errors for profile fields. Each key corresponds to a field name, and the value is the error message. +- **Usage**: Check for field-specific errors to display validation feedback to users. + +### `formComponents` +- **Type**: Object +- **Description**: Provides access to reusable form components that are consistent with the rest of the account page styling and behavior. These components follow the platform's design system and include proper validation and accessibility features. +- **Usage**: Use these components in your custom fields implementation to maintain UI consistency. Available components include `SwitchContent` for managing different UI states. + +### `refreshUserProfile` +- **Type**: Function +- **Description**: A function that triggers a refresh of the user's profile data. This can be used after updating profile fields to ensure the UI reflects the latest data from the server. +- **Usage**: Call this function when you need to manually reload the user profile information. Note that `updateUserProfile` typically handles data refresh automatically. diff --git a/src/plugin-slots/AdditionalProfileFieldsSlot/example/index.jsx b/src/plugin-slots/AdditionalProfileFieldsSlot/example/index.jsx new file mode 100644 index 000000000..29551d1b7 --- /dev/null +++ b/src/plugin-slots/AdditionalProfileFieldsSlot/example/index.jsx @@ -0,0 +1,104 @@ +import { useState } from 'react'; +import PropTypes from 'prop-types'; +import { Form, Button } from '@openedx/paragon'; + +/** + * Straightforward example of how you could use the pluginProps provided by + * the AdditionalProfileFieldsSlot to create a custom profile field. + * + * Here you can set a 'favorite_color' field with radio buttons and + * save it to the user's profile, especifically to their `meta` in + * the user's model. For more information, see the documentation: + * + * https://github.com/openedx/edx-platform/blob/master/openedx/core/djangoapps/user_api/README.rst#persisting-optional-user-metadata + */ +const Example = ({ + updateUserProfile, profileFieldValues, profileFieldErrors, formComponents: { SwitchContent } = {}, +}) => { + const [formMode, setFormMode] = useState('default'); + + // Get current favorite color from profileFieldValues + const currentColorField = profileFieldValues?.find(field => field.fieldName === 'favorite_color'); + const currentColor = currentColorField ? currentColorField.fieldValue : ''; + + const [value, setValue] = useState(currentColor); + const handleChange = e => setValue(e.target.value); + + // Get any validation errors for the favorite_color field + const colorFieldError = profileFieldErrors?.favorite_color; + + const handleSubmit = () => { + try { + updateUserProfile({ extendedProfile: [{ fieldName: 'favorite_color', fieldValue: value }] }); + setFormMode('default'); + } catch (error) { + setFormMode('edit'); + } + }; + + return ( +
+

Example Additional Profile Fields Slot

+ + +

+ {value ? `Selected value: ${value}` : 'No color selected'} +

+ + + ), + edit: ( + <> + + Which Color? + + Red + Green + Blue + + {colorFieldError && ( + + {colorFieldError} + + )} + + + + + ), + }} + /> + +
+ ); +}; +Example.propTypes = { + updateUserProfile: PropTypes.func.isRequired, + profileFieldValues: PropTypes.arrayOf( + PropTypes.shape({ + fieldName: PropTypes.string.isRequired, + fieldValue: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.bool, + PropTypes.number, + ]).isRequired, + }), + ), + profileFieldErrors: PropTypes.objectOf(PropTypes.string), + formComponents: PropTypes.shape({ + SwitchContent: PropTypes.elementType.isRequired, + }), +}; + +export default Example; diff --git a/src/plugin-slots/AdditionalProfileFieldsSlot/images/custom_fields.png b/src/plugin-slots/AdditionalProfileFieldsSlot/images/custom_fields.png new file mode 100644 index 0000000000000000000000000000000000000000..547f502c5726d708228efcecda9bf854f7dd99a9 GIT binary patch literal 80606 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 z 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≊30A>r1$w{MRlMr3Kr24^q^F}QN}y>}*^+3#==hA}LgSh^ht z&K_4(Y)Rl3_;uZ5)K~=3hd3|!`S}(@HB>%lrT^3|0v&D`kviVRM@w5<9&L5R=qK!g zddxuQw4P8s;_{B|&L`TV7Z9#i`?HJWSx+{DTq+N|4}-3W;lv6QQNKRq`06Yx@a)|x+>+8eX{|iI)>rKe4o?)l_{grp+{~Npb_Xqs^IIib2Uw?4{e*Wx# z*GK=~f1Hg0Rl$L9lbu%a{jKW;o$as2cK@1&_38!O0FEau?Ki-(il~;q7IJcIN>ovV zdQlU`j8of9V2{Ov{Nw-oolk)B!Z9rETwqTK@s>3`W6gWE)edXT7&~NRs;*NSV_xwu z^RBb6d<^F{wF9+)IATOt>wC=yAo^y2F5@s$FY@UPODHJmpaPbvA4b?yQ&7mz5!Qei*t38Y4ZxcL8{8N2ZYRV>+B4!^53wY{ zmJ+6skPZXcxB3UTiEf0)0F|B?@7k-sZAlV5?;c}VE;9vrZrP`)HDXU zaR3C#2qz&Wv?@pH|Mo3r=OJc&)Rl-`ML|uSgtF+W*AUUqo_H(eGLQyokg#SyF(#h{ z*)3>#DAdUpiv{PCd?S!+`0*aWSG4GdRVIY@pbRxIIvS7XRasvzebDW6Qy;|i;=#3A z0=0+(y>X=_B{2{RAVoleh#3DTi$6{18?Fu!P$9iOC9)fK5QQGZKx)J=c6)n!Vv=B2 zw%Mry8ns-e3l{3ZMQxE%o1|hY4t2;#xD?72L{$H<4K~;R(@mXAgUax=xFWwK?=g;E zVU~>V=S(I#_FA2Gp!*ddi0=I>3PS*400)3g`Ru{$NFt^x)w2>mNr4 z@f1P)Jxfb_6}<{_U^iJz^^2jbOgvXo1g<$24I9K{cv`Xf$(|Mvv(vT9cmFlUyea+- z8cqm}O$_@xVN7#t>*+I>PRFK*NE`3+5G9d2-1JgvDsWa$Ruq)=JY-HMNj10{^=G(3 z+@H@3XPc#-9iXtQjjQ#@`;khn9A&L=%$Jt8aMin+dRNPm_8Xle=@R?7sViUK`e{+V z+(l^pLAJKERG646h#%*+3Ogezg54saQm`#L1 zppCtiqD6|pzxZos8Fxe>&>4YMa`o`YFsSvWdkN!mkXbbbVpf6LkX?|^UwF*$$G+3l z=duXhHo01D9G5taqC$kwv0TROqNItg<)RXm3evjb@U2WECG$emTH>)EbOZD9@~X8D zyJ*g?p`jnqb_M!1PVI|rTnSMs2hq-^NOr-d5!F;zY_KXGeo!Ec8 zdG+coqayV=B}z(41~CTZ^ccb#O1H$zxY5?N!dVG2`Xq zGXTUm$e7|P*Kq1hq(dtRjx(6g`3a8)tnMZ7vKsg^fv_#XtyRyXv1>3B(JU>x4=#b+!4 zX0xv<;AUmfmpe=73gSSJB5>;O0(uVMw@oF4GvP4A_UsG5fx9_7($s`198BDeLoDiY zut$l$NwB0zO)~kzmg{Q{T?KZEl9G~y6DeHyx>Ky--IZrmw24eOlrk7P59~1-a(U9& zcI+J>?i-b5p}xI}vaPO)R>oZ;qlD&Ujb!2#q#4*o%a+o_P{CXfxdq?7 zFV0ZP#K6hz4p52x1lod2ZIACW@3*UzayRFn=2?F4)i3eL!zt9A zrl2+#Az6G|dAu07Vp`F4b%VT&)Zck3+e>XL1TJmH=-$e;n@=Ld#dvvnD;gVR(NdHI zuI$~p3LnNd=v;|~*1-(~Eln6KIxsetfSV#DE(rxs;uxRkyFwY&Vi49e^>(;gF&6gxa zxYh637iO{;l-S<2vtQhN<>zU2F4tzIcKmXb>;pVzei$Bb{fKSgTt6tRe6~{&n0?AD zHZ?un2tAI35TyWh(2;lS+$jrXH6IoYLBialk@6ub@eEQ@wN*R1pu_n#T*YQ2GTE`Q zJ-k<8)pss7T2e5wfn#VobUp4pBe$jP*YG#rgHso?uO%*B$$Q2r8=U&IYE{vsOWw;` zad^CpdMW?PuCDB(EN`qG>%T|&%-&r#AVs9oBuM*wWmcY_bh#^__RH2>A^NR<+u|JE zB|_ssIF4bI8Du0R+#fx91YOzr@&IaysMn`xgqKXmlY^6a@?CQJ(bqiO$R4dWJw%vHHF1wyje2u+P=56G*lqm z)*AaB-}YTQ+|t{N?$!E>cvkn`mfq;b`Rn$y!;!#HYr+d4c$Kz#=5=SPzakuvi|$fB zVyw@Q5N3Di{@j@t`c__qIWEp_L-kmHcw+QPihb0^O+#j+w^}syI9Se-PCZ@RMsjxv;{q_6rMVa{B^v){$ zyb_ysFThBx9&cq8E$9b5yY1JGh&6awuX5gNJ5k;4DBjSg_^3PgQ1VNzV`*(6#l4qK z%8`5vl%)g?P0AP1>^bYiEK+c*No{?+<>EkjV$f1Q~Jyo-qi#4e}nB&*j}8aD^p}fQ^m6 z`eL6HkNB_O`F<8ldi(_}TRfs4gVy)&&;=QZzp7-=@L7l=^C3Q%0Hjb43%uTUO+;iA zyzS38xp4?`V&Lfl&|eBfulfgp3gQlTQ}IRA3NA|+cVsppf(iM?`zzo4&T$+d!a67p zgo3@?jQ|cWS|k{%L$#qT2tum`L21ANb)6chq(gO=Fu4$?2t&$*=Ee-Dx&W;(D0#kj zYIYWBLp%p$oy_f##hexc58VqQyy$FY=H||#vkUumfBai)uAL=YsYOmnD+bf@niltA zi1sr=O*&34_M{k*}JY*s)_e zfH=iqS}CDI;Vmfq>ytt#0i!un)1Kir?M}dA`_-;kAk;+uMLb3PdL&<=T&xUuQ33v& zZ^%J;3hB!zU>Jqv(U#=UoPTD-CEUa+ksxdxi)Kc|`AXyS^Ybl`^T|MqI4(b$uN)RX zL${hTSinvJojYvg#YWe2nZ&m2JXn?g<=1(;$c9IIu>p3JRt!*P9egDz!xV9N)75Wa z<8x^KxtYjC5GE@kOd06!k3fLH0O1HFClL`x$6s&rQGDezHE>UaWoT!XLu($KWuVSD zF1m%-YUl$*J^$G_q^yCx1qeFi0;H{81^8T>n*HldoQ-iU{Idv4Sj0x^-aQ6>MasZq z*Ffu8J+kUq9D*pGazJvxn3>~g^%3O|%5R*Pexq8_gj)& zik2|C(8U3-Nz5hGMmS(6W>^f%Abl0RbmjOR;l1fBUTtNM#0;YOui=mF$o;S&TLlahEugaiS^^NUkrxw* zbLuyVUvGO+=3udc?fzeXB_mteWNT-a#=-p0zbyZ6Lb`r_;{SPc>({M+_@AwBc>X7< z97aP>8`UpsLT2*>r#i}x{I9gzeZ}V251i>vg$v&}=dttG=aT(Te=t#4`TOht3|{&3 zh{{wS`a+2`Ga!UhOeu3ef%- z$eqkPfs;Bc_-yRE)LNA{k({X8{}85NQkDa>)`;eC+KM?nLf{>6kb;?A?A7&X@=F4d;X=FpB|$Ntnbi zgdvB37~m|##8=Z+E-Xct2JQuFpose;(3^~P)HHH!euTmPN5k5G1AKrH4Bn~dJVAB3 zjuog(UHs2wzv3bmcPIG~wyStydYk&&ix24zS2qqpGw}^Ak&|Jn0$LL5fgN)~umL@F zj4IlUvQh3pkiE4aiyd$5xqN}vEHna3j9auCTt>!)nvDZWfxfhWu&%>jG#9PSCZF>_ zqvW5RNy-^<;;+wY7D|n$*^{Ve?PO886LSi+NfU>}J=8u7&RjamX%GR3D;}`W5*lwH z2_FMJ9L$`l@FpNtqJ(!{O9_w1x9UH~*Lg4F&(twBRr zN1|SW98eCjZ$Jq(KpOX=1r!jqi}#Gwhd(1iENshIV(bL`QtlA=(4Mv{M4SYek`#fxA~4nFL_APb zh6oH8TLiUAX(ClVcFbtq-1b}DiP^C>S>RH>(b3U_M0l{EL;IlL>ySnsKz2&!4z2>N zCPe^$Nt602;MLB4c~@~Au_2KX5+zm!nTY2|Svhb}fG994kt2xV93t{&%e56-1a?yB zOt^1mCXHi|0XuM@PpZ~oo(B#&p^#m}Vb;fSebst)qN`)fdx5tn&$^bM2BBDKX=yAd z+YlHeWOwdxP6Es!!momvhU*M!x#`$E(TMx>+tcsjmVDbLkz>QWpycPAV~U1Ah3hJM zGyZ`9d5G0R3={_;{SoA3Ef{kV4*#p$FC#EDe};AMQjE*TI|r>N1*ixhzBMnlCYWX0;0)<-w*K2L-7KaD@H=IVmKncZv>hJ zbaNI=a|4w0h^ixPEVM(~A+i`yJ4{q21sW^ z)Nt?Mdss6Lnx7ND{7cB3qg$~h*zbfO-Z@IDQqXAC7Xw59LPJhdJ%$jN-M^4Vpd~1@fBfx@x0&$dsIlkE3l3E!>o_ zVuPxPV{}zuS=`ZN8o|>8R(+xtBxO9>GEt~DcR~VPk1;HPLu~i^KUz2(1b~^r7me`j zD7GIL?Gf;Z(|Ao#2B)W92RWYuQH(*Mkky!9Qwppq$pac0dhWo*11E>7{Ixy(5rF47 zK?)UBz%tktqY&_HRx}B;(pDqSsyb*gxoC|I5wnpefr=7hFY)F#9^`{heiZHIqCd=q zEWW*J%AV=A&J;9Px%QIUcy1E4PFDwC77dd*W1Q^ zQBF)uaP_e$rAF*Md{`eJ8HCNRE3{|Np1{yZT+T0t2@NAhh%)dI4FrDfIL$}!ws^o%0jsjBOO2#+*aaOGcQYL@iijX396WdHb`3A6 z`|%7($9V7ibwD?@88wnbFbWD52LlJ!h(Q|AtZC0S3&$ghhUvWi;AXI2I*ERGn$a35 z0^tR)y;@u;7!UmZ`|V7CicB|rRB`H?5S`PC{mjCM@(lr9k~pB?g!;~`*EH=CP6VwO zZd3+zS-H0tHxMuyDg8e_^vqGB8e@P1J-B>?UH2PYKQTiFJ(7taoa<-1v8=m_jH*yXaW3;4Di7I{o&Y|0Yy^K za$2f|hU>>ZA+TBo=kP-)WYQ6KUBRc2z=r|Y(eNsUK|z?fEj(rE5PsYA+kb2%Aa@bZ zW75D9PK&|YH^L*H7DJ{F7KTAX#0y>`F}!ow1qHOw!M^{*!^gdKwAc=kt(m39ot%+Q z#^zM=D6*Z7Qt}xZ88LtyRq+_Mwnls*uIn1?qX+ibQM@X{V0vbTqa5?I{Fj038&3d) z$jcD|^&=s|TL;NxnbA&i^7J?xap;OM$D1!=MXEDFEucgk$JPOpZIBr$XNC&n9r=fc z_wLo4D}vaB(rI7i(|R(9h`10W-4$hn(bk$+N6=W+hif_2mJRSSV0;gaAudH>DDc+a zT*CKic%2k>M_A;qjr=Z=fsRIgufbs#j0@AVWTN(!5hna{wFCB2R$Mzf`6xq+qPp$r z(!;1!fK*{tYy_HqCSUT^BRP|7c_%GU0lfwwyjoCY&+hHNxBzHn68*8nzY@&qzD?fY z#W)e*G!qKsX{!J`*yaHtRCWqsqr|fgC;oOr*$e_$rYhB(aI|U0Sesb&=&GdOZakO} zE2@RLz(YA7u}yv$d(lO+HR-qNZ`LPM+8fHt%d?%<3!z!Fx?F~KGk2U{{;2@k2cwBu zq}6UH*LCQl!u$h^c@!Rx8*&LGk2K5VOv9F%P9fAE;#r}1IXLM-+lP=zSEYero*=u> zTm2_ZXuSri*~;UA>Oe)eLoB}G;o-y?19Whm6yh+a6fZ6;7I!Np3=v5LQD8+Zm}S6- zl1`2TxG4u-&LXPy>mVw@SnsO&7xGB3p#WgM40ldnBcFXwbK2jIM1)+ROI6s@pt<2| z_Eo2~#poP01U&J#;E=0#B*WUP2t2Fx#n$)p@e%9$Su;Pqs!^&hBi3hBANEvU1$)>> z$Z1VSo20M>seWgiOfybp!of;$Y;5){00Z>EW8&u`TD}mPaAuw;FVkxj+7B)h;7SKp z!PV2#cV=N;?E#Z&cAb65ov)QGEiLwgcY(mpVg_3zPbT(l#T*sCOJvPSj>$n0ZJ3Y#I(=Q<+{tP7=XIPW!G}a0HfE`v}YlQ z6?85MFrr__i|cBF2?&Mn-@7N8$s(=Q@W~f>LuIERqJeV!Ag|P~g4jG# ztdsl0B$$U+yCIu4`>p;|spE^Da=Ko`mt;e_5=I&X=NP9 z!22QC3?~Q=55}&d*ozp@8$62$m=1aru<0a&>L93=1n)u5z#x8zS+x$30zrbn7V8;Q z#a{Rfl&E^1o+&nPrm*50=_hRbk?*f;Y6i2vC>RwaTKw>ar{gzce+A1&`T_2C!G;=4 zW8Tk5XFl*L63iUDKSNU=e^9o>r+QY0^>Yy%iU!j{RSI9(Pa~NV=iK`M1AoT5pt-$X zK^NLOMod;4K}N*YBNW%p5jp4XULj7eRvE#1*u_gLG~IFQOS_&(MS?hx(3t=n3Ykkn z+%6hlnJuQox((;BG@eSFj^f@M(C(D~@ngnEePW3?fUY8jT*6kt{5ytt*G>cmu}DTh z1QDH|mJJRH>hJ42MMFblIo>XhpMe>&nr`z$ORND|lgy1Lf zrdG6jEA&6Gvx{aFTYXRG(1W1jE|?bnT%l0p$*H<4-oh|k5R|UW!;W%Sx2oVQO0#kh z3S__2?Y>g(b``!~0cNf`t_~-bDE1!-7&R;0kC<}_3EW@I2b^JoxS^1w8jC1bnFI+D z+5#B**fU32)bnFND`3PnLi39Yh@W?wLby%U9p>8fbWhG8jUci(V4t!<1Oown{CwYT zq^ZD~6PIWcAI;9pq#yZ7x=h_xi;%JCA!?Syv^`P;Yy*s>v2Ljfv@Z$7G0n6=M-y2~ zwGPN0EeY)*CHo?=UEjz3`8oo^TYepxzRWjXTWoKvtE~19&4-Zk(lPMazWFVbJi}O7KLUyJ)~!RapAeIf#2!bS44x@GW`8@gsDm z&AZ|8W*zV;ktNTRBx^R5OcwVH)z#eumU8aKiwSpoI^x}r9ZSGtAZFshiXH;ZLIF`X zcj#Sv=#6v%2pUY;kH8XcCqP;r~n?r%(rdVj&8y|>I$K!Rw0GtUV8G1gNnHi=%f=wyR%*=!4 z`%HTZ6TvWLvT5i|z4coaiZX%Kd8F+B05wJsDRU zSXpk;o-T&MkSt&sBA`bx+pjVO%sIYB22Pr0@KUFh37#m1u-rs;NzkK_+{YlzzHe=< zc=P5>-(x+#Xy$I}q(;mR=?UBt)0Qn;ViBtoOd4dEOCNRguNCe`WT^-*`#I0rbQcxh z=MkYR2sWi)e|%=%YVjko<$5^|Q<7mZflN~_{Ms%Ds9O%2PGCKn@H=TzS|mH15Gqe!bN54P;U&I1YNB z_~C%LXd_26v`TjrpC{LbyB;je>T&D{V&~#&j#14?ZOhaw-b(z4D45j@jgAH;R2LWH zABrKHW|`V|2JFN09at^ni6UeMIYpqV53V6j_Fq2Ap?{k~yP<_h%smm-98EJuPCB>- zD)3E#4rGzL~18d;*{?StJMyA${yG=zI>hV8v_{6TP%Ug$-_OT{Pzvs>zMd7AVa7}yqrOxgZoAa zqkJ!r4Ti@Ha4+X-Z)44bIX0n+_&(X$_704p6=RP@@v zGsVFQwTMP?j>J^g@88sw3r&fCW$W zAtmZru54d&+!VQ5LD7Jji+=N>cv1?zq zv`ESfhmMO~NIXY(7YE8I934+_ux+Cc<&i&%3<=Td0Wh_2A~1D*{-abCjpZ~YFzoO1 zt0@DBU?QIc9vX}|f{M_o0?{fiT3BKD#e5D_MaBrOzJMUl)Ao#^8Rj_Ll{>aE0A*Gp zQGU}BkK9(mJnG87ilIvfTrPxuV&P)3m0G{=%0WE)H~qV(5SFrpivYWsE&ANaTFf3n_;3j_d)`d$pYv%qb^v<3C z-*=JR>NcQIo+7taw5_F?+hqJgk@DzT9Q8E?TtUunoHR}s$oU1~6C;-D=+(~tJXt;4 zQKQe?{fc5g}=56 z#FlHP;FS{$NQxVg+rSxzIQ7U&rE8yzq)q>_@u1x3BZs@RHET=$15(bj_q2G zDl-Ij0q2TGxj}`b-ZYMR!spvxd!8Wqj^{QRMeNsA1z&-&iQ0Y&g1L1h?i&HD0RaIZ zc`0Daqpz=9qKI$4e;X32Be#}N91t}7@Yj;S0${(y{iCc9^m=*R+A8X3^LYyf4#V8W zvb&0hA&)LZ6-wNgG0?O-(RTBs#*jYjuyu}^oILqE;aV^|Cshor%g+EAu7aEi1rVQ1 z!OXks%YkWaWe|9NXBE%IR1`C3F>3_iI(An#K*8#_)G$I27Pa_z7pGG=^0zKvt4cT{ z+uyzO_-N?iN3s|o>x-5ytwzYBzMPO=*+G2U3Ls3J3|wn>Ls|l77l1Bmw{u3ppq40Z z=y*`wOY9MZ8o`ccXvLswT271z+)|Jt{h@VNg2neLZAQ&nR zF4rtMBsnL>vlTdbx$(~E^aEy;PiB2=u}W78 zQ=qu8P^zeKGw-Zw7{I47?taG`vkF(^?%00Y1TNe4ZaD091vo&bG#P1ulN(({? zTAz%I8amfBi!E~>wvJnx`;)-ly{@&}JTb0xo^uxLwVNok;epFUpd9>Xn!qG|7Zb5-92=kW> zl1`0}18>~;5iKoZDgxab8X3u)W<2}V4CpflW~Kysd3tIaNz2GoBf`5ZF2og=MC^XYz-h5 zMgt!(0JcS$d*1LRaymVB;)FC4)7Roqm1~W!f#JDN_Cz;tSVY9S25MuXbivv4>g~tg zUZczs=NX+#m-H}EVP5||!c}nki<*77kvB%A62M(ir?1aQmeKObw#bV|Tka*T<#)N? zX~TN@DZb=pWF}T!747LA-=cQzquZNSu^0uRTSv*Oy?y%Aq$DA<(vYIh^6(L5I2lOi z*@Be=uwK``4@SG0Mx_fG*DE5cCuJ59f`D05zL2f66nlgOCM$mX2`Mii02-E#YT3)* zKNcxyB$D{!8(@)gJeTg!(lxseqP=c{5=}kSL?Q%Y{0`9Oh>ZB zG{2sVXD?N_v}q$IjgvkAU5|RG_VD@?j1yS8QT%PU=$);iqV)^r@uF3U@#9C)3?!`? zpmKUksyjf05wY?|qj243Xxfy7&gZg#Y*W7Pbimj5SEn}#LQml9>x+;mhpxX;y!w7d z1yWeopOX>$2z3WFJ_P_mA0~d20u+&~3WAq)YX_>6jufFyNNE%T0r9U;AMsHuw-#+| zjZVn}-y-Z4-K1ha2bL?h_xhfqcO0}pkcaqzw32!VPT;gwf)LH8O3LwUNUSjJk5r6V0 zX*xTVg@|rd7Nru~0ri74x%Gr45QCn8>mS@&ffPx}$lUi@_seoTQ$!}fcuxatKP=R) z2^WHn(eOtTtPEnayE*0nungpzq)Pa0L{m>fWzr0S8{dbc9z`ZsO{R(K?hdMvu#`c0?X3@;!)_57$D;^x3p9w zfh&ee+1c8jgu{sZ-2;gB#^t)Wp{`HN5eDXsb@+IBUCNACit*0NM*Ya1K+Ro50$v`T z*9&w2Nbq}Kvx5BVnOW;Wf;0YKH-#baYv zlgV{$*qeDj6esAKy&OM$|2-OCXMzH;3fCnJ@7iNz_$7g4a(rXd)+gHc@#D8BX3i#k z^uQzr|5~Zcv6YJ}?}1s*$B)YI(!uOMhgYWSa3Cw0SArw+>0o_PQPDG>VYgN=xN*&( ztsN0~SS;XsN<^?(9Je3G&|W9&D_1yf!%jA zwdi4!ujKD<)cQwsR@tmaKT9a}c}B)+y|ayeB^>t?=ifBtC@gWz9tI;rd&x&{iY; zjOMsR+QrOom+2Asa`Yh!OS~>n#tFzLM-Y7sae5LJ;#Xk;3>S_(U$dvT zcR13})#*k()$!G(I4(&45f&c4LrhFf-sIYSk;}EIHe3xTrN9W;a~KakN9CM?m)C#mDdtOgQ|q=))@xVXaKt@(<~kbaiRI zi%69zF8OXPV(B~`_CTx+_&l-Aa5UZ-oLh)aZ$NZkw*dJw(#uQ253S&%PY4qAT~-uo zJU2fEoSyXBT0X5i3{iw?N-WKfR9BZ#`+fP;L#S^>gWO8Adm_~GTz<0%ND!@b%S&vuh0Ysv1*Ub zV$4HOLoZCEyM(;a(T6&N6-WZ}I}&dAh-ln6VgU#U2nd32H`>>5mYtoQI?L^yo#!?g zWo<+yIP z7X=^+33iRRzIB^hfqk??;efW89{!rG^kOk}f%9Xlu-2pS9Vnkh{ek+J@3M|gAq20; zF2l{5|8Ln_(oXo*;}VL_ZTt*lOeK^ERIQ`wRQG}Xao+n6AGW~Stgkss4bg1^N=lxyM0T}-s$`d&h*mH6BFG?M{Cf8NkA5e)X)$m!p&5Eu+ajX zr|nvG(V%E@o|z)im=_K&N;$FO*#;IaTb8Y}z^`@yos)P%?9p4P0J@L@J(P?=97W}YL~IS+L54hF zd>Ghs#i=A6XAG z>qZ&uxBJ3xdDHMM)dP1bzckI@?+`MZABO^Nw+9%L0_i4#H#go8#j6ieVLZR>va+(@ zDlNXB$51*lgbb?6aNb&>1jExRg1ifVa|SyLY{Zo@1{gY9i71hR!E981;LU(#MPvWr zxT=Qc)}=!wJw2U>kT@^O5Hd&c=zGxO*`byi3nTg%xSPMi8q(7OOObzZexDxp?7x14D$8AFONSlOpxl`gz?wWzcOsPfuT4+6|!|->0i* z7^Lb(kDAOll9L5N_K$R$n!qmc5fEUW){dCt0tk?-k$cY`IkXVjiqhHgae;{3@=!NY z6BK0vF2=wfk;YZ!#ZA}NsEB|H&?d;2VhTAsjx?gg60l{3n}r-(**$|B*;WluD(bFr zadDyJD??}`oK3XF6O@^Wr=F(3+G4ccFo9HqRP!hHT41wT)oR!fdv;y`uLE!X9H-gt z)W;8}lD=aROS0%Vor0-3$we$ud06?b?9U-Ylf&^T{d~)}Q-Ztmcy^H~MiapIg5`-W z(fFYeL}oy^B7m2Iw?5;I%8dNIhI2)eCiW%E`2vE!yns6{#q&PWj!Z; zxl**x%lg|3>8j5gA_4pRr*|2$fxmw;j{N)&D~o=*)VZH0V*jsyZQp%--g((=&N=Ey zs}s%|sXu<2WFeK||I7Q%&LGhP&GzBWHcK4@LX(T;zE;qg+2d-TwdkSZBbqfQw02dL zD-2q%`%OyT+S<)6;7%?6N`BbG$Ew%zu)fcn0ms4bD3|=f@%G*7dkTZ;R|e(veaws0 zpV=}_oX(3G@JI~P`1^9^;bL-SkQJJ9h5CC&B`@Zgw~euor$g||Wcxo}#)dojZdiC_ga7s?xF7x3{F=$iotORZZ_N6XKC^T~*`(i;xa~lb zl)Gl+340qRr$j}DXGO^B?iUUN*{m<;KJQ)XJH>kF0{J%V|Kd|)G#&D4Dq{==ozC;! zAC>z^-s~#-W1n_|pJ{Vts^nPDRMcXVXQ$_W*F+aL{>sDs>(@ox3v@J1ntnXapXLP2z|A)l1c)h>B_6pqa&$sQvwQTI{ z>^r;U0uA5$#laQ9dpf*YD@U!(;TMI9WaHZJ81lWoN8>*8cf(Zw+b`$F9mn2C^PLn; zQ?wuX^YD0H07KF9z!5Hn%(@zH&ba#I%E!f~Vq?)3J=?g{IOjexjrRVt;@-Co=T_!u zsCH(L+&$H5RedKQ-SW$wo$8sF%C~L)qW(wC-1g6v{0e-$@qV&yqT4T-oT%-I@EmXO6TEB^9fhUou1AWvH!b@L#`S zbfCX4{!4am?|KIF`VSm`ufWN?if4F?`ezDGwBD9fX`5cD`-_lOvq7=Ob4JK~$;-h! zM#l&LV88nLOispfgYL{~DH*YZ>>~yGLk~;!Yu@@;3hZR?I=NKjM@pucPw4H})Xwi% zEqSZ!=Iw#%H_LB#=h;N8_&facy1h0Mekh%>fQ6eMO<_ee$V{V`k6*iOq*yGehR0E{ zbMB(f-!^H>_zFhUAQsHuKV$z5n``b({ww$7fB3a)58FClCCHb|eam;&FGXruu6TBT zw)OeX;s}LEyJye6tl7izUlt!L9U0K9zdZMj=YPc!VN&sA`w_(y`FXz586NWIz3D$^ zgR1o0XXJiATj*6pnMP%sridBnMBaYr(mknMiNCr3_wm58>LAv&@R>9nr9PDd$3g;} z4~|}qK_21coFytM8W~_J*SnkK^?J<0<@qevO6YzfV5%f9~Y}CU^4F48K;kIuV{goFS1B6jPK;ljjAvpz4nc znt}MA+UAM>1ArzUI}QqGx$OX8Ll>jfY-~Eoz}?YjVEigfGa&U=vau=mCa%)KaWpUA zX0P_nQ`3VQ3H=WxQsWHg4)nJH3Up?N6&nfnfYwxn9;$KT6iPr*^S0kXEr}y+5KOOK zVT+`XqhSe1LO0PE^>vuyocktAY97uqn@p5&?3=0K1yZ3X`D)Bxw!UofuFOpg)hFkF zg*s{cmlz_a5f=NfxEsa#9~(|EK?~Rf2S6Y*QaVX>7hAwPXamNG8r4T{X+_+I;XX^F zZ!s)4?$FPR-npgO3~08FLQ(P78Wd1XQ&R;wI>+2pmyH z1K?N&>cB3r$P~aYB4^30nd!-!V>Y}6M#YJ>u_|chojh3v;I|s=D70o&P*vvu`L-%P z0B4 z*jcjK4&~TL5D&i}VBdEo2%L3ZvK{fnXAl_%lw1sY~^}(QW zwkd@{(%^`x>S;g94lJ2M8d6(H6hY<~0R6rP<7G!yqY$x#N5 zV|&K5WErk?Ytd%kqv^h8&ta@H19|Gvl zpe*PR+E{ya#@bZ?ZLIhWtQchgN0r3u0n49J0c{dSmD@W^OAt?-Bh#$Als+}myhBOKA$>O^8I|3Xa@iwI*IuQBpb%M zC&Rla1SRxyZU1nc3nTrOsJQxV$wvUqei}QC#-E+wgx-+G63#)zdVwNp z6@X)!>oxe|v+O@y>fuKZ;Gm1VS_Mf_EB>|E^z6BqeMw|>_ zGkeB34qSb9uJsK^Gc=yZ37!Svkvsta4*~dQ(BI%5EzZ;hFOV5Zp%l$9CMP(agx3Ny z=X-7I7LD~o`U(aSm$Zb{RdxNFz z+M(#pd-gOQ9&DAKywzHd2x@CA;A@FkE6v2Q5P?R)j_unE-dc}3pkcL{N2ILC!7cpt zr3wH&CVNT{=NR$`pL{y!J}%#zkXNIfEr;*4S95Z5a$Q1YWhIwNKoO1v+U{PV-$QRO z_Ewv8m|&)ifDjUer;I)laTs)Nw0{fJ*O)KJrj^6cgds1j<0dq%8TqUCxz=EeqydDOd-#44fy=K7alk zLzS%9-iKj{lEWXE0Be#~fJ(ZFL0(QzpFX`?#pFOkJdi%zY;pM^%qkJZi2((ZlgPvt+^8RZTC&^w zcr$h{@fL7MlX(*^>0g(3?Uz4MWcS;4b#(#0on;N8?M)84=~v$WhI{y!{FQN%dyM38 z$-{-}5Tk<3X+f_K3B(lElLR(%N=$TyFfWN8*~`PjAUK;7*flReVvL@0!@v}mSYBRU z>53U0Urls&h_i!JYFaQ%o3`J~>{;Y9Lz`ktt!rG~yH9LU0(SmWs!a@Phb2M<~>j~xvZYMW-gtI~biVz9e z6Vc@~v`RSOW%v8{W<86)VP@CFemul|O{^I=wwhE!6(FWmfgp#iLnm+rI%%8?NL*_` zhTvo%YSw~M%fleiV}E+jPNKifD$v2wI0xS|W~f8|^An(r26A>mAEF4mIVhBqVN601 zG4SdT^TD5Jl}B+zTVw zf=<>^X!UtOJ4LTY0n}eaY@JM9#I*?+*->`GwQXBBbo%5Mg9s1?5L|U62WKKFV~H`s67j2nIu1ge9H(cax1jW#ja)E<|t z^{cky%~zL)c%C}5QiWNP@GB>|xFco>gI^YaRZFd?M{thD20C-}=#NDo=9-ra1$+~P zgyxPu?4#)m5QXLcuLS6Pi(P=z|4Z1x|76tZf54Y~)dAXe6}ciKADbml2VlqH+6yd<$sxyQv$Z7fsFa}d>%bAPHJt5 z&dD(m!P!Gr{16RuGRSQNFGf;#R&NqwOKuQn;e_@4{$)0Ov|Nd84Y_#~tR2}tOPrB+ zK1)mQpcyLtYoW2Rd@=#zDiqHk9Z}4%HYN-E_>6vew1$YEz5KxEgDNU2B2_c+rzi1o zt1c)>5;(cZc_HrBCwCfdNq+_th_6rnT7z4iQ4KNH!02mMcD#SoIW0!4-NuVw(xrc- zRLDUNy}UTBoa|RqAjg@b179~NH8GIj?5CM!&jaH>MEr7MDU6W`2f}~>-0E?_o|R%% z#lG-H);&rt!{DcVodwLVsG0BR`<~^U^%K4FEmZhH=r&7|MBbz2j;~J6YO4_FVP2l~ z>CeS^-3>;5L`sQYqJbSj?S#S&OT@rLX(+ zmkpPTN*{|&SrltR40g1I}+aaEuD24m!{Z&h5LkX;toqU7%P(>f#9k zWe|u@Y;Ol3wxyf{V&Ga3>L1_UXnztNFiN8-(IFN*)FJdoqBx;CGer2Ol%5)uWU(pV zpW_#Z`-eG2u|W68+_iE($JHRLASotM4`Abg=q=5|!$UkVs#58!M#GjFir}6FDJ@x; zA{!;)StrgnGP(U}$(kUX80=ONAT*Le0a&X{=B!$n#DEBP9uW~8R;5L7Eui4L6h1VF z#VK#oP>Mh(|KjoVhX?QqBU&GhNTNc}Lne*|gawA6NZz@7R}nNU@CJgBN@!TqCR=QR0oq5$GXdQLf?%dYIQ!PbKN0Rizi!?)dq9e@c*9HdF;if-fwWOp^6RJT zi1S`}SE>O~CyK=9aE673>OnI?z6PjEh;V_IjkfQ;3z0NbX{d#$n8cREa|h9o zwg-tXGWyeF&KVoo$)2+)A$bO-Kb~Z2+IMjgF9ojJ-G)9|a*iru@gGLEGr-&=hc^25 zOs0Hi*7@QowKZzZ88zyYG0rC#sTuCW{ntSq??we(iOgRKT0crNNMV6nMgB@47OPVp zgL|ttm{C-30nFq$@yU*#DF+ex`xK1(h|AS2cXhH}RZ|N!Eq&*{x}+0G*>Oe(lBNzc znpVfu>D~q`TYBVBF#%|f!E;7c;P`84VoY7S+t)k8b_OyVz!0wj$U{}Ji?#`*Gvr~K zC;^0l%rXFWutE-iXVryyti<jG4A76cnYHga=g4pp|zaRCm}(gjl{E2>A;U;88xsif}m zO>6~Uk-d2N`9)LA*Sb1*6Ug9!&+mSq0EYy#icCmQ2$Nps_}w+Z*!N^TPK*+z4lYD) zaAs+$ba2NT)OtF5!$AQC5h;q^4PZm{YOSlm%O$^_A&DduRrdzO!009=2_UD&&xiXB zX4Bl+a;O2dNb=<(HaHV0qj*86CEs_VbxDkr9ib8#j8qzFK|3~YBSB7dgFp+~0Uj6P zi>k0v$S~#dhO@jS9Z^D7n3uJ% z0WqWS#fwAG((c+_v{zQM1sD$O+0NS9+Wsnx^WFdm;Gp{tZ*+!brsB>pot@j+_nU{( zr~n*WU6@BmTw1-WqK!#fjbOy)DNR@(YSMcqP6$s|8&g$kVFtF$Z zNLWoM8T>(Lv;jVC*9eE8dU5@*Mcibo{rCmcJc59ia7mHa;UwTyN>Oo`Wr*f_KUe__ z802J5Mzm(ugiu3!u>ly{X>a=>Ez`vmLGPd05zHn zz!~!39D8|rg<>yqZ{L1m*|OT{wB5jAkTMcj2*EU|^LcD;$%1i%$86Db;7$y~b6a{x zfCDE3K~D+73&P2Li$8w9H(p*rfl{Pb0NtRoa=MqI2tqr>YB1xX@hc^rL@CB??S_>L zCjb#AqDDi`Z~A6Y52`HiZwM`eE+F*PE)N%`h{Z>2n$&1V978J_kuWIFOw{HiBi$mV zE(`@KAOW+2a+}gz;N?v7gdPIa5%hanW~S2s%AaXVq=`Qyc6u`eudO6l9tGvhOsnD0 z-#KRYtXW752PTe|2$)+D8H*W;Y`Xj2iH+qXq8c4&Y3Ux;H`bDz{v3j2Wds`!DDpG3NqIbxUT(%(trdW)>H_1=hZB25 zlT0A6;9VVp_l*x=M-8Z2^d;yNP41hSozBDA<*OS|j=B<-d~r~@L!)z=3`~$(Ma)c( z=j1!YO57%M6>#Ioo?e^n0t(-FvEdrFzzuf7MsI_N3VZ*o=AQ4FIOizyq{apL+zgjy z1EM0WBY^gN2h3;YLrU$!b#`$~wYL>kZfWI*8Z!yIKpSMQ_K0wC2E6Ufyfn-Jb%^Us zsV9?}j9pH%6@b%QCKf0^U`|gO0>LKP0hyjep^d-{#p$hvG^zZ?!j;J=RUmbFVe4#` z5W^Ycz5>e`*rtmw6Xh{}Axo+4+3h9lk8y*KzymuN>^PUN^R(;GvDE7PKATyh?vdwNHsJQntR z(r zw()0_OGZi@d1g2#)V}tD9)@g+cy??JyEM{6ag5ST0orDJ#KO3-ccd5$Ic%6jV;~D8 z`oTwXwFk7~_&CSsvZMVLD{e1_i_I)`jY8(3oL0Q}*if6qSz*u*U~z@TsQcq4JNOkw z!>O+avX5GEYn*qiaBu>7U;80sCKT6+Q7%7N`f@a01*}tQ8*LS5n&%k7nfcZr*Rzz^ zJ}Ne#=ny%)lgB3N1@gHyn|*|grMd%fTT4s*40Yqwgl0L&yu3wg&YBIheEr92bk?vN z@=hNaA5UA*i$o(Ft&G;^u{8lN@s*=cGO-mIhyj@rk4fL1I??MfJ^mbDNW`U&tbUQK za@9>IC7|pidOZY>V9j1mh9_K$&`VaeTDdib2V`B;Zl}agI}h7aO9dKT7nNZ6^AQ6R z3sXI4%5^&KOaDj0jzbDZr5w#EW1V*B-4oVw%m;&nb=89#PV$_7jcEu7Z$DTuc8af(qp z37V2bJ`=EOU9~y6xL79|lQaF|vwx~dpHO9uFmCRBmg#`1hyiSJ*N{v5Uw{2&I3@xI zAHutkdy;f!t%yl1VjI~z<~wRM4qwSK^aei}9Y1O!(UHGkGG1hHr$Nn_Qq`KF3}0ap z2ibEDfgQTVDM`xut})NXO`TFRZQ`DfolRpmuJO;E<|A!M^Izb4Rex%j7RB&H^VGStr038>DrvuJ{PiS30Au2^&?_aWIOVEM^zdhcv?}NVu&$1}}oIfin z_=;onb-dfXqErloeWUJ&MOh^*z0>aTK>Ku?c<^KIq%A=oSav*K(lI{Yd}z1b&%cXj zYn8sV7^s`fsGW{aarYnoWE@9TLkbR!hM7;DnmN3y#>NxS3NF$U>`pA$Sd`k7;i#iJ zq|Tp3vzVX@J+JB}9O2NckLRNL+?-0<2-Hf32rw$sTW>a=o0t-`P`{A1JS&6EC-~&&}emqDfGS(kKsP3bWuV5*74^&^l3ET@pD`1dTkx=Odm2`Os#5qB(VB`K#Q2RRv}~< zbV)ShkeWR}Z^*{aCnm-)py0hp>kv|+PK;faLl>Aj7!cDG)zm1HL1*0o6L0QUseE$h z1{O-Ubl5y?t5eyLGgVk>WoI|j9JRYS!){PEXWU%-^_sP=`QiiHd02aOPaJyHGw|>i zE-5{jDDY*mFWQL**wv?U}|!-(#ud>yRty&apt zfek~x;{o2ghlhsbk!6$Zl(54`AXQRQQia2JLolBji0-V48BXwBpK*c@Rk?X(bGE@i zfk0Slp`yE6WUfDxEPLR~QJm{k0+5m&>7lRA>Gn2Q$W~*$rGNxaCJk^b&`J6e(!Pi7 zDpCUc^Lz)F2=seCe{}_?!PQZQl-9OSCBE$JML+3e`ruVDFh*NH?w6tnNhy3$ci{!$ zCJ=Sf3=X6Sd>iLW)4P%_xrm8>-5_2r-eIh-1}S0P*ye;iGq=W%>O7YalV%;+TT4Bu*u5xtT4%6;LQ1Ac*-iFc?G1d`Xt)I{Xp-R0e z!=@IwRTbu5O^xTwR0Hby*wJmA`kE3uqC52cAl@(9D`4Y}OAO$#*aDw)UhXUe6Muw)sH@gYkNMU{#hX|~o z9;EryR<9dGBK`^xUvipezPy>uPFLRt5A^K&znFDQ-)1I*sKLJEr^+l~39-n@bn5~Q zQDaV^-nZZ{+se<(Ir%#_eLizIg@xR}{-g^XR7X=3}0?7He*7w@@ zkVf#69B1_Fjxv*>X-j%WeV+jF{aVtQI!{J6;t_a}Yte&?caMhITM?8f&QyL=G=Dv;7eiPpbl~4$;pEn@YEqCOp?0qNDxTE z2RexYo(y3Sa2?O%tHs&aO%)7Y1A${WK<+}UFNAn6uLHdKb#*G_J%n!6Dd*fwYUn9J z0!(#29?MyjE~M55UO-h$p~YYn0zR=Qs5-%_*T}M0!u?W4kxg<9KrVY^onI9`kYUF+ zAtN3)_&COZgft6@xURh)v3~KND4U}J4;mtzqLIXiFWR_v$xqZXB)o9RPe;5Z#!v)2 zMx-Y=V75sGy8}{}5h|E&Ghj0DL+=qt1%cq{LES`mjzC=0^T#oV0~Q-v*%KB>sWD59 zSOw|Ok^TASpER7PlEahc#{mv980jph>JF-%2x{S?+9YE!@2rCUwhtd3o+usw5<1>yhXrnU&adrH2MG>PKbi|g=L;|i zjP7wI`5TVNx>X7ufsWSJ)--&uqM`z)^md*sj|}ITX>}iceynlN$_{-^a*V%&>V~B7 zLKve9O$rH27x5J=!LBC(KP@v5wAx}!_w&3N&;oR&ghe=tu4fk#0RovZOg9$66$`D} zD6rY#a+d_@&Cx@Vf^^U;E-sGTHjz_Y;@Jr)qa4n7a=#jB^OW^_1O)9q(QMH6jzJe- zXmIegP+Eqo?CC|rEk`s182L^~1VKr(%$iGcE(&JZ#CV#PRtp4g6h564YQ7nPa6_7g zxTfMbG4k51E|qM_@glky%a3o^k@mI{`CBS4#(73{bT$Qe{Tu-pC)Jg<*<~~&FSSa3o z9AyGJf3V&JL>L1%G{OXRN&_CX{&H7-VxtbNe3*zlGtA0ktOJ?4UZB z_B%4tQ)XD;Yr!R>K{GVR45lh);Dkrm2yzg}+xp^*Mm}DGZ5OrAXucph$PnKSn5Rs~ zqeqX(?M&v8s1mgG75L_Dn9&8F;`QT8GAj|?$?$>bG4d1444?$nWF+mk`C`|;a|90( zGZL1XJ8*;&DocI}i^L-1xwT1SO6^t}qB==2@wmhF=v^7V!Ed4kuXV(~_?OClHMbA~+JW4Sw^Z z4t|M`HvCKHDNTY~)|`Qwv|dWu0X%g<*jR&Hj0BFep85b=0tRohvl z@NmfjkLIuo@i7PhMfhz~eKn7zvBi8+Jga3&!O_7Z+qr3R{%j+Dnr+ppzcvQ5T+2{{ z(FRc75df>Y`&X}6vDw*qX3MJ`1LR#oot1t2o<%Br$0B}h_H9%wTIdvG8Q%rqo~5l5 zpaFHnD1s7s36EH(LqS1-2AJaRt(LoGZ$!FTZDD;pVo%cMAOb%_I>7 zuC1pv2n!DdbaY31lS*~=n;II%zLhVw>C8H$38` zQ|vfP;%uBj?lt?}=>J_)y5Rl~!HDu7hyS6Ai#f9SAFr$q{wJ-!`^+5G2k&y;iu-TT z3Yrz7sK5UHgmWA4rT_kkU3T-IA9wqIt&e+^bUkrl_jI4~m%A$AW<^_FL}7CEub-#8 z*SH?nmfQXv%QNTocV*6`Jy&C8Uuh~@lM;}?miab$LDHOP@SQ0VdL%E`un&lBg?S+W>5VsT0- z`>`_&1J-v@qbEup-U)tDDWW%ZZ#cTEFFIR>xBcxc&+BpdHqlDw_p>IYyspsvocQc} zLym7>{K||rW|X!4`r`ZtO26X1b6c~3%X9m^$8Nm{ zUYlwQ*XsV!o2pK`kMl0eE8M+LaplSF&8WH`k`)*5C_|{$ zPmJGZzG#kfb;bE2X3KCN6c!dHPpjXqUq@oN8|n26#b;O1 z^uka|8wDfWQvw7a(C?w1FWP-r@#e-Y=Xb9%m}VDPeQ192r&@(15yNrcqVNaIW!Cob z!CJqv9onk>OY+c}*k+>*k;|udon($2J+t5O*~ce;x_4xb8222MWlc-EulC19gO#1W z+UvjFws$WMAqbm*fywOcot{ovvwppQhcM^^ggwEqRE<^~@LZzrqUbsWP_}~HZbb< z!q`NdQ8j?zdbylj_rO3Lf#Mwr zUR>_P{nhx6A@yg^zKSiLm`WJdF`SEwOIqwujuKeD`Qx$u#rfQyj;&p+lWamORsEG;oWYyH<2MMz6pZo2`d}J&v#^P%u-rnFGHC0w&TE2@rA;fLzp8eKRQGVJbsMa*x z;MCh+*OxY|Szl6knLqe|~Hkj-T`*^=P=xW!Nl7ION=ILZrKEaw6<{^9fL$N!Vlplhclrk^Pwh{>~iQa7k_=j#$UFmpZ{yGl+m+#KpJeI#oD*ns8CW+|N=YpeGDzB=SSX>nS zvZKnVaNwzfWAH8hW}nNAJ{+e8dMXaDm;H9}2bO+D6IMATT%7vNi(RXqT-6T?WoMtW{QT@g z=ULn}t!S9V@bpCL;%QzFrVa+YD?ND`= z|ES^yt?Ci$=N-=+QZ6|s2l$WP_8v72ruFvWOsr_h+tA`8s)hw!(i8gQ?8p4G9@}S! z357dar6ly<*H%kh$S@GMi<1(4t6#J(u3f%SQ$(R+WMY>?3WE3JR?}Avd2&cN4C*UK z+w@Ey4mf?>-g0cRB)UlCVaody<$7De(=OwWs^43jRjO<_hDqd?(w%V-i8^nH$AM$e z?541&X=PZ8mT}Z^CzEvRy~nOQH-}g`Yn&ViG&Gaw9SGi)UgIfk=73$5S?`qnLa>I8 z*ZTBm)z29ZT^+3XHeej=?9ajXvp2>1bE6VMxLngZMGsDimRGXQ0kV?T5r!fPRR;C; zkDmKS4n8t4uzhGyzj{N0jkB1otl7NR&B9Z)6TgQ|u6pPZdU;Asui>HbC2fy@fTUw* zO*nNOno=I}7)<8<#LgABp-O&dULP03Sh6K(zuM`}DADYRM4OdXQLP~Zse$r6UF#Nw z29EnBaI$7N8s~7>bWOyq;{PhEVC)o<65n`IIYz(7YD)PI=j#_cB}_gP9(kIwN3Y*v z`D=u5&aQh=JtHlB5mi}-?C5ujTax(@H63XtOJC;du`o)BP9N#+$}G?;w8f4K$A2 z{NmSc)zY()BL;l#%w^-N&aUY-G8&m~J!H-+cPb@QqdMn#PJGj;^6Adce2G!|$0hdk zEYJIEyMAAg_mDZyPR0b+huA;e3%YVjMJftpYm`qKbI2@<3P}ivN{HLO%i#5N=l4Cj znnT60sw%oN_Tnd5oBS0s{A0FBs+=&ZHSNwYj^Jecbo~(1l2=Hk#nLnqrnSt&L|Ulwv6XXoOI@VhvERO23J zN{n(%tgD;Q8y~Y2!T8gr^)RL+s!Ntf3+4*q8@+jkG_fOhp z%+S?qzxZx&j@7Ymc3v+MxX^#~KcCo>6WlD^jybPgYE7fghTPF9a1e@)tiD~^715+y zm0>pVyz}$A9dd7KlG_Y!-Szci=X2#bre%`>e{h8A{rc$fUNxK((4R*=s9LcO|Q*Er@3CkGgwd(nH<%t4L6r)5inA>}5D zyQh)`TY5u7!&FxJByvQBjSID*y`MjKV4bl=?QHw*QMNzbgDB|@980f0lky%;O7kys z&p6$4u2JYqhL2a8p&3`Rl#;x8^qqzVzYiBbc)p2G5{&0Y&1SsRggxl?0nL!_hHavb zUAFo1{JsaLk|l3&Xq%!Cx0WilkA+c4~)mOiy3M1m6oGA zcl*%CB#>O3&~Ku559@=-)_JysU?JllOS58_-u=Dbzp(LZkWFe6X!U(b-%RkASPEdZ% zS9`9oB5_WJx@seiY1<%n*NQjA1??TmhxvD8=&n=9xvD?UUbLsdc)L)dg-3ezt^^Ub zV|tw*7SuJYwQN8B6z9d}ho^X>RM+}EeD&Z**M(vp?Y4~hVy=2>{JS)Yl~SITObCX$ z{j~FK-1u3JiUxP(vq;NRVm|~Y7HzfS8T3}2XKT>#+QlzvG*nzl^wscKz{7dvrC(1n zWGd&!EbrMYDH0aWE@U});JMiTNVTk?=bE+I={{?}JlDsU$ZI*N+(m@` zd#b5gv}`!Q;^}|f%g9yl97((*bF$(_Ns76vLzK$pr5fvlS#MvgPQ2wKoLwX3=-e2! zUDsHd)tzY{?qrv;Y(&xXwc&j~?*m~KbuUUDKWkhs>Jzk(cjeRdh_5526e=bp;mF4a)tH(kx&-EeA|wT;%u`Qjk&wV7AkKbnXIkDuMZl;t^bvud#1 z%R}@_NfGlO&*^%(9$#b5nIBlrEI|5D^`++ue}ApI?2k>80;zKmtY;-aHppC-r|!9M z&+p05dAW#R#RX3H__aT{a7Ay$CG&xwP*L4A8Fdkz6Nf)hr5=A7O6VvYZfsU-xmoI1 zPt2{?(}Pr*O1%J z!ZO1KHq-q_O)WWW5MZd?sB6^1YxR+Kc;(-ntjmFAZg&)oQ1xOxG(s9f;q#;ajOeYCQRh1%53WPS2 zbi9xN#{tuSjfNs$2g#%%!v`J#{ish!h<31>8jwK*)ML!#){%B2m*CA-SIyJatBcY* zqtf>WCUmInko}@KYFX1cR?YfOuEH{Q%4Z$ojKbD>Ox!XOt8aV8$JYe7>V00Rw z{|I_jIfOklfR`p&P{%0zl<#BcNnYXWqHAyu!?XxD19(sR`En9KpcxE;`7y{)_oPh1 z50T!8x^6TS9c>S4t3jt)33!bFGW4|}QZOSDH!#q60{OvQt~5-@3P*cU53Lh2K|sHM z=k*tx7y>9wfw_R5AA)||*N|gn%HIX3I=5y17Ge5KV@XpGkhPfbw3vyH0wGD^X)gbQ z)0B97jA}If$|H-n?~Jwz(*3n*?#%c!F#EiV)CJXHgG&a<@EMe5Vm2%EOE7mTc|>ww zvfL#{1Q5o(IZ2`pRtRw^iPA%G3*l&ZQZ%MDPW^dB)foI8h>iTZp+OBRmP8Q*gaV2o z4jA$OxfrBa05DHem1&9&)H)Nu?Kv4>V$WJEVq78`uZ#+?NhL`*F@Xx{HF1{|4HE^Y&uyIX7$w)Dn zl6Y7SVLr6}KvJ1-jMh&z)z431uVqv~qQl7$z4Gqhcdk-nK+YUQqCx{^noLA5Lkstcw}|*sHnw$xmL02s!zhz$-6`~2d1re7Z@7&@P^s#67=RAHB?qH{3%7T z`1``YW7hylC!h6UeV05v(Mg~vsc+7m6gR6w))s!8X^K(`wqC0l1u~~V82J6oM7;3 zJoCur=zu*ZIW~|d2Udj-2=|N5UwU(S=WomO-X}!pnAY^~^^w`bwV`)J9Uvq?{|cK1 z*&Y28GE)=si>>1CA5hll`4ZiFS7yJaLSeb4jA`lgh>eZ>I`4uxk@ftaND;ppx^gBc zPGrsqw)`t_UoqyY77nh&Dc>MruSkSpv>u5Ijv*P!xFRL+t7uFo?B}~k+6W|{)4{<( zA%lp6aMhp@stg(f3oC6>hINC>UPd@K^j1UwMW5D_lR_kfwq+OqMAC!eKuIky;b@Sw zjKd9OSRFvXT#g1R*>|vhw!MTaU%0HwVx}n^o6|3^xNFcOuc&lq<2tUF@5+pvzb}~4 zxzn)H>KL;sUR5QjN37;kp{&o``J#M>zlL+7St_ZiZJ*U&?d_L6_`vCp-vwNXq*n-X6?0G4 zuI}zi&tBA5ITAmJR!Bv@_G-&1&z&D3az9@BrYSma%CF~-Aam8HlB%*L6Gw_B(#}Nq zHH$h8rhjeGh$m1Qr$iFB$hVKpo#N-7HGE;Q5gB$L$vUHDx6jd9|I^6QFFSr~UTj+X zK`QfpG^&iG);)uao7QvKQSOurO43bdQCcLA985+Vp?f%fRI#!_Ncz-;)rYvEzEusY zPZd<$J&wA`GQPI1ZjDI+o2JR!0p-j=DO;OCYx%ysZJbfgNrlYNA50~p4+T4n>^=k0ym1`07K_$zq>p!dVj!v0H1o)?@0I2HrooJ_1R%Tm*lEF@e11HiF z;@xYfqjsVVfELQ%?a|yHa?cB{RpI-Y#UrG9<=Iy?`T2@pN4UF!Jn9eFN7-FQy_Wua z(%g}?iG*AwNvhD8>9ZO_P#Wz$!uHOK6Y!j z19Uqp2*(yh5k--~Fr{r9G$0^iK*rdO5FkL9F=4W`)mA1Algtjx5M~GvAm9WckU*FT z1d$;?2mu1bBn)@I*qpELsk-(3_-@tr=cEdY6y^KwaqYFAwVr1MSjsBD*dcJbO?FLO zxO45M=uur&0@|L@>zQ#wCN+wp*GZX^03XR^Ae z>A=A)k03ZDs1ZPj;17vh)7Pfm<0mQiZo8m}V|BP>Lwa%6 z;B11htQ>CgX|X>Gu@h@k4jwwmdj&2fd;3MHx~pso$2X7T`IBec4T1MBUh z6j+^4(`>%ewd=7&>ZYipxsTnpzkGJ?yD7n2Dg6%$+12r-sktM0iR?2%*?1Iykz4_M zCg$DBH$j=iU{7B5%bv+7K8$G^oa7%QeutnQs=P&l014V->NX`#Zo}!k?7;imGM^`% zbiuF0*IMIFShUY+j`BWb1I$L9H;MNyBdL=M+nqb1%PZ&46NjJF=1$qu#hHPZy5>%T zvhROGC$Wt3O1ULr+kQJPHKQ^(bwoAH_{#MWDhA1HFtK4fr?^kQ3PyL0CAId?TAzY~ z5AP-PsoAPL5Vv>*)0I=zjRuqJx2k0e&gssY!&!T(6%8qr{_7FT12c(3{Sqd6H8M6DEi2~`cDh?ZnNzo4AyH@hRqx*wCy)vlCJC4BDJxeoC(S89reO4K& znU#NmpWxoFR%dQ3ic@+CAX?X9_KDIZhZ)~Ald@vz}fB5Aqa3@<6X#*8*+~Z_!ruPam!62+TsrPL)^F7l5I7n zx(&WB3xt%We!6;0-cxxzkch<97*ik_-p%94H~ z=1x+st94HJl7U@2nj4jk>)fj!?xrYn|A?tqLSrRwzs&8JGXHBd+3lI{-8x9`W`rYW zAk6i_noI5<>3jTAO7)4E#2#vZd^8A(!+J9sjcsvPVh2;ygjJ75ZJOI(El)|}n28rp zFD^{C=8o}ly`s8eP?Ni!gd10K&$rN?Z&(>+D9yt|B93w(q=Vozf`Hd7$UgV$R<%Id zccnj1{F_tqwh*I>@=GqJ=Ia`b%yTCmV3bB~T*ZF9bqY@M39T+Dd{r>eHs5pr03nVT zhc;6(!g z!8*A!s2BB+wNe?In2D{{RC{lgi284!YfL(M-_HWA@eRX5>;2+7KTS@|gw{r8Y;)64 zZMp)ru?qwT;<}ax(J?W}u1^O4<<4kmby1Uqh0Eh}Rf@#S7(fOgPV~QUDgo`bs z6%e7aQNX2gcDBDZpgC{GlVh6@%7!Pt=>z^t&WOXlj@paR@BMcc?)A-~xt3>>azwxI z7Vg;@484uY7!o`%2yyDswdmmbo9q|tiT65nKb<|qZ>xxoFPn^w7lqF#^*gjKU6 zIvDzmL)RVyhsE*6`P-?_oLy`^_RT~P08&%I*`j-0zay;x{UoVMR4MfV6q*`-82*7W z0xl4!3OqD(0ppS!qZd{JY>~D9KMjWXIz*0Yt9L8H&^l4yYpKF&|J5d=5L|5h zxsBV(&2`!X8vxhV!Jm_>0hU((DDO554))+mCATc{y7_v;0K70TBJ%%39*d zGspF)(^^I&-XmU(_R%mAh*8M$+{;A~-QG1LdfSBt3GYQ!ut^Ko!~*tJs+WbcK53Vs zp$YQ-d;2t+{oqH z00(d{=Le)}V0xI9%hf?6aR7Nw*n3f!TKj6vT{CT`xR+Opps@UzI*gMP8b9SMf;m#o z6n;*w8~)R(C5=-!1&2>}<`|9B%Dy1RJQU{`gcv_n0I25aNq#Zy`+WzGBE%GyuvG2L zrMr(xpY-)RuZ9`N5}a-T)1aLAdlGD@D>U^yO;Zuqs-iOgw=I1Z;v|3&f|G~d88~T| zt685e>$!N$=u}&W)sTmF&f}E(ox~7aZSjepFYUkF#O{7^N_q1wlTDirG7-OAyrD^e zPH<(~JAf{u7K4p2UjHB6TX&o3l*pJCliuV`j{YsR>K; zn&dl1^7(rCkCq2w;+#5@!hRf`8GYfg*la`qVfyPw;hGR|{8@(TYTIrM1u^>>fr~{H zvh`3Z&(+1&sjFFw+woKjavRvF;44_TwQf(bA;S3lSW==>XWM&8%X}-fb{zfq-!_s? zn}zHXq}$Jg2vx=SPl~vKvpl8BfMO`48g#<#_(TBi@Ac|1r^X{sF{4>j!sy zmHQ1(d8Po))^`ULjO_sk8KVGIWdV#qAS~Civ`Fb{==~aCu}J7-1VKxD!265fYesg* zMheNt)Po=usyI7()7@7kfT#^gz7U{tzWN3RP^vhT#tY~-oq$72t|$h4R-oeo70rei zVgQiz8-DW*DC~vCtzbbeWNo*6)zh)hqffQ)M=zYE&5=R|3#BdO>E*54GK?lV$tm6u zE(=uajPwi_;jBL)T`W(GONof6kamxLG`(@@JG+0+9tH9%lYeY_avhKvkU-}N!307& z5H?0)bdb58-zJd< zHvw%E6tmjW#?fX+O5Lz?#e=pTo2@_726Jv!a13Eip*or?iO9H!hFkdB#Zmq8m7v!J z!N2uQ|0}sr6-on;1#sJSz`2Z7a38Ejg7ilVAor5K@G56zjTFFXw~t?}s~<|L)r<~L z!hQdB%*BhxZrtAf=kM1o?O?YR%bC?qjuws434UD9nKwQ)7OCmO&-ac`-iG-eR?_y? zH^2S#_O;!L#~p7xJn)NCuP_RbtD}=n@@U-heVDo6x-`BZIF%32UknuJnBs6iiRY#{ z{I_?1+5&P?)yfjf2LQWSK;YC0#2Q)`A1kIl2dMLyWN0m<0B{>);^R3$or(@%Dpj}M zB8Z(0kn$>!!S6#o7B9OX8r1bMYh5Clp1E00JG(G2qQxtYQrW4idYOdvum7;{ph4Hw z4z3sQ{wwbK?f>qjFyO}dI{@LS1elK#kjIDtcpwLm5L-dfaRQiSG|&b*sO9TC)e{=n zjnJT0wGP5Eu4Ymx#i^OC?;Bb)UV4uwQ|^Z2WT zGq2^Yye}7WmW!j$`?OEhILx65Q$#OQG5aloAiX+UZ0oaj9_JwFjtLUYB+tq3mTJ1W zzOOH+0lj+v*Ci#Ypw1f=Xv(Sru41we9X1I#j)1ip1N4xxN=m#7#jLvEKtNQA0l|y( z^mM4T3GmPmAii_myaNEhG1Jeb!KFXB@NPIIDCz<_{poqtb8%eH;*8;C@H(9zIV^mR#K!55b- z-au`vmytJFqn`$nao}HOfy>*NxR~2_7!_M@f6*J2)dE7gWHSqkIKcLT0pk`**ON>` zbQ&<6mbPB{0HG$)_Pzw{BtyagV2r~!$v*zobrY|`yn$9G8q^6psiMMoe$K(WRlR4~ zc)Zl%Td}A?*L$^>no#VCG&YXj;#l?hj{-lbi%}wy7r9oLXS%cHy`nEQ52HEWRW2iV zyt}%)I`n$alQK8kP)*bIbFF?ARJ)jN0P1L}fWN!rkXrUQ9z<6TUhupH1dvM1R~q4~ zb2_v2o2!6glFz#zE>HXF;uj{|0RJvcGQeSiI)On8ujN|-=|@_u%o3YCEny(^o00yA9h=K~sdd$^#_19vz3W%)N2!Ms)$;}9^{Kms1?!9L z%dZvAbZUTX^zcLKx#N&dn+Xz$Bqo9yW8J`q<+E|~R7K3-&>X(y`8iN_y2XT#N5i)= zBacjIUS6VB!IP3N+gn@Y%@mkQH-EFD%|{Mxj>^8%)Ad?A=*;?yJ||@h?WH%}y^j{Z zL8>2dChXA8H9k}0?z;MUfNAX~*>$fQ**M^WL?)|By_k z;}8TDDVQo^eXr@7s^lVl&R%L$nCz@EtF}<1kNCv*xUQ{~8kM-N(1$0qW5Hq|AIn&O z`SfO+k$>#z9Cv34$msad=TfbL*W1OMb{OqEW-`%QT_SUD)$>hq8T)--8n(*qn$VZ% zoVD3_KzQG>xVL)y(||4;UK>D$-i3|O z(aO_wqedNXp~@tY9G#=OMT2Aa1w^<`l73zfe@WyM$%~PsS`irRbEg&ka{ek*a1DJ7 ziCmKX`ot^j@~VmmE?xW7YDhML?4;a+O|!Qx{c+(I_R$x_m!AQIWxo6Qt0%b(ir#Z3 ze$n*}L&Nyc=zxRv*t~f)x__=d8u77?S-YCg&_szfRz&tp*k-V_&@<#6Io=B)(7W6qGyHU#O+J%k6 zN-sSB&jVv>dp2*nL#dk9>`?V@UQX^JT?z>mebj;r>+>^U+_=Y8{L-w^qbpi7K7+iD zeWSZ6$>IV&x1+!+Rf0Oo)u|)d`Z3I_Cfoa<0dTo#U){r4tE~p#s~njFHM9L((Ob?I z^m15XmsqN2VC`z1WHt=9Lgr*5Hm~WdJ3`B~0wa}rZMWW%(*g9G&$}O~H*GGBbL!(J zF)Li|Qzj3H{oGQq5!2>AwH_Va0}B(=J1*2X>IL~q5|=8BWoFFR&pZ7dOFp z@MpO$+e^R;mOp*k?bARs_hxm*`?UUPAKGzFmQ{?4$dkKU&{6)%OAjB! zS#V{kk@U`m#$TMs&%g*0Q1ApRqn=DtNhWNqk`7MC(%=Htet8P-v5p2B7iS;fZ_J7j zoiZ1#Tvn|?v!LT8ajDpRoKrG%l~y`*AR)~(!Lsz&^v)4f3uRddqOFkW2P;nWVKUg? zmGzm=QOuFrqe5}OJ1N`7LTebKKN2)P>LKc%B~jXYW&)3EnkFaZpbn?z%>*l%qgFB9 zL7Zee`tYeWVa_txipqzAEeuw?EaZY#yYl;rj%CU99VZ2UdZ&iDxmplRw<|tlIiP-& zp==ecE>kf&8yDfze)o)sBYil9Kp167>m+eM=%%IPZ9eAB;9TQvMrI7{#@F{z%;Am zA-(c!i%>rz%kn6`oR)HapVQL3A1v26T7ml7CoT(dzeHzl9#slvWzo>kwO?BUTW0=k zAho{0isXW+6E=m3=Dv}?lD1^rK?H`s{1~;QM>B)JxTdmb#2uR&*6kpEDjIKV&v`G z;AwhQHq|6o0%KWB4f1Mw1`}4A!0ODy!b9iEbwh@#>HDEAepje?@kD)+M}nFr!n^N< z2ZCU{u5%+`=CdTNpKAmsMqZ z;p1!~Kg424O7!NVT-DsO`1xfFrX$O)bZ`kKZs5#|Gl{r~X7ls2tzIGNsKy%^O7IjN zm7Y|#_Mpw-xConyV~9xC4u!XY6~vC`Q(7o!6gIKbrq*p4ytl+XaFt87RL!=@TX42J ztmN;?&UWe=v$<$ZXt6ERLU@a%8a_pGjJwM{P<|fmCv;gFts_2`3OQ2S6v4uimLELQ z=;vnEp@$ulu_|&6HdyMT2u+@oe{2l!Fx$PYZfs<;6yw8bmg-_`YcEeis+=~eB@pZiz8#d=Zb@XIdax$ccs_e<<(s_jo@#ay zZssPd0xFU_QfAgZJ&woRYs<~8UbO0|UOD&5l02Z}el&$-B2r_4Dq#dF#4;!=@4>Fz-ZDbm!a$S)~( zSxJ6Hnu2xY;^T_`_uFLW_vKrsJ+i-Z8raj5mOEhHSrUh=76vv`rD~}x^e#sh%obR9tnBWN75`e9xB}&V(RiQoLZjJ)J?0m7bY^u{v zn$KdeDRgd+kxWlFTam6_tvy`vD-koeD!#?2sNzh%hb*V@_lXLzgVtjla0C^J9bt}| zK1PJE9+9pRpzh8jR-Mi3#Xz5rQ=|N=TeiiXE@>Z>iOtIjT5wk@YJXBa6Lt7N|`b| z;esYSO-E(T*O~!NpSr)#ir~~4&ntnmB1^$ke}u@*QK;K(XWyr5)Z@`|pFv5?+}W%; zeCjQ;GQ@>0>KnDyoDuDqY(MUx*AGVk^RcMZT;0tp{GqnriJG``5_mh-^4%{ogFS`a zkU@AT*Qezecm*W^j>-0|zEq-V3j^xS2O=w=&!W9DWOY8`ylUCyq;Q;@zn%zXE|_Mj zi<*mGd(+@MdJAF8({H}Q`O@cYm$)t>CKf#&&gRW08JUFiaQZdepC0T2T3Y^3Ub))&Z^S^b62nW>M zKlZw=8$~IgjUs+uNUuM_V@bC(`;DXq7C!R2k_$Xf?ebV~gBIRWkj%`5>bR3^l-BQD zv+P}e{NqtsJ6bNf9X&I&FIV;gdE1xN*;}X!8{F^{vgi#W)C0)ZJ@pr*`|hXzCBO84 r-O>He1EB@+|8`mU&ls+cptx}|QR*iO^c|sZ@=L+bx9 { + const dispatch = useDispatch(); + const extendedProfileValues = useSelector((state) => state.accountSettings.values.extended_profile); + const errors = useSelector((state) => state.accountSettings.errors); + + const pluginProps = { + refreshUserProfile: (username) => dispatch(fetchSettings(username)), + updateUserProfile: (params) => dispatch(saveSettings(null, null, snakeCaseObject(params))), + profileFieldValues: camelCaseObject(extendedProfileValues), + profileFieldErrors: errors, + formComponents: { + SwitchContent, + }, + }; + + return ( + + ); +}; + +export default AdditionalProfileFieldsSlot; diff --git a/src/plugin-slots/README.md b/src/plugin-slots/README.md index afef00546..29358c9a8 100644 --- a/src/plugin-slots/README.md +++ b/src/plugin-slots/README.md @@ -2,3 +2,4 @@ * [`org.openedx.frontend.layout.footer.v1`](./FooterSlot/) * [`org.openedx.frontend.account.id_verification_page.v1`](./IdVerificationPageSlot/) +* [`org.openedx.frontend.account.additional_profile_fields.v1`](./AdditionalProfileFieldsSlot/) From 04e6754526bd77bcf5dd74a81caae1290ce0ebf4 Mon Sep 17 00:00:00 2001 From: andrey-canon Date: Fri, 31 Oct 2025 11:31:40 -0500 Subject: [PATCH 2/2] feat: set frontend-component-extended-fields slot --- env.config.jsx | 23 +++++++++++++++++++++++ package-lock.json | 33 +++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 57 insertions(+) create mode 100644 env.config.jsx diff --git a/env.config.jsx b/env.config.jsx new file mode 100644 index 000000000..cfc4ab1a5 --- /dev/null +++ b/env.config.jsx @@ -0,0 +1,23 @@ +import { PLUGIN_OPERATIONS, DIRECT_PLUGIN } from '@openedx/frontend-plugin-framework'; +import { ExtendedProfileFields } from '@edunext/frontend-component-extended-fields'; + +// Load environment variables from .env file +const config = { + ...process.env, + pluginSlots: { + 'org.openedx.frontend.account.additional_profile_fields.v1': { + plugins: [ + { + op: PLUGIN_OPERATIONS.Insert, + widget: { + id: 'extended_account_fields', + type: DIRECT_PLUGIN, + RenderWidget: ExtendedProfileFields, + }, + }, + ], + }, + }, +}; + +export default config; diff --git a/package-lock.json b/package-lock.json index e98c07550..67dcd6afe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0-semantically-released", "license": "AGPL-3.0", "dependencies": { + "@edunext/frontend-component-extended-fields": "^1.0.8-alpha", "@edx/brand": "github:nelc/brand-openedx#open-release/teak.nelp", "@edx/frontend-component-footer": "^14.6.0", "@edx/frontend-component-header": "npm:@edunext/frontend-component-header@6.6.1-nelp.2", @@ -2323,6 +2324,24 @@ "node": ">=10.0.0" } }, + "node_modules/@edunext/frontend-component-extended-fields": { + "version": "1.0.8-alpha", + "resolved": "https://registry.npmjs.org/@edunext/frontend-component-extended-fields/-/frontend-component-extended-fields-1.0.8-alpha.tgz", + "integrity": "sha512-dOAPZMtBuA6TKXl+I86OUF4hAp/X8S25HUai3oaeRwf+MtQDxY3qg+9PMNcy0wTbnSM0Ff7aIeEOjCkLMQZePA==", + "dependencies": { + "@edx/frontend-platform": "^7.0.0 || ^8.0.0", + "@openedx/frontend-plugin-framework": "^1.0.0", + "dompurify": "^3.2.6", + "prop-types": "15.8.1" + }, + "peerDependencies": { + "@edx/frontend-platform": "^7.0.0 || ^8.0.0", + "@openedx/frontend-plugin-framework": "^1.0.0", + "@openedx/paragon": "^21.0.0 || ^22.0.0 || ^23.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@edunext/frontend-essentials": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@edunext/frontend-essentials/-/frontend-essentials-5.0.0.tgz", @@ -8457,6 +8476,12 @@ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -12848,6 +12873,14 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.0.tgz", + "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", diff --git a/package.json b/package.json index ff1938ad8..a24935b31 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "extends @edx/browserslist-config" ], "dependencies": { + "@edunext/frontend-component-extended-fields": "^1.0.8-alpha", "@edx/brand": "github:nelc/brand-openedx#open-release/teak.nelp", "@edx/frontend-component-footer": "^14.6.0", "@edx/frontend-component-header": "npm:@edunext/frontend-component-header@6.6.1-nelp.2",