From 07aff180396a7957f6e9578d1fcd4589e4f5e479 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 24 Oct 2024 09:42:37 +0530 Subject: [PATCH 01/20] sample tree project id added --- src/utils/helpers/syncHelper.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/helpers/syncHelper.ts b/src/utils/helpers/syncHelper.ts index 653bf1f4..b5fad94e 100644 --- a/src/utils/helpers/syncHelper.ts +++ b/src/utils/helpers/syncHelper.ts @@ -267,8 +267,8 @@ export const convertTreeToBody = (i: InterventionData, d: SampleTree, uType: str return { pData: null, message: "Please assign a project to intervention", fixRequired: "PROJECT_ID_MISSING", error: "" } } - if (uType === 'tpo' && d.project_id) { - postData.plantProject = d.project_id + if (uType === 'tpo' && i.project_id) { + postData.plantProject = i.project_id } if (uType === 'tpo' && i.site_id && i.site_id !== 'other') { From d96fb06b120b700a30b0c06ca811eb4d2520a6e5 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 24 Oct 2024 10:17:16 +0530 Subject: [PATCH 02/20] Edit option on Intervention Preview --- src/screens/InterventionPreviewView.tsx | 61 ++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 6 deletions(-) diff --git a/src/screens/InterventionPreviewView.tsx b/src/screens/InterventionPreviewView.tsx index 86034ad0..fd1c0769 100644 --- a/src/screens/InterventionPreviewView.tsx +++ b/src/screens/InterventionPreviewView.tsx @@ -1,4 +1,4 @@ -import { ActivityIndicator, ScrollView, StyleSheet, Text, View , TouchableOpacity} from 'react-native' +import { ActivityIndicator, ScrollView, StyleSheet, Text, View, TouchableOpacity } from 'react-native' import React, { useEffect, useRef, useState } from 'react' import { RouteProp, useNavigation, useRoute } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' @@ -17,6 +17,7 @@ import { } from 'src/utils/helpers/interventionFormHelper' import useInterventionManagement from 'src/hooks/realm/useInterventionManagement' import { Colors, Typography } from 'src/utils/constants' +import PenIcon from 'assets/images/svg/PenIcon.svg' import SampleTreePreviewList from 'src/components/previewIntervention/SampleTreePreviewList' import bbox from '@turf/bbox' import { updateMapBounds } from 'src/store/slice/mapBoundSlice' @@ -35,6 +36,7 @@ import i18next from 'i18next' import { useToast } from 'react-native-toast-notifications' import { getDeviceDetails } from 'src/utils/helpers/appHelper/getAdditionalData' import InterventionMetaData from 'src/components/previewIntervention/InterventionMetaData' +import DeleteModal from 'src/components/common/DeleteModal' const InterventionPreviewView = () => { const navigation = useNavigation>() @@ -45,6 +47,7 @@ const InterventionPreviewView = () => { const realm = useRealm() const route = useRoute>() const interventionID = route.params?.interventionId ?? ""; + const [editModal, setEditModal] = useState(null) const [highlightedTree, setHighlightedTree] = useState('') @@ -52,12 +55,28 @@ const InterventionPreviewView = () => { const InterventionData = useObject( RealmSchema.Intervention, interventionID ) - const { saveIntervention, updateInterventionMetaData } = useInterventionManagement() + const { saveIntervention, updateInterventionMetaData, resetIntervention } = useInterventionManagement() const dispatch = useDispatch() const scrollViewRef = useRef(null); // Reference for the ScrollView const childRefs = useRef([]); + const handleEdit = async (item: InterventionData) => { + setEditModal(null) + await resetIntervention(item.intervention_id) + dispatch(updateNewIntervention()) + } + + const closeAllModals = () => { + setEditModal(null) + } + + + const openEditModal = (item: InterventionData) => { + const obj = JSON.parse(JSON.stringify(item)) + setEditModal(obj) + } + useEffect(() => { setLoading(false) checkIsTree() @@ -187,12 +206,24 @@ const InterventionPreviewView = () => { const renderRightContainer = () => { + if (InterventionData.is_complete && InterventionData.status === 'PENDING_DATA_UPLOAD') { + return ( + + {openEditModal(InterventionData)}}> + Edit + + + + ) + } + if (InterventionData.is_complete && InterventionData.status !== 'SYNCED') { return Sync Now } + if (InterventionData.status === 'SYNCED') { return @@ -205,6 +236,7 @@ const InterventionPreviewView = () => { return ( + @@ -224,7 +256,7 @@ const InterventionPreviewView = () => { passRefs={(ref, index) => (childRefs.current[index] = ref)} /> )} - {InterventionData.meta_data !== '{}' && } + {InterventionData.meta_data !== '{}' && } {InterventionData.status !== 'SYNCED' && {i18next.t("label.collected_using")}{InterventionData.is_legacy ? '1.0.8' : Application.nativeApplicationVersion}} @@ -286,8 +318,25 @@ const styles = StyleSheet.create({ justifyContent: 'center', alignItems: 'center', flexDirection: 'row', - backgroundColor: Colors.NEW_PRIMARY + '1A', - marginRight: '5%', - borderRadius: 10 + borderRadius: 10, + marginRight:'5%' + }, + editWrapper: { + height: 50, + justifyContent: 'center', + alignItems: 'center', + flexDirection: 'row', + borderRadius: 10, + paddingLeft: 20, + backgroundColor: Colors.BACKDROP_COLOR + }, + editText: { + fontFamily: Typography.FONT_FAMILY_SEMI_BOLD, + fontSize: 20, + color: Colors.TEXT_COLOR }, + rightWrapper: { + flexDirection: 'row', + marginRight: '5%' + } }) From 7582caa436447959032fadab62b925d41c43b2c4 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 24 Oct 2024 14:32:32 +0530 Subject: [PATCH 03/20] minor --- src/components/sidebar/SidebarHeader.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/components/sidebar/SidebarHeader.tsx b/src/components/sidebar/SidebarHeader.tsx index 66e03d1b..2690f60a 100644 --- a/src/components/sidebar/SidebarHeader.tsx +++ b/src/components/sidebar/SidebarHeader.tsx @@ -13,7 +13,7 @@ import Popover from 'react-native-popover-view' const SidebarHeader = () => { - const { image, displayName, email, type } = useSelector( + const { image, displayName, email } = useSelector( (state: RootState) => state.userState, ) const [popupVisible, setPopupVisible] = useState(false) @@ -26,10 +26,6 @@ const SidebarHeader = () => { openWebView(`https://web.plant-for-the-planet.org/en/profile/edit`); } - const deleteHandler = () => { - openWebView(`https://web.plant-for-the-planet.org/en/profile/delete-account`); - } - const togglePopup = () => { setPopupVisible((prev) => !prev) @@ -41,7 +37,7 @@ const SidebarHeader = () => { isVisible={popupVisible} backgroundStyle={{ opacity: 0 }} popoverStyle={{ - + backgroundColor:Colors.LIGHT_PRIMARY, }} onRequestClose={togglePopup} from={( @@ -53,8 +49,6 @@ const SidebarHeader = () => { Edit - {type !== 'tpo' && <> - Delete} } @@ -105,7 +99,7 @@ const styles = StyleSheet.create({ alignItems: "center", borderWidth: 0.5, borderColor: Colors.PALE_WHITE, - backgroundColor: Colors.WHITE, + backgroundColor: Colors.LIGHT_PRIMARY, shadowColor: Colors.PALE_WHITE, shadowOffset: { width: 2, height: 2 }, shadowOpacity: 0.6, From 35dcd7e8c0b7653f67ee935aac1f17bb84a85b69 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Mon, 28 Oct 2024 15:10:20 +0530 Subject: [PATCH 04/20] Icons updated --- assets/adaptive-icon.png | Bin 17524 -> 25751 bytes assets/icon.png | Bin 18549 -> 19424 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/adaptive-icon.png b/assets/adaptive-icon.png index c98f0eacc43dbede865fc238dfcb3707c753eee9..f5e556d8a3a75acf6cfaf7cd331fc895d8557df3 100644 GIT binary patch literal 25751 zcmeFZ_dnHd{6BsjyO4&NgzA+Y842Z_l2K%(NEuPl5M`BhPI;+pvO+kKmCD|6G)~CO z-iqwK9cMg0*VF6${ujQ#eBZCz?Uinx*Y&s_*W-HZ>wXnzY^ckmd+iKwB{@Sm|^J8>gW7V*qL3&b;}Cu>-snfh6dNzElu)yBO2@{A<+C=A~cjfcmOtmn`kn6hv#pHe08F>zggqz-=ifZ|}_#xBWv-4E;gi-;Msjac*y&$ci2-Xk}tTe>h^$S)ho3 z{t5nX8Wh6+i3AGa|Fi@O;s5W3Q&SF|L&I^kq0nzHbiMH<;_BL4Ya=fW7rIl0wcn8r zo?cIxO&&wquOs0}_9Xt}!^leN%1?wEA0LdU-s>i7FFZECzPj$o3UazBe>mmmc4fUc z4B^*4?iZBX=$Wb{Vl1Rx`chDXEHLhs+Zj&?l1%N{o$aX6dw-!=UD)M~fK5`kGo9`^ zvVe5cm*yr?=Bo%^xhaO3=6?m!ObQzOR;uU`0c&C9=0;n z#>3{fU`5)8&tv>7o3&b)!|x(og24_Hb=ZADN~tM94qhb2YHN;(r_}DvI%mXT>CeVz ztR}60L4X4s(1jyg_h#1^8LcDZ?BPF#n@{(?e1_aN-Mz>jcYTlO6g@$m1@sx9!)&wb zkbY*P^#WA;<1JJ^df&WFbyuNRnzt6Ku1TXg!br9oeYMr zZAVrfGdqumZkXGyHzWG40yb`cwg^FbH}1-VlT#n=N~m92sG5A%goY{X!8fy)sr`mq zXHD*tHa)v8vaPxGXZ}b%Ss)j5Df#fNC*xk&s!Y44ugR|mR0Ul4TS$v`Ub%gzmsajI zOLgU5D}8W`c($1vfN6(EKFYg9tJC9@9|Q&*PWwW1^A7B}d0^h)$H(rA8)suqFO9Kh zFcUFo7;{&o)IT_Iu$MPibg0c)qoheHbIH0!afp*?{E&M8Xc#q>o5Vr^o0OKAlLf{f7q$L+R_Z6)cO1+g6>FHXg?G2 zwi{f^%;fGG-uLFU+{F}*_Zj^>Ob@Cae02oI5-^Suq|Z0dt+7RNyK4D;88O}TPRE*r zk^S}yqukmve$2XS4M=5bOLB0M|D*m+hVmTwX__A9D6vtrM zC}R#|j6u0mTy5EM_ozL4oL{Bz#vs-1KAnAJ+4>9V#^4sihUWrS)`E+xD}}aJZY>sZ z_SwQL;@5a!(~n#0shwi=X1!Vx!119e$)g$Pjc_^l_!S%3P3N-NZ*;8aY2@Q^+3as( zz9AnGTiH)NM&dQIUzqbZ;%mL%*0gu>u$W5JIHmY#J{VTr2eghrB6aB`j!!*<)Slhi zW|q=<&Sk6LjxSMD1n+(!@k&MOiS9GE?nh>LnPz>*18v+n%-YUQ485lPxr6MU#n6ezRcfTnJM`mC)y(fw8Y>X!Dz;FM`Fy$<-LM!x4riZjiarBPRG?W`J&oaFvf~dXKL2^$_9@K zH|yo&JnQ48ULYJO?1eAl+ASHg3o6N&o*a@JZk9SWybt+uK?I|5VrW2=yKaa(!W#Pn z5MH4+5IYU+Y)cN|>sd}o-jt!O=$)y#gr^k?l2#8#cD~iJ#~2?v497VXmW`1F8L`NT zHjA**Lr!r}K#J-%2H!Ma-8m!nX>iqa7R;QYfD5 zc=IWn&kxe@F27gEmVx)x4kYQzp41YrpmZ$w)};w^`d~ ze7=H8;}gU!ml4_G`;W(i&%JMu-GeSyGps;Tvj#Kq9O|ya;?QOLL`*_zcc;%W?tBpi zTtV>nwkE9O^!7{0V9HP%5_9*p+9JI!RnmF~VK2J#SJzY@y!=M4I{tlR_!2T5?@dYX zVYFIB>N*?)7mmOIdJT-!9wBY6TSM5vq+$BhM?>o6M%q1WxbQ;7=@wSPyO-tvG3r>F z*1$Mwuh$0ErDOON>2Cb#&Fce?9e#{p)iPgmZ!bq!-x_h(NR=%4zWd!X{DwpI?$Nm0 zeF`l>?=l&c2b03;U$_?2ku7Jw(uKtT7$mHpPh{9&-JE%k^J_)$(*~)%{izyWXNe=nbYuZiTM+Th! zPrX|Y(nm;2(Motr#tV5qS|Qf!Shc4M-T+HIN6|)do9-a&&(FZ^7k%5^LQ9uJ!hPmt zEE)Pmn{HS>>PjwM_BK4sg|nnvQYGv)yP+2$j91QGvNw?(&4m}@-e+p;i!xID;=NIacC*6{ar|;3iuPGu3ku2RTh2PkC8C7w1`4Y_< z_}~%Iti8|zjE$m3)0P@+9=sf>#E=X zXxWn(XUnybLx~Lb%;N$0OeInB*H0F%3`02t7lZC#x*VQeex8dvJ_A{N`@rmbhD>f~ zwh><3BB?yiW}1)Tx#mE>m%C5t;msSaKDUOi1G6`96~XF#6BL24X!RBnZ@;GBB?G_N z4BN4B8|sr;FE{n0-emk-`d8AW`{Df?O)R*J=*j%i(?1+g;<;cefECx)R1^(4$@r1WHqO_dkI?QtFN3cbVQJjKwHQ*p`by0f9G zALA8Ac{S3VG+8kq5z;5K{J^!&B`ZJQ*ssP#3?&4~Y-wGY4gtGBP zUmKq=A#ZnzKg^AqlCv4b7)|F!rW%KzyDxCYO2}>Y`?Q3q^D|t3O|1qo0<3@G8ATFw z+&)xTo%$c?FT9L4bk$W?8FxPi>C<8_ERhsdt}Uu|Q(w>do)SG=B|)FyFHBx$b`pb( zT^Zke!szC4erXt@W0F=&%WSpsK114E2(#WTJ81XEW{DN=x`&)R)J{)Io@aLY2TqB7 z@aVJf3m#|nC&{Ft0DS7EO||j_X^lY&>-BHZzNOa9z9<9j;&)?M$^_OYs~@>epP{Q7 z)8vih#%X*EAh8D$k+>$im8N7e@r02MzYLDNK^;a;|9tKu`$;*ddb{Q6BQc%_<+cP) zkcDG6Rc1|)9lVIX>e^rb{I%*_85-s;nkmbzwQJ@6K=X836VJg=Qj+&0{oKjny>gJN z1jrTrkMrfyL7P83c{d?Tj*$X>TTzeyI3S-bRyVW=CoV`Z=IOIeL5Px`(N-ze&73qy zdd15C4KU;pPMqu-!grQ3`j;wFrmuZ8qh(4UX%i%slf^+PYl*>;c7Z7EO>TFvAv z|CX9TDmjlT5shYVecDV8qhS+Ug}k3zsB#=M0D1S(DNi0&Dcrasu85l0&%_j4$3gaI;Nj~=?`g4 zYqWMJ9$e9fGH{O$f+u)!l`;GLq>tkVL`@r!l42M+t^am~q9T17_dpCAPi@-JZqeqQ zKRd_*K|v_sj{1@7$jl1~FIG}HqYzU5(AG~6@1I2~@vBI}PQZ2nlD@o=!;g2RH~g~l zema7%+^HWP_xAWcK+`ul?poEoy1v=qdkKR(f%2Pbwu&qpFWkWoq>}LzUc^~>V_Bd6 zmGo$ik<{$N%UNmHMA5K+ z3T(+eSlTGVYx5$cE4}~VNeL@>+oM1-2J-cs+|GDvN)wGqUX|Be%Z*N(V_a*ZFmr{& zZ$I5=_eq&_=Cn=h`&ar5{t4Q!Te2FSAP!44oDjb%h2-~Ge_zUa<}Gh{nog1dnIojH znRL@iBr>3BoQ8RS1`<&daatMf`hJm-J(*Iryzk++TcTmmtB0&1^l{04IrGrkzc6iD zD?x&i*HKk)9jJCb3bMGMV7dCF;YTAlZvCC&Ep)z;8hATAx-6Z>& z41dM)(MRKakDRc2GKaf1*clX;lQDp__RjOPazOn!8S|W%k=2=^?&ctH4Knh$StQ%&m5B-tY@Gzdwlh~ml zhlAm7+VC5?nj0}65aIV3c5(<*Xr!xb^y!791Hg6+nsr3S=S9)K*Ade>pZm^#qsJL> zuA#(v>5?(L`3E&;#iN-M%!D5>h_*gZk*8hC$2VM7UB%0-oToH0G7I_N-}z%RZR;4k z+OqPavf3=*3DPSlRbsi!-f95(@5}xXfR|ovxBEOG$8ac^$o6SK+6M4mTf_W!B1gWT zwh6spacMv>>NXvd0L=wg*-^G=WJD?TrSa(BTf#=g(}%;am-v1-{SnEYBPo*ckIG!d zsvi$FKW=~0UyLv-LrWldWI-MRVE)lZo!!^lhqSjN9gJcA#D!j=m`mSdp|dyzQKoq7^I&_rE5H`=i>2)m@~gm5Ai!VV9{F_9Giu6H4Mnd&{YV zjQ__*|f>dV$DnCYK{ z!CftO0M??%X#!!hVF9Vae6f90=kn?2Xl-NSsn&;_reiBtTO3hW(C>AlX8py&&ys&1 zvQ|7Si>knsSnlR9=7HKYoqp7n;r?a;n;6e*R7-raMRKcU$8`Iww7f46we5I@BWx)! z0o>_#Y6vVTg1dE-gAV;jO*Q?J@}M^}{3svdo#K0_;Xp+u(h&EIz>Ke`6lF6zdP=QA zY*7l{9CX5HNZc~5#7iG*8+d3EqQjbg_5|Opi!wBUi`W$lE=v&s@hkNs_dcDS*e9UN zbd-s3K@l$Jo}L-_LPNvuPu*j)))5^mfu$mzx_l)zZcy3WiS zwM3rzF>;YSjy8^f8FW{KyXEeq&tcTeWRNY)4ElE>+IJZE))Q8gK-i5Vi!0LgCVXH2msq$nPW=PI9y;n4H2ENefvlUCHBb z>0>$D+BH=kYO%)tq_Pdi8ul6mn6C*YuXZ58-Rb|}!_Rq{T8IY=cX>WI;I*V|=I^(a z5@NOdlz8gS&9Uqj{6{7U0jf8~g9T{WLsq{%T+K%2vn>9k7;ZXIH$_h@M-N|^68@3@gt>kTtR%2xZGMB0Ymx;!r>gj9{F8*X?b2U#$_@Uwe$jjhWB}txB>M?JgO@;!!x2$*;HClZvn0tNQAkQ2O46t+HB|DncEG5#_s?NxR0p-7~+BFosSvvRvKR(z{C$4c@6I$2dWiZz8rJ>1W$tYOAC# z1c+2E1Qs1}(Hj=fZDH|Sib`Z6e1MLNYiMbLF1^@+e>kq@+k+!1Ly70oNn364HAP}B zj>Ctw9i-ve{+wmUI39u?#y`fA!6WMRZf7u>Qpn`3efFqU`aOq~`kZ^=De^8)*1ev~ z=?HP3#&%nfAPd`-g3)LlX)W)uesGMNo{g8@^u*uJkzmLu7vfz+Kz7!^VzU0TExp4S zf$(aLlA(=INt@%noERp;mv#)Ov3(bd*xk6>BZu_CK1vhP(nR9*Po5EpWBGchjQu~X2}yWW5&Vk3E}WRh z346(M;ycI!v{O4$r=?0To}bEx>rp(7B!rarp-lX z5*ApfL60D7#cD`P&tzzPBK5u^8L*v3upWWyNJczN%(N&BYVHR8@~M?5Q8pkW0b43} zU`)Hwv%;WXMX-#7SR|y{_4kxu^y)%`;q%)U^f3*)Fn(T>otyIO49_L(JW>g4Z$W){ zGboTd%$uY~#;ZQBxr8h?9z3<%U(s*sh5xwa=iSC09E-!V)YAT~K|LUw2yH^C(tWf< zl0PF=QpcWyKSkMVI>jboDjD`wxPEq)Agb2L*&0#&$62MPgC_^dOG)7@gj-M$E?zdD zALyPtE~NFS;qs_f<(VO!LhSzQODPp6PJEttMWnQmX2g9`VBhD32Rmpu1na1qQ}ulx zg*|!h^$y$JTWStfO%#{^HRO=;^2|dECn+CiJR{?#PhCN>|UXz7>goou=X-4z3 zlO!W0;luC7NQbIbYd{SJ%Rl#-5&rY@t~_zHZw}Cc5SJ*&k7%1rUn(RQ-iQ*dl*)P@ z&paG{<~Y)l+GfOJxs$^M?bMg-hx;D?ma=6phg??5VkL|tY9>1|^HozNldz;spZs3J zXi)`*P_B+?;(W+xoL?Ds!NyX&=2hb?UY+gMw}2UD!=kdu!gmYwp_byWnt*T#`j{fL zQKGznUvNN*pCCK8hHwI4diHk*zZT(@ADi3g+BXd*f+{+&9u5@g9=<!8`764GEnaZnu{Dvr~5r(e6&yItP_iEedm_VeVL7&R{bX5dIOIGQaN?HUJ@z^d$ z4FaMO%r4oqBpCv6^q9v?A$$pH3a>>#5I$Bq;MpD7ES9t-F9%Q1ib}GA(Vjapq!^5t zt;Urt245EZ+m3M06d{FfaA0(6*2{cr4s{^_k9ofwAM!#Y{G8>>%db|STQAv&w(z(x zkm)s14vVlN9^#u6zJPWD5QjuRiSr_`Uslp6H_TNdW(0QnT6|h9O#Pf96kq~~YtU>i zM$g-b&JPIx!;joa_MC3F;h4TCXC`hPP4nTYj(=ptShe>iv!9qd+yM=FXuy3J@B zE9OS9Rd(t=_GSudSI<}p zAG*RqRpa&@aSsx~w3@;LKdNR)GtxQFi>#fXrhVZ>0$B-MU#nCHWAUQ6ik*uS-A+3Q z{Ci=ZN`@KcC0gNuVd399aGXHsUnt`ZhYLObv;{ip8ogsG3WmAIjyB=mfWzrdWmjmb z-v$VVz!KDng~B>VaUJtcJ6i`s=z=!fG59MKNl&6)qN&yrj{yr%M|7H@he*B6xq0dV z^{)jedI@RG?-IRW#Hci3BI66W=9vhY2-lTq>0WyL$H>8F#{kg^3dFt3W=r7KK(i@L zwNXqSxakgyC^*{BU@d+~*06D6o}NHgyBw&G@FGo0u%13H8JCDiM49Sfwm31hy3E@* z@$P0LZKR9l);XKb#0mByppef@xPD zISzZb!xqbP;SN?pLlSs*Gs~>tw7KlTI$0;$hFNKETRU>b9dHCm zw$B?mH&wc(zC3OPa8b};rhlV%Ve1`@rc0!;wBCgWN;my2!Rz}jOc8t2m)^}{(;z`^ zk9i)OlPC8Wn~)>zltm^_2bknqy?-|ua(z&y)o3kd{;o|90`FHUH=V2L&V?j#5tvst z(~G~$ys!>E(?g`Eh?kAMU+SUstkzUm7@B_XiSS`v3m|@-XM90; z(fE5fbM>~m6V0=s>h!p^pA_2}cJNK{;aKri0Vd6*G||TLkst3mU z!==g_&XLzD8=H`mY;QHT<_R}?*O#y%Z+>o4IE_!h^ULkEglX1{!y1un;4-DntOb=fFHE&=8G z@}x-vRD(YJ4fp&L-#z@iHbq+jXrEmdUEk!FKOuqlj>sw8{O-^yMjWMe2Nqv5i1$JBQ>UXff8>9K(g zYqu}sgdla7MO)9mdK1wYLie%DkA4UE?>n5?vz`)!+#+3Z9xR)46Aoa%1@rAhs&n=k zSO)sDyccuFH2NqRfkm`oxUf(?<_#;rC`{%OjZ;2s%}-4VJZ{&^cOR_aoM4jv&H->S z27U$oG7O2sX-oRp`|~8S^%S47zb!`Wa-_EaZoy$$4&KS_2i&N6z3SF2(bk#Do(nUg zo3vUNViloj-5g?7*#Ck@|Kd{}7#PgRAB9!VnHZeY>DL_pYtzp?%|zG(-XDRqGJAOc zBNH+*RObjg!&K3texe7s{<(_-biOL)g!hGIb5Zc3%N2S&Y1q*}w-7#9cf{%5@cL3B z6I(aN2E+N#z2lPQUv9S`IxXQ-S0h>s+J&IVm zQDI*RqtNkz-x{XoxqBRonaMQJ6ETVp`SDh3AI8`ouJpEnx{9E;T4F*S?Z~f{VSeMw zSD9NP%ftcNd{r=rPhn)H<1LY^%2@!%4laAZl!j6PWSLp+8p7{plw?L`7d{xN6Sogm z`C#egYj~X!Sa3O?V&xG3ecX3<*m|xGVlJ0XZD1o^ZO9oQOB~uk?*nRw#Z8|r(&$zq zv*E4XB0$RanYtbs*-RG=Gzh_f;v=x2x%Th~Y$hnLBrI{utEfhR8oTp%Z?-Qu%sy9S z10502P7I<_X4e<=917+}@q#YuuJRNPPAP7_kHVw#_Tv$WbRS! zT*OP)MSu#-3naCEjNwN~8Hc>Fk6w_VGRaH6EN<7GREpJ1>^KTf#sAgl4j<1^q&fQe(N z!5oq;qEYoWpunv=0m&TtA>VXD@s<#$F(;%Ra**<8Po!2? z)D`76^y;+J%i$B{j^z11OdfM%^>x}*Y=a8YH_c2yHFEmcs9MbfgRpQmTmaN*#a|4g z7%n>&qQ>-2uom}_MQmj8&l1Q|fYaHs*AUe6{)MsVhM)>!r1h@*QT4v}ZV=?}k=WoG=&jZw&qusVxC7u6LrWE`ASRhDahrh(A{&;pXfs0}-G-2_pm4 zzKAo`6uc2~wfamWq7`*LX~AL2aiGG41DM4^zfhA*splz7LMkn(SQ&+v`v`-@{Gjc? z9UffCr`WG*IAR4Hwyope-rHsRlmBZuf7~-7* zIVQIq+bq`*=;n5UDo>1B1Zxv;+E8R{k`pxK`NrS7=B$n>jFwJV)f%t>+&|l&y4#TuXVW`RCv5zr zuH;m%e%#EaXrbC|`3Ur7T+M#vl+ zj?4kK_BTF-X8*TU#MiS%!M)pyyY0FV{)hDezz54G!3gtRRr}Tc_M39!ASNf|)Xu{I zH-^so&I%HK?g9z3%beZ1M?V1&gAOMki=ud5Y*Q-+=HLE#eKMf+=3sFz)3Hpb$0&a_ z5c5T?6CV}6WO=g~#!vB!aUUDTio2mO(^0a&@$rbsUj?sf>I~PghWp!Am)>I-H}!Q$ z9~Mo51S;~)^Dw&v$bN<@zhlY$v@1zry8zJ?ZqEN#C|4uG{5Q^>2jBuwYN>V0(Y3QG zms_n8XAJh6eIrx+y3n1Wr2akBQl1&yU9AD?ax@ZV9OfXbB5OBne29fS{;B0UCKE>7 zzwCa^9aU?{x!LQkdjy)!@a)LW)?H9%&Pd97rN+yqzTplt?;u6!?116DRaz-a(bHBwM`jGH;4Nc88^6$ol^Zkh5ZrXmt#3-W zxvEP&tVIMk`sBy?tP)3y^x*%#wz?QnzVy1o#2#FP?#SZfN=ph4YUppQs(l4G@BI%A z6*W0P%)hUbDObRHYa2I$lIBx^E}Rvpn16TN-UKlfy}z!>t7_i_a*<1a)8T&6zP*cO znlnFW-Q{uXzpaIo*TMP}p2xO8Fu*?|zgXy`2GpEe=%KuAuYa_|mT@^4T&?OXI^o%E zE!fIG_)FGY9xB21h}61$-~bG-KtT|dbX^B#k=B6S1*OJp-q?{99(ip8_Ef zke~$zawIihziGQe%-?0HFQ!F>6N*v|Rf*R6LT1|s49F_s3`~Q#&PGn{gozJi;~bm? zgz+02hhOvx@UU>{dpgBNIf8AJ1l#Ye`4@-SMc{Ze`T#Lh^@iz9!(j*7_STd?$pjc+ zaT@Xh&^t{DzlphppabJJovaWXHI4d&zjOD7_Nw_Tkm;D5{I;u%`79AwOCN!|!BDD( zx032^tP>#*>$~QHvMM60x?vQ^u$l`!Y z60WZ&K4Bu1#}$4SX9YyGdBpt4Btr(&&xX%pY~6KQ@b_f9Cn-;USi+Vty5~CdP8d1N z9tY1KO`{rAw#LVhVVu>inUZOE8T%d;Ag=rexXuJMwHPJ1>b>x2XT;qCj@`|T)qF&5 z^moxSdm++of{CzSTHO_6ya(OPPZcHwq_4&P0izZp(+OP&$lUn(*8FhzNX&oSg0asm zi%E1N_ULSlyY~s}k0}D!;8W@lNwz)zf;o_7dKYwm^@WnRX7?@vGzt&{wO%l9nELTl zFmTv432(#DErHB9osR{Rli)vgZR4tBY}j!ns#)l>f@ax%K0;)`|4PVr^YlXa_3O;G z=|gu|K(pkvnhJ$f=51xIA*Amj6mg2ZsA@U22XI-J>>{Y#8)w=!B_RtIz0Q-&91bT` zQ>4J_H(eND_8evc{=?qp)!Kx0khfQ+oXOT1I7Kc^Ohcf@OY|ew0)OkT9S@Mne`Pl` zh3m6h*Nyl41Uu!pVyNwkb?!UF^4SS7#*N>ms$kCZAHWLrC^sWw!FUCm0)2KA(~zDd zYUn(VtrmO|(g>q8I-i$JyuM8z5Nr4c5Tb5rV0x%{k?pWhH@Q4qaim`u zHvz6f*Z${buOaX_OT`+iL8S;`c+U8Fo={Jcb!N&;F5-w7n+mJeAgCtvB5pTLzHcyX z$FXugax!dgU>Xn9t^SD7@ygr)+r|*vWdgg6}={{#^?FKen76RhZKzp6tEJMHq8o1w)hG@&{iU+zw~V zvS;zb>_%-}=P2Cr`!Q=w+2fC4m;|}u9W^5qkR=8`3JtjpnccMGBBWms0TtkP_w8Li z*k!?A3?8#rXyTg9SF}$l^67C9YrpCf3~rc|uo4b)Ds97I3ClNynS0h8OSG7k8?*F5 zYg{vO6>y-}GDKOST3{-CuSB&#`9k+UU{W80JL<|0m@dOkrlkJ(al+~0VopL~Au|Z; zqc)C4>Mm7*EJ?^vc|j<~06ViEICMi)3=q-)LCprhEE>`@xWh$kuW#F*z>m3o|4zF2 zF@AtU9L69tB9g2YK*19WpvB&rZV4Foc72_j9+P2lZ->}lF8ztobzjJ_2|T6(_n^7R zdI)=wWBwa*%=*XP8j8(hxnBmoU)u~HZ}FJH9GG~2>Xcc=ae^7G1$HNYyTul=Eb`sh z%N?VWQD9M5I>BnY8(l`<9%$!FDE6+s-bi_q{12hXYUlYv_Y3g|JDTDua2+PQ-Lw-D za~S0nb1G3CCiAW!xH0G@pNm(WpZ#udvjAf7m<==0#Hl0!#UQ3_8g8SgY#$e_O&gu2 zI5hyZkMoNBn6puhRW#GagFeR;>$`ec6(r$4Zais!a!D-?Gf$Z>Wi}*p0H>HWv+1+d zpN1*uWRnj#K`{%o1Mb9NXY7u|=f z&<$oAS#aFY2A@l7 zbq(VbwWJ=jg2y?bbLAlE@8@xb%I}#8vGoHCXJ{Y7D8n=I%pq2h^=9(GWpBi2x(qmm zX+3(?zcsb4i_EIv2!}{pSiBAj@i;w=;d55@sy+t#?4=#3NSx>*Gk+F0R1Lm&D<(p4 z&p!7p1%NXw75>3EDHI}8uM_c7%dHHa4z!&ptxjIAJHm%lfRo94V8^%RQXhihhitz; zv~nJ21rFp^u0JbeIJAu@XBDpQZ|-4WGwGsP!jOIpuXf3`HaKyJtj__PiQA?y1*Osi zclQ2f6Qy0vh-sS1)&vcY7fa!#`k}wWeb3xMDXb>LX`xdE~Jge_q; zhS*%f`>TbwGmn8s`#`JPlQ?9I^DgEQv}vt_kedYXKGNDCp)*&kp zZM)j!%;}gq$K&vZ9&YEnjj`LVcZ0U9z%izX?&qA{?8+AznMhJL$dZEGUzX$5IDFU& zym8{e{b0Qt(Ukm#4AGn$W9;uTaZacJq>EqkzvU#{KUTsK!S-`&6&nPB<7m@CS|+Hz zPEP<=iRMhLN3u6t`pOG-LzA(e&_uolYvV49sLh#ISXXwO*+V`D--7JPS(M2}k z3Y}fSRsaS2wQ3q-+LZf6f0oh~ln{u>#IG#j-NiIT^Nzd-ciXi(#LQwAxC;=1`j_7> z)!kYCQ`zWM8V$S2_4HNz48nl5mImAg*$O^TA(MQN%aQF}_>E9vQbpQXkRU$Mj)Z@n zpwm;xz#S%aSx*P7KzobkL3oF{tIy$Eg}x!Rm|{bdCGL8Jr4KKQ8zE0`!?@ak6N2oC zZe3~BblA@f>xWLl`$P!p{a}Q&w+!r`gq4rtFROS!pQ-yYXKaSpt0%1$^&Sbw;K zP|-g+g{^s&%3gB9+s7(N)ZiH2Ptdg0SUpPR2LV`8Vvug6{pb;6(AXvwkj2Ffp?nj1nWOxjDU z$Y0Qx*~3db_BjRg*}(d}mE5aLdhY2pigHK;rSzr7`bAcpKh)ppqpkutX$Az`IkfJA zAgr~bOu%}^thbB$C`Ep4Rn+ky6#n45V}wR$15eG8?z1)gYVA_Etkl)N*d+O;x^_G< z63WSaHI8RCWR*?jumh%l)F2bQ4O(81UV`(F!ueLAy#AHPTy|zN+Zqi~ETz9n;ijQ2 zsDGGR5MwGp5kSapJ`@agmGA@FPRG@0CP_P^o6*T7P4F^QIZgz0oY@hK9OB;z z4_*f*m>q*pCYN=@#*P*xxxOy%WQQTGt*kCwZ{^?o46j(o*{f&3mXF$p(%)pm?KJ z9V|4irrb`Cz0QeAbbuvN^77sq8f>SH$)vAgt&H+Fc^rk{!1m~(-7f3D8N{oG-K^kN zzt?d0N-0C0w_lFIjJ{=RRi+0J@>LY!2i0e{VWuXnXT->afE2~VV0mnw60k%Eoh!vE zBzcS5TCzFv60cUIEoe@;wvcF}go1ZnNXL!n!Ltu9f}#k>eRkW~8s*W1UpJ+ME2J96 z7JgxB7T=AfqG*^y*pCR#8=h%`bk!F*JM){-LwU~C-ny+^!d+GJwiXxSsYV|W6qZMb zg$JwLE3#pvGaf+D!6Y2EV$u_>O+*4@z~4B(=YO#j0ZZg*7d%|$LA`u6MWvms2P8Z& z?~d`*Nj1@(%Sj>Wsg?-(4(XyNwK{%CG?Xdt$T5s@h8ZnRX(M+{R1Aj3qAv+6N54q| zeV37cfC%_&);2)u!V~P_EGGrE)5Fw2k_x13j5oJg{-R1-quuiW5w+_t=7Xl-^)Ic6 z!7K~eEF#bGysKTgD*8*9HH!q>O-zpx{nnTKY+qYR+=gRlXd-cuKj`DHsYYELc=>X= zH!Zo1k1(ILo8Z$nfQ(m?_W$!b_%J1o$kY*tj@@#~gMmx-bZ_G6GHh1nr~sz93X1y7 zd8@N`rfk$I|AAEB=)qGtfv40o`(3+#TXksdAI`sbe+q)~`_Z+ClsPmzj{6m+~Kl?fUYyX_sd*-5%a^~gPAl# zzkf5OBEFH%{04$vh;wa{xO3~%1CW*)gI7$pd!(H7>IZ&&3&MHP0fd(-6ETWAe=FPi zUS}lRumjf>>@JHiQ&0T6bo@926MGKg_7;|Ct3Gc04?-H>uzd*Uo*5Fz+k0(+s`I29 z8`SfDlidPdlL6hqYUhlNTC2#b>fB{874yHVZw@Nb1XyHs)i+94@(b2|dHY8j=zETW zSSaa1`*mlb4_O*FxMLR)7p@hLqw}BAQzWAzbm1ukEcn{Gmgq%{<6 zQNjG@K}|wXAxA{|1#`^{G7LF7v&C_^xO21)Mje`8;_1ydzJRZ^jAM}!Cx`jF+NRfn z;yQ1YO~Tq5nUFx_`yv#OJ}N(#ySwQRX%lfi zlE4C5KFEx8!3T)fCtT8( zgXoZT699?I$uX@iJl~fdm7KjPKU18)rltBFzxD;o0j}u6T}=%_#kz2k+ffwfewC#z z@aHiG(#ek9b4^qEAou{QQG$}pl(KCfd&G&rOLBMi5chENL-fF{s-wrKO&dQ*3<10# z;DVlxproIPNprOqqJlP|eE6Qte>#sNLi?5ga%U7l9B3qNz=kf^JNOW}e=h&D;>-eb z*^K_}W|<>$Ob1RQPG>4(tZ12}v5vKC4nq%zu0iAuRIof{xca&EgLE^;fyWbZ&!)?^ zUh%NZsf3JR`GfBHdAbd*U}|vC4OvvEOgM$@U57Q;V|5fbW6Yg4QKjOT*%pj2vP>p^ zF!=TYHkiWKw8_mgOO86PEn3mV2!Dht|N5Vya{Z~tuO`!+HPs)n;9y4##7b1DEqw2i zJhPuQ@9Dvxs?j4@FEY$oU3RjFq5l9tgL#`Kfni#s;atkQ`-1Yj5xn;RYN9A0yXI#! zyb%8nGVaV0F}yn%sRv>(2?8>OWjsVukxXv31WBawV5bn5niK<*0B@OUey+v2uMO42 z**4IJ^LTeFn$Vbw{GnJo)hc*w&7*5fae}AFSe!Qu`4&|w6Bl(dqv&qtmTa$g^66u4 zD71xz%2cmY9t9(*J!zZlg1g{qIdSWl16L()iQ>F0%PI4@YU7Ol|dMa&k-tG=#H z2yv6$5tW0#yIV5BzKJd%urDJgz zTdB655J-LyC2wuHv&{JVr7qJN;f2qGx4=n%_%som`6#@m1bZz`5;eEV#;_G_|&J)i4|Gx4?Iss z%zEP#QFe~Ph5_kSEYs1%1;+aZP-H31$fb;@z_m_7UrnH0xW02z5je%h+GUJj=g5-g z`BqCj#=cM;en!SJc|g~*w~PxX%w4>RRi9?wuDK*z{*%w^AmYaj-@`<1h{Ipjuz{<& z!-gU8x^8fQmB}-B+;fT`H16vsct}sk*lpks(dS-sVu+!`i3<_Om}jNDh4x1usVZrY zLY8Z-(D_H;e4jf~zatr%gmTF*vDE5$NTYD(*VOB>iJWhe3{@EhX8JtT9hZ0MgkR;q zZUKvG<-US3#*NvsNde>%1}6s%LoiumJ|)!d#=Yp8TOi?(T&Y2tT>6DGgL)4`;UNs6 zhhR=3N-iiuMC?3QRvNFhQ}skn{!0FoUe3rj*^&_&4Z}spO)AeC> zXtrVVGY}sFS2okCkHf&^=$k1{TAmM?sz-KP=LF#iY%mlXi~M8FrWepTUg^nVcG+tL zPwv*lhK%4(biMHmfSf-;=j#W?VcG-+Xtta8( zz0dsK0Pcvwejgok8O2Q7jU?ylOqnhrW4`;~YUAi?7vXAUOP}Opkav8B5X}_DGt4(O z!}=h5lb!erUCR7CTuPHL$1^CTV36o-M1OIGmRZA1_yO}4V=Fit0v(24!(@R_kUk$( zG=-n8XHWAX-~Jz?%_`X|&kW;vjt)lh^0a38NUr9vjo#Jwt8}yPp}HGRu$zvun)|K+ zBCSbF&GM|#kPB2I&9tVqAmrXi1JB8)m{y1e2GeihC_`q`=O`wY&xT5K2|@x!68y5* za5K<9WQC{2VQwEPEPCn05g;Uonl06c@j~IjqoU1)@J`SQ(OqDA3{ADpW|t9+suu3=5oit7TbxbHDQp8i z8^*CECidvdK8C)i`1z+jdg?22&9|Ah(O_AnBp+Lcc^FnVhZ(I&82#h$U3J;Wy%fz>lf zzt5rWv}6DYm9#RMo#I2fzyEdX+9e1Q&Onl`AJpWjlDLX7O>Y-`O)B&rX-I|OGpnU- zrG!s)2Y_QXL_~U%?w?$L_~gUa84~T*#^RrDqb*upU7f|kLZOCa6S9a!<_0F_2g}73 zFR%`y5ab#Z3UkRwQ}7m*WJ8yqKq|34wC2qQ$Jv%Ro6jDT(-0ODrAfNolz3vz?~}EN ze-u;n!kXr7b$IIllr1EPUw0ii)gz+TrsfhP-(=RROb24Qx#ZFQLtPK_}S4#N# zHK~!e+-JI)Sj}GU0mREt2c&5!)4un2kn#5LF<+M;e32e`=`N*YcV1E(X+!aB#=i7! zx9L+RGzXO~DtvcdHIi+A<2Wvj0}!t0%`s{%mpq?;B`sCllYfam!+vx@`!{^Ha zlI00>I-0k6GzD&5$el8yg~KQA#zD$Dt9lC?p&v%ifm_gWog#yfK%xqY8uZSOzD;`Z zi>cY=-3azHB?We$eim8KoGmu0iDrXPmAMZ?z+djhxYM--fp2|sW)N5gpK!4>seTxN zuWir=3BN?D!~}ynj(g-j1Vky=HBS@qZa*PZWa{-OK^^nxLcom*jFBsM&gL+Ln9?PX zaxK~B_x;p}RZJ+nl}TvcQ5~ya2_BUiF8JK9SRILY#FevYBycoClg>)UyN7Hrjpc(Z zH4JFAs7+>svwkcc-9pqKP0O>;Jcl_FZds7=J3qF?pO<#H1Ug_M=vd%{IekaycWlmb z7!!Q*TNXgzR{Su6hiD%7=4#nG&z5W|K#)&2Vp;y*F_b6mp5j%bMU?QAqh^*jI$sa8HpziILHXSyte&sK;SOj zK_-sC$5x3|bp^Zgs-It_O<0@N*T8>|LJ!%wH+KCub`Yl?2QmP2fOoaiZuhA7zxqp9MV3*w9u6$?AnyPBqQ<5c^oko z9%obt`IqXgyd!tSZJX_8C(qVs_}@K`SUWnrVv*ZtYs zHr8#FiQ`V^uNINYOnIZ1RCQ5V6%xM1J$sFotp$>dYbbA5AiX&?dhJ~lUpdQ(QH3G( zY>jvyeBllQ`SK@4IF1a*oq*%^y{0>K!n*!VTh|i@%!|V?$Q;tT%8Ps)g))ULU1ArM zsWHSv=KieO?P4i_t2doY-IP$0z&!0csS2i@WG|@GRjFwccHN`i{^JRV_Rz>FJ_J@` zUb7{8s(F>DDPeLOaixUgb5V~OV{vvXr){{O%gb#TJT*Aqb}*qHWSxXi1<&+iBy$7} zlFU~Q!=P|+b3lW=?^q~&O5YuqY9RG{Nh#IxLD}qK6p&%^%x$mBhjz4Q8vv`JyE%>R z`0UsJubnFor+WMP-*Ze2G+!xoskp?cggB=69F+>;7!oRJkfB=#l|pq+lah*G<`5B1 zs!N7E6*=7o8H&(=ex{2$N^UY9!+Afud!PH<_j!N+zR&y5^@oT3-Fxk|)?RDvz1H4q z{r>E#dBa3a(aEE=L!VZ)jOqQR_~dE;Z-3KzDJOU?g8W)r$-Wi-q48bT8Z<;fOqGhA z`Y|VNP*K*QblaX89UwUfB*#|#*SKN6WR!L)dVg)mYO^CaAR3HrXXBhyZ`+V1aj>TuF{d(_ zqS1r3f@xVgu<^XlnQFH5Kj3&1CdR!y7bLb@{>L`;sQY@a<5QNGLtp!g+QB-C5eEv= zYa1m)rk>weK_qWZGFe?aYTZ(tmzK0{bdY0*?f4?_tmyuQTy*3bT3BnC3+$TQtt9aHvduVDf zk-ruA!LSDVizA)|DEf)87r(D%IV12--W;=+L1b4cs^ja94Hmca`CfQ(dw6KGl=H8D zcGz~^xnh5`P{ayVCy{zvuD>WH^7L!JSu?!#u;z1ZC9kIV*e6ik^~lgTB>CB86{N}l zW+etl?7Mt*zp}ZJtJteOB+A?$W01zgk;^FLd_lzvVQ$9ix30qN){l}hc=DH{`0Op9 z+e&-1zooy0^&>|{y?W_pXRV34_pHCZW*-noIDfzY3O3)+TVC309Y9cl-@9u)t~o z&d!rXyqv$aUrw4hmF}>z7&gW`s(!%ZOG+Md@}vTI6#}g+No#z)Oik=b<{5txZ$&gw zM0j89PUg5AH~M^(!DqVnx0h0(Wq-E+U^FhLu_5PmW{S+l&C`#vbmifh%~TJVHA87W zFkfmbc_fM{zEkWZD(BTnP0Q9U8HD6DvdPUu9nWvR`rM@%{(TWzgj58KIIA#V-gSeK zOwzca%`L2wN|u%mU5);s=pQI5Y`UJ0(~Z5lI*$vB7!4=csXS9Ntd3Xj>KnJ>tEH!b zo8-oPELEn-(AgEm1tzK4iaQI=wL5K}H_*5**6_BG;kfQhA{WNiGFHJ3_h9KPl6}Ur zd=>5J%>kQ?;>5@OKh|7o9!+RSeRFfT&1|EIqXx$bEVJzuxe&wUVV7+7z?bX0O3P<2yU9X`bv7jqhE^s!McL zlEr%r^(0>N70vKEp1wIyKw|s)g+QUAqWJDg-P*9C(w=2B4(?5L4swrGj`)8u`mlB$ zR@2hKuo8}ey&(xDv14L_X8qp7z3DY~I>(Mqd3;(uKvX~D_>nes&=g`i4*TYGsL4JpjCu}rihdztX_}XZSK59ZDjJU1LrfAK3U&7m z(T#!zod?uuuKvGZHfFFIilFkuDUW_6VkxCL<#xDN6>a-!7Y?gakASM?W0&YBA{Mi7&ZW-#7j_J$ z+y(Li*we@u;Ir_aZ9H}!Wr8DODbGQt;M@YcWk_m9GW2wBWil(A;szk|Iv;fpkj*%f zVsHQ;lmWugXIZ$Ooau?v8S!Sr@7dvskCgY31DPS6QVq|ulXN!wO|!ZDazG)?+yBt1 zyUM>>3cpe=G8hTv!RJdaQ#QZL za-I4tg$mfmwDBTAwgQyJ#hBikQ~ao$a15&|e+5V^sZ8FkSp4XQLYo?%FUBH>B7XtR zcJS}+bVzQsD%c{iCnP1v)Cz@|Dsh^WEeE7){Z70aJ(WPO&m4;ZPAX)=-~ zr1<$tI4)FDC+a{&Wmmrn#dtBpmcAdOu%6m&q=D$vCWu9hpLjYI`y2#lfdHZ#2)y>` z3YF=tbI=d~M5xMwBeQbVc9s1yKoy@ra8x%-f>&0+KNO3@I9tb~a#xGgJi^dIQq^Li z7L-e}K3%6rO;u+tkh(#T+SEAku2~cF3Y9T$MgZn@#!1~H9@DszX-+u?)L;ZD$KtWn zY703vQ8sad6ckP#aav}2b7JVhK`w*XC2C*fc^=kj2MF?VZ0utJCGV+!He_|8LkA9E zI`VX?b)!|&ST7ktm}@|z{C0i=>H6n7 zp85)NI==#Yy=D|C<=|i^i5c#YqO{0qf`JJX2z3Eugat+j3hH=BP=`=bP_PpLpmlc4 zn~Bo=_X+DM0Rv6CXxi=%^2vEb75QU+ri7szz&<>5ppMx}XhJ`L>%ehXkuYWrWGE7I zlcmyHEYqRh`y95$Z7oGXqG)Uj6kOV3zgUBI%>rkhc980H8pPmbg|`s^rv@WYc5O74 znB0UC-Z@p(N3{gvumdll;N6{0-Y$DO!GKu2fEg&?5HpxqLRQrjDt788iXTfBEBgf& zt45ltao=S>i*)xycUds0XOkOw)=uT>lJ07#HA=d7KSp;By4w;QZO9_xHJMu`{EG2T zi_uaf7FK{r(%6_)&{Ch367;^0MJZ9>kU5YDC+jc(_d#b82#LF+Sq`-~8<*qb1;`8+ z__zhuK0T5LKQ<{-!dCeE8q|RB0N0G%;fTrdy07+~_H}9A z9_Lj%PM4)PW}aZ*c^DGGOh9DA=@3ibjRwCim)xqe|(IQX?v8~_iQ(A8Pr-b;Kq9Kw@?*N7^z+KNk2PVrUzF;_J z(nBaG?(Xg~Fi~I#Cc+#GQtmLtiF*SHC=G_nlt2k2hJ;IE#rYiiv<)O zW+q}%wxTV4^=OhZTRrBOn2UEj?IimNFF{>QCo|^>Yp~|`pQT-|<5^Cj&}tQO@h2&z z`AZN=H|U~MHtlMvq%@n>$9LRI|3-vHaXOO}bmQ1$Bu_}85MLCZ*lt05UL4Smt{PpS zgd%HB5pS4ODmMDliy%K|7L2~|V;~~4_bY5GYCSqx`-XjzrP%rVrlcOkV8zmTbZTGC zvhzFFP#GYmaQNa3*y-Mo)ZO@cZr3-7Vml&)P$CphOf|-x3_Gz{kMA%U2=jLwQ73<; zF8&@ir3%W9{sE&36PQ#*N2qbHhQ0x zqONd5sEpYZd*J73*8Y(4M$eIz@@LVb>mB!;10soGUBN0*H2E`V63nH4mS2SD0*nJC z5qqm99{&zTrUjQ8*@j}X@eWO3x{X!K=;(uh++B-=;#{Q}lpw3WfVa2T4EH@+t?wzV zo_E~Xw@9CUGkPd($p27px-#l@pzu{gb6KL zAaFP?himfnTk^-FABvh+8PDU)l#HqHjQw}FJyGOCC+~(lu8&Rq4edq6~!*nSgacFSc;C2`&3*t;2J@OwEb0>{lo#2R|!-8 zRxo+U{edlIzvzEeOs*OAe7y9bepATpm$FXewVdL5yXJ@HS-e?q6O6Lchemn5CBFW( zK3%pNndu*^gBhWhiQ!tlDZ{Lv@XS&;)JbGPLhr7pfIDLWNaayaAfg?*i#d}En1 ze^`=iqjCJ{>%C6$D%k?hS>BD+vz8$}^X+4q_1rNx?3B8-wPgd|%Gl_f&< zB5U@2H_UQ>&#l+{bA5mKUf1^@cy(P;bD#U1=XpH$WgZzBXl>yV-~s?_(LSeP3;-+q zCo9;*4u25^CGNproVU(hatC1ZF7yWj;^O(?hZuKbt<&ILeZl+&m z13-gQTjP|e4`#Z@HOzY1S7zNo_0gTfT7s)*N##W@PjM=z6ff)0usc(@Ih#ce@4WX! zXEgfUe%-S1msXcYf9r6*S`Irc_}1OB`#K@MrFSxq=W&F=4m)v@XQk|6zCVjt{{A|H z3%ML;3#-Q_d=5qJa``fqPwbX&<40l(RxJE;3OYxHixW!>T7Q1=NE}^N>l4L7BLDmI z9|Hd&@E-#Ie+Z;My9mJCsn(~{O1^Gt9cN2veb%jvk4};*33)T#hIVC$Z`$hQcxgrz zk-=B6yOhH8`=FxRy#C{~q>N0}O3iL8IErTh-~cZz%|PE{^Xgj1TRjc~qP5|9{5Qr6khYA{(!OPv4AW-fW%nM} z=9TJ|nrke8>kS5gu+&~>WFhrtGmdxJ66T}ouU+xGDGvIv#{nR%kA>67 zdj3qyyY8{*=@_ihhOBg}e!ex`=3G&^hUN9)X^_C?f8 z>bh2c&J!*}f(Cv%AH(bRjMVDUsq+aKFp3iScJ=|G`&hae@+h1<%S-pR^0r$YHLU(Q zEEF1)bpo@pU*)GW*LR^n<+{$ei0Q}%RuF#{!kGSUyu0i6+vRhs$@608kFL*Br^1gd z`xB;1`zg^?yJ|}HNoFNm?u=fUnR7qCUmt*8L-egwp`bt$4F`uyoJhtG3N7?$-tgw9 zDSQmR_g&mS7e7B8)?@#mVlvN1TVVzNplF>HiJ+%-GW8XI3z+l>U3e0QkvCN5U(~XB zRF(4Q{Noh!zBTJg5;%-P==mlJY0d8G86+O!dd`L1Agm?#HeFDpeSUf@AE~?|fXRLl zN%5gS2TAiNe%FgeSLPoYbgjB--7)q7#NO@r(Y3Ez=;an5ppObnxlq6j zxsH?=WN?L%nfr$jjTOLz<}v2OG5F*_F#zt5Cw3Qlk`FUYR+H)~C<{NM!-L+fCD@r5BtoYa^LC%)-F+ zRlDdEB%Y$OHmO9dCunHe%`cjHvw?6C^afeu-}00K7orY5WqJoNRLiW9BfsX7abYQi z#DsCeu1T5h?XB**7`$-yW z?s{jw`!V9uFd#{y@VoJvqns5aAWvVE40JfY&5k^|U3J^{v(mF)uYe!srvZkvzysF= zB3d&giq$zx`{VjtwC+XvuAa|CS4nBX$oS`1Xn*!%N!4-?$mryXK^!k5GJw|W7-_vn z|1lRcnCL5IqvCaVWUEkEuwBkoLpnlgl!t6XA*_!##cyj;^eFZDzDz zp&V9TWe5Dc(7KTZ^$a7bGEAQKbdKCOkDsTE-?y||dD$0wUV%6?{K9wQ)hX6>DQG$r zAuq4N;AyO>tnbCc;o+Cb?XeF{L`7d8NRD5^{VRV#D{Jx--&sMp16)~qZTT66SJ4|O z{Wj*oMUldVR1v!d3`c3kcZmp%9{b&sfXs3OfhHJd-f|lCAD-0^*UX~|(L)jc-FC(K z3gCbqyu+wG$&9(Ur(lo>)hus0Z5wy;oT2eNQTI2+^%yvS!hFGjvfzE?5WCB&B8ATc zs!_5nX&`8{Gi1%DF#pp0wu)bHRZ_4dI%Lk#iEpLQXV?sn`ZkSra(;@zvyhSfOXe$jI!0I1PC`AfRACLs^>g4=S;`i0Mh{rs)(RKZq zFNJ!KQArfjB`xR%ntQ3WSM!gl7xI8yc1VXT*LCBioVV`txF70>O`cHbc;83MB??dW z%>iVfo{xtChF(Eg@Vt=!ns~uF6uC3AmKMmo=umBr17}+x93_`}#v?mStwWd>Jf)be ziO7=4wym~J6otL@_40S=K0mu9{I< zj82+C$lkU*M8=<*G^_sVj2&ZGh+cPE$XD!mOBMQAg!re?_7k{)7_`;Ev|$1+G%@M9 zOL?BdaM(*(f0{?LL=H}%rV-^?^vfC78X?j_XpKonm1qUTwVp@v6!X?mX8s37t39Yd z^Ow@?&U=Q6MyxijKU15bY@bxI2DS>5ZZsrC3l;&^}|PRu-PG?k=uM;z3x@`aYZXr}tbPwHB4&JAj_kS4{?4)N}> zTpPp%(^JflmL)9nxuWh0N77MLu3R#M;oU7ust}_Zy2&fzVgWfcWA9A{{!aPoTxGdd zzezu#Yc0oZo@~QV#C^(tto>lKd6;KH!wMafE&$0Et1k{l9?LO|n~60Ju3;H{w28A{ zs3Thi9|pY{#Dz1=l;?8V%!vL>U>Xm>=DD%{(JS7jP|9H0nDJoe2&LmS;^O`wG4#{h z#1-;R=4`-R`A!1EGJig5*>ZY~#po&&Dx>ICE~K$d_ARr0o+(9m@!jg-syu|V?Cn0P zncHWi?h>VDlm#3$fF^DInI^-KJhhvdclAdw@o4!hl#N0v^4tGZknfT_lQJ#gec?UT zkPR6j(lcL7o>1g+_$@>dKt=CUWAFUz*NV^ZF60nKDaA*Na2EMB68UMT?;9d={I-#T zQybDq{>>MvTa$dNg@H*IhXB-GKQ|EMyRzPSg;`r)ym`2%uS?*Kb5Qa+{qdhlzUK0apiVVXKJ{+@-|vKbljR9p_3IK|7%)Er)>{1bz`>qvc3e&a-H zFaski0A;A(sevZ?5?MLGqMaDc7K)R}1$s7t>3Y z$kUA+v-QthZ{;BcdFAe*N1*X3kOoQPE$@gPHepXf5Ywr&r@mT<$B9%*fSE`La=3|! zr0y*j@OzEH8nTigP0^oxQpYvc5CE`0qw$c6=HR%X(Z+K z`WRBKI*}S(K)N^;M)3)72KaDCXqxqK^!3!4Or%lHi;-zV&8aIv$WM^gP(SMi!IS)! z#C7kp_gSUCt~VxJ#DetAP^RLp`ngFOkbidsF3VgEQ=P7zrB;(oPaJl=kjOyN5GwNy zSzNNKrJFLN&oUL@CCzn+50JVZV*uVAhFB(|1j%HoVesvvk4^A4?V-p}iekjIb%qn2 zGE+r-azxJSH#1?Tua(TZyc+F>u?a)tCy+Dy97Wa3{s2v~zw< zSjJ(Uv1>1mFWDXeQaaev4JF@__BRQoRw8ff13Uh&PenmAcSth$ks(dN-AsJbe#{k~L zEP&MPd94qLdTqk2fe}UF0Vcs&eJ5o=i}Pq+qd5Q;Os3FVDd2n?>BrI}CL=J-9GN(QQsX;-^?zEJbw zS-qNVt~q^W8bC7 z?N94zzLYq<+s5uZsn^`6aQnVsGbBHSmsFsWGx&$%e&e`)9QB+T_BaOci=bQIk6xnu z)?Js;(4i9NONpvaXtSGZY%CXN1q&95m$F8%Z=T)>Y-R;Xhalh5De?}?)MQYmK9@rj z_3C9N^wuOFaR#;tU$%xmKFP5k22sl$`1RME0M7?yNqqJ2F!j2{dV^(b z5VE{wAA%!)U^mv=)$gndU5p0g#`;khg=w!k4G~T6GNp%7xM_%Xt0-uE9tTP(#R}^! zkE9$Pr?n=Ysz zK{YnQvGF1q54#x+v*A{CNR|CBM2ONwMb_RJRd^gs$~l6U@cO#VwHrzp9%9l~zl~C! z@o*3~O-nm;bK<^bvi5r`;20TrNQu%eeL2IN&*$35=or09n)B~ozQZz0Ct$>lKjSawR^5)7-m)>=?@qQO`j=QjAdLD z=9UxNaSTkP+HYX>BG^DQG{~e0-6|xbqctid<>Z?y*__%4-}|DakvL)w11ZoYo0U?Q z%f`O=#Gf3O10V$^yh-Z@1ufG{UQ4eYCrrorGrrD4RA|VrH?|e!2CS)zBxx34BnS2W z?ezDCrEg>R1`!wzYjx25Up|jC`p4stY(n(+Y~JpFuvnub=(0%;!pkYedBQxBBgY0T zFts8H(NoEsxjVVUw!y$1y}Q2CEUrgq_6!%@f2e!)DAUYd74!3Z{6B}@9H~g9kBW5P zUNSHZ1=5Li<8c~jC_*(8mAbA!lICw zQr9@a@BXH2g44uMRO$MQliI$ZtThH0?L%oxFDlAr9P4?S%Bv9G0`(odOsZ-wD6o%&O0JG_AYda1074kknW%Q%XQ1IPy4XV&QkuSmaQvA}j3eH?E? zCFp5vwLumwCt2~9px@{Qtxo9dR=e8^L#CiY0KK!4vLWKjm~FDy3v7@F68c~$4(m8v z-v*L=H?}ZvIOJADOZ~0IQfoWqh9P}as$Ip7uz29wF zu%xk8Xx$sAQ)m0(G#vL1lXMB)C#=!!-5dq2iYz%~A0*kCy#VQVt;mbwmS1=Ph)IH? zVLQZ+7{2l_5dbX04zC1SMg!id-5-8#y$49^KqIp-ydOcVeo#^hJA>FCU;nufY*j!% zB8tHj@k7At3h6h?uUAhJ55{A%$fXpeSO=~OZT!El7FZ~1X=d;@@ZM(^KER8ZCPnV&Fk1j`u6i`Be>Ww@ZFuJOlq0+nOUFRL*m zltxKqX;5@#8(+uE$KQ56@m(0w0C@C`=W1I>Tg=#QU4BY#$Y0mW>A?DF!7xJLjYN0SA2$Hb!RP5=c@lDb zCw?gH+6!^7#cWg(#PlT=L;w7|YV#^|=jzPnP=;dNgGrR z*I^v1mNEE0s1M!~a-ryhl`=@+-v$I=&Ombe;Fbj(0k^)t99()WqCqHFlm+>fn50M@oiZlB8HeX+I!;mN1w<1zcJDV}FXxJe$b^98~2 zC#Yr?5&N!mn2?Tu123)ifadjVkQB9{GoqH;`(eBvQI(>2?@BRNw!|$SqlZbD{=esm zkHU5{hYLW*5yGY<=<-t0d#PpD#_yF|u7+zgAtEfc9>W$GbDK^G4lG8Jo^WEb?&@a4s#)@e6b^5~#^cs?jIyl!2ira?_#Oc& zf)Y@=U^O3K?8b_bPE^_-s_V*LwI;O-#Amm|Tm7W~mdTV91#~w) zR`Yac={#(%&*!gat%qG^tagFp5h(7?o^l+RMnOMmu?Pu}JXt7BgI2}@Ro-$~4|8b1 zn4{JDIhl7D9+A!rC1CpoK9lA5bpu%#p110$uv(@M(|l;tYcVfW17yV-f1dTKis=o4 z>234IgHPSDp<%|`Z7tZ6_@_fzG3)N^q-Lln6}GSxm`5Y<2`86*2AhR9Z3l6%s!cl8 zwRcZL`JBBG_bC$i;R2!OZY-H{1~3PZPqcaL4AD$#hJW$L$B%++43FKHv!?-{;l6DX zPPfM!0I2|4B->n-1ofyW1=1BOVtX}AD|O+9$imGA$H!M$hh zTWp&a4Oto5Wy68KNmU@}_WvF}QXnx460rM}iv{cw3`U4dkdA|bazA-j>7nEV z4!LbxZ$+&96qTmpEY;>Ue{2^*8F>g@Vdv|6LQbc&(TSHt52_a-MLm6IZ~yTVEc0wg z6MqD4RZ3H0L^wH?v5jrbT9UmJ>G=yMAIBV6R-=So1@t(#qM^RF<6!z{(8SK-ppi6sj;!RS577~Dq6f8SKX|1?* zgXnV5kiUN_)R2A6N|J-*_bnDP=LdeE!7Vo-Q-0T;l+QKV6#>%6F}Xz^YUwdnqChnv z_^)#FqarxU$>On7mb~Ih;B6yV{HiVZ*!&**H>xr{BkFZl(+OL_gZJtr6dX&Z1QWl_ zuan;t?EPzXuA5VW(!@!XMMmrugOB#zapP{#U0XqT5wHb{CSGC501NZ;=#>`-DoS2L zjkE9E0sdN2Q<%8dUT)efjkQ+@S}qWxDjXy&KgpRdXk-QWd#LjebVvm&8k+e%?4&`3 zy=h=l%DS?a7Zly}Jqa8oAu?}=&m{b+y?hP1SJ`DvOyne?MzQV7>2e10a2w$!79>?d zK}mn!t6lLTGE5I+-`YF(XdB()9pBaaS7u+09(oYm8@=VPcUbKchG->EEF&7kdO`RhbV z^f1xa>1r_`{UdCn*}-MM(w$_`Fc4F`IYA=}lnC@v}%+28HHtCr@ZhIDOq=S5KH+owD z@n&w@2!z_sbX}eqdWro>kHlhRhJNdU(09PJCGjT90lq)TMyrvu4&}>Xl_IUF*@(6I zSsVkNL%Wy$oag%s+M+jO*vl69L_#CG+^j3tMBHt3pr0ebpRCqth{m^D{^7rLGV{gM#qHp8PXDp6~mCUAu{u~7u*ldg|VF5^bua)V^lxcZe$ zy_fQB#B#CHlWuPz=}i1tCW=4L&-n&q*HKYOi+8~6x_tM0K&{WGUSSz*pYqI9zRM*ivCr@&eF zLcjO?-K+W>AS((&lx&<>~dut)+XCIbseU3xU4P{Pk;j~=u$JGOrW}LYC3_#CGKSo zBVcy4GXX2vE``i7f>I?}5zJ$hHOW%h*r6h>$1XuWT7NVLy7#`Dx{5JMgniN;rv%2Hw^oXPSy2Hnt=X1BTL zvv{Xd#RvAspS$7?4}+!E(+z8HQtLXj5NS8(g6D%h0mZw)V<1PlM18YeLA| zri_pd7kW|mSL{YzN8xe5LzXGHqYipSt ze{{+FXM>hpg_G}5=xINT2I_hv=;{9BKbwoDxz2^r@aj=*=ohJ!vb!sG|`-2 z$1AUiE(>iGePHd~-}6}cQpUx?y10j7y*`r~@d2ZzzgJ@WBF`&$Rn_>Pb-B*^SbyDJ z_Yo3k5F%OaHrhxf+BEF5-~@cIfP;5u(A(Fj_Y4g^aM!go^=ny*=)#j)es!-T3+ZIs zLjoP4gfTzdd?bWph5{1y8w|^Sxh1meX{v9lpc1{%rcCb)k*Fe{$2j(i2zX%dLb|4# zhOtbr^6zk>sD}G(t{2uGWulgM{e#5E*_W_Bc83=L>aR@7LzzGosnR}vs6+_WQui1f zQ#j?GGDw7WKiP0I9C1)(0XmRM@U4l^!$+Kp{Whazc2;w9O~lvx^|;-NOhe>^W8&Qq zglBzK0iGWH4K@w4{Jhs1fBS++_3bcj+ZuNjw*47=$hiB>Vs~9vK{lX+&dX%_`GWdl ztz6jjvwL#}<4aMOQTydgU%FAe(Ud-5jsc{6##DP%&;o!h{Nt%Nixl{8WKhX|)SP73 zgr5Sqpnwy=7C^hwZ&jv7`WHYaY`>W+g|{$pWc6NibR(TXL+CLZod8@yEOow|2FtOq z>hCqz~h&s<)U`Q`1&PsIh~+8J2^E=lGn96*4XJGwcVFi-9X+>5WY3ei8N9y8f?7%V}{ z4y1=Aki~#cv>8h1K3^ctliSYl9qel2ST=E-r~ED!nW2sE#eg#{T%f?99(1i-Z+{6M@Eb79-`0aHK0U(#p%>4OZsCc-sE3wPYEN_NO68#sfrUz2mx+ zI1`hOhTpYsy{of59ddruUtav88p1D=h7aD2BpAU>w9!o>Vb5moJO^3j7h~)rgbESu zQ~t}?ftSA!+YNQ@zCKT3#7#JGMRYUE5p*?{-SHNQ69>lY7wvn9a)xC zLr-ECk3$Ht@%>_jl}q69zWr;VeT;5&Qp;90MDpKO{l!Uzh^m>$*qg$(Cjh@MbZb^E zb)m?N5tYz}x&kXvCiLg!X6KB{8@3^y-(kA8nuU7iSjJ zqL$zo)v0;o6KCQYjpzj9xQ_>mcdQX8b>fMHvMQdrim*|nO7}T3`|2_|rIkOdLqPa7lo7Q8? zI&7_pZ0hF=2W*M3*>XsZ*BA~AFc-sC9IJ)dZM$XQM$*D1KBM0&uj`{Q=H$*{3x@vp131s zm+?G~F&xkkx8tKW|AC4zm=*S`OZ+LHPP)}yzMvHaH}=>)M>oDV1mm1Es!WV5p0oq4 z{r@__mNF)~{nlhMk?#{BN)>?;u#>&#bX!d6q$^>ft`5r1Ha;}PAjVL{vtWpta z8NDRTfA;KdM712Y@Iu&QmP)fPIv)h-3eX*9>0Ed`NYP-hVjHK3VqzbueXwsP&g^Uy z;;Gn#=Bm%;5lrpgO)m_vjeg#wfE z?vTcDs|nkBJH6-0sj_IVTa1~%*OHTyEvfqCK4A2DoU&w5IvOl`Z&5ecvE#}~M(m8A zm-MQ@se~KM8p=cheX{dwbyHRE84iD(<}X1QTKq91>}As>h>oz3x^`kW!K&Q30phfn zQ3(OZh~B$$RyX`!GEt?QRxI8!bVlVtZC48CgAXG{celW6ii30!w7}CT#Y}tMKZuK6 zUMGa4Ca~#+AFd*L!66X|XKQ<1U}OpT#j~HO2xq)b-|bSOv{`AtA|*>_tG+n&O_Ue$ zPb41Fxux}Y-Ij|NseOrjWz3ixZB5wJKtu|-FMs>AX``X`7YEwohdIH+hhvlrN)pUX$PUC^PNf zb?-iZL3T$7iVs~>b&ff`prhk2R1{4mwDkJfr8I@})Lp_t0u`X@{=iEN5KYeKS~nJK zu{t`Zd6~-=jwbCybd6g~8~=ggwvHZ~`beyjzJrE*$<6Qf$yoduU~%>5y2&Hts`e?8 zi2kEZEUf8!VA1^AQ8l`Z2-4lNKf?5P%KTc%&ULf$C#f3$V6bgr>;V78gK}ADmU(=!hkc}H zQI!(&_HPsbDGtiNj;SlPd-q0|WvPgChZWcRh_t9Y6gyV0_B5 zJr%^$Gw+u@*s94{9gM-6lHmdt56Ure*v`+$n<6u_N3`Bzenw8jFTO;vWaVh+Q9%-# zSH-=Wo1?%X3jc=eqT_5v&nUvlNPAQWqCRZz{d)&6jbn$_%#ss%8FqKtH?K>3F zt!zrvksZfF-(H=$CGHG%L3{QVX0EnN`WltSmz6E&P2A(7n2Gm&-I~UT3MoyGV88e^ zYp~*8j2JY^6=M==3H~#WhY*$6Ux*QRy0Qc8F|e-(++dayU5~5`Mfz{d<(#!k%g#lEjYo=SSpq)*UYK zAHbi5AcjFv|NVLOw!@TrXG>BVU`5)`XotVzVOQD@OgHGzsUi-P7Qt~~&IuKSO3)$IRPkirqGjBj2#W2HyN{cH#y@7od>}>EO^Mq9eHhQgJ@~_%}d#FRZJ2CpDi`5e%0X@2fVN!BYUN!?-mRTu4`5D zcqJ!iiGv(uS;2d(`2EE*A6daObcr9=HsmF4;k{Ae4teWaM&wS!4^9Fkj*=hl}iH!a9PmdNSX+vAk4%>#Zhb~sTbf3>X zRP!|>F^CXY#*BQ93Y;*vENt{)Dt@4BiTF%F_#y;%FgpQ5597lSlFFbOz9Neh2?Kr= zs7pI?cQO@u*}6TGs3x~f4dXzqJIBc~W|L6fA-U^bf-kCvuXjU~&7!yZ%Nv7dPJSJ$TQAPl zd4HH{@gD2(H{z#}NE1SHW;}bYWI_L{8SH3Dd)a-0@>mWi8y901Te~oAK2(nF1 zd&RhKi|2yaS`dO(Kc$~KUgvk2G#s!+j6TT=oMF}6h`8&#?6;YQXEs4H%kRk{XVMT& z0F_Jp)KoLK+B@p zAq10|x>eTNeRC%A8MQdVD;%-S@7z;ZWH!F|C2cN;0IZ;b;{&1M@_5JJfWZKAhak`F zQ}f>@7`8KPGYcy}EFF>rCW8K`?GgD0u|7%vx5K;kZt)dSE zV<24~VEjX%F1iBy_q&(e0TJHYiLv z2;N2{8>5%?PXg8m&f}6oCWFqXZFr@Z?EtvN!NT~Z4bf?VRGSh828htA?PhWeJ%^UO z3HR4(!n}#ZB_TzhJq!0EqGRnlq2CpQMJjxO{@F@nDtVrmL=fMU`$o3nb6O%$LIaDg z5FrHa4tOrlzA{b)N1$_wMn8XjvDy}DI&5yR<9ERN!0RyC3RAiv8wiHY%yj7iB0dGy z0$`2&H7jiGZ+w{aY>tv4_F@i~72k}p#@i8?V@XwJqRAz8QJ6}W2oWINI3}^XKb$UFb zSYmSf+EjrN>JLbA&-hX2E(Wb0zQ85q?zDPxWD`!Fzx_o9Iym?m$p>sTg2(ED=<*8Rf1hUXsv@4 zbun?UlwnKdGAx90!rd*erL(5;0R=b+Qhw%xTw_Xxa(~mI_Cb9yQ_i^wVjEy0pd;JNSXbT;>|rxUR&Ce$ zyKBNL$eruwcA*ou=$+kAx06_!Y%9J-yglv%Osn2G=*H?CrB90DcR^w1uB@XH2ZXcy z2#`BcXHPP27bsGnv zatp&mG*D-0KjBTajmATm*da{!6nNQm2Z+_kowvF$jt$1Z@0*zmquU+baFiG$4*zY> zp!4)D;EU-E+X*#?59SQA{N1l@VVrR} zW_OauM#h0^PDK^mE;=h~j-qaWU=#{qaUmMc-=xB<{xnqRfZzukaCWHQAho27r#vaY z&&yoiZ5s`l5S=r}ml2x=SukIg>$33kYp7c znVh=I0*<7!B+YoKTk7nt=)qL@qIA5Wt@oi3)3oRMHvS#%4|Lc3PJG;1&b86Ns5AMW z;(P}zh5u6=1{*&c1bsO6U&RS~z7g+2Hy-~0swrnlpHC{B;pTCJ<|GGRIb0j32g0kJj+usx5~({9$*WjfwP4Igi|jR! zl*S8q-qN;=LfL`D=T1+Y0B|BN3yPqac_HT3ah;zC$ASEmnaJ>-BNfK5Mi1u#B?{BJ zF?ilLy1)d3hy5jd9*oXdl4PJrU4+F+v08X$Gf29Aa|in-Ti9ki2LpdzeO7P;fRL7P zkHoEg_E^(qkbL5ob2t2!#wgE|kmLy6 X3X*XpFY)FIxsqDPuAmG>8nPP>G|FM5dDY972Xlh0IPxDnf-&IEYH7 z7o}v*ER+nH@A`PZzkBbWaG&RX-{&d$?7i1s(_VW``wcfYJ;2Q=%!v@NDR)?YWLdwy3+Njp^Hu#ZE5k3@rt`erKn< zavbnP!LtW&@Pm{}!G2>W!e6wte_sFZ-~Z*ne>w2~F$ZjZXMi!-@4vCWWGiw=15Pk^ zsfgj?7Q45KBb9xU2vIq9pJ5hlTqrluKtlJi30I7G@Q+GXCiTe3Is!hBuc;F088*vv zavM=c6!yW;;0B({tpxR)C*l#ULdadfI;w>Qg~OP+>S3zZX&l)Gk3*E$>-1QDE}H#1 zu)fcvIP)*8%vs8z(XD(4O{bEhZ=0i5V@ZUDx7#!JWj)H=!!79lVPGo9e2EK+F~RmdDrPTPx^(%(YbhD4-0(dzF1J7G zp7Iz7yy|YFs#;?ePxxRPvbK7pP zqJg5VD+_M-A0qT}wCzWmAK$g9oW;SFnRm~W4jeqPCBE#M&aJnBqedzkE%&HB0yuMV zpjk32K+8w_?Mmu3_aFW*#>Z}N5G2Ok-CS{Ju6w?UBiKEhNI8y)M6ouof7C<3+OXtq zw0=cJ%lpAfJ@37EhA1YLv0DEQBd?XT<%PJfznNbyK4j|GMzP>=<~$fzRR?s=XSCpz zv=^Qi+l4vkZ2Y;$JDujlz8PoEij8j=&_12Pk5|$vy26*qQga8d$H~HGDiP_zPNZzY z_O6MYxwe%QC6lr(UekBmY^ncQm)O&`n{iFr*z%o~l*N`l;Jm z(xm*evn{vJEQ;jT)yp~DrXWvDtE}U8i9ZM}%OSsZ4zmjne(t=7kDcb?FOQIr#hjaD zion-D@9f?c)}IXWo3)+SUahY46}z+>Idn_FWiP#;Xmo=xqFFItt|`gmDH)O=#;dgn zsjdfM?{D@O`kFt{@OR!TfX`PVupyhyqwU?cj5C+EA|Vvl>Mwe2t~dw<(pG)h%rq zt*pd!PwUF?qM8u;jP0KDkF%(u2xs$CoB{i%UH-pqv}Q^)P%Ea-e}gCbD4h7k^7+%3 zIvw-_4#KAXm(8kkUfU?3QCT>3bt5}?(s9=>2Q2#T-2FmEuF6m7tFQaT3A@*macDS^ zf>4vasG$|-tj>x}Q>g&{ahL7}HZzGx{-H)9vk5#4Ci4nEn~nUiEhoOETt~3HM1$Yr zLiairS_K>f8g5L6Cw)7M?rHGaCbX@N1otYz!AGD{=ozxxq#}Vg-xeG?&n;m z8+g28T`&_u3)nuKmbL=%bIp$$-{l-g<%qkCDSG#Jix*=?qQkoOXjm8E${i{`Oik6u z+x5quI{EQwabV}=N@R}hC`Xw;OzldQO^p=ey~G{&zE+>+&H>1=E$|a_3Rg!2&wL-; zUh#K9mu4>TuZAQ{D|2pfG|)S7rU>j=#kFQsIUY7QO(wD9nZGc)A{Rth2Ez%TT5@sM zPb11^&?@e+K!JGmVxM{&(fDL*{wNn6QVc*8LPeNHWt(g3^<3;@{%uaCr|2%f0n4_d zb}J`R+zaHzJ!p_4n~4gU=?;?E3CI|30NT3GV%QFklG2p(=K7CTv~gU=(GCOJ%*~`h2k74NJn8oc{8?q99X9h$T-7+53{Xmzd&vC!j$U1C zipYwv%TY6dqD^j8`y75mx(9R}ThFplnnyAFC$<|U34lF`Am<6V^$b2%N{vi8u$t4f zHo^mIr&Hy~+uVBgpR<$YV@2+8jv4p&(%npQY^8Z@WVxj}0SF}45_0(wFYcQt+$yNB^{63|u*3FVpnbQO~8>Cet7 zZ{s5fTXS~^up%QFK18{CC6q3}Qs^9@nEH0C?AoC>N}cUi&p zBBBid6v?E8O3Fga%D3Fh#p{U^sgd|UJjpt7%Pcb)2htKE2?hhL2r0m&PstjM#LE-4 z@_Q#lfVVuh9K_w@feY1N3%!j=#}YDGLC$5M0gMe-Lg@2y(YBTMOTGsJ3od0%Hy;a9 zFJD&Y3XN#rt%@l3fZYy9we8`e-7_@E5w)Hrr*O{?&C=y=Kes$L>Ox=fwb7Z$JuveO zHgm6-J@r8X{)fiSKeqkRIU6o@UJE4sQ}#OZ^m{YANO#aYRd5`r-$rlX+b&C3huc(f zv`{Lg8bl4-)SI*EHdY$@rFl@Rz9gc(n9(Jr%jM1FEdKabe^OZcVcHpu-lc6-4-(+E zD=hzA+tESa1po_x5bD`wUV=Ppx?FT0C4y*DyEECtzM%*Y@7h z9y7=j^~&VIWNrHqNfIK_LG_JpvdB`>ND$&SmOZ^&QRoW#2RF+ZQdodDf5 z&1rY3KdkR?v`g!relZEQZXlfUn~E9^maAXK)1&~XP~J)ieZ47{&E$t~ zUMJqzMw{}ckFglMSpL-|XR%&HeP1uzP%a3k zdYgv84dU7jDs*GzI^EN#=i|+}>cU)I%R1GdkVB<`+uC=fS6sJBdSm(fww1yWKY3*V z4cJ8*cB!3FAjSCHq)Ht)!AX?oA&pNn>(dRRSK4R3Jka?2=}br{{tjYn#3Jsl?sJVO zj}fr+<2i2|`^LLDg4qG{c6(czWrrPSX%yGzT=$i#>0Y<1LAeG4CO=6Fpy?ETB0Bom z&YqF(O#E?i%%|cNAz7OoAz(UqLEvY=n7Pv{iMU2bJgp4Q_!GlmR+zCNB`9w*?LJpCqB-1ozb!$EtcN z4nJRQ`!2GYuIbOYgHJ`;SxfG+4&5A?Ys#{tVGer+T>K3x;%tR3Z_Pv6!oGA{ zG!+msIgk;kKoj9y4gEm~-P>`6(vsS_WZm?3Dn|^YxD^;77f&{S$UoE_DU)IL=5^Px z_vgcojDz9%I$N;)_f3hw*R&SmW*p@ypv-yfyr>~~@|U=GlD3SvEKXN@{F8n^XDOh$ zY~Gp8*UYp&MaJO_SM~5w(B#v{#RmZFAf*=6(N<>6_8Lu`G_E6qMtGMh}TL#KzL z%eq=NB)Y`DsTH8g0Wq3W$781TqeFQf3#R{Bbzkj}eb(`0WG0k1SKXJf#qsa?g@wu4 z+Au@Zv=z4IiJ4g+t;P>BBzPzpDrS%1LNL!NW^0PfwK*lbn_^aFvL%3rXEh0rb}0YkGNx>}zS+JBP)Ku7kqZn(88qeaD6JaEUvsW(zr#g`8sAdu=o(m@nNkr}v7Z$s8+yBS=?wee%?r+w;gCy0#>;1rp(jeQ5sJ39O$_f{{76*KWz_1O!-lN z4-tp9%S-dr<+>UNf|qe`kXOa~UB^sNKs$sgw_b~C97IiOK={U(-;!yC{6(gD?uCNn z%Q{8QC%i6r8f-xha5qz`N&;zSdVo!!5IE>AE)z(>qkq}rAAvTmh087*`eG+@U96<= zO{~i7$iZ;Vo*KYzugPiR@mQ&0uZ4}$lLLvyzhV`-J;1I+yseW)4&YK!2(=ojRCfD6 ziK)83`fC=0eXx5FCZ+KzB`;6^_;3I=4_06Whvzkf7s3!;c!cs5rjN`McrUw_GSt4S z>3;cVF3p>WOhCV_=`IpYL+81d2C{Ml@`nY78uwZ>r`=EByJBR(wGU5Q!RCZEKK#Vy zk;yuh0O4Tb%PT+p^-2fTMd64n!+lDA>>^P!r2EwKBEx^gbRJXtn6OJqPr5ongUkI2 zf>m$80pSOos%aWG_zRBh_%*i0yhE!c#TwD3{+AX;Lm2@hjU`Ew7I*&jhW591R?RK_ zGXVbY5RdQv0}W;TCNH{Nt()gY-ZZX~Q#;>oom$UhejYVUbz^N||qnRdyGGd&|`aFlu2Jg(`Ks9`XBz3{N*h|opEl|5 z6~Hl{039obSHgy$i%dp(r3I?~h{QkA*y$mY_|kEFfi{-m8e_U1usR2q{*4{tsV#5m z;H~7=iO4nO3X7Q!pJi89m*ALMCh>8gIB=Oswku(S+Gbi8x+oPp>H>sJirZ%J8}Dq^ zYd?X0!x9%C5Mqk1d3xFU7XZ;pPJA!yH&_&FtyF zNf@Eqi4Nc96;9Uu)wJ-2P;+N+UH|-XjO2RYP4L~h2YsK*CDQ2YIbOy|ORwU$peDVdzwX{dB9=@OZ`srl_)KLait=Kqt~=YP;tLzh(+ zN8bNKtdct(?wlk6;mF|Et9`J|XCQVooDd~bO&^IIddR^l@bU;|j4T{L(FVc2J;u)_ z)H$7-6ix`og{bt_Unsi}%0bx=dUKPHZDG=iJ4Zu>5iOJMOB`3wvB#qwh1_8|cr`4S#SIra`0m-&&K^&bCgHkEORIM0?`L~A*&GyH6$9^j%n z)RqqNHr>^-;!fU-LLqW{vOhJf9YVWxY}=;w3<#Y3%IprtWm&AKY75{XWhQE<6u_3+ z@WMT+<8feT-As^5AhXM-J!a?`-Gay@1LdXnhxF9Or33$b@8%k9ZDl3=Vf#>Vj6k~z zl2Meerejyhm#Aae#oVkpf=xPB+^AiO4^5v~Omod(`>mcfpQ>SA{8&w>!>L*-Aw7$A zB=_p>eTW36tm&k;xJ^q9K8>?&dy2TjD3Kn$*A&j5;~)zq7*u^@OdsV-LxZXI*P$7Zn$M%(PQSs}L-KF!a^ege6&zAwgE7-aR%V1|F zP*qFo5?$q0Wd~=;mlb(@8;Mo|tgm)jrF%B=Hzw>Mo13r%dE!}&AO**qf+50du)>2p zq_39)SKl}U;X-06v0{L%lEhECX_;-Kix$1%D!4nd#SMxk#*>ZN^8!azc21D!zkt_ zIuVST0YBOT2!G$jxoJuSA!lQ>N?|oKTA#CZVhwX_jBsxv;`<5aTdr3Myu_q0&g^oB zHT9xR58=qdu${(uz_yt`lS`74j-%7echA1#jXt~ZU5P+XKr6_Sj&cvOSn8a%@qr*d z{zsb95aC5McV!+Pxk#_Lo?r1vaI3Lh8r)?Yks>6Wgl-6mUuz!0<+$0;RykCbn(~=tr;CQY{qM$c8NRb)w+l3ss#FOK2&pLpph-5&dKI@INfx=` zU;)g_)J4|upxwo@I^ITJF4}yrqW9zJ75AqDWiCcznf+b^2pr{cRSc4!-Kq(c{4!$M;%@klGhj zHn#unKUKJCErszUx}HTb<0&_*m(UTz#`Jr~#_Jng>(Q_}(5^hLZCEz_K^YgBu-yO1 zq4M2xQ@$o${5EDiC{nDO5A87ICCVdZ4&~U2G^z7C7wthscYuKKSySG(uB-QO#>E{? z96=w$zY`W}R0*^s(6Vi>X41MO@?v;}eL7{5!mKif!9*&MT7mHTQ?GhvpnmWiKa9sY*#2^FNuHTPKAU4uFZI zjj=>I&9=m{1%3SNL|AAjF`y}d?7!vzalAXmqIiJciXgJF=t%C*L)X){3=mA!w$Arv{7R0D4Tflu}TDd zPeb@3?sR!UP1Wi23To|_(ly2n!hYJb(Xg8VzXFe}m58~acC#ox^E86VUAwF!cX%f} zR5Lw`gL#|sRRft-ik&a2Y3)Ks*(Jf)#+txS*XsYpU`uFQ+13XTwq>6;!rd-@! zunB=Ggf;)3FtKwU(@<#hp(5`ZED@zck{dBOO_Cfby$G1QX2miY~*y5)Cn~HTY00< zF2GWCoRpE6T%^q~zL(|CeMCw33?0M8=W(h0cXViFq}?IRgcbAZXsK?xaXATklzNC7 zbWo@fY`u=Z(6Q3!wGgFV#)^x|bj5bt#V z+Z`_!W)b7mJ^p|%cUheRsYX@?c5&a3Ay|8 z<}wD+Wext%2?nra`o^P9&wAM`QuVuSc4KP^PUZ){XSL>Eg$X1$i72Wr^BE~bh!y*# ziC?E4{{i$i)DVND_F~iwA4-W~`S;iJhEfK-L>zf9cqYhZNa3^)nF9YLzx>GYJ_pCJ zgnyHw9<}7oaNIH_Aa(E&r$79Jb9#2b z(%sVsv#<~1lk*A)LK`ujo)1)l+-(!M$czIzP~1X@A_9W7>{#y{zx<8^Uvlo{p0)bi z@Hzud$4arR`+>P9AOYrsZRZZ9wErv+cdJH-R*0RWUCT*-aHkS%oCicu>mf`fWZ4}m zG3$+7q58u(&>UUK^~zEVkD9dL*9+$Z!NEeP9#gSFtMUX6>+pew_3_E%V1zD$a^?@l zIaE#WqXT@*71UNFWD>+N(5s#-87wB zFGW2kW9h%UMirA4dIIImCIhuid0_ZmBHc_nG*?zdhO=f(oeGqh8yOtHYTj>Wfvgsc z567<I7sgY%yc+u4=}0JisCIR_v5WQ*v|7I0;a7wDS9EY4SV#MQzqF9?ug6Ssu+dB zy*T{TGl)r0{Ir#i*>`E@nz9Y={7$mY$%R5^)ZYzr~!SSisL?kS|a4llQmR!gn6TuUt8) zYxO<68kt}?Hi+Wmsy^xb4>g#|dstjBV~P571!w&=BycrpZ8OQFtGD7FAN)S?>80pB zekXjw_}P>XGHUmZBka%}m2}?aT2FIJ zFhJ@?y2eU%od5c}#|xChB( zy7vxdG%VlX2K#sPM&N9upR4DuV_h?Tn{zgic}|jgPLway&!e?Z{NpCCuGZ5I-+WWu zbL+FIsQK$zOVM`fT1;xbsf{FbOj8dWL%&`q>f)&%Ky7M^&NDS+Ea4*fLy{w|ndC#h z2TbQmwKtF>IFd+I(-W5+C{kokKr5tq=W*VWsMF0dg!p?9O<{I=gOM9l!|FFv9nbSI zhoAzyt=*m?)g%GaGuwS#lQo@^aK=ec9z>91TMvimh@<%fHrqJ&FbeX}RZyz41%<=h zgfCrpj$eGy9<9%3fm^{uSv;Gw>8JMYbJkLkC1;|fLSCi)J@L?VkQe#Ez4634f&j@n zqT<A($NA_N6=3KjW2S^HMe2~{E<(@&%>?e=wBv4T(xTt(U?J?VqIx#$s z5R)UAKd1c95{{7ujK_WRUy{YOo%9DMz@VkeRiCzkfobWIH5+N!mC0VzRqE8nM!Gq^ z1F6FRYmLFqwj|de8r`iF^$Y@l%>~6%zv5%VY^0rc=6$3|tuw;80B3|4P(o#~aXuYu zK_tD$(NWK1Y`1n__gZ;;&I`xRP?{8$3D{9*8*#PB7ELDs*Rp5DRV+kZBWPL0rQybnrf6dbBFn7|qLEO~`Jprw05;0xZlw$(SX{`Y?{{bbe zbBmy54Dt#6+Akp{z=rl?enNx=F@K0BnDeRmn@lzvB{T}5^e;Bkb)@f@1ynug#{4L_ zwz%|%0B$^QG`jt#jtgw80UPJM7<+D@<0c|UrzJuG7Yl9}_uH5IFAkOaZx?#}k>d_c z^FQBdB8O76H^?@mafDuIDdFZ?xd0^rfhIOnUZe<>{ic)S0YL?ef6an=kN-@p_?cPG zCD#dM(-S({$Xp4sJxNBg?8%#j#FI$FZ-SqviMy8mYxbSSb)LBBzLgb(@4~IK@i@hL^Q`X+;BZ{#FWZ2|8u9G*Ry?X-`utiB#z_;yx)9M2*8cGcq z=_zx|5~)~nYh!F5bK*xXTNU}m=qIimO@RoxZw-%}b1z&0C?G!bkV3O{qC4|kDH~5- zVc%*b%hv2;i7dg)Q@4B(=XrlRi|4`K@kS#zA0)&IToE4EVLs+3vUN_15wmzk?g_B9 zpK@X+V|^Ra#$#0-2D#n(Sv)O#8gd6y3qpY@RS@zY&FEzNHcc*@9DmAiu@q|-WaY=J zU?~XGH@x{HEhQt7%6g@Bk_=vw4ACJKvT0x2S6gr8Y|kI%Gm17<-gJn4?K(CZ=T-Fl z%y8j)uBj3nwEkznC#pV84P#IwJ><&C;Y7NwM@d}HMo|ajQn?A8 z6(93VUqKB$bgI^)08zn$qd4cukJ27(+)o;1=rsI5@rj=4wVVm%b9-P@XTY`FXNESM z_!Utxslz!Ol*RII5~gi}a9MN8iE8f;7x(<*BogMPM5n>9H(-)&Eo`mf?Ba6x6YcWBE!z%8YRUF5Ue)mZ$h*0-9{vA;dSn700gW4DP8bUEwC9by+ zmS@#xiC3`B4_Z!t!XAX>u8{D+Gd=BQnc(TR&*ya^Fqq9qlN!%eIRv2BvR@iG!sL=M zvvuhfo0}f1cv0V*d62X>upum7Bi+qnjjE9$xEr}iHg@2U3#bKSLymB3?}7;{M2e67 zJlHTeo4`os*{D(-AwnEV4AfnOOhNvcx!(pmugs=kNapc@=6@-=*c5m#tBsiNJo@u# zG2^R_8^S_fCZk|AFF8jz-Hdf4GryYZuD^w$?Kr`lRk!6pB^VmEsadQof)|1UN_@+nV163ZB?>MxeoFh#5)T$ENUoPJ)SB>FgNW%9!KYDkINq6}# z%`gHdN+FRX6{51W+gu;*2Uq{s?e^P5Uo-K9q=S@lt+y)^x=T)(6bJnXf_Lb88BpFR z2pc4`GHnCDjaH=|v?4X<={r=0Cn)zJ$^*=7G_O?Ue-2w#DfSuf$bFSobecJpk+t7Z z{GfOrVqz+mbML}TFI3usR=(z6UGB)u5z4cX=lN=l%&{7QskQ%CC97P`>u&YA%ATd{ zSVVx-??8qPfVxdum9rBC&+C$e4s?B!#_S8YhfI97PCr-Dm(ERjqI+(a#ku*01AEuQ zy2uZ&7JfleTkl)*#$c$x<9-;9k>*nCR4?xpMb`4LUBkG>g0$B?-=5wXuf}Dc-l@y@ zxVwF{E1_r^Y-Qf{Lx0$9SIfMKA<9pp4`*!OI^T!Z{4OEA#XC^3-u;K2Q(gDTui#Ii z0x$DC&pBYFX+My^Lj)8bcGgMDCFzAIZVf5J+L`>IfQ$J-QF4vJMc%}LM2Vvsiysf* z+KkMgVIE!0Ixp;%teGdJxhSrSjv4 zQ?8B@4uX1rZdg(@Sd_WeH+P^3ir@AWYY zt8(|+0<*Bn=B^Ka^rLlf{-e?LtmFu2ngg&Rf17j%4^-U`3g05TaeoFguvp zkjg1kqLL9cOHrepngps~i_JPjL`)w7Na7;d57 zXl`nlo=F>Y@88OUroqjmgiX1q8NNWF`l5)6HGztKD*o0}K$D8UO_(=pz(Ajm#37as z8#vBiQe*hYhjy-BwvFoc^V~fJ2ro2n;1TOqXElv@e`}HcJ7t9}AL&bNj)1K&FiK!^ zH&@NAN4kl7Opxlgx!I$a_AEtcAm&Rr3IbcY&j)AnlwNv;`~1~^$^7SEM?qyZSeS?{ ztT|5*Iv`w@kkinQ={sg=Df4O~KjGq{NMsZhEdNq?0nJ8hgC8~$5bHQ_Y|*-O^pjh6 z;EWyH^u7p!qfqba%w)i(d5}VZJMd2boal+aEp5=!sf_cF&Ux=Q9@f~HLi=b2iVMjd zO2t%Z)Fs`w@0;`^?nB?%?xy;-XK*~Q#)irPkrPGBH??sYMzXABv!j22wa-B{hv`~M zvLlIl?OS;>c3)fg8msZ^zSyPCqOF+fVu~NGr6lhtUIFzs+L52&5f+LCY@Om~T?-v) zV_>EScyykIh-7HwfzNdZyTP!Gg!bLb;uV;q;_0~9YxNF?USeWQ&{9&ul;P>COuV~s zrd9LfAn1wP7Xa23i;||zQ}4%*Uw+&740k-EMZs>d_m2lb`48wk7S}K`+XE90y7fG5 zv*Y<71zPCN6gEI5nBtrnFK@N>H{^kcxw_5P-&PbcEC2~bDej1|!Rnh*8bDabN4iVS zE6@i&FfojwDI3+VD>bRK#~G@j-+9V6^B{8~u!*ziB4ssQqp4HazzwbCGmk!878JMQ zcBq}L%JmdtTl3wK(48#S?4t|9Mt@kL^=Km|AVmzt&E7e}m_JF*$*=k4r0W+j;UuRE zfHHu(qmP#bABMb>F?G3yO0im#*WG<)AT+nH+x1?v}}zTHW%M$=LEI z1`9EPUZ0elMnZmJT|rDB{vEyL{pQz#;vK?CUlxi#U;k#N6JfVJ=$9Pto%^WbF6vyz zPOHEoMcbm)wD-^mqbA7lq*1A%yls?HF}>sTbLYOgq zC01=i`jyb#8My^mn-=sz`vzUjaN28Dy5cX(NgG{uTbfTB=cLgO@_tzzyVv;MYc(lw zT~^t&Sx|{dhtJ9Eg~pYGOWmsz_y37ATm2Du!&u_ft><2y5~KqWW^=1af6}#TMWyKr~G-$6%07(dhM$w2i(KXLp#;U)pS)c zgNeQyyE_dr5r0^I>JI04uo}zm&-?vebooNS!Umyatj+=z1SO$VXw$v4%n2O!4O+Oe zf$fOEwYhn#Gf)YR?(QhKb)jr%PU1-%q}>?lX0*pSS{*wNjXbNE1f1hVw7$f7N@#CS z^1T-9+gmWYjYsQ^xAD^C>atgT@v!y6?p^blPJOEye^!YUXUIphZuJkU%gf;3;w(|$ z1@R>Ll@V;%O!*AmpmIC{n^W|CuPt}t%tZjfC{G_ILF{9y>`It}h33AzKiy>;TQjmW zq91n;g)NJI)XKhePSo_RWmZObZon#UHdx03L(B0@ zIKLRh87A{V<>n+;QM<8~Z3#*7tiY*v^yz{GnZe9)kr?^qP2<;kKB6b#6hs35+(t>e zW74}%>7mI;wL3VUdVyEgu?@D36qLr@i}mf*!?9sSB$9qf6<3>arcrwUhjLzCc}Wz( znYTH8lf24_B(B!IlIYoeTfD5S3vW?Eq58>mdWh+|X|wxoRN!xu1l06YL2E}7RO(MR z8z28}&;zIWJk|cT=Q_6LaGV<>t$Bl5+gI8NXafJ7t#(#mgr8YxS9eun^`N&n&NvBLP19rQp62;oyid@*?Hsi z5V)IF)bG)zfLAnt9DqSDaCsu8=iNdL@R#F@n9^v?TpU?0K5_^JMnP9(qb1?Zvt!+qnBZln(Mu@_1N zY#p{0)=6}FW0DyBYV3I$Py`G*=ANT=$gPJ7T_Fm0%0in{1`02TlTMX1|89M7UpiBO zwiG4z=^h+-s9D}9%+QDlnhF0i$wC3AA03qj6sBMHR-`@tsWWk}MlEBq4f95FJowm@ zS2`LtW#baz+WGvU7#z)-J$0>0&$W`F8`Hry0x!>l_0_ueOgFv^*^H62o}IR>-`4rs z>6#aZ6AK_>)aiApm{nh~6z$<{p8Hy1x1#8NQ1&}oz;rd*qrkr8L{CWYC zj{e+(v)c2^rOb)7F<^No0JH^#?fO*OPA>JNh-7PDGF{N=9N5OEzSH0B{KN?}9;kNu zLlUg?K7cxLZ*UqpA9SP6{ca16J=mSuhax}j7E&4V6Q#uhVqKqh%P;i2Q4?&+DV4ol z=U@48Dm_d1JMSci^&zO@D$F+IY7vJa**2`2#r^cKu=R((mlUa@Y=MpgQp_39h&HT6 z#~reMHqDty#S?~Y?`rThcRU8eK-6|1h06otrVa&CyLZdzii>aw-H#2!l3}#2m+jGs z$9*+Qz!4yAJ$pP`Ypt|5-Q3ZX$vwAshowk!$aJ&QcyHfe==!qXMof25XxHt4M}}vC zWSgsg7Warz1i^Hj;-vt&2RAB>VE7jc3~z-(VuXsJ38SPKi`C~sH^9;B;evM`dq#R| zFB*hy_Sc+<_;j;*GJMh`@ib5YMMH*{?T2e&9^Fr+ai@%xD!+&aNQLY%;BdSP*rxHb z(`-MMw!4n5YHu(PN}fwMj_ac&?m;Fm0Wj19n-nZXb{!odLKB6R{>PJHes;~A3cNUg zdcZwbt;4H%24DLU`tyW#d9XR$1BkFhy4Xs@)J{v#{I2KQfF}g5dND~hkSwH8X7dV{zd}4CsB%hm z@?SE_?LJi38eo}W#x+Zk%7W%kpZLzNBY6+vJ6}xkVL4{G)X$-=kERPwEVftW7gWqi zpNhwhIqUiloxsx;sK01nZQXD`J~>+@od{}% z<<|GTYUkT{|5k5Xjgf&-bl=Gw`w$q(fR`_)k2|v)8{556eXgC~9DTQcsS7wJM+Z1# z(BZRL5JdROQ&hK2HpSV!fYywWa}x&TpR0Am?c}p|HcZP9j2AXtS9F5nh_L}Y=!mlg zQc4C?KOluQ5Su4^7BFGRPLo?1GB^w8 zq37@4K>-*P&EmG7UzmNF^021$xH3g9DK?C04hnlXTkU%6M{iM|jOICNqBioU0yH8l zh)K@k_P==Wxx09nZFuM9O@|BvF_bZSq~|VH`Ck?>HB4#d2nr5KyX6)XR)%pKdNt)j zKZiCY=Wk&27ld{H{p|&Hbugw^0bmpWG+y=GV7bj-KkZM$v<6Xgq4qyx*I}$hxTuWe z799J*`-0C=R{mzM-531&lRpul?nGJVZhEQ9>t&tUu?LRwJTX@zm{k3R9YeKMDoOA2 z^d%u29!`dRQ%|v!MlY^B+6W>kfMeGHA{lQ7uUD?3;ZZJ2tK?j5mC4uyi6#o_Vqqzw zzv#|mdD2jGw`9}d$PNYG*Z$*o&+flEG&t!WN3uXYWeTFi?wsnl8OcaF4^Jr*Oo`XOyf{{uAZ7;d= zMSRfb!SB-de85ob#@4hikn)7k&_+pxtzMjpu*qO$lAIFgyDY0aIlzI{MIX(O}p%;)1jDEZLX#00e^F!DoS#m`BeyIGgg4 z_hLwcs%C@G-SdAxy`ZV>3Vr7P&IQSyJp*$u4E+Ng6W?r@(V%eCDe(2)AH)9eKROlH z4vbGBGhn2oYLdK}Z;%O? zcN6iFTv^-?E{!-$8&xKf+0s6hPPr!CWW`#d7*}>%i8Pp)zi#KNi8Ec7-A|;E+3fPB z_=cf@-{Dll!B4ZfRZ|%j=o81KN>LjHkUco>z(5r^Cntc$=}+!D^8$lCm|*_rMg6=b99to!yt|LQ4w9+w@}bm_^o2pf2bp@J+SUv>hR zFm0i^fjs)#!JcPh+#k<+=OX0 zMty2QWb58ANR{6mw&8>~dp2Y>^7}#-)1qt+nTK6Xw;)EQ@M-Kkvw{@Q!DR>7mO_U4 zrZKN z@WyGy-{+qMO$9#Y6HuK6aHxc5DwkKa+}+-7nu6Cr6N%Ez7N)$+uh=MfNx}s)X*ztx zAfI`g(%D~vg`xjv2#9YT8!ZTfdg2stHwKKcF!pVG%4Wm&=^orCgWLb-GiWWT3gRSU zo*z&FE#U_;pYAD?z-|N8i5f*0!^{hv?8Q)F(1d@wPf(TYj1W^K<5a1G9ZK}K=l zkkn!K0GPTwMQqdBbOlxmK#K*N@&cw8IPiVNnD90%HV);AB%FHOqO?SFq2++|8Bgl`W(Q!!f~ zRfmDXya5i_R@Sp+ea zfCd}ag3~h;EraC3|1*3L?$N=8ej+kD3yQIUj;v#V717{jP^@6}VK_qKyBBZ4H$EV} z6HfZR0UPHc^&ct5NG<_p3BoKrY!5Hk1KvT=STJE=H{}OF&IKF>G#m%>T<|zou#b4k z95xRup9m(IbA~wWp(t?$Ui+^^d=D!&z8eb-u)CB56`c;aevlkS{0>;poyCn~XdUPZ zlywLASjT1#Xbg%OVveMNWyuH4T9M?I%?H`ko*9se4yK@`3gg>;3K)M-4Sd4-(Bnb* zP)t2Y!5O3=J9Nqbz*4;dt#)9MhkKVQ1^^!388A%nI4Vq@z5xipvrr6~;dP){&^bYN z#jFdrRid{NJgEY)WBuj?@EChr7c)t+L>eo|CtpvJhQqXJ;Uhrf#^XrV4SPbMXbY7y z#0{6Z1IUXI_s6ui?A`%*^JEHE<)pI;ZIpvZHV4U=LLLNBUb*LJ)fLaM4?{JT0CowA zjDXKQB3?)mV+c>NmH6Z1L@ZPL?+5YSR^l$5*V61m%)!2})&SN|u)x6rCJ13GbU>6Q zeC$*zrm|R|qk`dy@o4lM=<5-{^9D%VTnR`8AD1eL%_{*8W0r@2u^fwMs9OOZ!gwbH zytC8?5TMH_vCrm3f&I2T7WHE>pFDYGmgMo1U$em z%kWV$u!VmoULaI^&wrq|W)Y7)Jl_@rcS@ozLNW3~wFa5&*v0WA8c1Yn0TS>|(R>ro zLCXRXp}s+@#Z=Q~l2YTXXDO~92*c~J;iQAg!5BH4`6&Bb?IsZ);&iv>R$@WgKeA4Kmw8L*co^X_eXHjt>KaW z28?||aN#rcp`={w=_9#Zr4CLWj?oR*MS1FvRk`yz1D*Tc&Z#RS9-CEzB)h(u~JMpJ(uflm$&pZ2dxf*C8K zIKzaO>_qdTjw%iua)(n^E5%3Y1;rqu4}hH<6wq0cM7mx<#veWTyaXrH7mpKAJhh#i z%!i(IzJh!j_QsuaP$CX7`O*`NvDy;W#3%Rl@fFyR%C7c2g@pCv3vBCrubjt*gg7Ol zD048O6|2=Frnz7BD_&19M+j-oeTRmkwaKHJqMvHm&wu#0d<>{T+L+%f(Q~{>KZ;tDQU# z5E@QVv64TP(gE2M1TE8yOmW*luS?(GZWS+C&nW{bBSc%DAxB;w^T6J(ec7bn3kMIH zn3Wn+6b;MqC`K}b21(GXH<3?2s6>}dLb(Po0DU@FF9koKeEm5{C z85Je66e7E_@B2D4=lLAn-|zE0|NQ>{y^pRpflsKwy6O;?P}e1gTjN345Bu{`aq&z0n&xYsyvon85N#immo z+GnoaJExa>rbfQ$t5wUksM7l%Hhr%v&fXfWbT3`{tL!opqZ)Cgr0wbNLXy^evB|ai zS-j)cfHU8^vo)$g{9+9+%3jTA_7qg@?wOf$T>sC8o#FS(-RnmdSe)DOG?wFT5}fYc zv>+e+>eVFvK-^NqPi&D+B!m%vAhHnglZwd1uccJtCn7B+eoCSL7X8NvDxnJhX~ch~ z@t=?Qzs6a%9Y!cnRV~ur?&59|bv3wl2F>&)rz--l$$z>V_Z8trN?SIA*Qa#;@{6Bl z9%s#ba~^AZ_Gt+^q{E9)wJWV~me+r6JvS;6f}luMKe(MmVvr#oRLk3`bM|#Gv&D0l zqUOpKu(jPP+_zJYt4M=*a-ro?rNJ0;huxPqROGf1Tt}m;PX^`6$-*(crKo5*ah4cU z8oQ2DH#<-AxFU_gn#|5RIxE&a!8Ka)s7Um%zR2&H_z~AU#ZdZ0lN>$~L2F}GmbK;h z4fU7NqO@=o`M_zX`GG0ACf)v27p=-#D-JQ16K@ZA>6Wf&ywJ0W?mRv=S=ue%_eEYX zl{FB`Sr|UUDT^OqDkM;>1-ZIKwRCUknVndvz>Th|MFx#+#$6EFmR5a{DI@8(Yp8YJ zym5w|U}iI=vyqp)d+CFBex|_)Z3dp9GV!r;Z?}Oq%{g<8w|35F4&wgfvqjBaVc$c% zMnbnOt6qYHBH+1g4#ioHK|_>+iMa@7_VE>5FWM+SSr4#fNNNi(((qH1B_|p`ex_~O zx?TX+6p!t5zw*1M)#a5O6(OO2V29pR1yN2;`2zV)Osq8@H)8O^IwgzEeu0(poHV@C zFhKxs>Kelw3<~pvm)7nVM^qJpzv^4nTB2;|!-g&ntO1Y7$)k_7e0ItQa-7K6J_u-7 zw<@dQvHF~(-)Y%*5XYK*~^nS%X{Mh94PZgM@)cr%uG`vYaAc^VphY7(Bu1a*33H>@hpNV8q@EOYWVw~ z?TX_nk|LBS$2{%OkEu zNYm@OS@qB0g@=e2eh3%b`?xizBWhz5yUUC%LJv}}u%dUxX#Uf+$Gi6nL%7|R$sbSc|?4LB`5cjl<)I%ZE(lHei##wt-dIz(uo>xt2GZAzYF_~$r| zhW_ogs64l^#yZfN&3lGs>~(@aNG_Tb!`0%=SNF~H#;mZ(I!bxKota%xP@v z_=S&FYC3^`NlNj2PYLWl18TlC^tRZ)4{h^iW#MOYXX#x@nn@|$qLpde=Pj-B9-&2} zQ|WMtW-T0N8Mp?%%qYQ2X>9p9E`~j@!!SXyiIt!6h5l^303V>tr6t|!PP5XjDjaj3 zNaIAZNY$r70*NOKZ06mgs@U(?AIhBw@BV7-&x;g24qD7ijO(7wak4s};$alFPfsOV z-X=e9=K#fb?vitD{|FP#XhCSom38@jag&aPbWLDydF5(+v*qMWR|*AX#=%{+{%PeP z`HSNfijx<$D0t69Fv?^-4t=InnWAT)HR{p-&;F5uAFQX8G!F8<3oC}ZU2d@(H;Q%V z=V(Pv2jYDZr`eZrcY1QUa}zH1UR(Y4t1imLDPBf65Skt1yd2AGU!nU#jnho0-9Yy5xY^Nn#!;_U z<24D#UY(nBzi&oI{!}zfxByz&ZdEj@wz?i)F{7h{fhwj%C8}aRLh0+NQg~hIlZW$k`lf+`dJqb1S z3%H+xy+$j0f*aq`bQbX97YpCz42F(ad;Dq+=xg7@bh*$c5 zYBb^#&2+KbXIdqZKlpO$c8K$*a+_b`QW|FAuu+5n*gV&V# zP$C3jj5GVDg%WBdGQsv$_PsbejkDss?&Bwer=|s%R(<4BJ7f|i;r1X9e8YWse8XDy zNv7~MdbZz?^CPC`U&~Vj((sh&mfpnDXK43Q$H!n!vEYHLUG3CYvo~+&=&k0YY%1Wi zDbVB^W_n+#1ZplVwI-n=TTlt_dfk)@x5ex#x?60F6EzpBdn(qcNGr z6mKzy7Z;h&mxQV0kpM28w_w*RPve|j%QuTvN8wEaNs5QmL~Ruj(qwQU%x&#h3cZOR z-yVmH|L91Vey(*=LZAWvaZd$kODneqFWpN5XVsEE-%oj}y`6cVP#7Xg)~cCQ;+nZ# zPiocYX8H*`BJ5jY!S)B7;N@?KY3$D%kkyyW|oZ@`xYlN^n zJIDa^Ue4Hx&M~)$F$_!5{lThxrnze-J;i{@wWUxvzxLs{)X&}dcgU#y0+!%FL@9)3~;1c z_}SXos#~LX_D*D&R?Vf!RN;arin^mldvA@6?<&e($Whq?GM9JYM%ehF>Tzb?`r)Y_ zoBlInam)AMlCRlx`Oq+KL@npLGmn!4+Wp9{T512dsc&Q5B&vNiIX$FXF65b_bJ{9WKrpIm2-sqHDx`Ef53f)Yf~Q!j18lbUVeoYZW$oqpy#3iVC2St-iMl z*dG*Y-pe?z2(?-r49$GePuDb=vT_y^iB?Kq+TJdLFWjA>sB$J zy!5(v#KDP%iTKVXO7h^pJLT@*N8atpyYt0}z%PoKb#Gi~(0Y%Br(_;M4+8933Y4s=>}Pp~me6gcXF%*f1g7l1$c~b3s+niuDiwXxh~q+d_;+hSkn8!2=C`}>-8&O*P65}0_(=GqKwjACd3ovi=8f%pHaR4tI%3qA|%iJG`U$7P?Q^>fddKnICoe#XvgSs%egGn5%ZDm1PRIE#3nGtN zhPds5jMq2@o!%fB_Xj1@$amsOCYvM)k&%~Ld$f(Z%SVrj+}|;umv7HR)6Xc`s9PW^)=z0N^4-XiUn@zS}j4?@DcA5 zT?!b>;UxGFE(jY+LaBJgI&W@UR_w@@yrf74lma_qAn?nMY3AdW)~56DuOlQ z3s1+76j|XeWYi8N4-^k@JPaE$bO4lr;y~s8lB%4Pfs0;wE<5Mj1jlItBO zthHSNT|ko+9Whl2&bLV@T?-CP3pJ7BE`Xa15_N@BZ&WkM@UMpR%MrE*7&dvlWSX9a z+b>&(F1d$`V1ePc@TAnRgeOTj=`9zmRx}A<)5k9d3qQ+IXeL9FXyM(Gt zkYwyL*LG|Om)@?hJe%8tWeG7WdG8ViZ0`e@a{k4yL3-gqtsQRJ1p-??g~I!$T#zV< zoUR74%xTDH_Z9c%qM`~!pwj&@>v)6=oovcM7r}>3P?tZh0riemeRA zZmc)_<`CY*Nz#75Pa5YiaXSW+e!7Mo64a#WB#6)yMBB-OC6dz#*^k(YeT~>2w4F4_ zEbBo&AYO5Tm&UA9^pR)z!Y!xxY;hAU-bBEXO~j#}eh^$}#LE{3Fg?Uf;gY(lduz83 zh?Q97zAO$xW1HshwpHlB=oNX+IkKT7T$k*epsyB1!!57aOqWmix3xt}Wk*N|izYU- z&9z8#j}Q1=d-{CQN^H!X4{b^;fGVLI__5wA{1f<1+zn!r`pS>l71LhGP>>K7yy&QF zs-Mex$J))HjfBtZ&9hoCTSM|Ip2khht>*nc($hq+*XG~(sNhJ@`?aLr4SF4?zg!M$ z^FsXukMj5z@Ktz=N>CUN_RXAoDOCcVvo^kmaoTzcY+>VCF2s-pMkFk!kVkK<#7s}lU&5p@g73zuE}#FRB3L1z zen|k^^u~J0Zmz>eMer^TH!>lP^0JJtNdIQYtMLG_n$0s5z$Z}oqZ&pc?VJYqj|m*? z)w&c95_RJ@r%Lq6q;C~tKSCV<9mq!13(;-Nx3V!=kh&)XVC!}pz$TY4Ep?TlW)Wv-cV>6 z&t>~n7-78xnOzQZcL&{Xq#E&JRm(6UJRpfvynl{PHadV%G5G!7WO{nF+$OR0r$t&x zhS$JYGL}th9}wL~R@x2*M-4XT<||5vwbf*C&5GWun}0_fBW*=w2y5Pvah)5V>TX6` zgON7zcO8BH$c9aCK*3KDBw7?)Q2nNVlX6KAE$-!gIDXDuNrPJmygy>>ze+{R^k82T zyN}FHd4;tk?A1;PV}ITy60LTjbtL~LMfUaHRZ=^FJr2w9E398xVInOm9DNcp0R{^J zgpgu@5*?wcuLXZ?PVhT9oog}usn&1H;ugX-!b$R+bIX>3P+gUG1i6!u<3F%0u|zrm z-*L$3BV^>i*{)~mT)ah z*gnv`CXjFVxkbXU68nwFI~Ihr+AE3&RbPnE@Bw*V1@o~jY3`bsMyu37Gyb0Hq{KyV zZae?6w4$i9ijR-nx8sxYePeD`n=j$WnT|vVw2X=o#=6b`G=gC4?GQqydxR1W1HC)@u|Dygda^g^+C`2XJoG3By zwL@JETtyZfBYTb{awB5&y&YKPPI8e&w*vkC^`1FNOcC6bfB71!*jkdUe1rm;Juirf zv)s9{!sOXrhh>c0BmDq`0ad;ziBEBIv;%K5`!_I5wQC2~%va>-DvUg$nJl(v@&Wc@ z%^A~5@t98;|GDG(xaMZmd=|%KznlyMe4>)2y{S1OtWu+ErCeup+J*lyinA@W-r6&en)BvCWexQZnH zq8@U;6mt;MiwpecMwbDw#c(qiQd`#&?4}*^x_S5BBXft9jPtksxkc~#%D@(tXce%ihq^CzyG zujM+tzr2KLk3E}!fsFbJt6kxUaSVjIEixsG^wrAv_U*D4K9NZHGb@5;2uHP$3J87j zjJL;frCu-dP$|r*6sG>#b$5b<`UkjcUsfb=f+r#Y<`UJld^D57yhV}0w z8CF9+)kliHnWqU9)feJKy9`xx17{Ab&O?v6*N5`mLi-;<_a7GV+G^4;W~i0i{B7+xLot|u(bIyFf;k4;5D5p z^Cb<>^)=9k-2`!=^>j20mQ-Xo?qaVca9DXmE`IsI_RlFxkR2fdNYALoax$b7(lrUK zM^)_JNuXQxoY>wtE0&ohCu$JqYJUaFea~e38c$wK0XuuUZDJ^bR_rmDd2bzh1onBu z?WKh{-041gE|2n!?j_Lkr!_=)-y6ros4k0;nkgb_!Qm}(1SS7q`Gcq0h^X^VTH3sD znv+D&K=Y_#RK3(X(rCSlq|Ce>^i`5}PEnBf79gvS?3fUOpXQ~;)s4>!E@l^_Jk}_6 zqLeMTWj-YmNL)-T#Jx$G6|?Hh@ZJOq8$64{r6dLZfR^+`p#5rOcO!9fl^t#?Z6#qF z_c;pU0_*e$@3%&2R*L5$p&5EStSKLjm+xp%!*ldhzj9JIq&1Jh#4Jq)$)!B~AZFpI zhO>gykwKiMbHZmH|8u*^7(9Z%{~Ug4~93cbrH`O^SpF>a0etd8cP#k zY-kfflVy`h8ftg|o7Z+18KEDB24Y3O{<%1nobB4`S)J7sdU;6?RAD@v08_trCiF>0)DWddofjTX-X`Zw2_EUV9>^Na2c{V@Az_nT1X zx<$!YD~naudQ28`gSV*w&VYB?T-u|McBI8r$PH``?|kj&wp4yP|g59Ogo z8Q<*Au}F(v7B6EXFy^}9JMAy!$N?C0?rV01V9;C@4;oTt2U(}$$#nDxAepU)YTdR4 zd{n$-a7mXQniCre_q6~=Ws@At`S%Gw)!XEwasHcM??|ymdU%I0)w1&keg&VlAY%#y zrwZ0-knY6BTCe48A1>U>Gt1;bu6J+IWpK1uVp?5$BD1s0=@4nSQX0FE30b`$`ongh`YTT)x|Yfu(Rcm1L$ zvXwnaR2o4SO@DLc#Z^*@Hor|T3ZjZ+`fm!l4~~ja2kh2|lBG=HPRMvfpyn2gznbM` z_ySW^5?)w4TwFyJpEiqa9`|^fyHkn zQ6+&-y;t}0D|w9_{rg2NeOM4R9s~hQ^snQY{pkMHzUIby1qoJ8y)c?2%4ywoD*Sh6 zzznX`V6}3z=+X|OKQPiQ3(CEl&mcpkIlj5&?_aM}+uR+!Tq zFGC#m0P)>3-T$pqMe1XzB7Sj<7Py_wwRq?LYbyid`W0xGxH~Iw!sjKiO5lIB(=o0$ z$8%>XK@dwMBPgh46EJdO+^J~)2utC;{|kedbBtN_1wm>Kuzp+0i*>RiT&4R^vjP-S zz0bHtLbu&J9O!=IJovN~|FLoby*)ToLO%HFl5pOZJnlqYK<0Iap&upzL4zUT zY3Z|kBXtAUE|@3Sqy|(GB?4?Zu}`J_Jw2d83oBZMqs3~&yZbYwPLa#S|KwAgu@G_Wi zG1F3CuK{epXI;9^BRP&M`+qKn3cd+$or?<@j<(#D2D@$q9`#;d=bS;bC?=EExfd&Y z&dn%|cqc|d=WGoj<^B3GNXMY+Ibghy;V&h)ARV80B&H$DA>DwylJT7@> zOCHp?Q5~T*cOK=T@ts95H6Yx=fYC#V3-Qf;jo>NP^w6Qhc6eNfWu{2s5d+Zot$;thlsnUBAI4O>Jo`{7Joz<_qOTrR*AY|s?Q_Mz38bc(l` zlXGWFfB1~t-hgovAZM|mK_6d5EfJDpn#S##v3a^-u8U4&V(31&dCaF^obzSgpq3{S zPi-Se;~`F7GagD?-Kl`tNq*gOU7Z*Pcoj}Y7W;rVbO7Tw9Y~-I-*}XsTd{f+_(7kE zMV2KBm=$Y)yvC|Eju6rXf^S~sK>zlt1ws}1kfRtxLw16I?V0h`tAxWOp&>Yh6n2x3 z`kg0zW$tWM4@WfW)mFp^EWC%762-8DG4~*ulB`SbsO(+K<-~B%H*0@(Zj`V~6Er>> zZ{iUn^#O$wC7V8PFrOb3Aqk@rP#J$&F+<)9N8@F3_TJBS4f5!s=|s^IdKBUeK9=4vh zm20oToR5xZaLcIa@rP3l@+%lM1W<}s1qg~9G-I>G$tB}A6$;{iD%M~zQ>p36FHjcP{XUb+rb6bnwU z(hQ*Tt`9!j+b~FTO55C;qtQ=pc+hu3rUnKA;x#%$@k08@_K`!SJ({G&RB46L-Z~wz zqL!{7xY;Wvr~dsXJoHNmvnCeRLS>|SUvS*_4OU{-$Txd(E+MOe-84&i0F`lRln5T3 zVK+ViEz7AgYh==ty3oku0rO&YJ7?T~W@?kSRspA zKJO}Cw52(W(X{4tCRU7G()v@rk&mRAyqk@H4nT5Gy=Oq61kVMLaeDS|Rqj>CIHAWl zd#hJ+FV=bF)w1for+x3=#WdHs6)2L)@r4$5a_9>rRIe_KQcZNmcHf2w^BsmqLKHj2 z>Y=8m|FJA>&^181s)Q~P!#BsQ;p7B`Z)((>^SgIV-lf=k;IPHEoW}U^tB%T_Kojm;?hcJFW7lLm8|rO)zrV_zD@md|5m;avc}Zn)~;;qc*H4u}cvi z+Ae;-buW-Ir`DgU*N^j8j<`#afrgFJQn2xIVl*e>uKLF&+13IhYvdEd{yi`r7j5*U z^1aLp;l*}8!+u)JVk>%}xa} z%#_1^43k0;9=4x{xsfk~GsnvXvuU-P(nM@-+;UD9C>o%zB?7l}XO*BGLd~JzT6k6r zZ}TeOBNh@b8Z~z9MIOi=cn=Ucp^7{BDlm}tN&^)PYv0(A*d)oyW7dz*hMAF&Fv4LIy=bxvNRAv@y~QD!u-<8F(kq@J`N z+nsqT4=hQ2q3zITejoe6KyNcL)|0+xGiXHHLU#=~3ok*<;J zcaRxG!p(Evf}@_}(fZHZJ8PZ`6!kHuA2Ht;o>Q@dA#rY`4mGjc=0Ojea@c*wA3_A7 zyImq>jXr5Ky8eIcuw4}FaHU*bWOUR$CwwF_)SG0^sSo;G_0IClT3ZE9!dBlc$Q+V` zHLpRNl*P)vZc;9QhrU{?Ewo(#5cFGJ`u=^@UoWE8CL%$$@xR&QGK0-`?WYRbjW~Y})?U^k$CSy=8P|}XK!QTn{ zHu+nlj87UGT@Ad-Nmt*64eO%2z?VZ?#BhQy6L?Fujabo`AoL;ax=%l(1WW6LErPb9 z8}}_fMMQ<=u51g;@g+IpBe9T5lpH$$VymP9k^)LDv&cCx&X{zSD1+7W!b8wI)XxyB zd?Ea=kpWMRZ>tN6j=Cd}!)B_x4U;|Uo?$zmen!?ZBd?_nmQ&ouaxg z>1}_te(tPdR>66glH|i0fE~-_ag8IwDvUL&Rlwe>+F+@?vhK__-1L@BC z(`m)*a5`-UPumH;Qx}VXuIf-(mpwHyZ5>G>a}%#ToTS#odgIqTO?Q0vuU8Sn<3Aih zWsrucbQaxdNxGU_einZs;5i0m`J=L@X3jhu+w$kOR1WUmR3IJU@nL}CeJIH-rum7n z^S-|plYn&|vq?QC_@u>dk*<`}Z3sdavLU(_6CRD4G>7-i7;I%&{!65tEJ^4V9QN#7 zv1!te#$28WyjoSqAc~L3u8dAeBYS`u&e=d@mjzMg1h2vEtq1H-&CBpzsN|-u2O+NO zio%V0vW{JHoRjpfgUWUiKphD=NMMUW5fYClU1%&|jl3Pgt55!~#_L^+M7N>&!8pWw zVeptVq3D9vk+*PS+ZbL2c%&_O8u=Ndbo{|h|> zJ|-Rk(KU03+9NqnUXi?g$CA545Ozq_bU4_f`;YLrAp8t@zN3NH{up^f!;T2lOM%$5 z9Mn|thxVQvTaM)Xuin0$B&y94bJ=2UTW?S))rJMfhtofQ-f~zZcyj*+5=?ta-(P1( zUcA2=2!`>44_~j<@byNCTs!8kmD|-30rkUq$Q})kCuRQxg8iOolN>9-Hy(^6buUg} zh#)p`=0xMB!DjmmyjlmU3}ZdMC;0MZB=yi_6tLrO_)x=3mTX5u-%svINI8I)&EJgs zm6tCLddqH`nvZM3d%&crl&*u=Ej`HuVcj7W65}F}%dcC38!+iRNo-T+W$i_GlDMf9 z(9!GnqwKo`kn~si2Y7Jd9;o3&+>Ihd@~e{^AxpG9oSzeUGEx;rWr;on7F1r2Cbm)e z;y*>B#rsPMJ$^hmrtSK^s5fStcmD)@DkjYvkcuL_bK`yIu!?e=D5+AHLAmv%H~F@O z0%zg@&R@AjM^gwVp4*rPR}{b*bAguC(P$&_0A)ZqP-O!Nk&do8mjGHTag?R}XmdbvTS` z4GYel1w$O@g_cc3sfL7Wmh|Fmg>NI#LiM zy6KmvOC6|QGDV3{jtirZs^Mb?*m4b)@k6x+)_w{VIv1<@mo#dgJj>!+Y~rW^B#DA> zLJUQg0?+gT0#M5lDGz$+=_De{k?w42i^NGO?5C$i8+fRiB2$FMVt7>OP8mkwWiL>ZlrJM1})Az0$l>$_?tK}68QBX1eRn-aIK9dg{28DRJQ88CG ztIwYhZ2Arz0iNq~6W`V#>I`_OABM?nd^UF`6Xz0-1l=aEYR1=pjL~%v*;{=;6#e!C z#Zz!Fp?{IY7o!-X#UV0}=%iHpNK5zxfyJP-VDGE{A@sKq@&-j~SNnhc(=w>=$#7V1 z;ERdiGYnX=c}q@a_ex9{ih@Vc#|OE7YJh;1<+-?fR{($Yb>(rWgSpR1DrN4~GIqY| z=nRf+6}keTq4|unr;cn#aWJr<=EnO4c5Mo=RUYXU#rs|)dJ#4r0pIiA4e6wn9a zGY?W-)3|lgRS@f~cMT+VIK{wIhRU}X2s4`?=W!Z&W>3a)%O&GO#&$aJUJiPc>+#}n z;@lNpu)EAAVk|vUgle1XGer!HlNpaBIh-E&%!kF-rAWvIOc@0(;%ovqQ5`Qj)j_t$ zP4)SM85t$S#oXDMkFr$F@t!{DGi*hTplVlNuq7Eb!M<8?$WaEG_&?x72d1KkY#7JN zP0rvaKo8Yiy7CO^fX8SEIJJeP2uq*Vl7)cwVL0^_kaiE61rIuh!GM1*+BHvFCOP@Uf=~Xj>YS7Y}fF z&c1A56;;`DfmvmaO#?lrh_s4i$aFB^$danHV9`sKhW#qUuz^BICeR0kJE~*aWB-qW z$w>9f`+m8EWB;->vWmnRox#I|5aX#8i?VS22OU!b)$8aIYX8>8$v6-0yQ`{-kfB^$ z0?MraBVQy3ZMlD1TPMm@h<m$HZW{oj`WEPi6;KSqEq{P(pGOR0oS{Kts@z6}BW_l+s&zpsw@ eKYfP|OOjNk_xO9 Date: Thu, 19 Dec 2024 12:31:28 +0530 Subject: [PATCH 05/20] build number upgraded --- app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.json b/app.json index aa6fbfb2..92a6bf71 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "TreeMapper", "slug": "treemapper", - "version": "2.0.1", + "version": "2.0.3", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", From 483fda54179528c2147ce74ec202af9eb34b7f6e Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Fri, 20 Dec 2024 10:20:24 +0530 Subject: [PATCH 06/20] validation and minor bug fixes --- src/components/home/ProjectModal.tsx | 2 +- .../intervention/InterventionHeaderList.tsx | 2 +- src/screens/AddMeasurementView.tsx | 16 ++-- src/screens/InterventionFormView.tsx | 2 +- src/screens/ReviewTreeDetails.tsx | 14 ++-- src/screens/TreeRemeasurementView.tsx | 23 ++++-- src/utils/helpers/generatePointInPolygon.ts | 79 ++++++++----------- .../legacyInventoryIntervention.ts | 3 + 8 files changed, 75 insertions(+), 66 deletions(-) diff --git a/src/components/home/ProjectModal.tsx b/src/components/home/ProjectModal.tsx index 977ea13e..12d5979e 100644 --- a/src/components/home/ProjectModal.tsx +++ b/src/components/home/ProjectModal.tsx @@ -181,7 +181,7 @@ const ProjectModal = (props: Props) => { ) try { const parsedGeometry = JSON.parse(currentSiteData[0].geometry) - const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0], 1) + const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0]) const { geoJSON } = makeInterventionGeoJson('Point', [newCoords], 'sd') const bounds = bbox(geoJSON) dispatch(updateMapBounds({ bounds: bounds, key: 'DISPLAY_MAP' })) diff --git a/src/components/intervention/InterventionHeaderList.tsx b/src/components/intervention/InterventionHeaderList.tsx index 95c3ea7c..0bc37568 100644 --- a/src/components/intervention/InterventionHeaderList.tsx +++ b/src/components/intervention/InterventionHeaderList.tsx @@ -92,6 +92,6 @@ const styles = StyleSheet.create({ borderColor: Colors.GRAY_LIGHT, borderRadius: 20, borderWidth: 0.5, - marginRight:'1%' + marginRight:10 } }) diff --git a/src/screens/AddMeasurementView.tsx b/src/screens/AddMeasurementView.tsx index 0f7ab416..d4c1a4f8 100644 --- a/src/screens/AddMeasurementView.tsx +++ b/src/screens/AddMeasurementView.tsx @@ -66,7 +66,8 @@ const AddMeasurement = () => { const handleHeightChange = (text: string) => { setHeightErrorMessage(''); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(text) + const finalText = text.replace(/,/g, '.'); + const isValid = regex.test(finalText) // Ensure there is at most one decimal point if (isValid) { setHeight(text); @@ -84,7 +85,8 @@ const AddMeasurement = () => { const handleDiameterChange = (text: string) => { setWidthErrorMessage(''); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(text) + const finalText = text.replace(/,/g, '.'); + const isValid = regex.test(finalText) if (isValid) { setWidth(text); } else { @@ -97,7 +99,9 @@ const AddMeasurement = () => { const onSubmit = () => { - const validationObject = measurementValidation(height, width, isNonISUCountry); + const updatedHeight = height.replace(/,/g, '.'); + const updatedWidth = width.replace(/,/g, '.'); + const validationObject = measurementValidation(updatedHeight, updatedWidth, isNonISUCountry); const { diameterErrorMessage, heightErrorMessage, isRatioCorrect } = validationObject; setHeightErrorMessage(heightErrorMessage) setWidthErrorMessage(diameterErrorMessage) @@ -141,6 +145,8 @@ const AddMeasurement = () => { } const submitDetails = async () => { + const updatedHeight = height.replace(/,/g, '.'); + const updatedWidth = width.replace(/,/g, '.'); const { lat, long, accuracy } = getUserLocation() const treeDetails: SampleTree = { tree_id: id, @@ -156,11 +162,11 @@ const AddMeasurement = () => { cdn_image_url: '', specie_name: SampleTreeData.current_species.scientificName, specie_diameter: getConvertedDiameter( - width, + updatedWidth, isNonISUCountry ), specie_height: getConvertedHeight( - height, + updatedHeight, isNonISUCountry ), tag_id: tagId, diff --git a/src/screens/InterventionFormView.tsx b/src/screens/InterventionFormView.tsx index 9febd6aa..3c7e866e 100644 --- a/src/screens/InterventionFormView.tsx +++ b/src/screens/InterventionFormView.tsx @@ -273,7 +273,7 @@ const InterventionFormView = () => { el => el.id === registerForm.site_id, ) const parsedGeometry = JSON.parse(currentSiteData[0].geometry) - const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0], 1) + const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0]) return [newCoords] } diff --git a/src/screens/ReviewTreeDetails.tsx b/src/screens/ReviewTreeDetails.tsx index 5215c3a2..32c8f75d 100644 --- a/src/screens/ReviewTreeDetails.tsx +++ b/src/screens/ReviewTreeDetails.tsx @@ -162,11 +162,12 @@ const ReviewTreeDetails = () => { let hasError = false; const handleHeightValidation = () => { + const updatedHeight = openEditModal.value.replace(/,/g, '.'); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(openEditModal.value) + const isValid = regex.test(updatedHeight) if (isValid) { const validationObject = measurementValidation( - openEditModal.value, + updatedHeight, treeDetails.specie_diameter, isNonISUCountry, ); @@ -179,7 +180,7 @@ const ReviewTreeDetails = () => { hasError = true } else { finalDetails.specie_height = getConvertedHeight( - Number(openEditModal.value), + Number(updatedHeight), isNonISUCountry ) } @@ -192,12 +193,13 @@ const ReviewTreeDetails = () => { }; const handleDiameterValidation = () => { + const updatedWidth = openEditModal.value.replace(/,/g, '.'); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(openEditModal.value) + const isValid = regex.test(updatedWidth) if (isValid) { const validationObject = measurementValidation( treeDetails.specie_height, - openEditModal.value, + updatedWidth, isNonISUCountry, ); setInputErrorMessage(validationObject.diameterErrorMessage); @@ -209,7 +211,7 @@ const ReviewTreeDetails = () => { hasError = true } else { finalDetails.specie_diameter = getConvertedDiameter( - Number(openEditModal.value), + Number(updatedWidth), isNonISUCountry ) } diff --git a/src/screens/TreeRemeasurementView.tsx b/src/screens/TreeRemeasurementView.tsx index d15e6437..8002bd6d 100644 --- a/src/screens/TreeRemeasurementView.tsx +++ b/src/screens/TreeRemeasurementView.tsx @@ -134,6 +134,8 @@ const TreeRemeasurementView = () => { const handleSkip = async () => { setShowSkipModal(false) + const updatedHeight = height.replace(/,/g, '.'); + const updatedWidth = width.replace(/,/g, '.'); const { lat, long } = getUserLocation() const isWithin20m = isWithinRange(lat, long, treeDetails.latitude, treeDetails.longitude) const param: History = { @@ -143,11 +145,11 @@ const TreeRemeasurementView = () => { imageUrl: imageUri, cdnImageUrl: '', diameter: isAlive ? getConvertedDiameter( - width, + updatedWidth, isNonISUCountry, ) : treeDetails.specie_diameter, height: isAlive ? getConvertedHeight( - height, + updatedHeight, isNonISUCountry, ) : treeDetails.specie_height, appMetadata: '', @@ -193,11 +195,12 @@ const TreeRemeasurementView = () => { const handleHeightChange = (text: string) => { setHeightErrorMessage(''); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(text) + const updatedHeight = text.replace(/,/g, '.'); + const isValid = regex.test(updatedHeight) // Ensure there is at most one decimal point if (isValid) { setHeight(text); - const convertedHeight = height ? getConvertedHeight(text, isNonISUCountry) : 0; + const convertedHeight = height ? getConvertedHeight(updatedHeight, isNonISUCountry) : 0; if (convertedHeight < DBHInMeter) { setDiameterLabel(i18next.t('label.measurement_basal_diameter')); } else { @@ -211,9 +214,10 @@ const TreeRemeasurementView = () => { const handleDiameterChange = (text: string) => { setWidthErrorMessage(''); const regex = /^(?!0*(\.0+)?$)(\d+(\.\d+)?|\.\d+)$/; - const isValid = regex.test(text) + const updatedWidth = text.replace(/,/g, '.'); + const isValid = regex.test(updatedWidth) if (isValid) { - setWidth(text); + setWidth(updatedWidth); } else { setWidthErrorMessage('Please provide the correct diameter.') } @@ -273,8 +277,11 @@ const TreeRemeasurementView = () => { } const submitHandler = async (gpsValidated?: boolean) => { - const finalHeight = height || treeDetails.specie_height - const finalWidth = width || treeDetails.specie_diameter + const updatedHeight = height.replace(/,/g, '.'); + const updatedWidth = width.replace(/,/g, '.'); + + const finalHeight = updatedHeight || treeDetails.specie_height + const finalWidth = updatedWidth || treeDetails.specie_diameter const { lat, long } = getUserLocation() const isWithin20m = isWithinRange(lat, long, treeDetails.latitude, treeDetails.longitude) diff --git a/src/utils/helpers/generatePointInPolygon.ts b/src/utils/helpers/generatePointInPolygon.ts index f42aefa6..3e362ee5 100644 --- a/src/utils/helpers/generatePointInPolygon.ts +++ b/src/utils/helpers/generatePointInPolygon.ts @@ -1,6 +1,3 @@ -import seedrandom from 'seedrandom'; - - /** * Generates a random point coordinate within a given polygon. * @@ -8,7 +5,7 @@ import seedrandom from 'seedrandom'; * @param {number} index - An index to differentiate points for polygons with similar coordinates. * @returns {Array} The random point coordinate [longitude, latitude]. */ -export const getRandomPointInPolygon = (polygon, index) => { +export const getRandomPointInPolygon = (polygon) => { // Calculate the bounding box of the polygon const bounds = polygon.reduce( (prev, curr) => { @@ -23,45 +20,39 @@ export const getRandomPointInPolygon = (polygon, index) => { { minLon: Infinity, maxLon: -Infinity, minLat: Infinity, maxLat: -Infinity } ); - // Create a seed based on the polygon's coordinates and the index - const seed = JSON.stringify(polygon) + index; - const rng = seedrandom(seed); - - // Generate a random point within the bounding box - let randomPoint; - let isInPolygon = false; - while (!isInPolygon) { - const lon = bounds.minLon + rng() * (bounds.maxLon - bounds.minLon); - const lat = bounds.minLat + rng() * (bounds.maxLat - bounds.minLat); - randomPoint = [lon, lat]; - - // Check if the random point is within the polygon - isInPolygon = isPointInPolygon(randomPoint, polygon); + // Helper function to check if a point is inside the polygon + const isPointInPolygon = (point, polygon) => { + let inside = false; + for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + const xi = polygon[i][0], yi = polygon[i][1]; + const xj = polygon[j][0], yj = polygon[j][1]; + + const intersect = ((yi > point[1]) !== (yj > point[1])) + && (point[0] < (xj - xi) * (point[1] - yi) / (yj - yi) + xi); + if (intersect) inside = !inside; + } + return inside; + }; + + // Generate random points until we find one inside the polygon + let attempts = 0; + const maxAttempts = 1000; // Prevent infinite loop + + while (attempts < maxAttempts) { + const randomLon = bounds.minLon + Math.random() * (bounds.maxLon - bounds.minLon); + const randomLat = bounds.minLat + Math.random() * (bounds.maxLat - bounds.minLat); + + if (isPointInPolygon([randomLon, randomLat], polygon)) { + return [randomLon, randomLat, 0]; // Adding 0 for elevation to match input format + } + + attempts++; } - - return randomPoint; + + // If we couldn't find a point after max attempts, return center of bounding box + return [ + (bounds.minLon + bounds.maxLon) / 2, + (bounds.minLat + bounds.maxLat) / 2, + 0 + ]; }; - -/** - * Checks if a point is within a given polygon. - * - * @param {Array} point - The point coordinate [longitude, latitude]. - * @param {Array} polygon - An array of coordinate arrays representing the polygon. - * @returns {boolean} True if the point is within the polygon, false otherwise. - */ -function isPointInPolygon(point, polygon) { - const [x, y] = point; - let isInside = false; - - for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - const [x1, y1] = polygon[i]; - const [x2, y2] = polygon[j]; - - const intersect = - y1 > y !== y2 > y && x < ((x2 - x1) * (y - y1)) / (y2 - y1) + x1; - - if (intersect) isInside = !isInside; - } - - return isInside; -} \ No newline at end of file diff --git a/src/utils/helpers/interventionHelper/legacyInventoryIntervention.ts b/src/utils/helpers/interventionHelper/legacyInventoryIntervention.ts index 5ce70f99..dcef7d5b 100644 --- a/src/utils/helpers/interventionHelper/legacyInventoryIntervention.ts +++ b/src/utils/helpers/interventionHelper/legacyInventoryIntervention.ts @@ -200,6 +200,9 @@ const getEntireSiteCheck = (data: any) => { if (typeof publicData === 'object' && publicData !== null && !Array.isArray(publicData)) { for (const key in publicData) { if (key == 'isEntireSite') { // optional: ensure the property is not inherited + if (publicData[key] === 'false' || publicData[key] === false) { + return false + } return true } } From 28315d6e5fbade1a959f0766c9ac369705f8c1aa Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Fri, 20 Dec 2024 12:34:03 +0530 Subject: [PATCH 07/20] Adaptive icon upgraded android --- assets/adaptive-icon.png | Bin 25751 -> 124380 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/adaptive-icon.png b/assets/adaptive-icon.png index f5e556d8a3a75acf6cfaf7cd331fc895d8557df3..b54a2df154976a2b10effe6ae1d1b053b8ac0da8 100644 GIT binary patch literal 124380 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

|>zc#* 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 Date: Tue, 24 Dec 2024 13:26:29 +0530 Subject: [PATCH 08/20] Zip package upgraded to latest --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 426e436e..256d267f 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "react-native-web": "~0.19.10", "react-native-webview": "13.8.6", "react-native-youtube-iframe": "^2.3.0", - "react-native-zip-archive": "^6.1.0", + "react-native-zip-archive": "7.0.1", "react-redux": "^9.1.0", "realm": "^12.11.1", "redux-persist": "^6.0.0", @@ -131,5 +131,6 @@ "@babel/core": "^7.20.2", "babel-loader": "8.3.0" }, - "private": true + "private": true, + "packageManager": "yarn@1.22.19+sha512.ff4579ab459bb25aa7c0ff75b62acebe576f6084b36aa842971cf250a5d8c6cd3bc9420b22ce63c7f93a0857bc6ef29291db39c3e7a23aab5adfd5a4dd6c5d71" } From bcaebf8e5834e99c6c1585edb0c7033cc2e71aad Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 26 Dec 2024 08:57:12 +0530 Subject: [PATCH 09/20] Metadata changes --- .../InterventionMetaData.tsx | 9 +++-- src/screens/InterventionFormView.tsx | 24 +++++++++++- src/screens/InterventionPreviewView.tsx | 37 +++++++++++++++++-- src/utils/helpers/syncHelper.ts | 26 +++++++++++-- 4 files changed, 83 insertions(+), 13 deletions(-) diff --git a/src/components/previewIntervention/InterventionMetaData.tsx b/src/components/previewIntervention/InterventionMetaData.tsx index 0855a830..ea4f727d 100644 --- a/src/components/previewIntervention/InterventionMetaData.tsx +++ b/src/components/previewIntervention/InterventionMetaData.tsx @@ -21,19 +21,20 @@ const InterventionMetaData = (props: Props) => { const convertData = () => { const checkForPublic: { value: string; key: string }[] = []; - if (typeof data === 'string') { const parsedData = JSON.parse(data); - if (parsedData?.public && typeof parsedData.public === 'object' && !Array.isArray(parsedData.public)) { - Object.entries(parsedData.public).forEach(([key, value]) => { + Object.entries(parsedData.public).forEach(([key, value]: [string, { value: string, label: string }]) => { if (key !== 'isEntireSite' && typeof value === 'string') { checkForPublic.push({ value, key }); } + if (key !== 'isEntireSite' && typeof value !== 'string' && value.value && value.label) { + checkForPublic.push({ value: value.value, key: value.label }); + } }); } } - + setAdditionalData(checkForPublic); }; diff --git a/src/screens/InterventionFormView.tsx b/src/screens/InterventionFormView.tsx index 3c7e866e..3a5b93b7 100644 --- a/src/screens/InterventionFormView.tsx +++ b/src/screens/InterventionFormView.tsx @@ -314,10 +314,30 @@ const InterventionFormView = () => { const constructMetaData = (locationName: string, furtherInfo: string) => { const metaData = {}; if (locationName && locationName.length > 0) { - metaData["Location Name"] = locationName; + metaData["location-name"] = { + "key": "location-name", + "originalKey":"location-name", + "value":locationName, + "label":"Location Name", + "type":"input", + "unit":"", + "visibility":"public", + "dataType":"string", + "elementType":"metaData" + }; } if (furtherInfo && furtherInfo.length > 0) { - metaData["Info"] = furtherInfo + metaData["more-info"] = { + "key": "more-info", + "originalKey":"more-info", + "value":furtherInfo, + "label":"More Info", + "type":"input", + "unit":"", + "visibility":"public", + "dataType":"string", + "elementType":"metaData" + }; } return metaData; }; diff --git a/src/screens/InterventionPreviewView.tsx b/src/screens/InterventionPreviewView.tsx index fd1c0769..90ae6ccd 100644 --- a/src/screens/InterventionPreviewView.tsx +++ b/src/screens/InterventionPreviewView.tsx @@ -92,6 +92,9 @@ const InterventionPreviewView = () => { toast.show("Project not assign") } } + function formatString(str) { + return str.toLowerCase().replace(/\s+/g, '-'); + } const setupMetaData = async () => { const localMeta = realm.objects(RealmSchema.Metadata) @@ -100,10 +103,36 @@ const InterventionPreviewView = () => { if (localMeta?.length) { localMeta.forEach(el => { if (el.accessType === 'private') { - updatedMetadata.private = { ...updatedMetadata.private, [el.key]: el.value } + const privateKey = formatString(el.key) + updatedMetadata.private = { + ...updatedMetadata.private, [privateKey]: { + "key":privateKey, + "originalKey": privateKey, + "value": el.value, + "label": el.key, + "type": "input", + "unit": "", + "visibility": "private", + "dataType": "string", + "elementType": "metaData" + } + } } if (el.accessType === 'public') { - updatedMetadata.public = { ...updatedMetadata.public, [el.key]: el.value } + const publicKey = formatString(el.key) + updatedMetadata.public = { + ...updatedMetadata.public, [publicKey]: { + "key": "more-info", + "originalKey": "more-info", + "value": el.value, + "label": "More Info", + "type": "input", + "unit": "", + "visibility": "public", + "dataType": "string", + "elementType": "metaData" + } + } } }) } @@ -209,7 +238,7 @@ const InterventionPreviewView = () => { if (InterventionData.is_complete && InterventionData.status === 'PENDING_DATA_UPLOAD') { return ( - {openEditModal(InterventionData)}}> + { openEditModal(InterventionData) }}> Edit @@ -319,7 +348,7 @@ const styles = StyleSheet.create({ alignItems: 'center', flexDirection: 'row', borderRadius: 10, - marginRight:'5%' + marginRight: '5%' }, editWrapper: { height: 50, diff --git a/src/utils/helpers/syncHelper.ts b/src/utils/helpers/syncHelper.ts index b5fad94e..d1c5ebc3 100644 --- a/src/utils/helpers/syncHelper.ts +++ b/src/utils/helpers/syncHelper.ts @@ -288,7 +288,7 @@ export const convertTreeToBody = (i: InterventionData, d: SampleTree, uType: str } return { pData: postData, message: "", fixRequired: 'NO', error: "" } } catch (error) { - return { pData: null, message: "Unknown error ocurred, please check the data ", fixRequired: 'UNKNOWN', error: JSON.stringify(error) } + return { pData: null, message: "Unknown error occurred, please check the data ", fixRequired: 'UNKNOWN', error: JSON.stringify(error) } } } @@ -298,10 +298,30 @@ const handleAdditionalData = (aData: FormElement[]) => { const publicAdd = {} aData.forEach(el => { if (el.visibility === 'private') { - privateAdd[el.label] = el.value + privateAdd[el.key] = { + "key": el.key, + "originalKey":el.element_id, + "value":el.value, + "label":el.label, + "type":el.type, + "unit":el.unit, + "visibility":"private", + "dataType":el.data_type, + "elementType":"additionalData" + }; } if (el.visibility === 'public') { - publicAdd[el.label] = el.value + publicAdd[el.key] = { + "key": el.key, + "originalKey":el.element_id, + "value":el.value, + "label":el.label, + "type":el.type, + "unit":el.unit, + "visibility":"public", + "dataType":el.data_type, + "elementType":"additionalData" + }; } }) return { privateAdd, publicAdd } From 404fd76e8129e292ee6983fbe28d017f46f0c5a7 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 26 Dec 2024 11:15:16 +0530 Subject: [PATCH 10/20] Meta data key issue fix --- src/screens/InterventionPreviewView.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/screens/InterventionPreviewView.tsx b/src/screens/InterventionPreviewView.tsx index 90ae6ccd..a1159ee3 100644 --- a/src/screens/InterventionPreviewView.tsx +++ b/src/screens/InterventionPreviewView.tsx @@ -122,10 +122,10 @@ const InterventionPreviewView = () => { const publicKey = formatString(el.key) updatedMetadata.public = { ...updatedMetadata.public, [publicKey]: { - "key": "more-info", - "originalKey": "more-info", + "key": publicKey, + "originalKey": publicKey, "value": el.value, - "label": "More Info", + "label": el.key, "type": "input", "unit": "", "visibility": "public", From 91a89f9e29048ad3f43d0c951fbd9f849cf2fa2f Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Thu, 26 Dec 2024 11:44:47 +0530 Subject: [PATCH 11/20] Dropdown condition handled --- .../InterventionMetaData.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/components/previewIntervention/InterventionMetaData.tsx b/src/components/previewIntervention/InterventionMetaData.tsx index ea4f727d..53986ecf 100644 --- a/src/components/previewIntervention/InterventionMetaData.tsx +++ b/src/components/previewIntervention/InterventionMetaData.tsx @@ -18,18 +18,33 @@ const InterventionMetaData = (props: Props) => { convertData() }, [data]) + function isJsonString(str) { + try { + const parsed = JSON.parse(str); + return typeof parsed === 'object' && parsed !== null; + } catch (e) { + return false; + } + } + const convertData = () => { const checkForPublic: { value: string; key: string }[] = []; if (typeof data === 'string') { const parsedData = JSON.parse(data); if (parsedData?.public && typeof parsedData.public === 'object' && !Array.isArray(parsedData.public)) { - Object.entries(parsedData.public).forEach(([key, value]: [string, { value: string, label: string }]) => { + Object.entries(parsedData.public).forEach(([key, value]: [string, { value: string , label: string }]) => { if (key !== 'isEntireSite' && typeof value === 'string') { checkForPublic.push({ value, key }); } if (key !== 'isEntireSite' && typeof value !== 'string' && value.value && value.label) { - checkForPublic.push({ value: value.value, key: value.label }); + if (isJsonString(value.value)) { + const parsedData = JSON.parse(value.value) + if (JSON.parse(value.value)) + checkForPublic.push({ value: parsedData.value, key: value.label }); + } else { + checkForPublic.push({ value: value.value, key: value.label }); + } } }); } From 2920706e8caee1b4c577e2729beba100bbb5b68d Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Sun, 29 Dec 2024 06:57:28 +0530 Subject: [PATCH 12/20] maplibre ios build fix --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 256d267f..7df12d7c 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@expo/metro-runtime": "~3.2.1", "@expo/vector-icons": "^14.0.0", "@gorhom/bottom-sheet": "^4.6.3", - "@maplibre/maplibre-react-native": "10.0.0-alpha.2", + "@maplibre/maplibre-react-native": "10.0.0-alpha.28", "@react-native-async-storage/async-storage": "1.23.1", "@react-native-community/datetimepicker": "8.0.1", "@react-native-community/netinfo": "11.3.1", From a51c797cefd1f3d5c53fbe455ea5a95d10ebed26 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Sun, 29 Dec 2024 06:58:28 +0530 Subject: [PATCH 13/20] patch removed(maplibre old version) --- ...plibre+maplibre-react-native+10.0.0-alpha.2.patch | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 patches/@maplibre+maplibre-react-native+10.0.0-alpha.2.patch diff --git a/patches/@maplibre+maplibre-react-native+10.0.0-alpha.2.patch b/patches/@maplibre+maplibre-react-native+10.0.0-alpha.2.patch deleted file mode 100644 index 7c759130..00000000 --- a/patches/@maplibre+maplibre-react-native+10.0.0-alpha.2.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/node_modules/@maplibre/maplibre-react-native/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java b/node_modules/@maplibre/maplibre-react-native/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java -index 3aa0522..d66f9ff 100644 ---- a/node_modules/@maplibre/maplibre-react-native/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java -+++ b/node_modules/@maplibre/maplibre-react-native/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java -@@ -3,7 +3,6 @@ package com.mapbox.rctmgl.components.styles; - import android.util.Log; - - import com.facebook.react.bridge.Dynamic; --import com.facebook.react.bridge.DynamicFromMap; - import com.facebook.react.bridge.NoSuchKeyException; - import com.facebook.react.bridge.ReadableArray; - import com.facebook.react.bridge.ReadableMap; From d19ab92b68c69f0b33a3ab4c2bf8630ee979af02 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Mon, 30 Dec 2024 12:14:46 +0530 Subject: [PATCH 14/20] app.json updated for ios deployement target --- app.json | 13 +++++++++++-- package.json | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app.json b/app.json index 92a6bf71..fff61d2a 100644 --- a/app.json +++ b/app.json @@ -16,6 +16,14 @@ ], "plugins": [ "@maplibre/maplibre-react-native", + [ + "expo-build-properties", + { + "ios": { + "deploymentTarget": "15.5" + } + } + ], [ "expo-location", { @@ -49,7 +57,8 @@ } ], "expo-localization", - "expo-secure-store" + "expo-secure-store", + "expo-build-properties" ], "ios": { "supportsTablet": true, @@ -88,4 +97,4 @@ ] } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 256d267f..905ee3da 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "d3-shape": "^3.2.0", "expo": "~51.0.21", "expo-application": "~5.9.1", + "expo-build-properties": "~0.12.5", "expo-camera": "~15.0.14", "expo-clipboard": "~6.0.3", "expo-constants": "~16.0.2", From 0568d87eda8737c4c5c415fbef26de5e5f1cedaf Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Mon, 30 Dec 2024 13:42:54 +0530 Subject: [PATCH 15/20] Missing Translations added --- src/components/common/MapAttribution.tsx | 5 +- src/components/common/SpeciesSync.tsx | 2 +- .../intervention/InterventionCard.tsx | 1 - .../map/EditDisplayCurrentPolygonMarker.tsx | 5 +- src/locales/languages/de/index.ts | 7 +- .../languages/de/monitoringPlots/plots.json | 103 ++++++++++++++++++ .../languages/de/user/monitoringPlot.json | 103 ------------------ src/locales/languages/de/user/other.json | 26 +++++ src/locales/languages/en/index.ts | 9 +- .../plots.json} | 0 src/locales/languages/en/user/other.json | 26 +++++ src/locales/languages/es/index.ts | 7 +- .../languages/es/monitoringPlots/plots.json | 103 ++++++++++++++++++ .../languages/es/user/monitoringPlot.json | 103 ------------------ src/locales/languages/es/user/other.json | 26 +++++ src/locales/languages/fr/index.ts | 9 +- .../languages/fr/monitoringPlots/plots.json | 103 ++++++++++++++++++ .../languages/fr/user/monitoringPlot.json | 103 ------------------ src/locales/languages/fr/user/other.json | 26 +++++ src/locales/languages/it/index.ts | 9 +- .../languages/it/monitoringPlots/plots.json | 103 ++++++++++++++++++ src/locales/languages/it/user/other.json | 26 +++++ src/locales/languages/pt-BR/index.ts | 9 +- .../pt-BR/monitoringPlots/plots.json | 103 ++++++++++++++++++ .../languages/pt-BR/user/monitoringPlot.json | 103 ------------------ src/locales/languages/pt-BR/user/other.json | 26 +++++ src/screens/DeleteAccount.tsx | 12 +- src/screens/PlotView.tsx | 4 +- src/screens/SignUpView.tsx | 20 ++-- src/screens/SpeciesSearchView.tsx | 4 +- src/screens/TotalTreesView.tsx | 2 +- 31 files changed, 730 insertions(+), 458 deletions(-) create mode 100644 src/locales/languages/de/monitoringPlots/plots.json delete mode 100644 src/locales/languages/de/user/monitoringPlot.json create mode 100644 src/locales/languages/de/user/other.json rename src/locales/languages/en/{user/monitoringPlot.json => monitoringPlots/plots.json} (100%) create mode 100644 src/locales/languages/en/user/other.json create mode 100644 src/locales/languages/es/monitoringPlots/plots.json delete mode 100644 src/locales/languages/es/user/monitoringPlot.json create mode 100644 src/locales/languages/es/user/other.json create mode 100644 src/locales/languages/fr/monitoringPlots/plots.json delete mode 100644 src/locales/languages/fr/user/monitoringPlot.json create mode 100644 src/locales/languages/fr/user/other.json create mode 100644 src/locales/languages/it/monitoringPlots/plots.json create mode 100644 src/locales/languages/it/user/other.json create mode 100644 src/locales/languages/pt-BR/monitoringPlots/plots.json delete mode 100644 src/locales/languages/pt-BR/user/monitoringPlot.json create mode 100644 src/locales/languages/pt-BR/user/other.json diff --git a/src/components/common/MapAttribution.tsx b/src/components/common/MapAttribution.tsx index a9839151..1de8b901 100644 --- a/src/components/common/MapAttribution.tsx +++ b/src/components/common/MapAttribution.tsx @@ -4,6 +4,7 @@ import InfoIcon from 'assets/images/svg/InfoIcon.svg' import Modal from 'react-native-modal' import { Colors, Typography } from 'src/utils/constants' import CustomButton from './CustomButton' +import i18next from 'src/locales/index' @@ -23,7 +24,7 @@ const MapAttribution = () => { onBackdropPress={toggleInfo}> - Map credits: + {i18next.t('label.map_credits')} Maplibre SDK @@ -32,7 +33,7 @@ const MapAttribution = () => { ESRI - OpenStreetMap Contributors + {i18next.t('label.openstreet_contributors')} { - Species {i18next.t("label.syncing")} + {i18next.t("label.species_caps")}{i18next.t("label.syncing")} ) } diff --git a/src/components/intervention/InterventionCard.tsx b/src/components/intervention/InterventionCard.tsx index 26d8f57c..79322927 100644 --- a/src/components/intervention/InterventionCard.tsx +++ b/src/components/intervention/InterventionCard.tsx @@ -64,7 +64,6 @@ const InterventionCard = (props: Props) => { item={item} overSwipe={OVERSWIPE_DIST} renderUnderlayLeft={() => (swipeableLeftComp())} - renderUnderlayRight={() => Right} snapPointsLeft={item.status=== 'SYNCED'?[100]:[150]} snapPointsRight={[0]} > diff --git a/src/components/map/EditDisplayCurrentPolygonMarker.tsx b/src/components/map/EditDisplayCurrentPolygonMarker.tsx index 2a51ef57..22c3304b 100644 --- a/src/components/map/EditDisplayCurrentPolygonMarker.tsx +++ b/src/components/map/EditDisplayCurrentPolygonMarker.tsx @@ -3,6 +3,7 @@ import React from 'react' import { scaleFont, scaleSize } from 'src/utils/constants/mixins' import { Colors, Typography } from 'src/utils/constants' import BackIcon from 'assets/images/svg/BackIcon.svg' +import i18next from 'i18next' interface Props { @@ -15,8 +16,8 @@ const EditDisplayCurrentPolygonMarker = (props: Props) => { - Corner - Please select the point and drag + {i18next.t("label.corner")} + {i18next.t("label.please_drag_point")} ) diff --git a/src/locales/languages/de/index.ts b/src/locales/languages/de/index.ts index 83944a94..d8fdff8d 100644 --- a/src/locales/languages/de/index.ts +++ b/src/locales/languages/de/index.ts @@ -20,7 +20,8 @@ import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -43,5 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/de/monitoringPlots/plots.json b/src/locales/languages/de/monitoringPlots/plots.json new file mode 100644 index 00000000..c28b87fe --- /dev/null +++ b/src/locales/languages/de/monitoringPlots/plots.json @@ -0,0 +1,103 @@ +{ + "monitoring_plot_header": "Monitoring Plots", + "plot_group": "Plot Gruppe", + "no_plots": "Noch keine Plots zum anzeigen", + "no_plots_note": "Beginne Monitoring Plots hinzuzufügen, /num deinen Fortschritt zu dokumentieren", + "plot_groups_header": "Plot Gruppen", + "no_groups": "Keine Gruppen zum anzeigen", + "no_groups_note": "Klicke die Schaltfläche unten, /num eine Plot Gruppe hinzuzufügen.", + "add_group": "Gruppe hinzufügen", + "add_plot":"Plot hinzufügen", + "edit_group_header": "Plot Gruppe editieren", + "group_name": "Gruppen Name", + "create_group_header": "Plot Gruppe hinzufügen", + "create_group": "Gruppe erstellen", + "create_group_note": "Gruppe erstellen und anfangen /nPlots hinzuzufügen", + "empty_plots_note": "Keine Plots zum Anzeigen./nklicke die Schaltfläche unten, um Plots hinzuzufügen", + "create_plot_header": "Plot anlegen", + "coming_soon": "Bald", + "plot_complexity": "Plot Komplexität", + "standard": "Standart", + "simple": "Einfach", + "plot_shape": "Plot Form", + "rectangular": "Eckig", + "circular": "Rund", + "plot_type": "Plot Typ", + "control": "Kontrolle", + "plot_name": "Plot Name", + "plot_radius": "Plot Radius", + "plot_radius_note": "25 meter oder mehr empfohlen", + "plot_wdith_note": "4 meter oder mehr empfohlen", + "plot_group_input": "Plot Gruppe (Optional)", + "center":"Plot Mittelpunkt", + "plot_map_note_1": "Gehe zum Mittelpunkt des Plots und stelle einen bemalten Pfosten mit Beschriftung auf, ", + "plot_map_note_2": "oder eine andere permanente Markierung", + "select_center":"Mittelpunkt des Plots auswählen", + "reset": "Zurücksetzen", + "create": "Anlegen", + "continue": "Weiter", + "plants": "Planzen", + "ecosystem": "Ökosystem", + "map": "Karte", + "search": "Suche", + "add_plants":"Pflanzen hinzufügen", + "no_search":"Keine Suchergebnisse gefunden", + "no_plants": "Noch keine Pflanzen zum anzeigen", + "no_plant_note": "Klicke die untere Schaltfläche und füge eine neue Pflanze hinzu", + "add_plant": "Pflanzen hinzufügen", + "tree_planted": "Dieser Baum wurde gepflanzt", + "tree_planted_note": "Egal ob dieser Baum gepflanzt wurde, oder ob er natürlich in diesem Plot vorkommt", + "measurement_date": "Vermessungs Datum", + "planting_date": "Pflanzdatum", + "species": "Arten", + "height": "Höhe", + "width":"Breite", + "diameter": "Durchmesser", + "tree_alive": "Dieser Baum ist noch immer am Leben", + "tag": "Tag", + "search_for_species": "Nach Arten suchen", + "species_note": "Starte die Suchen nach Arten /nmit der Sucheingabe.", + "type_three_word": "Schreibe mindestens 3 Wörter für /nbessere Ergebnisse", + "save": "Speichern", + "no_obs": "Keine Beobachtungen zum anzeigen", + "no_obs_note": "Klicke die untere Schaltfläche um /nneue Beobachtungen hinzuzufügen.", + "add_obs": "Beobachtung hinzufügen", + "project": "Projekt", + "obs_date": "Beobachtungsdatum", + "value": "Wert", + "edit_name": "Name editieren", + "edit_plot": "Plot Abmessungen editieren", + "delete": "Löschen", + "update_dimensions": "Abmessungen updaten", + "radius": "Radius", + "plot_length": "Plot Länge", + "plot_width": "Plot Breite", + "plot_width_note": "4 Meter oder mehr empfohlen", + "m_info_h1": "Wie erstelle ich einen Monitoring Plot", + "m_info_n1": "Wir empfehlen mit einem Team aus 2 Personen zu arbeiten. Eine Person nimmt die Maße, die andere Person gibt die Werte in TreeMapper ein. Zusammen sollte es ungefähr 4 Stunden dauern, um einen Plot zu erstellen/n/n Sobald sie erstellt sind, müssen die Plots jedes Jahr um die gleiche Zeit neu vermessen werden. /n/n Für saisonale Trockenwälder ist der Beginn der Regenzeit der ideale Zeitpunkt um Plots zu erstellen. /n", + "m_info_h2": "Was brauche ich für einen standart 25m x 2m Plot?\n", + "m_info_n2": "1. ca. 300 Baum-Tags aus Metall (ca. €30)\n 2. 10 Meter 3mm Draht\n3. Seitenschneider\n4. Zwei 50m Maßbänder\n", + "m_info_h3": "Wie viele Plots brauche ich?\n", + "m_info_n3": "Es sollten 5 Plots plus einen für alle 5 Hektar erstellt werden. Ein Projekt, das 10ha renaturiert, würde 7 Plots haben.\n\n", + "m_info_h4": "Wie wähle ich die Position aus?\n", + "m_info_n4": "Plot Positionen müssen willkürlich gewählt werden, inklusive Plots an den Rändern der Fläche. Darüber musst du dir aber keine Gedanken machen, da TreeMapper optimale Positionen vorschlagen wird.\n\n", + "m_info_h5": "Was sind Kontrollplots?\n", + "m_info_n5": "Kontroll Plots erlauben dir zu verstehen, wie sich deine Fläche entwickelt hätte, wenn keine Bäume von dir gepflanzt worden wären. Daher werden manche Flächen absichtlich nicht bepflanzt und als Kontrollflächen registriert. Dort wird gemessen, was dort natürlich wächst. Ungefähr 5% der Monitoring Plots sollten einen zugehörigen Kontrollplot haben.\n\nDieser Prozess basiert auf XYZ et al. 2022.", + "canopy_cover":"Baumkronendichte", + "soil_moisture":"Bodenfeuchtigkeit", + "bioacoustics":"Bioakustik", + "observations":"Beobachtungen", + "last_updated":"zuletzt aktualisiert", + "intervention_plot":"Interventions Plot", + "control_plot":"Kontrollplot", + "incomplete":"Unvollständig", + "planted":"Gepflanzt", + "recruit":"Natürliches Vorkommen", + "select_species":"Ausgewählte Art", + "how_many_trees":"Wie viele Bäume hast du gepflanzt?", + "plant_tree_count":"Anzahl gepflanzte Bäume", + "existing_count":"Anzahl existierende Bäume", + "name_of_tree":"Name der Baumart", + "shrub_count":"Anzahl Stauden", + "stump_count":"Anzahl Stümpfe" +} \ No newline at end of file diff --git a/src/locales/languages/de/user/monitoringPlot.json b/src/locales/languages/de/user/monitoringPlot.json deleted file mode 100644 index 67d41d07..00000000 --- a/src/locales/languages/de/user/monitoringPlot.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "monitoring_plot_header": "Monitoring Plots", - "plot_group": "Plot Gruppe", - "no_plots": "Noch keine Plots zum anzeigen", - "no_plots_note": "Beginne Monitoring Plots hinzuzufügen, /num deinen Fortschritt zu dokumentieren", - "plot_groups_header": "Plot Gruppen", - "no_groups": "Keine Gruppen zum anzeigen", - "no_groups_note": "Klicke die Schaltfläche unten, /num eine Plot Gruppe hinzuzufügen.", - "add_group": "Gruppe hinzufügen", - "add_plot":"Plot hinzufügen", - "edit_group_header": "Plot Gruppe editieren", - "group_name": "Gruppen Name", - "create_group_header": "Plot Gruppe hinzufügen", - "create_group": "Gruppe erstellen", - "create_group_note": "Gruppe erstellen und anfangen /nPlots hinzuzufügen", - "empty_plots_note": "Keine Plots zum Anzeigen./nklicke die Schaltfläche unten, um Plots hinzuzufügen", - "create_plot_header": "Plot anlegen", - "coming_soon": "Bald", - "plot_complexity": "Plot Komplexität", - "standard": "Standart", - "simple": "Einfach", - "plot_shape": "Plot Form", - "rectangular": "Eckig", - "circular": "Rund", - "plot_type": "Plot Typ", - "control": "Kontrolle", - "plot_name": "Plot Name", - "plot_radius": "Plot Radius", - "plot_radius_note": "25 meter oder mehr empfohlen", - "plot_wdith_note": "4 meter oder mehr empfohlen", - "plot_group_input": "Plot Gruppe (Optional)", - "center":"Plot Mittelpunkt", - "plot_map_note_1": "Gehe zum Mittelpunkt des Plots und stelle einen bemalten Pfosten mit Beschriftung auf, ", - "plot_map_note_2": "oder eine andere permanente Markierung", - "select_center":"Mittelpunkt des Plots auswählen", - "reset": "Zurücksetzen", - "create": "Anlegen", - "continue": "Weiter", - "plants": "Planzen", - "ecosystem": "Ökosystem", - "map": "Karte", - "search": "Suche", - "add_plants":"Pflanzen hinzufügen", - "no_search":"Keine Suchergebnisse gefunden", - "no_plants": "Noch keine Pflanzen zum anzeigen", - "no_plant_note": "Klicke die untere Schaltfläche und füge eine neue Pflanze hinzu", - "add_plant": "Pflanzen hinzufügen", - "tree_planted": "Dieser Baum wurde gepflanzt", - "tree_planted_note": "Egal ob dieser Baum gepflanzt wurde, oder ob er natürlich in diesem Plot vorkommt", - "measurement_date": "Vermessungs Datum", - "planting_date": "Pflanzdatum", - "species": "Arten", - "height": "Höhe", - "width":"Breite", - "diameter": "Durchmesser", - "tree_alive": "Dieser Baum ist noch immer am Leben", - "tag": "Tag", - "search_for_species": "Nach Arten suchen", - "species_note": "Starte die Suchen nach Arten /nmit der Sucheingabe.", - "type_three_word": "Schreibe mindestens 3 Wörter für /nbessere Ergebnisse", - "save": "Speichern", - "no_obs": "Keine Beobachtungen zum anzeigen", - "no_obs_note": "Klicke die untere Schaltfläche um /nneue Beobachtungen hinzuzufügen.", - "add_obs": "Beobachtung hinzufügen", - "project": "Projekt", - "obs_date": "Beobachtungsdatum", - "value": "Wert", - "edit_name": "Name editieren", - "edit_plot": "Plot Abmessungen editieren", - "delete": "Löschen", - "update_dimensions": "Abmessungen updaten", - "radius": "Radius", - "plot_length": "Plot Länge", - "plot_width": "Plot Breite", - "plot_width_note": "4 Meter oder mehr empfohlen", - "m_info_h1": "Wie erstelle ich einen Monitoring Plot", - "m_info_n1": "Wir empfehlen mit einem Team aus 2 Personen zu arbeiten. Eine Person nimmt die Maße, die andere Person gibt die Werte in TreeMapper ein. Zusammen sollte es ungefähr 4 Stunden dauern, um einen Plot zu erstellen/n/n Sobald sie erstellt sind, müssen die Plots jedes Jahr um die gleiche Zeit neu vermessen werden. /n/n Für saisonale Trockenwälder ist der Beginn der Regenzeit der ideale Zeitpunkt um Plots zu erstellen. /n", - "m_info_h2": "Was brauche ich für einen standart 25m x 2m Plot?\n", - "m_info_n2": "1. ca. 300 Baum-Tags aus Metall (ca. €30)\n 2. 10 Meter 3mm Draht\n3. Seitenschneider\n4. Zwei 50m Maßbänder\n", - "m_info_h3": "Wie viele Plots brauche ich?\n", - "m_info_n3": "Es sollten 5 Plots plus einen für alle 5 Hektar erstellt werden. Ein Projekt, das 10ha renaturiert, würde 7 Plots haben.\n\n", - "m_info_h4": "Wie wähle ich die Position aus?\n", - "m_info_n4": "Plot Positionen müssen willkürlich gewählt werden, inklusive Plots an den Rändern der Fläche. Darüber musst du dir aber keine Gedanken machen, da TreeMapper optimale Positionen vorschlagen wird.\n\n", - "m_info_h5": "Was sind Kontrollplots?\n", - "m_info_n5": "Kontroll Plots erlauben dir zu verstehen, wie sich deine Fläche entwickelt hätte, wenn keine Bäume von dir gepflanzt worden wären. Daher werden manche Flächen absichtlich nicht bepflanzt und als Kontrollflächen registriert. Dort wird gemessen, was dort natürlich wächst. Ungefähr 5% der Monitoring Plots sollten einen zugehörigen Kontrollplot haben.\n\nDieser Prozess basiert auf XYZ et al. 2022.", - "canopy_cover":"Baumkronendichte", - "soil_moisture":"Bodenfeuchtigkeit", - "bioacoustics":"Bioakustik", - "observations":"Beobachtungen", - "last_updated":"zuletzt aktualisiert", - "intervention_plot":"Interventions Plot", - "control_plot":"Kontrollplot", - "incomplete":"Unvollständig", - "planted":"Gepflanzt", - "recruit":"Natürliches Vorkommen", - "select_species":"Ausgewählte Art", - "how_many_trees":"Wie viele Bäume hast du gepflanzt?", - "plant_tree_count":"Anzahl gepflanzte Bäume", - "existing_count":"Anzahl existierende Bäume", - "name_of_tree":"Name der Baumart", - "shrub_count":"Anzahl Stauden", - "stump_count":"Anzahl Stümpfe" -} \ No newline at end of file diff --git a/src/locales/languages/de/user/other.json b/src/locales/languages/de/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/de/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/locales/languages/en/index.ts b/src/locales/languages/en/index.ts index a69e257f..d8fdff8d 100644 --- a/src/locales/languages/en/index.ts +++ b/src/locales/languages/en/index.ts @@ -19,9 +19,9 @@ import SpeciesSyncError from './user/speciesSyncError.json'; import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' -import MonitoringPlot from './user/monitoringPlot.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -44,6 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...MonitoringPlot, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/en/user/monitoringPlot.json b/src/locales/languages/en/monitoringPlots/plots.json similarity index 100% rename from src/locales/languages/en/user/monitoringPlot.json rename to src/locales/languages/en/monitoringPlots/plots.json diff --git a/src/locales/languages/en/user/other.json b/src/locales/languages/en/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/en/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/locales/languages/es/index.ts b/src/locales/languages/es/index.ts index 83944a94..d8fdff8d 100644 --- a/src/locales/languages/es/index.ts +++ b/src/locales/languages/es/index.ts @@ -20,7 +20,8 @@ import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -43,5 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/es/monitoringPlots/plots.json b/src/locales/languages/es/monitoringPlots/plots.json new file mode 100644 index 00000000..fef2d029 --- /dev/null +++ b/src/locales/languages/es/monitoringPlots/plots.json @@ -0,0 +1,103 @@ +{ + "monitoring_plot_header": "Parcelas de seguimiento", + "plot_group": "Grupo de trama", + "no_plots": "Aún no hay parcelas para mostrar", + "no_plots_note": "Comience a agregar su parcela de monitoreo para realizar \nun seguimiento de su progreso", + "plot_groups_header": "Grupos de tramas", + "no_groups": "No hay grupos para mostrar", + "no_groups_note": "Toque el botón de abajo para agregar \nun grupo de parcelas", + "add_group": "Añadir grupo", + "add_plot":"Añadir parcela", + "edit_group_header": "Editar grupo de parcelas", + "group_name": "Nombre del grupo", + "create_group_header": "Agregar grupo de parcelas", + "create_group": "Crea un grupo", + "create_group_note": "Crea un grupo y \ncomienza a agregar parcelas", + "empty_plots_note": "No hay parcelas para mostrar \ntoque el botón de abajo para agregar parcelas", + "create_plot_header": "Crear trama", + "coming_soon": "Muy pronto", + "plot_complexity": "Complejidad de la trama", + "standard": "Estándar", + "simple": "Sencilla", + "plot_shape": "Forma de la trama", + "rectangular": "Rectangular", + "circular": "Circular", + "plot_type": "Tipo de trama", + "control": "Control", + "plot_name": "Nombre de la trama", + "plot_radius": "Radio de la parcela", + "plot_radius_note": "Se recomiendan 25 metros o más", + "plot_wdith_note": "Se recomiendan 4 metros o más", + "plot_group_input": "Grupo de tramas (opcional)", + "center":"Centro de la trama", + "plot_map_note_1": "Vaya al centro de la parcela e inserte un poste de varilla de refuerzo pintado etiquetado ", + "plot_map_note_2": "u otra marca etiquetada permanente", + "select_center":"Seleccionar el centro de la trama", + "reset": "Reiniciar", + "create": "Crear", + "continue": "Continuar", + "plants": "Plantas", + "ecosystem": "Ecosistema", + "map": "Mapa", + "search": "Buscar", + "add_plants":"Agregar plantas", + "no_search":"No se encontraron resultados de búsqueda", + "no_plants": "Aún no hay plantas para mostrar", + "no_plant_note": "Toque el botón a continuación para agregar una nueva planta", + "add_plant": "Agregar plantas", + "tree_planted": "Este árbol fue plantado", + "tree_planted_note": "Si el árbol está plantado o es un recluta (que ocurre naturalmente en la parcela)", + "measurement_date": "Fecha de medición", + "planting_date": "Fecha de plantación", + "species": "Especies", + "height": "Height", + "width":"Ancho", + "diameter": "Diámetro", + "tree_alive": "Este árbol todavía está vivo.", + "tag": "etiqueta", + "search_for_species": "Búsqueda de especies", + "species_note": "Comience a buscar especies \nen el campo de búsqueda.", + "type_three_word": "Escriba al menos 3 palabras \npara obtener un mejor resultado", + "save": "Ahorrar", + "no_obs": "No hay ninguna observación para mostrar", + "no_obs_note": "Toque el botón a continuación \npara agregar una nueva observación.", + "add_obs": "Agregar observación", + "project": "Proyecto", + "obs_date": "Fecha de observación", + "value": "Valor", + "edit_name": "Editar nombre", + "edit_plot": "Editar dimensión de la parcela", + "delete": "Borrar", + "update_dimensions": "Actualizar dimensiones", + "radius": "Radio", + "plot_length": "Duración de la trama", + "plot_width": "Ancho de la parcela", + "plot_width_note": "Se recomiendan 4 metros o más", + "m_info_h1": "¿Cómo configuro una parcela de monitoreo?", + "m_info_n1": "Recomendamos trabajar en equipo de dos personas: una persona para medir y otra para registrar en TreeMapper. En conjunto, debería llevarles aproximadamente cuatro horas por parcela.\n\n Una vez instaladas, las parcelas deben volver a medirse en la misma época cada año.\n\nEn bosques estacionalmente secos, el momento ideal para instalar la parcela es al comienzo de la estación húmeda.\n.", + "m_info_h2": "¿Qué necesito para una parcela estándar de 25m por 2m?\n", + "m_info_n2": "1. Aproximadamente 300 etiquetas metálicas para árboles (aproximadamente 30 €)\n 2. 10 metros de alambre de 3 mm\n3. Cortadores de alambre\n4. Dos cintas métricas de 50 m\n", + "m_info_h3": "¿Cuántas parcelas necesito?\n", + "m_info_n3": "Se deben establecer 5 parcelas más 1 por cada 5 hectáreas. Un proyecto de recuperación de 10 ha tendría 7 parcelas.\n\n", + "m_info_h4": "¿Cómo elijo las ubicaciones?\n", + "m_info_n4": "Las ubicaciones de las parcelas deben elegirse al azar, incluidas las parcelas cercanas y en los bordes del sitio. Pero no debe preocuparse por eso, ya que TreeMapper sugiere ubicaciones óptimas para las parcelas.\n\n", + "m_info_h5": " ¿Qué son las parcelas de control?\n", + "m_info_n5": "Las parcelas de control le permiten comprender cómo se habría desarrollado su sitio si no hubiera plantado árboles. Por lo tanto, dejamos algunos sitios 'sin plantar', los registramos como sitios de control y medimos lo que crece allí de forma natural. Alrededor del 5 % de sus parcelas de monitoreo deben tener una parcela de control emparejada.\n\nEste proceso se basa en XYZ et al. 2022.", + "canopy_cover":"Cubierta de dosel", + "soil_moisture":"La humedad del suelo", + "bioacoustics":"Bioacústica", + "observations":"Observaciones", + "last_updated":"última actualización", + "intervention_plot":"trama de intervención", + "control_plot":"parcela de control", + "incomplete":"Incompleta", + "planted":"Plantada", + "recruit":"Recluta", + "select_species":"Seleccionar especies", + "how_many_trees":"¿Cuántos árboles plantaste?", + "plant_tree_count":"Recuento de árboles de plantas", + "existing_count":"Recuento de árboles existentes", + "name_of_tree":"Nombre de la especie de árbol", + "shrub_count":"Recuento de arbustos", + "stump_count":"Recuento de tocones" +} \ No newline at end of file diff --git a/src/locales/languages/es/user/monitoringPlot.json b/src/locales/languages/es/user/monitoringPlot.json deleted file mode 100644 index 4af9ee09..00000000 --- a/src/locales/languages/es/user/monitoringPlot.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "monitoring_plot_header": "Parcelas de seguimiento", - "plot_group": "Grupo de trama", - "no_plots": "Aún no hay parcelas para mostrar", - "no_plots_note": "Comience a agregar su parcela de monitoreo para realizar \nun seguimiento de su progreso", - "plot_groups_header": "Grupos de tramas", - "no_groups": "No hay grupos para mostrar", - "no_groups_note": "Toque el botón de abajo para agregar \nun grupo de parcelas", - "add_group": "Añadir grupo", - "add_plot":"Añadir parcela", - "edit_group_header": "Editar grupo de parcelas", - "group_name": "Nombre del grupo", - "create_group_header": "Agregar grupo de parcelas", - "create_group": "Crea un grupo", - "create_group_note": "Crea un grupo y \ncomienza a agregar parcelas", - "empty_plots_note": "No hay parcelas para mostrar \ntoque el botón de abajo para agregar parcelas", - "create_plot_header": "Crear trama", - "coming_soon": "Muy pronto", - "plot_complexity": "Complejidad de la trama", - "standard": "Estándar", - "simple": "Sencilla", - "plot_shape": "Forma de la trama", - "rectangular": "Rectangular", - "circular": "Circular", - "plot_type": "Tipo de trama", - "control": "Control", - "plot_name": "Nombre de la trama", - "plot_radius": "Radio de la parcela", - "plot_radius_note": "Se recomiendan 25 metros o más", - "plot_wdith_note": "Se recomiendan 4 metros o más", - "plot_group_input": "Grupo de tramas (opcional)", - "center":"Centro de la trama", - "plot_map_note_1": "Vaya al centro de la parcela e inserte un poste de varilla de refuerzo pintado etiquetado ", - "plot_map_note_2": "u otra marca etiquetada permanente", - "select_center":"Seleccionar el centro de la trama", - "reset": "Reiniciar", - "create": "Crear", - "continue": "Continuar", - "plants": "Plantas", - "ecosystem": "Ecosistema", - "map": "Mapa", - "search": "Buscar", - "add_plants":"Agregar plantas", - "no_search":"No se encontraron resultados de búsqueda", - "no_plants": "Aún no hay plantas para mostrar", - "no_plant_note": "Toque el botón a continuación para agregar una nueva planta", - "add_plant": "Agregar plantas", - "tree_planted": "Este árbol fue plantado", - "tree_planted_note": "Si el árbol está plantado o es un recluta (que ocurre naturalmente en la parcela)", - "measurement_date": "Fecha de medición", - "planting_date": "Fecha de plantación", - "species": "Especies", - "height": "Height", - "width":"Ancho", - "diameter": "Diámetro", - "tree_alive": "Este árbol todavía está vivo.", - "tag": "etiqueta", - "search_for_species": "Búsqueda de especies", - "species_note": "Comience a buscar especies \nen el campo de búsqueda.", - "type_three_word": "Escriba al menos 3 palabras \npara obtener un mejor resultado", - "save": "Ahorrar", - "no_obs": "No hay ninguna observación para mostrar", - "no_obs_note": "Toque el botón a continuación \npara agregar una nueva observación.", - "add_obs": "Agregar observación", - "project": "Proyecto", - "obs_date": "Fecha de observación", - "value": "Valor", - "edit_name": "Editar nombre", - "edit_plot": "Editar dimensión de la parcela", - "delete": "Borrar", - "update_dimensions": "Actualizar dimensiones", - "radius": "Radio", - "plot_length": "Duración de la trama", - "plot_width": "Ancho de la parcela", - "plot_width_note": "Se recomiendan 4 metros o más", - "m_info_h1": "¿Cómo configuro una parcela de monitoreo?", - "m_info_n1": "Recomendamos trabajar en equipo de dos personas: una persona para medir y otra para registrar en TreeMapper. En conjunto, debería llevarles aproximadamente cuatro horas por parcela.\n\n Una vez instaladas, las parcelas deben volver a medirse en la misma época cada año.\n\nEn bosques estacionalmente secos, el momento ideal para instalar la parcela es al comienzo de la estación húmeda.\n.", - "m_info_h2": "¿Qué necesito para una parcela estándar de 25m por 2m?\n", - "m_info_n2": "1. Aproximadamente 300 etiquetas metálicas para árboles (aproximadamente 30 €)\n 2. 10 metros de alambre de 3 mm\n3. Cortadores de alambre\n4. Dos cintas métricas de 50 m\n", - "m_info_h3": "¿Cuántas parcelas necesito?\n", - "m_info_n3": "Se deben establecer 5 parcelas más 1 por cada 5 hectáreas. Un proyecto de recuperación de 10 ha tendría 7 parcelas.\n\n", - "m_info_h4": "¿Cómo elijo las ubicaciones?\n", - "m_info_n4": "Las ubicaciones de las parcelas deben elegirse al azar, incluidas las parcelas cercanas y en los bordes del sitio. Pero no debe preocuparse por eso, ya que TreeMapper sugiere ubicaciones óptimas para las parcelas.\n\n", - "m_info_h5": " ¿Qué son las parcelas de control?\n", - "m_info_n5": "Las parcelas de control le permiten comprender cómo se habría desarrollado su sitio si no hubiera plantado árboles. Por lo tanto, dejamos algunos sitios 'sin plantar', los registramos como sitios de control y medimos lo que crece allí de forma natural. Alrededor del 5 % de sus parcelas de monitoreo deben tener una parcela de control emparejada.\n\nEste proceso se basa en XYZ et al. 2022.", - "canopy_cover":"Cubierta de dosel", - "soil_moisture":"La humedad del suelo", - "bioacoustics":"Bioacústica", - "observations":"Observaciones", - "last_updated":"última actualización", - "intervention_plot":"trama de intervención", - "control_plot":"parcela de control", - "incomplete":"Incompleta", - "planted":"Plantada", - "recruit":"Recluta", - "select_species":"Seleccionar especies", - "how_many_trees":"¿Cuántos árboles plantaste?", - "plant_tree_count":"Recuento de árboles de plantas", - "existing_count":"Recuento de árboles existentes", - "name_of_tree":"Nombre de la especie de árbol", - "shrub_count":"Recuento de arbustos", - "stump_count":"Recuento de tocones" -} \ No newline at end of file diff --git a/src/locales/languages/es/user/other.json b/src/locales/languages/es/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/es/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/locales/languages/fr/index.ts b/src/locales/languages/fr/index.ts index a69e257f..d8fdff8d 100644 --- a/src/locales/languages/fr/index.ts +++ b/src/locales/languages/fr/index.ts @@ -19,9 +19,9 @@ import SpeciesSyncError from './user/speciesSyncError.json'; import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' -import MonitoringPlot from './user/monitoringPlot.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -44,6 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...MonitoringPlot, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/fr/monitoringPlots/plots.json b/src/locales/languages/fr/monitoringPlots/plots.json new file mode 100644 index 00000000..8da3d326 --- /dev/null +++ b/src/locales/languages/fr/monitoringPlots/plots.json @@ -0,0 +1,103 @@ +{ + "monitoring_plot_header": "Monitoring Plots", + "plot_group": "Plot Group", + "no_plots": "No Plots to Show Yet", + "no_plots_note": "Start adding your monitoring plot to keep \ntrack of your progress", + "plot_groups_header": "Plot Groups", + "no_groups": "No Groups to Show", + "no_groups_note": "Tap the below button \nto add Plot Group", + "add_group": "Add Group", + "add_plot":"Add Plot", + "edit_group_header": "Edit Plot Group", + "group_name": "Group Name", + "create_group_header": "Add Plot Group", + "create_group": "Create Group", + "create_group_note": "Create Group and start \nadding plots", + "empty_plots_note": "No plots to show \nTap the below button to add plots", + "create_plot_header": "Create Plot", + "coming_soon": "Coming Soon", + "plot_complexity": "Plot Complexity", + "standard": "Standard", + "simple": "Simple", + "plot_shape": "Plot Shape", + "rectangular": "Rectangular", + "circular": "Circular", + "plot_type": "Plot Type", + "control": "Control", + "plot_name": "Plot Name", + "plot_radius": "Plot Radius", + "plot_radius_note": "25 meters or more recommended", + "plot_wdith_note": "4 meters or more recommended", + "plot_group_input": "Plot Group (Optional)", + "center":"Plot Center", + "plot_map_note_1": "Go to the center of the plot and insert a painted rebar post labeled ", + "plot_map_note_2": "or another permanent labeled marking", + "select_center":"Select center of Plot", + "reset": "Reset", + "create": "Create", + "continue": "Continue", + "plants": "Plants", + "ecosystem": "Ecosystem", + "map": "Map", + "search": "Search", + "add_plants":"Add Plants", + "no_search":"No Search result found", + "no_plants": "No Plants to Show Yet", + "no_plant_note": "Tap the button below to add a new plant", + "add_plant": "Add Plants", + "tree_planted": "This tree was planted", + "tree_planted_note": "Whether the tree is planted or if it is a recruit (naturally occurring in the plot)", + "measurement_date": "Measurement Date", + "planting_date": "Planting Date", + "species": "Species", + "height": "Height", + "width":"Width", + "diameter": "Diameter", + "tree_alive": "This tree is still alive", + "tag": "Tag", + "search_for_species": "Search for species", + "species_note": "Start searching for species on \nthe search input.", + "type_three_word": "Type at least 3 words for \n better result", + "save": "Save", + "no_obs": "No Observation to show", + "no_obs_note": "Tap the button bellow to add \nnew observation.", + "add_obs": "Add Observation", + "project": "Project", + "obs_date": "Observation Date", + "value": "Value", + "edit_name": "Edit Name", + "edit_plot": "Edit Plot Dimension", + "delete": "Delete", + "update_dimensions": "Update Dimensions", + "radius": "Radius", + "plot_length": "Plot Length", + "plot_width": "Plot Width", + "plot_width_note": "4 meters or more recommended", + "m_info_h1": "How do I set up a monitoring plot?", + "m_info_n1": "We recommend working in a team of two; one person to measure, one person to record in TreeMapper. Together it should take you about four hours per plot.\n\n Once set up, the plots have to be remeasured at the same time every year.\n\nIn seasonally dry forests, the ideal time to set up the plot is at the beginning of the wet season.\n.", + "m_info_h2": "What do I need for a standard 25m by 2m plot?\n", + "m_info_n2": "1. ca. 300 metal tree-tags (ca. €30)\n 2. 10 meters of 3mm wire\n3. Wire clippers\n4. Two 50m measuring tapes\n", + "m_info_h3": "How many plots do I need?\n", + "m_info_n3": "You should set up 5 plots plus 1 for every 5 hectares. A project restoring 10 ha would have 7 plots.\n\n", + "m_info_h4": "How do I choose the locations?\n", + "m_info_n4": "Plot locations need to be chosen at random, including plots near and at the edge of the site. But you do not need to worry about that, since TreeMapper suggests optimal plot locations.\n\n", + "m_info_h5": " What are control plots?\n", + "m_info_n5": "Control plots allow you to understand how your site would have developed if you had not planted trees. Therefore we purposefully keep a few sites 'unplanted', register them as control sites and measure what naturally grows there. About 5% of your monitoring plots should have a paired control plot.\n\nThis process is based on XYZ et al. 2022.", + "canopy_cover":"Canopy Cover", + "soil_moisture":"Soil Moisture", + "bioacoustics":"Bioacoustics", + "observations":"observations", + "last_updated":"last updated", + "intervention_plot":"intervention plot", + "control_plot":"control_plot", + "incomplete":"Incomplete", + "planted":"Planted", + "recruit":"Recruit", + "select_species":"Select Species", + "how_many_trees":"How many trees did you plant?", + "plant_tree_count":"Plant Tree Count", + "existing_count":"Existing Tree Count", + "name_of_tree":"Name of Tree Species", + "shrub_count":"Shrub count", + "stump_count":"Stump Count" +} \ No newline at end of file diff --git a/src/locales/languages/fr/user/monitoringPlot.json b/src/locales/languages/fr/user/monitoringPlot.json deleted file mode 100644 index 52b95414..00000000 --- a/src/locales/languages/fr/user/monitoringPlot.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "monitoring_plot_header": "Monitoring Plots", - "plot_group": "Plot Group", - "no_plots": "No Plots to Show Yet", - "no_plots_note": "Start adding your monitoring plot to keep \ntrack of your progress", - "plot_groups_header": "Plot Groups", - "no_groups": "No Groups to Show", - "no_groups_note": "Tap the below button \nto add Plot Group", - "add_group": "Add Group", - "add_plot":"Add Plot", - "edit_group_header": "Edit Plot Group", - "group_name": "Group Name", - "create_group_header": "Add Plot Group", - "create_group": "Create Group", - "create_group_note": "Create Group and start \nadding plots", - "empty_plots_note": "No plots to show \nTap the below button to add plots", - "create_plot_header": "Create Plot", - "coming_soon": "Coming Soon", - "plot_complexity": "Plot Complexity", - "standard": "Standard", - "simple": "Simple", - "plot_shape": "Plot Shape", - "rectangular": "Rectangular", - "circular": "Circular", - "plot_type": "Plot Type", - "control": "Control", - "plot_name": "Plot Name", - "plot_radius": "Plot Radius", - "plot_radius_note": "25 meters or more recommended", - "plot_wdith_note": "4 meters or more recommended", - "plot_group_input": "Plot Group (Optional)", - "center":"Plot Center", - "plot_map_note_1": "Go to the center of the plot and insert a painted rebar post labeled ", - "plot_map_note_2": "or another permanent labeled marking", - "select_center":"Select center of Plot", - "reset": "Reset", - "create": "Create", - "continue": "Continue", - "plants": "Plants", - "ecosystem": "Ecosystem", - "map": "Map", - "search": "Search", - "add_plants":"Add Plants", - "no_search":"No Search result found", - "no_plants": "No Plants to Show Yet", - "no_plant_note": "Tap the button below to add a new plant", - "add_plant": "Add Plants", - "tree_planted": "This tree was planted", - "tree_planted_note": "Whether the tree is planted or if it is a recruit (naturally occurring in the plot)", - "measurement_date": "Measurement Date", - "planting_date": "Planting Date", - "species": "Species", - "height": "Height", - "width":"Width", - "diameter": "Diameter", - "tree_alive": "This tree is still alive", - "tag": "Tag", - "search_for_species": "Search for species", - "species_note": "Start searching for species on \nthe search input.", - "type_three_word": "Type at least 3 words for \n better result", - "save": "Save", - "no_obs": "No Observation to show", - "no_obs_note": "Tap the button bellow to add \nnew observation.", - "add_obs": "Add Observation", - "project": "Project", - "obs_date": "Observation Date", - "value": "Value", - "edit_name": "Edit Name", - "edit_plot": "Edit Plot Dimension", - "delete": "Delete", - "update_dimensions": "Update Dimensions", - "radius": "Radius", - "plot_length": "Plot Length", - "plot_width": "Plot Width", - "plot_width_note": "4 meters or more recommended", - "m_info_h1": "How do I set up a monitoring plot?", - "m_info_n1": "We recommend working in a team of two; one person to measure, one person to record in TreeMapper. Together it should take you about four hours per plot.\n\n Once set up, the plots have to be remeasured at the same time every year.\n\nIn seasonally dry forests, the ideal time to set up the plot is at the beginning of the wet season.\n.", - "m_info_h2": "What do I need for a standard 25m by 2m plot?\n", - "m_info_n2": "1. ca. 300 metal tree-tags (ca. €30)\n 2. 10 meters of 3mm wire\n3. Wire clippers\n4. Two 50m measuring tapes\n", - "m_info_h3": "How many plots do I need?\n", - "m_info_n3": "You should set up 5 plots plus 1 for every 5 hectares. A project restoring 10 ha would have 7 plots.\n\n", - "m_info_h4": "How do I choose the locations?\n", - "m_info_n4": "Plot locations need to be chosen at random, including plots near and at the edge of the site. But you do not need to worry about that, since TreeMapper suggests optimal plot locations.\n\n", - "m_info_h5": " What are control plots?\n", - "m_info_n5": "Control plots allow you to understand how your site would have developed if you had not planted trees. Therefore we purposefully keep a few sites 'unplanted', register them as control sites and measure what naturally grows there. About 5% of your monitoring plots should have a paired control plot.\n\nThis process is based on XYZ et al. 2022.", - "canopy_cover":"Canopy Cover", - "soil_moisture":"Soil Moisture", - "bioacoustics":"Bioacoustics", - "observations":"observations", - "last_updated":"last updated", - "intervention_plot":"intervention plot", - "control_plot":"control_plot", - "incomplete":"Incomplete", - "planted":"Planted", - "recruit":"Recruit", - "select_species":"Select Species", - "how_many_trees":"How many trees did you plant?", - "plant_tree_count":"Plant Tree Count", - "existing_count":"Existing Tree Count", - "name_of_tree":"Name of Tree Species", - "shrub_count":"Shrub count", - "stump_count":"Stump Count" -} \ No newline at end of file diff --git a/src/locales/languages/fr/user/other.json b/src/locales/languages/fr/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/fr/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/locales/languages/it/index.ts b/src/locales/languages/it/index.ts index a69e257f..d8fdff8d 100644 --- a/src/locales/languages/it/index.ts +++ b/src/locales/languages/it/index.ts @@ -19,9 +19,9 @@ import SpeciesSyncError from './user/speciesSyncError.json'; import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' -import MonitoringPlot from './user/monitoringPlot.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -44,6 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...MonitoringPlot, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/it/monitoringPlots/plots.json b/src/locales/languages/it/monitoringPlots/plots.json new file mode 100644 index 00000000..8da3d326 --- /dev/null +++ b/src/locales/languages/it/monitoringPlots/plots.json @@ -0,0 +1,103 @@ +{ + "monitoring_plot_header": "Monitoring Plots", + "plot_group": "Plot Group", + "no_plots": "No Plots to Show Yet", + "no_plots_note": "Start adding your monitoring plot to keep \ntrack of your progress", + "plot_groups_header": "Plot Groups", + "no_groups": "No Groups to Show", + "no_groups_note": "Tap the below button \nto add Plot Group", + "add_group": "Add Group", + "add_plot":"Add Plot", + "edit_group_header": "Edit Plot Group", + "group_name": "Group Name", + "create_group_header": "Add Plot Group", + "create_group": "Create Group", + "create_group_note": "Create Group and start \nadding plots", + "empty_plots_note": "No plots to show \nTap the below button to add plots", + "create_plot_header": "Create Plot", + "coming_soon": "Coming Soon", + "plot_complexity": "Plot Complexity", + "standard": "Standard", + "simple": "Simple", + "plot_shape": "Plot Shape", + "rectangular": "Rectangular", + "circular": "Circular", + "plot_type": "Plot Type", + "control": "Control", + "plot_name": "Plot Name", + "plot_radius": "Plot Radius", + "plot_radius_note": "25 meters or more recommended", + "plot_wdith_note": "4 meters or more recommended", + "plot_group_input": "Plot Group (Optional)", + "center":"Plot Center", + "plot_map_note_1": "Go to the center of the plot and insert a painted rebar post labeled ", + "plot_map_note_2": "or another permanent labeled marking", + "select_center":"Select center of Plot", + "reset": "Reset", + "create": "Create", + "continue": "Continue", + "plants": "Plants", + "ecosystem": "Ecosystem", + "map": "Map", + "search": "Search", + "add_plants":"Add Plants", + "no_search":"No Search result found", + "no_plants": "No Plants to Show Yet", + "no_plant_note": "Tap the button below to add a new plant", + "add_plant": "Add Plants", + "tree_planted": "This tree was planted", + "tree_planted_note": "Whether the tree is planted or if it is a recruit (naturally occurring in the plot)", + "measurement_date": "Measurement Date", + "planting_date": "Planting Date", + "species": "Species", + "height": "Height", + "width":"Width", + "diameter": "Diameter", + "tree_alive": "This tree is still alive", + "tag": "Tag", + "search_for_species": "Search for species", + "species_note": "Start searching for species on \nthe search input.", + "type_three_word": "Type at least 3 words for \n better result", + "save": "Save", + "no_obs": "No Observation to show", + "no_obs_note": "Tap the button bellow to add \nnew observation.", + "add_obs": "Add Observation", + "project": "Project", + "obs_date": "Observation Date", + "value": "Value", + "edit_name": "Edit Name", + "edit_plot": "Edit Plot Dimension", + "delete": "Delete", + "update_dimensions": "Update Dimensions", + "radius": "Radius", + "plot_length": "Plot Length", + "plot_width": "Plot Width", + "plot_width_note": "4 meters or more recommended", + "m_info_h1": "How do I set up a monitoring plot?", + "m_info_n1": "We recommend working in a team of two; one person to measure, one person to record in TreeMapper. Together it should take you about four hours per plot.\n\n Once set up, the plots have to be remeasured at the same time every year.\n\nIn seasonally dry forests, the ideal time to set up the plot is at the beginning of the wet season.\n.", + "m_info_h2": "What do I need for a standard 25m by 2m plot?\n", + "m_info_n2": "1. ca. 300 metal tree-tags (ca. €30)\n 2. 10 meters of 3mm wire\n3. Wire clippers\n4. Two 50m measuring tapes\n", + "m_info_h3": "How many plots do I need?\n", + "m_info_n3": "You should set up 5 plots plus 1 for every 5 hectares. A project restoring 10 ha would have 7 plots.\n\n", + "m_info_h4": "How do I choose the locations?\n", + "m_info_n4": "Plot locations need to be chosen at random, including plots near and at the edge of the site. But you do not need to worry about that, since TreeMapper suggests optimal plot locations.\n\n", + "m_info_h5": " What are control plots?\n", + "m_info_n5": "Control plots allow you to understand how your site would have developed if you had not planted trees. Therefore we purposefully keep a few sites 'unplanted', register them as control sites and measure what naturally grows there. About 5% of your monitoring plots should have a paired control plot.\n\nThis process is based on XYZ et al. 2022.", + "canopy_cover":"Canopy Cover", + "soil_moisture":"Soil Moisture", + "bioacoustics":"Bioacoustics", + "observations":"observations", + "last_updated":"last updated", + "intervention_plot":"intervention plot", + "control_plot":"control_plot", + "incomplete":"Incomplete", + "planted":"Planted", + "recruit":"Recruit", + "select_species":"Select Species", + "how_many_trees":"How many trees did you plant?", + "plant_tree_count":"Plant Tree Count", + "existing_count":"Existing Tree Count", + "name_of_tree":"Name of Tree Species", + "shrub_count":"Shrub count", + "stump_count":"Stump Count" +} \ No newline at end of file diff --git a/src/locales/languages/it/user/other.json b/src/locales/languages/it/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/it/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/locales/languages/pt-BR/index.ts b/src/locales/languages/pt-BR/index.ts index a69e257f..d8fdff8d 100644 --- a/src/locales/languages/pt-BR/index.ts +++ b/src/locales/languages/pt-BR/index.ts @@ -19,9 +19,9 @@ import SpeciesSyncError from './user/speciesSyncError.json'; import AdditionalData from './user/additionalData.json'; import Projects from './user/projects.json'; import Intervention from './user/intervention.json' -import MonitoringPlot from './user/monitoringPlot.json' import CommonStrings from './user/commonData.json' - +import Plots from './monitoringPlots/plots.json' +import Other from './user/other.json' export default { ...WelcomeScreen, ...SignUp, @@ -44,6 +44,7 @@ export default { ...AdditionalData, ...Projects, ...Intervention, - ...MonitoringPlot, - ...CommonStrings + ...CommonStrings, + ...Plots, + ...Other }; diff --git a/src/locales/languages/pt-BR/monitoringPlots/plots.json b/src/locales/languages/pt-BR/monitoringPlots/plots.json new file mode 100644 index 00000000..8da3d326 --- /dev/null +++ b/src/locales/languages/pt-BR/monitoringPlots/plots.json @@ -0,0 +1,103 @@ +{ + "monitoring_plot_header": "Monitoring Plots", + "plot_group": "Plot Group", + "no_plots": "No Plots to Show Yet", + "no_plots_note": "Start adding your monitoring plot to keep \ntrack of your progress", + "plot_groups_header": "Plot Groups", + "no_groups": "No Groups to Show", + "no_groups_note": "Tap the below button \nto add Plot Group", + "add_group": "Add Group", + "add_plot":"Add Plot", + "edit_group_header": "Edit Plot Group", + "group_name": "Group Name", + "create_group_header": "Add Plot Group", + "create_group": "Create Group", + "create_group_note": "Create Group and start \nadding plots", + "empty_plots_note": "No plots to show \nTap the below button to add plots", + "create_plot_header": "Create Plot", + "coming_soon": "Coming Soon", + "plot_complexity": "Plot Complexity", + "standard": "Standard", + "simple": "Simple", + "plot_shape": "Plot Shape", + "rectangular": "Rectangular", + "circular": "Circular", + "plot_type": "Plot Type", + "control": "Control", + "plot_name": "Plot Name", + "plot_radius": "Plot Radius", + "plot_radius_note": "25 meters or more recommended", + "plot_wdith_note": "4 meters or more recommended", + "plot_group_input": "Plot Group (Optional)", + "center":"Plot Center", + "plot_map_note_1": "Go to the center of the plot and insert a painted rebar post labeled ", + "plot_map_note_2": "or another permanent labeled marking", + "select_center":"Select center of Plot", + "reset": "Reset", + "create": "Create", + "continue": "Continue", + "plants": "Plants", + "ecosystem": "Ecosystem", + "map": "Map", + "search": "Search", + "add_plants":"Add Plants", + "no_search":"No Search result found", + "no_plants": "No Plants to Show Yet", + "no_plant_note": "Tap the button below to add a new plant", + "add_plant": "Add Plants", + "tree_planted": "This tree was planted", + "tree_planted_note": "Whether the tree is planted or if it is a recruit (naturally occurring in the plot)", + "measurement_date": "Measurement Date", + "planting_date": "Planting Date", + "species": "Species", + "height": "Height", + "width":"Width", + "diameter": "Diameter", + "tree_alive": "This tree is still alive", + "tag": "Tag", + "search_for_species": "Search for species", + "species_note": "Start searching for species on \nthe search input.", + "type_three_word": "Type at least 3 words for \n better result", + "save": "Save", + "no_obs": "No Observation to show", + "no_obs_note": "Tap the button bellow to add \nnew observation.", + "add_obs": "Add Observation", + "project": "Project", + "obs_date": "Observation Date", + "value": "Value", + "edit_name": "Edit Name", + "edit_plot": "Edit Plot Dimension", + "delete": "Delete", + "update_dimensions": "Update Dimensions", + "radius": "Radius", + "plot_length": "Plot Length", + "plot_width": "Plot Width", + "plot_width_note": "4 meters or more recommended", + "m_info_h1": "How do I set up a monitoring plot?", + "m_info_n1": "We recommend working in a team of two; one person to measure, one person to record in TreeMapper. Together it should take you about four hours per plot.\n\n Once set up, the plots have to be remeasured at the same time every year.\n\nIn seasonally dry forests, the ideal time to set up the plot is at the beginning of the wet season.\n.", + "m_info_h2": "What do I need for a standard 25m by 2m plot?\n", + "m_info_n2": "1. ca. 300 metal tree-tags (ca. €30)\n 2. 10 meters of 3mm wire\n3. Wire clippers\n4. Two 50m measuring tapes\n", + "m_info_h3": "How many plots do I need?\n", + "m_info_n3": "You should set up 5 plots plus 1 for every 5 hectares. A project restoring 10 ha would have 7 plots.\n\n", + "m_info_h4": "How do I choose the locations?\n", + "m_info_n4": "Plot locations need to be chosen at random, including plots near and at the edge of the site. But you do not need to worry about that, since TreeMapper suggests optimal plot locations.\n\n", + "m_info_h5": " What are control plots?\n", + "m_info_n5": "Control plots allow you to understand how your site would have developed if you had not planted trees. Therefore we purposefully keep a few sites 'unplanted', register them as control sites and measure what naturally grows there. About 5% of your monitoring plots should have a paired control plot.\n\nThis process is based on XYZ et al. 2022.", + "canopy_cover":"Canopy Cover", + "soil_moisture":"Soil Moisture", + "bioacoustics":"Bioacoustics", + "observations":"observations", + "last_updated":"last updated", + "intervention_plot":"intervention plot", + "control_plot":"control_plot", + "incomplete":"Incomplete", + "planted":"Planted", + "recruit":"Recruit", + "select_species":"Select Species", + "how_many_trees":"How many trees did you plant?", + "plant_tree_count":"Plant Tree Count", + "existing_count":"Existing Tree Count", + "name_of_tree":"Name of Tree Species", + "shrub_count":"Shrub count", + "stump_count":"Stump Count" +} \ No newline at end of file diff --git a/src/locales/languages/pt-BR/user/monitoringPlot.json b/src/locales/languages/pt-BR/user/monitoringPlot.json deleted file mode 100644 index 52b95414..00000000 --- a/src/locales/languages/pt-BR/user/monitoringPlot.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "monitoring_plot_header": "Monitoring Plots", - "plot_group": "Plot Group", - "no_plots": "No Plots to Show Yet", - "no_plots_note": "Start adding your monitoring plot to keep \ntrack of your progress", - "plot_groups_header": "Plot Groups", - "no_groups": "No Groups to Show", - "no_groups_note": "Tap the below button \nto add Plot Group", - "add_group": "Add Group", - "add_plot":"Add Plot", - "edit_group_header": "Edit Plot Group", - "group_name": "Group Name", - "create_group_header": "Add Plot Group", - "create_group": "Create Group", - "create_group_note": "Create Group and start \nadding plots", - "empty_plots_note": "No plots to show \nTap the below button to add plots", - "create_plot_header": "Create Plot", - "coming_soon": "Coming Soon", - "plot_complexity": "Plot Complexity", - "standard": "Standard", - "simple": "Simple", - "plot_shape": "Plot Shape", - "rectangular": "Rectangular", - "circular": "Circular", - "plot_type": "Plot Type", - "control": "Control", - "plot_name": "Plot Name", - "plot_radius": "Plot Radius", - "plot_radius_note": "25 meters or more recommended", - "plot_wdith_note": "4 meters or more recommended", - "plot_group_input": "Plot Group (Optional)", - "center":"Plot Center", - "plot_map_note_1": "Go to the center of the plot and insert a painted rebar post labeled ", - "plot_map_note_2": "or another permanent labeled marking", - "select_center":"Select center of Plot", - "reset": "Reset", - "create": "Create", - "continue": "Continue", - "plants": "Plants", - "ecosystem": "Ecosystem", - "map": "Map", - "search": "Search", - "add_plants":"Add Plants", - "no_search":"No Search result found", - "no_plants": "No Plants to Show Yet", - "no_plant_note": "Tap the button below to add a new plant", - "add_plant": "Add Plants", - "tree_planted": "This tree was planted", - "tree_planted_note": "Whether the tree is planted or if it is a recruit (naturally occurring in the plot)", - "measurement_date": "Measurement Date", - "planting_date": "Planting Date", - "species": "Species", - "height": "Height", - "width":"Width", - "diameter": "Diameter", - "tree_alive": "This tree is still alive", - "tag": "Tag", - "search_for_species": "Search for species", - "species_note": "Start searching for species on \nthe search input.", - "type_three_word": "Type at least 3 words for \n better result", - "save": "Save", - "no_obs": "No Observation to show", - "no_obs_note": "Tap the button bellow to add \nnew observation.", - "add_obs": "Add Observation", - "project": "Project", - "obs_date": "Observation Date", - "value": "Value", - "edit_name": "Edit Name", - "edit_plot": "Edit Plot Dimension", - "delete": "Delete", - "update_dimensions": "Update Dimensions", - "radius": "Radius", - "plot_length": "Plot Length", - "plot_width": "Plot Width", - "plot_width_note": "4 meters or more recommended", - "m_info_h1": "How do I set up a monitoring plot?", - "m_info_n1": "We recommend working in a team of two; one person to measure, one person to record in TreeMapper. Together it should take you about four hours per plot.\n\n Once set up, the plots have to be remeasured at the same time every year.\n\nIn seasonally dry forests, the ideal time to set up the plot is at the beginning of the wet season.\n.", - "m_info_h2": "What do I need for a standard 25m by 2m plot?\n", - "m_info_n2": "1. ca. 300 metal tree-tags (ca. €30)\n 2. 10 meters of 3mm wire\n3. Wire clippers\n4. Two 50m measuring tapes\n", - "m_info_h3": "How many plots do I need?\n", - "m_info_n3": "You should set up 5 plots plus 1 for every 5 hectares. A project restoring 10 ha would have 7 plots.\n\n", - "m_info_h4": "How do I choose the locations?\n", - "m_info_n4": "Plot locations need to be chosen at random, including plots near and at the edge of the site. But you do not need to worry about that, since TreeMapper suggests optimal plot locations.\n\n", - "m_info_h5": " What are control plots?\n", - "m_info_n5": "Control plots allow you to understand how your site would have developed if you had not planted trees. Therefore we purposefully keep a few sites 'unplanted', register them as control sites and measure what naturally grows there. About 5% of your monitoring plots should have a paired control plot.\n\nThis process is based on XYZ et al. 2022.", - "canopy_cover":"Canopy Cover", - "soil_moisture":"Soil Moisture", - "bioacoustics":"Bioacoustics", - "observations":"observations", - "last_updated":"last updated", - "intervention_plot":"intervention plot", - "control_plot":"control_plot", - "incomplete":"Incomplete", - "planted":"Planted", - "recruit":"Recruit", - "select_species":"Select Species", - "how_many_trees":"How many trees did you plant?", - "plant_tree_count":"Plant Tree Count", - "existing_count":"Existing Tree Count", - "name_of_tree":"Name of Tree Species", - "shrub_count":"Shrub count", - "stump_count":"Stump Count" -} \ No newline at end of file diff --git a/src/locales/languages/pt-BR/user/other.json b/src/locales/languages/pt-BR/user/other.json new file mode 100644 index 00000000..f77dd9e8 --- /dev/null +++ b/src/locales/languages/pt-BR/user/other.json @@ -0,0 +1,26 @@ +{ + "map_credits":"map_credits", + "openstreet_contributors":"OpenStreetMap Contributors", + "species_caps":"Species ", + "please_drag_point":"Please select the point and drag", + "corner":"Corner", + "remove_from_list":" removed from list", + "added_to_favorites":"added to favorites", + "removed_from_favorites":"removed from favorites", + "agree_signup":"I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges.", + "agree_2":"I agree to have my name published in the Plant-for-the-Planet Website and App.", + "country_change":"Change Country", + "individual":"Individual", + "company":"Company", + "tree_organisation":"Tree Planting \nOrganisation", + "school":"School", + "acc_type":"Account Type", + "plot_coming_soon":"Monitoring Plots Coming Soon", + "plot_coming_soon_note":"You'll soon be able to monitor and \nmanage your plots with detailed insights.\nStay tuned!", + "delete_acc_header":"To continue with deletion \nPress Delete now.\n", + "click_agree":"By clicking 'Delete', I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again.", + "delete_acc_imp_note":"Before proceeding, make sure you've cancelled all subscriptions.", + "delete_info_note_1":"I also understand that account deletion of", + "delete_info_note_2":" is irreversible.", + "delete_in":"You can Delete in " +} \ No newline at end of file diff --git a/src/screens/DeleteAccount.tsx b/src/screens/DeleteAccount.tsx index d7103e1e..1e09f5c3 100644 --- a/src/screens/DeleteAccount.tsx +++ b/src/screens/DeleteAccount.tsx @@ -20,6 +20,8 @@ import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import { RootStackParamList } from 'src/types/type/navigation.type' import openWebView from 'src/utils/helpers/appHelper/openWebView' +import i18next from 'src/locales/index' + const DeleteAccount = () => { const { email, name } = useSelector((state: RootState) => state.userState) @@ -89,21 +91,21 @@ const DeleteAccount = () => {

- To continue with deletion {'\n'}Press Delete now.{'\n'} + {i18next.t("label.delete_acc_header")} - By clicking "Delete", I am requesting Plant-for-the-Planet to delete all data associated with my Plant-for-the-Planet account. Donation data may be kept for up to eight years. Trees I have registered will not be removed, however, will be anonymized and can't be claimed again. + {i18next.t("label.click_agree")} - Before proceeding, make sure you've cancelled all subscriptions. + {i18next.t('label.delete_acc_imp_note')} {'\n'} - I also understand that account deletion of {email || name} is irreversible. + {i18next.t("label.delete_info_note_1")} {email || name} {i18next.t("label.delete_info_note_2")} 0 ? - You can Delete in {timer} seconds + {i18next.t("label.delete_in")} {timer} seconds : "Delete Now"} containerStyle={styles.btnContainer} pressHandler={handleDelete} diff --git a/src/screens/PlotView.tsx b/src/screens/PlotView.tsx index bd43d337..574caea8 100644 --- a/src/screens/PlotView.tsx +++ b/src/screens/PlotView.tsx @@ -12,8 +12,8 @@ const PlotView = () => {
- Monitoring Plots Coming Soon - You'll soon be able to monitor and {'\n'}manage your plots with detailed insights.{'\n'}Stay tuned! + {i18next.t('label.plot_coming_soon')} + {i18next.t('label.plot_coming_soon_note')} ) diff --git a/src/screens/SignUpView.tsx b/src/screens/SignUpView.tsx index fb75602a..0e27c842 100644 --- a/src/screens/SignUpView.tsx +++ b/src/screens/SignUpView.tsx @@ -7,7 +7,6 @@ import CtaArrow from 'assets/images/svg/CtaArrow.svg' import { AvoidSoftInput, AvoidSoftInputView } from 'react-native-avoid-softinput' import { RouteProp, useNavigation, useRoute } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' -import i18next from 'i18next' import Snackbar from 'react-native-snackbar' import { RootStackParamList } from 'src/types/type/navigation.type' import { handleFilter } from 'src/utils/constants/CountryDataFilter' @@ -26,6 +25,7 @@ import useAuthentication from 'src/hooks/useAuthentication' import useLogManagement from 'src/hooks/realm/useLogManagement' import { useToast } from 'react-native-toast-notifications' import { RootState } from 'src/store' +import i18next from 'i18next' @@ -309,21 +309,21 @@ const SignUpView = () => { style={styles.mainContainer} > - Account Type + {i18next.t("label.acc_type")} setAccountType('individual')}> - Individual + {i18next.t("label.individual")} setAccountType('company')}> - Company - + {i18next.t("label.company")} + setAccountType('tpo')}> - Tree Planting {'\n'}Organisation + {i18next.t("label.tree_organisation")} setAccountType('education')}> - School + {i18next.t("label.school")} { } {country.countryCode ? country.countryName : "Select Country"} - Change country + {i18next.t("label.country_change")} {accountType === 'company' || accountType === 'tpo' || accountType === 'education' ? ( @@ -406,7 +406,7 @@ const SignUpView = () => { ) : null} - I agree to have my name published in the Plant-for-the-Planet Website and App. + {i18next.t("label.agree_2")} { - I agree that I may be contacted by the children and youth organization Plant-for-the-Planet as part of tree planting news and challenges. + {i18next.t("label.agree_signup")} { updateUserFavSpecies(item.guid, status) toast.hideAll(); if (status) { - toast.show("{item.scientificName}" added to favorites, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) + toast.show("{item.scientificName}" {i18next.t("label.added_to_favorites")}, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) } else { - toast.show("{item.scientificName}" removed from favorites, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) + toast.show("{item.scientificName}" {i18next.t("label.removed_from_favorites")}, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) } } diff --git a/src/screens/TotalTreesView.tsx b/src/screens/TotalTreesView.tsx index a6a6a124..a222cf56 100644 --- a/src/screens/TotalTreesView.tsx +++ b/src/screens/TotalTreesView.tsx @@ -121,7 +121,7 @@ const TotalTreesView = () => { toast.show("Error occurred while removing species") errorHaptic() } else { - toast.show("{item.scientificName}" removed from list, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) + toast.show("{item.scientificName}" {i18next.t("label.remove_from_list")}, { style: { backgroundColor: Colors.GRAY_LIGHT }, textStyle: { textAlign: 'center' } }) } } From 0a9f41e77dbebc82b35f193aeb7a92e804cc10ab Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Mon, 30 Dec 2024 13:55:14 +0530 Subject: [PATCH 16/20] Removed Unwanted GPS call --- src/hooks/useLocationPermission.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hooks/useLocationPermission.ts b/src/hooks/useLocationPermission.ts index 00baff7c..498ef4f9 100644 --- a/src/hooks/useLocationPermission.ts +++ b/src/hooks/useLocationPermission.ts @@ -67,7 +67,6 @@ const useLocationPermission = () => { const requestLocationPermission = async () => { - await Location.enableNetworkProviderAsync() await requestForegroundPermissionsAsync() } From 20a08d861f7f28345e99c483a91495dec6d6a426 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Mon, 30 Dec 2024 14:22:41 +0530 Subject: [PATCH 17/20] better error handling --- src/hooks/useLocationPermission.ts | 19 +++++++++++++++---- src/screens/InterventionFormView.tsx | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/hooks/useLocationPermission.ts b/src/hooks/useLocationPermission.ts index 498ef4f9..b6bff495 100644 --- a/src/hooks/useLocationPermission.ts +++ b/src/hooks/useLocationPermission.ts @@ -1,7 +1,7 @@ import { useEffect } from 'react' import * as Location from 'expo-location' import { useDispatch } from 'react-redux'; -import {updateAccuracy, updateUserLocation } from 'src/store/slice/gpsStateSlice'; +import { updateAccuracy, updateUserLocation } from 'src/store/slice/gpsStateSlice'; import useLogManagement from './realm/useLogManagement'; const useLocationPermission = () => { @@ -57,9 +57,10 @@ const useLocationPermission = () => { } catch (error) { addNewLog({ logType: 'LOCATION', - message: JSON.stringify(error), + message: "Last Known location", logLevel: 'error', - statusCode: '' + statusCode: '', + logStack: JSON.stringify(error) }) } } @@ -67,7 +68,17 @@ const useLocationPermission = () => { const requestLocationPermission = async () => { - await requestForegroundPermissionsAsync() + try { + await requestForegroundPermissionsAsync() + } catch (error) { + addNewLog({ + logType: 'LOCATION', + message: "Location Permission", + logLevel: 'error', + statusCode: '', + logStack: JSON.stringify(error) + }) + } } diff --git a/src/screens/InterventionFormView.tsx b/src/screens/InterventionFormView.tsx index 3a5b93b7..84d9c342 100644 --- a/src/screens/InterventionFormView.tsx +++ b/src/screens/InterventionFormView.tsx @@ -133,7 +133,7 @@ const InterventionFormView = () => { const site = ProjectData.sites.find(el => el.id === sid); if (!site?.geometry) return; // Using optional chaining here const parsedGeometry = JSON.parse(site.geometry); - const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0], 1); + const newCoords = getRandomPointInPolygon(parsedGeometry.coordinates[0]); updateBounds(newCoords); } } catch (error) { From d83223e3b464c6a834468f5725d7ab3974a31870 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Tue, 31 Dec 2024 15:49:41 +0530 Subject: [PATCH 18/20] minor fix --- src/locales/languages/de/user/other.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/languages/de/user/other.json b/src/locales/languages/de/user/other.json index f77dd9e8..6e5be212 100644 --- a/src/locales/languages/de/user/other.json +++ b/src/locales/languages/de/user/other.json @@ -1,5 +1,5 @@ { - "map_credits":"map_credits", + "map_credits":"Map Credits", "openstreet_contributors":"OpenStreetMap Contributors", "species_caps":"Species ", "please_drag_point":"Please select the point and drag", From 7c6faa251121315ad6e14f5a111e5431709d7262 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Tue, 31 Dec 2024 15:55:26 +0530 Subject: [PATCH 19/20] build version incremeated --- app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.json b/app.json index fff61d2a..e4269a03 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "TreeMapper", "slug": "treemapper", - "version": "2.0.3", + "version": "2.0.4", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", From 1f5a46931043b195e7d6dac2cb5804d026eb4b98 Mon Sep 17 00:00:00 2001 From: shyambhongle Date: Tue, 31 Dec 2024 17:08:19 +0530 Subject: [PATCH 20/20] Image caching implemented --- src/components/carousel/CarouselItem.tsx | 5 +++-- src/components/common/CountryModal.tsx | 9 +++++---- src/components/manageProject/ProjectList.tsx | 6 +++--- .../previewIntervention/InterventionCoverImage.tsx | 8 ++++---- .../previewIntervention/SampleTreePreviewList.tsx | 5 +++-- src/components/sidebar/SidebarHeader.tsx | 5 +++-- src/components/species/ManageSpeciesCard.tsx | 6 ++++-- src/components/species/SpecieInfoImageSection.tsx | 7 ++++--- src/components/takePicture/ImagePreview.tsx | 4 ++-- src/screens/SignUpView.tsx | 7 ++++--- src/screens/TreeRemeasurementView.tsx | 6 +++--- 11 files changed, 38 insertions(+), 30 deletions(-) diff --git a/src/components/carousel/CarouselItem.tsx b/src/components/carousel/CarouselItem.tsx index 881d2b28..e958b008 100644 --- a/src/components/carousel/CarouselItem.tsx +++ b/src/components/carousel/CarouselItem.tsx @@ -1,4 +1,5 @@ -import { Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native' +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native' +import * as ExpoImage from 'expo-image'; import React from 'react' import { scaleFont } from 'src/utils/constants/mixins' import { Colors, Typography } from 'src/utils/constants' @@ -24,7 +25,7 @@ const CarouselItem = (props: Props) => { onPress(data.intervention_id, data.tree_id) }}> - {hasImage ? : + {hasImage ? : } diff --git a/src/components/common/CountryModal.tsx b/src/components/common/CountryModal.tsx index 6ba62cdd..38d7d3bf 100644 --- a/src/components/common/CountryModal.tsx +++ b/src/components/common/CountryModal.tsx @@ -6,7 +6,6 @@ import { StyleSheet, FlatList, TouchableOpacity, - Image, Platform, } from 'react-native'; @@ -15,6 +14,7 @@ import { Typography, Colors } from 'src/utils/constants' import CountryData from 'src/utils/constants/countryData.json'; import i18next from 'i18next'; import { CountryCode } from 'src/types/interface/slice.interface'; +import * as ExpoImage from 'expo-image'; const cdnUrl = process.env.EXPO_PUBLIC_CDN_URL @@ -31,12 +31,13 @@ interface Props { const Item = ({ title, onPress }: { title: CountryCode, onPress: () => void }) => ( - {title.countryName} @@ -56,7 +57,7 @@ export default function CountryModal(props: Props) { const selectCountry = (data: CountryCode) => { userCountry(data); }; - + const sort = () => { CountryData.sort((a, b) => { if (a.countryName > b.countryName) { diff --git a/src/components/manageProject/ProjectList.tsx b/src/components/manageProject/ProjectList.tsx index f165a632..90bd08d4 100644 --- a/src/components/manageProject/ProjectList.tsx +++ b/src/components/manageProject/ProjectList.tsx @@ -2,7 +2,6 @@ import i18next from 'src/locales/index' import React from 'react' import { FlatList, - Image, StyleSheet, Text, TouchableOpacity, @@ -10,12 +9,12 @@ import { } from 'react-native' import PlantProjectBackdrop from 'assets/images/svg/PlantProjectIcon.svg' import { Colors, Typography } from 'src/utils/constants' - import openWebView from 'src/utils/helpers/appHelper/openWebView' import LargeButton from 'src/components/common/LargeButton' import { useQuery } from '@realm/react' import { RealmSchema } from 'src/types/enum/db.enum' import { handleFilter } from 'src/utils/constants/CountryDataFilter' +import * as ExpoImage from 'expo-image'; interface ProjectListProps { isSelectable?: boolean; @@ -95,11 +94,12 @@ const ProjectItem = ({ isProjectSelected ? { borderColor: Colors.NEW_PRIMARY } : {}, ]}> {item.image && process.env.EXPO_PUBLIC_CDN_URL ? ( - ) : ( diff --git a/src/components/previewIntervention/InterventionCoverImage.tsx b/src/components/previewIntervention/InterventionCoverImage.tsx index 0a423273..b42175df 100644 --- a/src/components/previewIntervention/InterventionCoverImage.tsx +++ b/src/components/previewIntervention/InterventionCoverImage.tsx @@ -1,10 +1,10 @@ -import { Image, StyleSheet, View, TouchableOpacity, Text } from 'react-native' +import { StyleSheet, View, TouchableOpacity, Text } from 'react-native' import React, { useEffect, useState } from 'react' import { scaleSize } from 'src/utils/constants/mixins' import { Colors, Typography } from 'src/utils/constants' import PenIcon from 'assets/images/svg/PenIcon.svg' import BinIcon from 'assets/images/svg/BinIcon.svg' - +import * as ExpoImage from 'expo-image'; import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import { RootStackParamList } from 'src/types/type/navigation.type' @@ -54,7 +54,7 @@ const InterventionCoverImage = (props: Props) => { updateSampleTreeImage(interventionID, treeId, '') } - if(image===''){ + if (image === '') { return null } @@ -69,7 +69,7 @@ const InterventionCoverImage = (props: Props) => { {!treeId && } - + } {uri.length === 0 && {!isCDN && diff --git a/src/components/previewIntervention/SampleTreePreviewList.tsx b/src/components/previewIntervention/SampleTreePreviewList.tsx index 204bc49e..a121b540 100644 --- a/src/components/previewIntervention/SampleTreePreviewList.tsx +++ b/src/components/previewIntervention/SampleTreePreviewList.tsx @@ -1,4 +1,4 @@ -import { Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native' +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native' import React, { useState } from 'react' import { Colors, Typography } from 'src/utils/constants' import { scaleSize } from 'src/utils/constants/mixins' @@ -22,6 +22,7 @@ import { nonISUCountries } from 'src/utils/constants/appConstant' import { INTERVENTION_STATUS } from 'src/types/type/app.type' import { convertMeasurements } from 'src/utils/constants/measurements' import { updateFilePath } from 'src/utils/helpers/fileSystemHelper' +import * as ExpoImage from 'expo-image'; interface Props { sampleTress: SampleTree[] @@ -109,7 +110,7 @@ const SampleTreePreviewList = (props: Props) => { - {uri !== '' && } + {uri !== '' && } {!!details.specie_name && {i18next.t("label.species")} diff --git a/src/components/sidebar/SidebarHeader.tsx b/src/components/sidebar/SidebarHeader.tsx index 2690f60a..4f616889 100644 --- a/src/components/sidebar/SidebarHeader.tsx +++ b/src/components/sidebar/SidebarHeader.tsx @@ -1,4 +1,4 @@ -import { Image, Pressable, StyleSheet, Text, TouchableOpacity, View } from 'react-native' +import { Pressable, StyleSheet, Text, TouchableOpacity, View } from 'react-native' import React, { useState } from 'react' import { useSelector } from 'react-redux' import { RootState } from 'src/store' @@ -9,6 +9,7 @@ import { Skeleton } from 'moti/skeleton' import ProfileEditIcon from 'assets/images/svg/ProfileEdit.svg' import openWebView from 'src/utils/helpers/appHelper/openWebView' import Popover from 'react-native-popover-view' +import * as ExpoImage from 'expo-image'; @@ -59,7 +60,7 @@ const SidebarHeader = () => { {image ? ( - + ) : ( )} diff --git a/src/components/species/ManageSpeciesCard.tsx b/src/components/species/ManageSpeciesCard.tsx index bd275d8c..86939f02 100644 --- a/src/components/species/ManageSpeciesCard.tsx +++ b/src/components/species/ManageSpeciesCard.tsx @@ -1,6 +1,6 @@ import React from 'react' import i18next from 'src/locales/index' -import { StyleSheet, Text, TouchableOpacity, View, Image } from 'react-native' +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native' import { Typography, Colors } from 'src/utils/constants' import SingleTreeIcon from 'assets/images/svg/RoundTreeIcon.svg' import PinkHeart from 'assets/images/svg/PinkHeart.svg' @@ -9,6 +9,7 @@ import { SCALE_30 } from 'src/utils/constants/spacing' import { scaleSize } from 'src/utils/constants/mixins' import { PlantedSpecies } from 'src/types/interface/slice.interface' import { IScientificSpecies } from 'src/types/interface/app.interface' +import * as ExpoImage from 'expo-image'; interface SpecieCardProps { item: PlantedSpecies | IScientificSpecies @@ -46,7 +47,8 @@ export const SpecieCard: React.FC = ({ onPress={handlePress}> {item.image ? ( - { ) : ( - diff --git a/src/components/takePicture/ImagePreview.tsx b/src/components/takePicture/ImagePreview.tsx index 9f36eb1a..bb1bd424 100644 --- a/src/components/takePicture/ImagePreview.tsx +++ b/src/components/takePicture/ImagePreview.tsx @@ -2,7 +2,7 @@ import { StyleSheet, View } from 'react-native' import React from 'react' import { CameraCapturedPicture } from 'expo-camera' import CustomButton from 'src/components/common/CustomButton' -import { Image } from 'expo-image' +import * as ExpoImage from 'expo-image'; import { Colors } from 'src/utils/constants' import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' @@ -61,7 +61,7 @@ const ImagePreview = (props: Props) => { return ( - { Country { setModalVisible(!modalVisible) }}> {!!country?.countryCode && - } diff --git a/src/screens/TreeRemeasurementView.tsx b/src/screens/TreeRemeasurementView.tsx index 8002bd6d..c96983b3 100644 --- a/src/screens/TreeRemeasurementView.tsx +++ b/src/screens/TreeRemeasurementView.tsx @@ -1,4 +1,4 @@ -import { Image, ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native' +import {ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native' import React, { useEffect, useState } from 'react' import { SafeAreaView } from 'react-native-safe-area-context' import { Colors, Typography } from 'src/utils/constants' @@ -33,7 +33,7 @@ import DeleteModal from 'src/components/common/DeleteModal' import getUserLocation from 'src/utils/helpers/getUserLocation' import { point } from '@turf/helpers'; import distance from '@turf/distance'; - +import * as ExpoImage from 'expo-image' const PredefineReasons: Array<{ label: string @@ -397,7 +397,7 @@ const TreeRemeasurementView = () => { /> {isAlive ? <> {!!imageUri && -