From cbd0ab42000ac12b5fd6f784554b3dc7620e2a13 Mon Sep 17 00:00:00 2001 From: Nick Cherry Date: Sun, 28 Jan 2024 16:14:34 -0500 Subject: [PATCH 1/5] add groundwork for mobile auth --- mobile/.eslintrc.js | 2 +- mobile/bun.lockb | Bin 441921 -> 460387 bytes mobile/package.json | 4 +- mobile/src/components/app/App.tsx | 5 +- .../src/components/navigation/Navigator.tsx | 46 ++++++++----- mobile/src/contexts/AuthProvider.tsx | 62 ++++++++++++++++++ mobile/src/index.ts | 2 + mobile/src/screens/LandingScreen.tsx | 36 ++++++++++ mobile/src/types/navigation.ts | 1 + mobile/tailwind.config.js | 6 +- web/.eslintrc.js | 18 ++--- web/bun.lockb | Bin 204826 -> 204824 bytes web/package.json | 2 +- web/src/components/logout/Logout.tsx | 5 +- web/tailwind.config.ts | 6 +- 15 files changed, 160 insertions(+), 35 deletions(-) create mode 100644 mobile/src/contexts/AuthProvider.tsx create mode 100644 mobile/src/screens/LandingScreen.tsx diff --git a/mobile/.eslintrc.js b/mobile/.eslintrc.js index aeeac74..c6e8c06 100644 --- a/mobile/.eslintrc.js +++ b/mobile/.eslintrc.js @@ -18,7 +18,7 @@ module.exports = { 'react/react-in-jsx-scope': 'off', 'simple-import-sort/exports': 'error', 'simple-import-sort/imports': 'error', - 'tailwindcss/no-custom-classname': 'error', + 'tailwindcss/no-custom-classname': 'off', 'unused-imports/no-unused-imports': 'error', }, }; diff --git a/mobile/bun.lockb b/mobile/bun.lockb index c317af6859db7cd84e4f00f52fb93e7ec34df00b..a9c1f6b2de81d9b77c6c38ef31bf0069e4a3a119 100755 GIT binary patch delta 98104 zcmeFad3aStqQ1L#U`v)50VjxpfCCUTB8nyuNI<3p0cB1E)Bu5O$N)*eL>m(o6;u>m zVu2WOhD4)+6R0>3pyE7$8YiSBXjEElK}GNTt*VXbzINYpe$VfD?mz5f^40fNt(vP= zt(8rmXMa0#+coW%oRoC`Q)9Xgzj*u0mt-Xk9-Vw$yJJ7SV$_W2gruvxKeFf0bIO*y z6KN6B=j`hzbgW!5uz6rYp*eG-v!>>jmOUE|g^mb?s_M|g(96(+(2~5|sb!>nK4N{x z141DWUXfceqZIxuUg;`&rWPs7N1VTn(hh{5PC?Q|__pZ9Xv<0hcag9Sx)g1N=9Ny( zEy$ggH?<%-H%dkiQi=-tfnP1rzT}dCUX3cl3sgFvy^b$%6)Z)S?-nl7^)vC(6!cKE zGg_&Z1}#gDmi8c5WqcSB(y&VyD`3IFwgR(DiVLHqd7<3W+}SGlM_Q)zk5hY9aB6;T z!7TWNtwSL$smjkSO`cwmJEJdNJ(NMMRDqtYLtTOk-T^4$ND`=PiVq2ejzoVa!}jP- zzfD}*$`2`q1Xc42=BU)rxr~n5Up%E};78!esH!Z#qR% zRp$(+DX6M@EUJNymgbg}twL6z+9G)d!pGG6ulPu=w-7pY$VY1}U)Ui~qO zd^)28P<&<8%u=Qh4bScr3MCS82(c>oSG>A+fYZaMJbhEO*^S>?ygDd0L7s!FgC28g zP^BM!oSjH3oGw9wagQcPi>6l=hhh^UHsIGBZ+oN--Juo_bQhk2%Kz+maaWsBtmUNz zxuyA`KPOmhqQ-h8kMx=WQ%Z8D=CKNNCY6++%zo86W)ff_L#I{k8y7aZ~w(E{M z!4}xrRpf8YZMs>gDwc(6gzr7k78I*ML$grmXn23(m49wgX$jDpnc5cz59$MV~jX8r5v z;h{?Hb#u$21*M^@0gOpiZB{76m{b)Evo${Q%utB2tJ;HC#fA@OA)=j8rTZ4%5{*sy zPw}e2bEpblhaQNIL^WX3DTm2em5QEJNuUh@74S_T8}U5Kq^Vko9*16n>cT@uheD^I z(`)4zxLEnh~BQ6Kh8GryYY5NH=&ivpqhX(yow7{ zk$hBBF2iMX4H+n18~jOVE?zBfOtlq!9_^0r1K0I8hBJgdBZNW=uH~g(mFLFE!RZ9*>mHr`2PxPnLL!nOSTc~>K2DpakKD@g4T2wuk zizcJLagi!|3SK?(ejfc#WvUJWsD)cepsxJ;Y1Ti7D&uNY8J3`G`53e#nuIFDwOpr` zhw*B_$JA2k??=^R3s9vSR$%k}6g>(*rjiJ?B%fcp;6%JKia7n8ep3ZXXqj3%992cT zI9=?nOF@;-2lQ`0bUDh(ts0JwKrf-Wnxt*#+FfNnDj!!e*YEBfU3uR;yBif3P0b7O zxu7I>_UwvK=uWtHmpd-7llp*iJDGRmwffj>3!*df%a)N&`IY49{1OV4l@>&&kWcIe znO8cyBwCmoN+VC@S5!PLFL_$DwuP@lmBsDOm!j%}nrp1Shd&fwmRAzo zKdKkoKFgh2T*9szx)Of`@h_8313tYpZ(d$eng4W4?~K#0vuVo;XEUEUZeD9QpsPr$ z$q+kyr7f}5uO(i5ioH{XdSCA!c+k<6hu>hcUdm+$5nY9UE==2Dvn0Zb?Bmyz-e_G&?$*3`)y#%jR+(@s`?jd3njxqa~$fzuW67 zt9~L7WEdPCibJ_mr{>KrD-C^klPz!w-L5_>P}8YUfw6uns_QNfhK1wwGMoMdRP!jW zq@=hcIj_86xh;5RX>vtwVL^z~`fSzp)SHz)jh1nNYCPR(^A*#~H z%2{Sq5@5x7gIPbIbCRXXRB~h*zpYRMnn}sz0+)<#s`SbZS0VbAB#Y|Gsvs z&3)xcoBnNP+wr9P_o*`WHhV`s`cAvc{&q(&yDO{e322=>f_6i%L%X0wXlHZ~+8u50 z;=jAyZpSa7N$^`yT~~%G-5`{Gt7;7u>5LAmu@x`PE1ah@&cB{P{CNi-GpxGSCRv0Y z#w8b_ny$sDdNvO|5WVR>%cm63a6Ykv`JV@J|BHi9_hLIsz2Eb|wz;J=C#R zQ!llz-5Q&DsXgTHn`pN?9-DB5rM57wQH5?IUIWqcA$$E^e|f7Ol?S=2!Y+1RZm@}k zj(x;dy)CMyOsOc-K{NE>gLacCrZ(;2WqF0OwWSu%4kjtXn|whj&Ajq4TWb&1N-ms5 zqS>L)=ymp1P?%dXi`}v^6g%?%@~E8;AE6r7SJBq!`Rryo(4?Xou4A6C=}OB=islwl zIrxe2g5nvoqGe?j|Nc~3`=o71Y}v$~Qs09g#O<(ZQxM>!iXKiz)3r~}ogJ$8KX2W( zGWHBQEw^H(+8-sAhWOtfZcly27885O-Gx`bbw@RNyW;G1P$Nd64h) zQkHC4N$#g`T{p9|xM+H`pfd0K=WGVCE%FV#rsvG!D3^so*S=^w^kP)~Rpj&>RC8~d z(^Xuj{<|DK28}Wp`c%Da*H`SGIn~7ndq(I?9`85W4$mu^$9=ar^blS>Fu*13gsMVs z$Jv2fh^obZL)DV&!uB{+;SV^ZZDs9dyHpAp3qDWcwWhx%Udv{?-{#P^(W-ZCst+A~%Vt|um{&3*?-Z7Y<0Id* zqcNRx$sBSk$(viMj9a~LtMev$5V^Mhz;|cLq+se^fY~wyg)fsHz zLF{9cqOqQWsxxApkb&0}W+nxj!_jyR%^~PP=pV1z(m(#l-rJ_;7UmU1FU;Eo4~CQm zE1i4%;(?m6(=8yce0H%)Uhs*XEU_cR?72l1Q#n*!1lO2PpAsyR(7~VCjN+WeUYz{& zsqOTgs5*5f*QsHn(RRB2UseH&(=CI%;a}JbW7FVO|JlRZ4v5{cR&TTInvqAl>A>Z9 zRXg^g;Y$1=_z&vsn3fk7oT7@};3pp5v9kA9wz9K>M@#76?HIS(VSD9G;uE-fD_)g; z4zJ#t(cpTG^xC1iqDP|bQKkF$d|JZQ*rKnk4y4i4vT|SV#(JZV>&@rBvBTUQui@^5 zYKqo2+JXzGoyM7>An&wqZ3AvZRq!RK=KM<1$+zM<72NQht?2ux;y?Xf&j~z?t|gER zc!UVems$U?OL;H-rGER`Y3&cTpl5!xo7tVHT7DVY37vtqM@OQG=&9&YXd0xlt-8os~VZsz59&8H1}Y}ZdKwgdZ||M?MZD-Ze2_Co~Kz_i?J+w%ur z(>M0sPxmIR<;34@x_tDoCh^nq3WyDHaxVDb(uOmt~;nlk0lH4GD?C_CSYkT7+KdW8G%G2V* z!CZOVUHt`KLosD;w4f|nR9eijL0ilw&sOzmRCDSb(y6ouxlW$Bm7iB03f+u90$se7tHyx}Y}W4hrJWshV0+F}n=J%e|7kqN$;R;%ULVtT9}mPAyNc1#wUa z_V(D0IxTlbFbq=*ii_yd&~+57?)dRwTkv*&Kw{gTv z#+Lr?r_p~ug%(Ap=IJ@^VoKM9JnvB3J*Bobl~pr%M9rU55Xu8+PE0~IQ@=UPHfzA) z;eh9sRuoO;Kr)(m_2<-F{x3f-bmtK^-ELIPD=jSvhTq3)jbDnY;4)PCPjfs6ZK<`I z=@O))%6MR+O&HsyGF^eaP)+s=ii>7x!gP21$0NhR8gGwR0ssDZ5Zj$v5U+d5+_}1q zG9Demp~HItVk5o)pcdqz9nrl<+lqYWGzYF3vf1~J>RS1aUuI`#>q)Jh>v~eFv9T@rId(=3f9#ELteMkzF_1jHsB~P|Hv6fh za4;HY;15-4?oGvc-R-b9psLkz#2<~ant~f*;)wyTtZGI;>+pS48N7n3{dXqY`LYz% za9)jST3mo?_}7q5>;KLZ!oe22hbHR!&wJSZjQwrob-eh_lkKRU+SBIuA-=Wd-HQY? zANrnRFT5YG9+^|30|1+-8<-BK+6)dwRguTZSQROrTQ-eH_|U{&;ozQ<<+L}diO=D! ztbzw;H2H%3+_KJa9SIIY6DkSZMMmm@dC|N=4OHxpGrUI$g1J+oK?Z$NY|nH|wH4`% z*8rd7_+iffe!9&skE3Tv>7V)K=9MOEit$GpyF#NE9EW7Zbc zlwN~s2#SbTPvy>@5u|^df)4aIw?CnBM278?XHd17NBbh>{HWu;(`rYGjk>>I;Idkc0HvIp6OdSRBwV17;pnhkHmRls|A6}(}v_0x){mX+{oDR-vw4TUZlVh4E!dL-$d zBE2TZZK$U6<>*nNvHUGCGaQ@{E&^zF%tF-@v76z)zl*ph%MM=b9mHtTt7m$l%J`Fh z{^+B-RK7XF;`c_{dUig`4#gt8#{MQ$?S2%l_DsV|=bUZZ`FB*4ZAS6zV6%H0uSxp? z=`^&RMq7VBUURU}@ngmW`Bqll4p2cCqblfm7QQa*INpxjbiI<{25`$*8{ZLCMh}xt zBYWKhJ7+p&+lp-_UKMPOSO5G$yz=`eD!u?!Id^dVAzGgAb3w5F0qXfOr&EFi+%`~+ z%*m))dK9WjdJw7#a62x^n~_)kEBUCP*xv-d#j9aoq8hNrP*r>ts){W}TWNV-<`NXT z1mjUvWT+CL&zxr~cp6@3%I4@%=r?qsDir&R%cBgX3aoKzP^Djls)2uVeAN^?BrT_g zLzSAV?OlQ#RQ`x*_QEn$HU7l;iacBMk5IMfEvNKAX&$!lf10PNVC$Y|?;WwX+eABi4;_)ZpsQ8+ETBDl;Q9q+p;uNHT`VKH_7LHnD<7nGhTh^gQGh1 zd1zVZ%=VSF-`tVYro-BkE^3$dOZ3XI(?@T+XV#5V9vFZ5XBStVpSb3oepj5eam}*f z*^3_N)p}5`B$KkC#bZyjKkMa>rcKH8p6h?~(aS&nto(_?8(vs(@{7AKjX%C%L$lIt zL*6}Z_3jpJuWYxd%hTI>KC>)x*{fL#=Kb^ROP_kZg}HcLkDY&9bli{yzdYVzO6BRP zX$Rc-)?-B*w@p1Te8&gjoRI@Np7>(YR~>r)v+SUj75??>J{mRQ{XLKNpFQdB_j+Gn z&}s6SqZ6jDI;8xtIo-$H^7RK_|9;@8rbo&Ma@?LTVq%cXN)nY6pZ>dNv1>o%O%IDhcU zyRSR&(^J*54`^R9_K9X@<_klI~rb{KKhg7JGv%R zy)@~BtFHL;{s)T29JKcHTk?+`e$tNC4}J3Xi{<@R`CCriTzbvJ=MR7KhL^5A^3};n zcYSkH=VxC0Y3&i;{q{iH73swdE03=_@dST+zh58Pk$zhyilXn~m)Cnw< zeV?P?T1XQoX6*XL-oN zi0gESKXYWdw}`c>RyFh2j7W)mg3Iw6&rI`D*qk&R;h>)L{peX4;Wd5@zZ?99vogGV zZagOi@eEh^CO>+1M&xZ+55MuOv`7M5(wRXhn^3A>I3&$mNl1f2#fGKO={2J=ymODR zRS%1KckFW-#J}S-=n;R-@D%Sj_K~x33_8=J45#klx}hnNT3o81d_&)O0{sI_W8#i! z=hu!&kDJua-#I4T+s>E`w;9l*Jrn(zW7EUS{F<>D;qUzhe%Jd+<1*q7KgypuF5Mf- zrhj6Pn!+Osaee*9F=^o!{G{<2ai_HRXO2$~U+dS5&j|nIH-Jv>;CG*p9=^(tPRIzq z>DNri@DAhFZ|9`u@Nk?O5H`E|hEwBlY8>;sAl0wQ&WLN@(chV!9?9n1euiH+HZ5{9 zp*+8k&>sP#__zx@`8#vc!}s|~=VZhsclKwVlkQb@w#%VeFjBAh4d-NdNymgjLsXdh zE>esesL=>NbPwn#A5 zf5d5yvX+LVcqb>>KY%wgYx>c_IK{Cj-V2OYNU*oWMY{Xlho*ZO+`$F|<23WV1-MMy zfm(3h$G8j}HDR`OIl-3N++Q;&B{B^cw8*O=q$w5hcb%Ey{e&Bavm00jv!}p1@_Pi= z57)|{b7rvWr)5M=Ob&%6_{js)!k76;c^Tmiel#z``yQ%#1bq;fdXm30FW6(JXGA_@ zy^Zo4^U@+cd#DOr8mT5U$gi8278y=!Q~k!VY2H5w^&*P{{GOBP7RuGKi}QC4VmI#R z@0^kDtpuv(tR@!2*Zut3iRp1k>3(f~dgK{8INL8ApB8CH7fkdU36&C>rUl@ALr61% z5nzpWVYO);26HcNQh&eu%=B=hADx-ujbpdh00c{vyF|mxjPSdD(yWZQE@${NXQf99 z*#^(`lP9D_UL`a{A+OCqJ8$EB=49N2f&R>b^zbcyO+kh?m;o##zmUIXLQ42GKdCUo z>%;g>-&e+Mehutnm>bqiS$0`?cj5St>7!xYNpQTH9oK)T-@Q0J ze1{(`&WLN3>DLygcU!=ioJU&i`rHgd2PnX24qV5$i|)!8-p8MIvH#{7?Y!TC>J_?t zPiph5P-vcCm!B4Sk5GlWGp>A?zjJna+<-Iv?sL+;$Ic9eW(LW%nH4iGMSk*}G_Rh} z#W5b2H^T2;lJ4C(!VahHhWGrM5;mHVyvQOUbN9B?c#Q4$ITKPM58=+GRehVE#e58^ zF`v-ILFiXPvxCqq7NL#(fKZuV=l5+sidy-Fmjr=xgH(e@heB5bGvif47g{zZsP4Rs zaK3!p$z%PQ^U@=ijSaG))jt!uLK|9mm7jD$Mx^U_^#}7b(sF{Pmo~WRgo=WU-z7xG zOu3QSvC2I~XnIiCaXCS*p~$&Iy`A4wn(Sz)!A7i~K@pW{`T?#GvPi{g6;` z5SukAmcs_W;lhl_36n#ig~4|F5TQ$gG`-G^m3K3ttActR$KVGIj9f#gB*_2weWBUs z$6~h-qP4X9++1BtyCXXYE$|yJOp6pu35BNkb!B~<6QGhrrZR9-gJM?@vSZLBi?V)PC~!eVb1Yh5TT7-cG0}NY-jbC^RETHjfaDntVyf_Q=Tm zSP_pCDi2~$iH1Vw2Rq0OgqW#RDxT>$+fTkAEmBU%wst2Wsz>bjS+NQ9E+IR&^(BYm zU@U(jloN!;uv}?3qxFHGv>+pLMp0};*V@pHeVZ4nYAWa&LR0+0zX!A`=r3z!;fCEb>3&K2HoQ?`7p6L?3Q4bEh!0wZVg&`QYn8g z3qrpU%JA!krNwod>(9KBBh*~G!*dEMOz~cFj(wfIyZJo(7x$3gb3uyN3uiZ!U2LxT zF0O?(SMNz2OJ7^w;FL)73%Jg&lCvoG{#UcRhHEn7nqA~~Uz{G7d6B=9!_iv5W-;gDzr_lqx?U#E zW=dru7vng1u~$7qNKNGC$6op)?qt94`o7KQ>-MAsa|r3e;J)Uq`WLqYr#9KRo)~lK8$Y>lKi`H^E)5i z=#3eX#09~gupljN+*#)He zk#S>eRcb=d$Ehyipt~Nysr2CR?;W-@)_H1kCeEhh6y;UnY!A#K?x}ro>Vbc{IP&BW za}!lDb^XG9;|Zx6_CR%)a}+fy#rqOxJB__D(#g2NP>s`~vMIm8sqWTwxy827o{I0l zjocUaJx)CqJjX`5R8#k0M?9C1>S1@NTg7p~1oqy?x!l=>THmT?Le^p2=v)2ngVVih z0jgMwU<3OJr|zXH%&4v__clA(g0#p#3EAWYt3#nn{p1IkD1^pPgM)&JGOot9-qV1G zeZOW+hW9c|9mcAn)!|y(<-z2MOR4o|u1)t=J816@pWxKrEJ}9$Bkr}GW?d#u-P_#k zYR|@uI~x~Ty2hG8!DW;acjSG3_lMKHbMCYAE12KjT{tCaX6A5pbKHrh@laMyogE5N zaU(qkXET~Zg>S{FL_7CC#`OwZPllxR{kAbI#CuZXF((tnt&3aUJe(5Jq&X?PM{9UA z!~4)Bw|9=#54ffT{W8)y+e_Er)CD%>3ph-gBdUZDOHaH=D3BG_`5;520P0(E%-XVP}(i5E>S6 za^P)b%`+L^q3i9e45oPG8r)Dn`5F!!&t`ZhJ|62adOA{o8|NoaPxGE7#IuMSz>FvC zeB_XDOKLnu)ncf)o36+4Fkll#dOk^W{N$`O?*c-n!g-Cs5PpsufIGz35FWE3)>mrS zxi~e9xy2^C45u#ONt+FLBTm!8PLlYi_BlE$6F1t%;cmuhPSVIZDc+m7bex^92S05) z*~SgQX;kdYF2|{KZYCWj=fFvd&bt51xIZwoU`YpN92MndM}~zTw|x# zm}g_%%CwC5xIV%0ek-A&qzdLhWY2Td*)QZ}M(^kM^$2}B7iZ^<`d}4K3xzk@wCrnK z|DbM~btk;AuVwVXRGivEJL$=4=RCay@jk$fiIwbif6?}G8^0%~hm|;uj;;G=xC|VV z{+-nLm#k?XJl~v)Qzx^XQrwNs(aBWo6lxl=qW-+>m{*##F)|mI z8=UOkC!~I1JUOkjel<2W^lseQulh6JOb0@{J1LOf7K z-^uWfd($o}yIEx829f0frsrwAO-*_?!}|<$hRQU%JpStNmS6jBx;O1DdwyWZxuLJc zDPNn%H@Lny;@AyOd)r=am(m5e!Nj!+#_mI$QnGnbJlp)eSY>rII~Uh0sDk#3 z8*q00GRq@x;y9!8Kyb|a{>-iE-njQ|{**RS@1q;G@-h#mg#n|UCwyRcECz@}{v2F} z{<08xkkCnfV|JSN2_e_!Om5Fx{Fxu6d*^Sl>xsGlXi8)m&OVYh64JJ6x8jto_756N zd^$Z3r`2QkhkJ12gKDgKKQ;bCJBks#^^Hu%jqwZDr+E(&Qe&H$o_fKLn~7t~;}Kxw zN46dDfx8wrQYnL0eTy3&WUg`Q^Rcb0J*AZ3G-G&>;354{Kl*7#5W4F#zxMNV zZ{lbB`kZZR1x};hLdziX7VZqc@T$J?pYNM8n^WROeeUo4B0c{T;9T+L7bhShidCWVX}zRd7;!PLQ|_=w}gmo{g6 zH^{@OOBu^|Q{ypq+NqIWxrD)=(jr~AYxsE?=glIdZTl3hkH}iwFh6-gns@Hs?bYmP zoJDTI^&?fwV7+a{orGgPl5>l%Vq3b_;%J;Y(;mt%#i`*mj_srV&y+O0!;XD_4d8k9 zoE?7mhIG#W)f;S`lT*T9`ZWz1-mwj_;a7jnbuO5%k@dK-!7@$Q8JnGI?o^!aEabyA zD{!j*!D?i9iy!?u!|VQaELSzK(m5*1KKeXvDCyba-%Rli{ASA3Ql!PsJ&vrxg`m=QlKFcza>09cz)&27DXqBrWfi zIPDL1KGfqz25!x=)cEi09gAWOfY5cfed4vZ z?@HV-Qqpa=riSx-B@{Xh*IHXb+@xRp+Mm+B_P^Qh zPqPrVrg&L6jRZH6p{em04HY+224VwFQ<2_gkdEHFZ)uTp0Z#Lpv%~BZ{ty}cIV18F z?3Cbu*yZ=wm8!+xaJtLbHoS&Qvt>|xi$Cm2;)q5WBXOq$x$3&>a6@q1kC?)ZIMqfK zP4Rm0=NI)-un4?D+@K((`fSa=#C?ZTA23nLrAIg%>Mzzh!tYI%c=oy*PViS~FXkZFwTb+tn4g zAfZ`v5H}&5W;wTy*HgSx57^fLI%^hA1IcZSUEp5aNjP3gGXb{Z{_NzoEyBU%pzs${ z<1y-S+cJYweR1^TW}JG6*-a)9zN@YMkm<%zbui9u6pUhIF^)HjL({xp37tbKd%79t z#d6SiF2-qA(6p^7k+*SuOmZsELkHRl(M$ATCeF^5HO!=I|BPebeFeAgP7waxM4N{* z;^wwAwavrn;Rj3u*87UDe5)hu-0ymj?FbsnsyY{^nZb$UZ60HAwmvHN6`b16$PG)0 z3niGD2ZYnT(-XpO8`r$P5~sS^&3H5J&)#Zw@V-_sBQtPr2cQKHl^(yAE#1-x4hn~IJXHhVO#Lc^%UZG)}?-Hajx#<(yVQ4eP|*K zz}bne^5)<)(J2A99;c0)waPKDS-V*2^iE_bF4H78V?q;BuhBEyH#g&K&**8e72lk< zQ+c24TV zrWxd-^3K7j_xM9XBbx(GHDh+t&oAS&=LO}3e=qgmdejSH|0Mr~7rI(jrG4PYywOd4x1a z*i`7J+npolIVo|?x|r@ADE*W!Hc!so&!l*>aklq#JGu)uB$#_U38{|Enr~B^ccmNs zr%W+apOs32Yw6geCt@?solb{gW`~s@Fk|EBVGR}@XvMoJx+6qWxpZC z>zfoSk^YSp_!(xQ#j2#vU@mq_GPDL0E%&{3HNF>6{jT`Y?a=D{2K$i zC$k9S&OX6(KZcvZ1`|DoI&?eHMsm<%`!B-jP{n-7V=Qo*XCX7^m@pe~vK<86F1skLzM@g zV*8tFu~SvzG+gAz>zPk+Zr9;itJ|rzJMFX9IXG7qH|b?K%_?>R+`BkCU)Kyvi4^t< zW+7AKPC|BvP+8wO$M7_!#-HY@XuI_?tacqc0_$;_X~7d?WEXCzDNGOdZO*?|;5(4y zJcp2;IqWU=b(~f>IkQ5TTfx5=j5l+dhf^Y@*i-z%F@56+s0>>EN~%on!03+OJ=Jde z%p*>zxj1z>j;-t#oJ}eB-o7|3r`Ek)1I?O~nH-a_I(!~rZ8cV#63dEeZNe#6&d@Us zYe}-?ZO8U~@4k1wHcPsM6A$7aW@s5465^i#sp5RwcAFOuwGCrZcz5A6Jj`fLlv{8a zIGV%epTa-zuys~fm*89+?rEHDf#P=K+?kBQ>fe_<{X))UWrQ@OL8p69I>$kgzs2sx zY48~y`d~=E*s|2^?P8qPcyN}B`=g)f-i7JR_aTGaxXEVo+6R{zeD|+if7>Fv(`MpS zro9y}aE^X|DK*^R)OIDK0|(eqv+JTiZbHe zR^05q9KX$#D+8i?}*xd&V4TsJml|5Z8!Ho+X10A=0sF`^ZJvcfu z92x~>lj6vFXQmyXEl|~hdnBc`%i330?kdx9ilgSlJ>;Cd@BV;0BUXlY+Auq98GP<1 z#luYP$&|PbsvU>kWRV)= z#A>Dc_bi;PF|QTl>c*Jb(`oU$ySa0$iu)nQ%c!gp2%+ML$(g(;EFQ*>*u>(7xVkDz7@ zTk#5BE8y&W)W&@D)Yv>$Lkn=KR5P=tKRd{SShrR1K+tVkY%Da+SK-_YVqSc&xS$q` z@@!w(MYA2J-m&fKJbj;I@=wO~Qkc%q4hk5cFOp zXm<<^YRg%6O0!4v2aUlv?k6wwZBBriDVNXx3|?9g%h3CZpl-0dhdztDK%pIe+&d|e zeB9Z=#c}Hj&CV=FG*o1|4?`yvnOf^&O-iW25!Q!Qk^3dd&YTLK)DhA!!ajVYB_raMwyg`U_u> zFOO%zN2>ZUn}d&3m*rafml{XhRDPs+E}c~QOm|+YewfKmgr8z1k29AK4|fcQO!e?^ zTl3`baD1h%na7VlO;!AYfLe_w95moR=mGG{`B9y&w&~oyLhRtyVd!oD!$Ui-==?&s2bnFj|#Y(ANf`CrhY`YZBW5` zvAXU)r+lj<_(*lxgVqMBPJh^Wsj_?2`KGGt);lg${*OC-!g17gP!kY*Vg6YXsK;M+ z3I9qJznLFp{JPUOP<^DTz}x&N-4=d4em>_%>A&DdpD*;kLudo`g6-CZnyOm(6+dCq z;jD1Spu#(4`QdLMfqsMPBUJ}|FTl^SAe4?h1*RRMP8pkvs!f(Ecr1x93vFhq&t^sv3N7N7^eX-O52|)7CSI5OsOo2&u5i~$mF`x@??9D) zwTqXk8nw=&=G0N)Ha%gXdmWT2c%So91?%{w%pa7Raif?V%IgV-pF;UB^fbT3pLO~? zs>@zN`7iXchv>I`D{a#|91Z2aFDRUfv;VHZ=L_% z`5#bq!XC$eb^Ledm76kdhAQKT(-w{&=rjRUg%3eh!6V|BoVqX(z<;5m_$7a|^PQX? zKNiBdXR4)7vI-uy82%Q4sc+g^FvUr|FcjPG{(h` zbMe{EpW}2As&wZ&orWsk8K_!Zfbw6c$mwiU@n-gz@NvN;m=94^FLp7Ppvv)bl>b6k z^6M~k1*$7=75q2V^(*1h+fa?!JuaP8e3kQ3`PFeDbL`k~n?%B)TA$p-UrL|VEHniP z0s$CCgxWPyss2q>k+b2-c%qA!Dx*nGCp+F$o15zKv{T8ZxoD|;p7T;=Kg0Q^s&x4- zebnhpm#(R*+C`2xRrTZCX6{Z#Aoxg?@jU1Mo2p{vE}c{h<6`IkN>!0diPv=tT)G9# z*sN6G45n!s;HaY1uI-S zsWQ05d8t}>o8z}TF6|C~)$!MyZbmf(mG2Tzi{5v-1yxsm;{0b$zd-pfw4Gmy|JwO) zo$f+4r~irSh85JtsVW+#cG5W2(kVSu8EWYw4sx2{5=d3CR?h#GD#O+;-61GthYokz z4pn?2s*hCp9p$`KH_K3a2b!u99__eP8Fh5p$!TX7-&8f`-QkKliC+n5noHMIm0w?R zo#cXmQ+440cftROs^a>8f}yb;=JIK(D)>ytrNR0iPC#Qe-bF~2Q8uazavYax?9X#v zs&u)|H&vlL$Nx%|5C6mbl|caoE}>KrC8)-7E~b!ELFsHF5wc#rQ*Kxf2D^Ie>d?eaFt8fRCRr=<5E@V-bx4VZK8^}53jkf z#_^`A__dBpB3;dO8DBdKYYW@zYjNWw@O6A`})#4A( zgVF8i5$La|CSjav<5c-X@Vf2*t4D-dxCBl00Ml=>dn|25wDNC*>U#aZGtsB1QdFp& z<5HzR(s`-kk49B)N5}sMYUgGrcY#zHbVh}`I4%|MimKow=exUjsrZSGCp-S%R8MuM zMclpVba$ctA9?8WSE>r660d^#plWftOD`4gkE#a;IvwKT|4NlEtC9rDc$iBl)$?Tz zssxi9Z>mZ^8Lpw9=Hi>G;`1Dr%1?JX1J#r(MAd-GIRx~Pss*LaH&ty97dtLhhN`$e zf2FGUr7qoNE}c}1;zm^E++=x|SRhbEEOQq~mC*{RNjTpeB%A;EOK7%cv@{(fLw3q+OD9#qi=A(( zLO#Eg@lu!WCYMgC>x}bGEB^&(%x-oGSD+fRmF|N76V;`6yZr8Px(ZbVYXZ;s*Amc2 zstVLOFI5HBpsM*=$EC{PVdtBw(mmpMQ&rb*aQt8NY!{(|pK%HPo2r0kNhf{I>GSTo zK+Sto-BaMp4okHtUU$B!Dw{VPZ>r*N!qv{VQTcaJO|dP`Z*}@1s!tQG3@-fGC8$T0 z(Wfq9Q&qdaaOt+W_`gyeQhsvj{^|5*r@P&CQdM-%0qzd;ivz#91X5LGuhTyqm+C@w zlQfK~V$IcUPUTy;_;^$^;~?h~Tso<)Ke&>B*x@dssVbv(j!RXcBb{%mO4q@0seC6? z1$0I=6kS}rR5z5Ks1C%HX#{jZI;smYP<{TJDqVkG`)x*U3s1oKnE|s5xst2Yy-c%Kz=eShqW}xEv=$Yt4E?%l0cq;IWzXH188J9q+ zE_=~=sr)O>OBH;JUz!#lI4)K26Mm`SPf_*AHo^a-sV+hneCaOOfhyx~Q4P&5RPp~n z`7gAGU(L<@8QhaquZXq`rz+3GOA{RbD^&-ybMZ}8#UwiZKT!K3wgVUFme>VVM|MM% zQIhi~I88?NX{u`9$u50Q7cW&iQ&HvD$ML4BhG)bdY76S`5}u)irZAt5Q3nil*Zq~Y zCH`C&FI7Eq(JttfsQQ1gi( zI4)KCo1K>`eg&$ER>!+-?N%4D5>=1fiR$y;R2kpn(lu3$@B@xZRnQverK-SM=hs%o z0;m!`?7UP3JcjCmbxzl#!9yFWg5E)u?tN4rsT%O1^G#Lh>fxFaU!cmja+?c$i7LTY zPIsdENW~kSe($(c{0FovdL*?`#vM^*+{tNY)sjzBRRxc?=_^CsUBVNbp6E0gRgd&= z{$x}isR};T@m{D3?u{zrelEVh(}7O)KlG^UvYZY_!!H)JQqLR`6#N@IvZ8`5^>G{xh_Gui@4DF`A(})WxT-YLR1x7 zgsSD&qI%xG#rfM&Ez4D??ko?Xy8ba#1+Pc-kp}CpDNx3b6Cr)V>61=3IDHCL!Ox@0 z_+?ZDZbntW8>l`~O_vW)<+sJ@R;M3&l&=du2I!X7fa-!>s6I_q1^&}r_%o^@_{F7* zsjm6oeLEs(fABBSg0VSEIq+$!D(HXl^@!m5reB-T_2c=G2H%cA&*4WsGSTchGkjD~ ziT&S{*#Aw5;F}YgC;PuCK_}>=Z%n8|_J31i|2HK<`@bo%|CAg5y*8jKD z=T5r$_M*F{9eCA+54}J5iRWe=-oDHD&p-R(-i1SoA6l5x=HvQLN>?5Cb*JL4qn4Eq zN?h>B?7@X6Ogrn+`r{U@N^UdKG%gOeGj)r@XNH@ZJ&VH=%<5~y31;%OfQYHN7La`% zAmKVd3zKslAbts8gMeqeC4hATg-ZY}&3b|S>j53E2PBy2^?-Ia5ZWxz$|T+Z*eEdn z20$CLNub;ZB>R9vO@$BWb|au(;Bb?4BVdcb;u`^N%~pYhO9B0s0us%lrGV6%0F44i zncg=6b_i781n6KI1eO`V2m|P7mK#9kGQeJe&L(RaV7EZsGQhEBkHG5XfXT}N$D5kv zfb5$A2{!|}nw*;f@hbou1d@!m0)ZD8Chud@JBoQ*kSx+e$#az-cCFC18ud;+23DvsGZ>ZGe8a0eYK7w*gXb z2Q&(#nclYpb_i784(MkZ1eVbn4w z?*a@qHFp8B?*=5?4H#;2?gqr)1K1#tWxRU;>jVn#0i0>p3*@f?bXWx#VWO)5?N$Re z3!G&VR|7T*%wG){Wi|iYnbO@qL)I>3lJzHQdBhd}jXfcd6DVA(prh;@KUvwR&Ob3I_Mz$GSYJz%#$ z-Fm=fW{<$?#{rWc2V8Dy9tUJU0Z4cPaHYw40ucWsV1vLS<2?yjCs6n#;A*p8Ab$g( z!v?@&6Wsu4_Y`2Wz;!0^DZoa7`A-3^H=6{?p9Um94e(9H(|~Tz0O|#nnxtm{TLczA z12AT*z`|z%{hkFZH;bMHq&^2|6j)(;KL^+$Q2iXB+B66(dmb?2dB94u{CPm;3xK@> zx0|dN0J{b1UI5%__6V$g5it2hz}=?iML_mTfP|L-t4z*IfcTdI8w6^M_cCCeK;g@P zd(C=*{EdJP8v%7Dx)IQB6JWEz11513V57kNO@K9KlR)_^faF&I51EQr0Nq{%)C)Xf zl3oRD5m@{x;4!mRVBu?key;)6n?$Y^!oy^$1M5+kh%@fDDbQ4y$!HK zpn4l%uW1li_9bA%mw-Ra@-G3I+W~t8!X|4wV7EZsc0e<;M_~2e0h9j@h?ttc1G2vY zBzy&EVRF6##P0xX5b%t*1F%k@a0j5JSuc>^0O-&FNHEa`K)aoUHVd>ei8}!s1?KMr zv@x3m%D)CAe+@X)RD2ES_6?w3;Bb@l4PcAF;%@+L%~pYhjevfQfJC#X5s>;Vpi$r` z)B9V%4uR@#0Ub<(z_RZEBfbN4G|RsOWPT6WE6~|weGk|zQ1?CHShGi9^)A5VU4Y|F z%`QOpKL82;0CY7u{{Y1Q0N5aqWV{~$>jVma0Gwdf3*`R@=V5?bG-QocC0^>|l9AJyU;yAzr zvsGYWGeEy)fE=@^86dSepiy9=>D?T#L!i1jU^4$B^nhg%z=#OoJhMCk$UFeBS0LA9 z9RS!ZPfz3qYQ!X#vQN2PDJ;W|*A#xC!BWvqlm%o=5aLkLW^==vijH zK>mS%4hI4XP4qxOyOw~>0>vh=C19h#{FZ<@W|KhqL4f3g0HvnlAV9YSK)t|R{)gEC zTLcy-04^|F1r{C*=yx!n!Yn!%klG5+C~%SK-3qWnpt==czG)Cx)*3LPHK5WgZw<(7 z1K2BYiOFgM*ey`k25_0#Be41qz~n;!mz$bH0NIBE5)K7iX>tw)#2*IOAh5`IhXK|J z6dne++N>AIKOE5EaKK^{Jsi;P2*756>rCPifQ74Fb!K0*p8c zu+l6)3Xs_zuvg%Alhq!uTcEBz;7+qgV08z;6g8{kD#(+!ZF1V~5%ylirk z0P)=c8w55PuRCC!Kw)>lt7g4G{t18%Cjd5^=m~&!CjvGLykQbg1Z)(TeOuv?(+6u>sKM_~1-fXSx40`AfXxEmnZy*pMuGV$ zfL&&jKzS-4ITi4OsYnHM>kX(E_{k*o25b>n+#B$-*($KG51?Nkz#g-x4754HAyAzL*lQXDmh}aU=nMG6Ebj}*><8E@5H?x;0J{b1`T?4mJp!xK0h7}K5mS>6 z$j$&HWB^*2oD4vGf4~L-&v^X->jVn>16rE(0{H^~9R>grOmqOC-5G$*0ZlUQilK< z1&%VkhX8g6R1X1kFbx9Bh5|+m1#~pahXOJ)0eb~Ho2*R0Zh^W?z_DhJ!0If(jVnV1e{>j3*-+6bQlguHqqgLb|V0r1$vmo z5rB;X^G5)BnoR=bBLT@H0jHXZk$`Sz0qO-#Gf8Iwwg@af3y@;A3M@Pu(C=(OZ?ouZ zK=vjS0~l!b2&^6p zm^>CR*wl;#WRC+Ri~|fcIpYBF;{h84vWzz#uuh&(Cg~i&7J~znyhmHy9Mgb1xz)2 z1XiC1n0y`}&(xd;$UYyCa6Vv$$vGbop9|O^5H(&dV4Xl=E?|~fFOWY4&|wOo&_t&I z+D!#)7AQ7}Qvn+V=1&F8F`ER+rvZ|u0ZL89G(fjJK)t|RlavS8BCt3QaDmw>uy8t{ z-*iBQSu`DxIs?!saFOXf1F%D&dIn&=X%JYJ4;YaTs5Hy-0hv+2UV%$YRur&Xpe_oy z%Ffx-g7)n>gwej%VkAz-nI z76RH80X7Rs6$;ANQR1^cc%?8v9EHz290b2wX&juK?Rbb&9 zK)*SF{u4P+bD3HVp#HN&zEE0V~b&Qb1-IV6VXKCaVmvTcEBC zaHrWLuzD_F@?5~(re-c6dmbQR9$=NpnFol!0I)%z#&{P1)(I3|0Jztz7sxLMbSMYZ znP@qnT?JsXzyl_+0+Ahm*iQKRf#-j zZkIf7_DEhZqpFY>O$}nQFCn9ZOUUSDlXD3m{!+jOflbD{6tGU9@KV65X1zfEWq=Ns z0XCcHWq@`I0GkEgFo_EQ8wKVs0K8>336x(BNWL8Kj;XjD(CrF9y})}W=?cIWfyGw< zJ}_Ga7G4SHcO_t}S#%{Jbs?Zp;3Ly}Az+6<^+G_sX%JYp2ryz1;8U}F5g_v_z+QpR zP1aR_-2!!20k)Yv0;{hEOuibh-PBwS$i4=Ua1G!qlXDFqelcK!K!foX1J(%?E(UyU z)(hlc3+QkypwUFH1+=>kuvy?clXx9qqrm*@0K3d4f$}AQj7H?7GDqe*=!Y9cmtr{4S+pn(G7r9AJ8c9tLg0nb_i7afW4+cVA+j;5jO(F9U24@Qk+%uuh+T9G;EYQj%-VE3%F#l#i8?#BEd<7tR1>jIqu>#QT7C^ng z;U?)8z!rhUw*cCjtpW?H0sX20iDpqXAoW&2qrg$7_pN{(0@b$yI+zB5Wh((ARsuSj z=9UfJ7Dtdfa6Wg?SSk%010;hx|*Cj0P%MMHV7mc z?@quvfxb3~*(6YY4(`OwuaA7Jh=O4i5lEnCJt5b`JtJ3!G&VAN+r4d+YeBv9Mjc-QC5V z0xd02+^vP;Iyl9h!QI^kYjJm3xVw9C8{FNU!F_;X@b9|!PKM6BGv~bLk8l6DcvkK_ zSy@?@m6bF>I3l6nI)p0bsDxhY5wfmFsAhgykC0&l!c7S^OvVieS0s$tfKba^l`woG zLZOWabTE@bwhdvIgw`hdHiWGb+HXT>Yqm*f zwH+bZc7*n(^>zf`9SA2SbTocD5RORbw*#TGIVz#oPK2yG5xSaRb|Pfhg>X|scaw1! z!W9W)b|LgMS0xPJjZkPe!Y^jTZiKvh5MD^=WAg1mcr0P|9)y18iG*o;5i0CO2s6|7 zB9z&O@KwS9Q+6N1pAuH@Ll|T}N?5iZq5gh^A!hl0gxbF%#Qqgwn5pwCLbL-2yCjS- z(GMVOmC*ixqkILu-_-s&Kc-FAq2-=jrPJQ2uxH|plshNI9#FAD@)pCY+*v;G`kmMJ zvOQ|vu~G3)^D>ku6ei5U5x9KhPH|t66bBoDd7#W?%kLw*z1=+4=2BtC&TNQ z&C5Ks|0y)B$)!2A}0SBj))P>uU7BrkFA^R-{b zeD%8Vkgxk2B`mtC*q);ar<^;tq~f>lw^CG&_VeMVM{oA3^?vWCv7Oh~*fFK(_UhZZ z*YD(4=uq>y@BLO~8XhTm<02=o_vGvAc5H09tx}A-U9T2gc_hi(Egc?y?&vkS{2$HI zF4K_J4Kj z`KwFerA7?8*4gQ|`c%3YUIpXN*jr-TlJ;$y{FZZI>#HLl6}{ofy(p5`yw$tDonsws z9reT#pS6wJeII?{NtcH!&pr=N6o2N{e2csr9_wEyj(4h%C?P#Z)GAdo!SD=o--nl4 z9KAuG=mEW&Shl_ zt|~gdW#30R{i;n^KPP_fgex;d-95T}p;%F_9!vM&cdrz?o^WT3HP=aT0uN6pJPzSxx!b$Ugs_xRG8-#q7rS2%h--G<(!0z)s< zuDAK>_faWA{X#3;Ej6v@tq}{>mD>Nk<&Az%R;_g^YWR6 zvnDiYweH2}PoWE@tnJnN!!FOO0}9`KmvMc|%pD30|HJ{(@_!Ln7`Q4te z6TFUIy79Q7etBzGy3lIbqr$1WO!{Nwo2tA0OOA=Q^J9_LOSx-E@>Zl-JT2+2KjY1g z7Wer5rJde{?z+{w)uCU{b&US-QKn;a+ny+#WoPEVEE96}KJ_4M-1yK9O@}rMe*S#f zg-@-nKiie2Z=~c+k6gH`hdq35Qq`FoH%X4rFP-isY&>e#f;z02@o4aT z(a|*xXV<9q`CEtbC34T$7C+g(zJFY6@=L~Px4Z7y(lXzjOzXTJ-X5}}M87Gqv-B8O zHLzd9UN0_0N}m0;WmoPU8@4;`)@m_orD?h5`nAkewq(xgv-Hc6Kax-Ga^uCz&R#Jq zc=io_=BVaZE!n^qQKyud@Y9J!pWCJKK9Z>`iOc9~5O&L*9Xa<(g-zHIJ>B?%j!_*S*SlNwUE9nLtJc}^Wm3|KJN8Bi53Kkx zTJ}-V8vFSrpPIjhqwd$F(YtJ$;q{?a=O%S_jZ8WDYT|<2-*xz!uOH~{=SGe=S?!C0=wsb*wQ!WyUqT^TAfU>EJ^DqPiozIJt6<;7{7J&op&nr z;gOw2eDWAKI&O(p@m`eXHZg~Nd0V0*+ar3tJC?uvtrUq~22O47H>z;wOv(4GYhL8u z?fW--FMoY^(wlu_Kh}=@D*3>O8P7LX3Rsn(*~C2^LyCWl6TUCfVcYMvc9lx__}&5A zwyhqWAj{Zs#nzfjw~G6;d39lSwb~t56-e#qwd#)rAqyYZdEobLONk9L0{tIlU%sQ4 zN2Nb{jUIG0>hX*@Doo*~HOU*&a&p`lU2$TS- z_G~N^a6jm5x!AY1e+#U+m&W<m$f(Z zcE3I%?oX{pr71lman$Zde;>B%VDnZ}K7X2DH+!DF=X(0(Zj-jjyuo=M)?6R@M}>At zM^6jv9KX=odKa4Tcmc_avh{1?lv{qT7Qa}Ueb?(xtNyNS=dHi(8RtEJ+MXRF!cJZ< zGUB(kD~|MOUHVhBooO6vHqTr9?CbPur)uVZ>Nqm4+rbKvlD9l^@^V(*8PA#V`SAl? z+P}-#ICkQ^@&7!UF6_?xw-=9AELO(ENLg)KJ@0Mr{aO@X@qBT$QH>w=>3YJq{?{`h zqaL-mRdYkCAw29r^77PdJn=}5xLpSr=c}8^NBWeGyC7fK&jZq?c{H&3mEF7VWgg>W@8990LhoxP0C4Q^ZRo5l* ztg+=w@VxW2wv;Xzv}WMbTk{8`?>x5Nvk9lB2fXqtm*&9jY{eTdypksFp_=9H)+^_I z=H!*O=TFS#(F>9{D{igiSBp*z!YDb-HycbE2uyTl;*jGU5I0$&U}6T>K^8 z(gR0cej2;ZKUSyS3GX%Pa4mFsrokiUL@ROP{)z{Ya&L9yY};@;Zr7Ws*8Al?X)+X8P``JPJ(t`4cC6pb`TJUL z^(_{A`z9U)A$i`--<56ND9e{CdmE;$lr!k!Mc4Ru*37^u6C_ z*68ki-cE^kVcziK!AG)13|Sm&``ea#hez`peLUYaziQEzHH*@BhgZ`HA+@f&pSgQ% z<3$&FEJcO;BF*-3gpZ8}G-ncWZ=f z=oQxNOV)Bhhwf)Q^X-q|-O;KIizuCFfA0Mam#!%}^l6p(+kaZ0|6tVq-;-78{qc37 zq{kv1_U6c`i&3@a?k1lqCoHl*U-muU9zLk{!S~qLh;muhj-C>}rCpZP8}G#*^M}L3 z&!^nd^d+8`*&F*)Sl)9z|LD}CrPthJiRbTs!IM8EuVbc9@57$QIdd;nP@<=Y_ZVewSKP>@?_HW zNXd(coV@pK!_Q^Pa((va&MmUtJ|C-Bzc^Qxw#~6D#^gKID>SQCKid8#FN=L@yx-5O zc(ds1>!$ze9G5gv%0rHNL-xcObYN-Ram#oPiR8Vh6sz*4-RXuo=CtqL{?ob!M-K{Q9m#fCD6nLZi0naPmXRoRN~Z zEpqY>Tsk>+?x*0H7iv9OwdHuD+4m~EztQWh~7iD+>I7->rAEhLnBV`RFoX|FzpgT z+CvC?Oy@%gWiBIJl(5gFJdE(Cgdv9!el=$$EW3h``v}58GvEk9?W+h6Bpfz5k0M07 zhQI?Bn)aLb5Xm*G=m) z2#+P4lyKAdokf^-7op!-gxlt*gfjOKvYtb@YkoP0@TY{E67HLf=Mk3OM;LP+;eoj- zq4sYGg)SgGG9xY^M09v7KhdT@>HnQNBuv>on!=p&XI2`W{Mrr}-qM*IShO_fZl$&5HXd8Q!79 z{tYFO)71S9<%*PDQj$1Lj0Y&g-=nmDfa2#g+ok0F10~r*6o02_^AP2+l#^1DIZe_> zDAPWm^m~Mo!fB34Df1^v*2gF*$)CrLnvPUXb51rjx$^{@#%Tu1rX_D=(>YDhQ*3&2 zMmB@f+>^~nzC6Qba+-;6}_)2o+5 z|HtywYV-PwBbuXYLNnIs)kZ?>3VgeZiIi|p-h3Y`VqZM3Fwf}v^Qx}?ys=u#d0ZRD zZqv1S*QV&519^R`^z*K0t9zPx{$8;XKPc#W4`#Ujw5?6ojvaDi(-qQgb|<=A#P!#Y z;Z57M&eo=@`_JDlo5tQ=_r3R(@bHM~-m6lR@?|-eNzKm;S7Tt^(f#Y5-G>$EPThd) z?(LoueF8JV=~Ye9MeL2^^~KY3OT?~tULPC|{}E<)JgNV04{R6K%Q~_QzjdOSn zicy@;JMwze@JgQ|Ugq#}c*VZ>+4WM1@C)9a9=?j`yu*->ueFO9JzKSI+KNK(O%QP^ zk5>;zvSJ^UuuFliDyi>C1K`1alX zle&}fjT)Uj%-LxMBz7hY+Z9RHpAYM|+tL)BK2f9J9yDc*UffY#@$lPc`RVPpd|VZwEbYTQ8+O;MT&F_Z|=UPre5&N9wu9QOofVns%&rjUQAD{Ek?D zO0fM-=%bcKRq!Zl`5m(~z5lnSrP&|&(rZU*>kZfX*APJ&eGW|tRQ!dlH!OQR zx5U(l#awP=ucf77d9kJG8*17(Ei3^Y;43u#xf1efG5G%~k(nSYilb7t1lGwQ(M_Zk84YO-HP+4fL=yy(>)#%m+O!Exx6x9`v#_ zeRWRT765&%LO&mU)=Vi>@~PYC?XNUlGC+Ex)9eRupZj zrMW*}=dM@NElpprQ=*IO_-9&TGDM~DCs<%`!*x#$lX>D8uZ8Bl~f-Ft% z{+?=S!B`z#HJEN`A(mftv>BF`2di||(DBb>A%F#a+)rgv6Bb!oAxo=;)|s$=g)OZ% z;WmWTF%`io(RJXh0{rv}JN~&|Cf))Y2qh7;kDp-;q*4BtLR6~j!BR*IWi7}0gqK@d zIZJE6vSLn$DQ{^FElvGMsHHU`JlX0ODp*=$G<~a2{X<1*D*qtt!apec(=U{q;U;d+BU zb6FDG#nSo^9v^0H+|?5MBHEwe>Sk&E(DcPN^$)5%im*RuC+Z7&SeojR^+h&UeUe`| z#J2X)%kmq5mekV1ezC-Xi0iCu?QLm;&@{%=uaBh-CR|Z5^XqGALkOQBtY1H@>d{cx zZ)y6BiZ&Sr2MMds2*(n2n8$Dy4q4(L%W(wSVN0`Lv^Ww?U8;UVEWc5NKNE{O7k#Qy zI~fgMENvK?5;F$ATG|N9Z!FqCeb$m*$YZ1>jw7sWRVOsc(#8{3ndvv$(k2jA@u*`O zgVpMZ;3S}qX#!S>nFI;hu{x%SmNuDi5=)z8XU!DEq=@>di`B+cA(^F3u{490%F@*B z%5NIDngPb3>4>K*tN=fC#R|@VX_hwA+BR$^;ziJJmL<+2JjkW+5g1FG&GJ%E*Ez@1 z<`7%=YF3T%Hz3Dtln@4yc;U?JmmNuVo@u-x4GXe`NaRK2%bTlon3oUISVby+h zOgb;@@M205c&1e%I=15DNt@!MwkZ6rJrZ7_DbrEMbI zpNPZMc6V6fX2Ri!(so+f7Q(94!?3$7ErPJJLrr(LrEMjwGpU;C9!uLMH^OR?do67{ zVQs4>xzGNr?G6?OBdSfR)6fCz1T`)Fe#PqOcEMP}YLeGVACa~PbVik? zeni?{D8<34RUNUkeLDYFK~%FkYKi*^^SW%;@0g|i%2GcxHMQfGc7X6^rHY?=KLrnh z{r&h;mfs;XeXw55@3f^ICVUHKs{GGb;t|4kK)Am zPgr&0zNK9ztWHH`{hOs-A)J`7eh)0|D&aj=F+H@jYiQ~#POJPMS>km>rJ7WEJhrqO zgcqy!@OxruHwoLHHGgVpDobsvgg&#h+k{mlO6YS-yF+*{iBY0nNXt#&F6=|RgMEpp z#NLDb1hnq8wej8>1o#bZZQ`VNj*OC&u)l|ylinE;)`&zl27UYIPxuJ>ZqQA*1)6rb z1NY!Q{00x<2xz87A1!MN&7e87fR@k-T0`5A1{e@GBeuO#>Z*BcSP@&6>v1=hyU! zwlbjkpK?$hDnVta0#%_JR0qum)q>hk2kOGlP#^T^yeFWkAWi*fsz*~h7eL?bI}Uqc zA82}KH&2!q&gcxvSj(FTL9OT-TnDuZwF1?8RcKY4eoWn#`a%so)EhjdB%i@K(A32m&_~+z$>j_%kMMk003Fr% zI%f9AQ*DN zL$>wD`a&Xz4RPQL2k{lY!FSO0r)L2F>GOn1!5=h>6C2_{JX0ZqGfA=N1Yaxfp$^@fzHKgK!vHgXUz~gXUp6@`tR>^kKaT_JMxTA2b6p05s__7>2-57zV>( z1dIYrfQ*5$Fb>9pCOamBCO8aC15Iqq0L^90hB+`7=E3}^%ynr(V-YOo?`WO=`BoEL z1M6TtbSEb?%`gmx!+6kif~F5%z&m&kAI;e;&V5Az!HA|QA@8CUrfX{694K!5HX+Wp_ zJ+K#gLtp3z{hU%`_K?FCNohA0pf zqC*Ub3GpC4B!GnA1BoCpBmrOW1AP>5E>wZX#Qlgw>LcjMAu2?J=nzw1osLC7-v;2}JQXAt(B|6af=cn!b9JJ3u*J7^ELS-u0yh+G!|`o6Gc6%N2q*6aJqTOb0q z!w%34gJu-gz&g-3o#(-P&;-IF;0h(C>ykvDpq>`R#K_@Hnm;!?2!Xti5Awq{A{&oS zcjy7XfF=Vv!!mM57x$CBO@kcHQfU*RB?e#c16|PjLjWX$F zpa&b5z%tNddMjWh=%KSUplJX-4YLDu*GRX1_JXDYblXOEX%2zz!sxEcZIX2d?m~7B zAqwp%DntYB^M-lEAP@`ULOh5M2_PXPf+XMvNx>hIK}tvk=^#C1fQ*n8vO`V?hFlN= zc_1$ofPzpAibH8lv6UfE7Ro~?Q~*t4RD#NInUr6F!%!a@Koe*RNhz4aG^`_V6g1M- za9>0Dy|5p2eR2R&Lt01&x@9m1#_AT&c+j5@OawirKN;HMqVn<;~Hsqg+WjW zDuceZzMdAIg(I)avc4tTl=4d@G@^0xz2-32 zrFsAh`uemVB!a|{1oV;bW;o{})%r~KAkcTWyRoeAbRU9Yg!f`Uu`_)PT^~r-MYAr5 zXJThTVZueB0Q6_MHv|%%roK;C$)(u1JY)gg3yO-p0Ou+H3lL2B09IGeNAN!ix-jYn zx@uA}4uDlex*FENTF~Wv2`CArp$wD-{k_9z?3ghA^MQE?t)V4Ug<4Pt%0eIL3mZwq zCeU@It|OnaV_mG=fuWF=Y)=R2VL7aXRj?kOu)a81pPXE6#Qp}814AI}IRBl5xg1dw zBAv?-4rgZrVGwAtN>@!y2>%S_K;O?g3`bxW=nCo?I~WGK#Mf6-H^FAu0(vv~0^(f= zi$E7mOJJ$mzpj=B!$BfximeC72%ll2WjHN|2Sl=y)Yk)DZ|ZVz2|H@Rx>;D=+Veou ztvlVRd(UEO4k$Zl9OnbNpc^6uU^Y9Q2aBK+w1zhDg~(e#YiI%up&sZ0cPT7`<=~<6_XK_4RY$OnROW&_ zkOnk)p~;H=AYX4Z5BN$VKY?xo)P{P{5OfP5ALNHH5?BRW5;VPE3AVuwhz-#otO}9p z-oPWWTQlr0p$$cF6FUUE4Lb$af+oTj!gNq#vq2u%PH~Mxn*bA`7id;)A;`~Qr$9&O z6v;OBruWhpEJWv{Nf zHTR$#7E$pTj#XUEIQrr$|DOmHfdWtv3W1K?POXmQ0!MTaG%s)&>MH_#G*|c;6uFjN z(}dWra8T>W8BPB!B@uR_7PCAK|2f)DWvUG)v(QZf%VIh^t-!`tSyvBx602!CP0NMD zR($MSh)!5Jqex4EKiKP}4+h0K7XDeE!r~$-0cD^OXckP9UcZ1QwbronwV+8VO=JuK zJ6kn{qsTjx*uvzRc9H^nl>=!=SUXqThgm)XM?q6Wni7&P@r1d`XDLGDEQ-a-nM67p z^nB3-7(qlT7A064D`Go5gk?WCCsAV;AMwWEKQ{V5W=ALOf#QP{a5tK9Gf*EEjhvx3BrA}%{_&E{zK=2tinoB!6S z*Wfp8f~Ia#g-s%?@oXsQq)`NR6Tu76!w}ElDeQusprP1y&`wl0bTZO8Lq(`B*7al` zJs=+tl?ReXUc&tIAZ;Fb2!#At7v_)uA@jf*Md0 zbhTR-*k72-AqoqMqzN>H2GAH9K~u|0Zw@VBFm#0upiJumZ6Ylz1KUG8XbYVnawd0V zSw2}+O*#{>BeEkIfToDMfgQPyOn%{@jTLzx=mkBYJM;kUtT+4ueL)GZrw!Ph$3Pea zt^<%@AHhh%Dz)LDA_;^MFchQ*gBMhUOrGxR8R@#l$%WPWiLeA_!3J0ix(?Fykgkh# zeWVMgIPjfyHU8wkcMuyv7f>|U=b{Y1u##wFFt|!AV<6UE4%`fV!I%fnDwyI($`>D z!zx${>tGY;X#Y>!DPfA+l_TumRZEoO2+)SxEKT79upL~^*k55k?1Me96L!FE*adq* zK8i1LJdwj2Sf{vUT_>r?g1zE|<)n!IZT%T*ee+1`mDmf`@_B2$y{*=%$g03)xC9qf z{@Rhs&ptvq*$zsK5+Lk|?F8CZ+pAgF%eGZ>vBS1yhc0ai)?KXR{~Z=o+ifS?s@>UP z+y3@1n$|_m-svpcM_rk)y=+%dds!8ClFHu}?48(F9e^GFr&R|LS<}%dYwaD&+C`}F zJBaN6hvn-kf4hv;6Ge8iBim*<|8rec%U@-y1gPljL@29OtmQ%5*~RzWTDIa2`)kEN zBiFLpw;Y{xXC&&YyizEXo`$$VfUx*QS{*6f)tX!cCA zWhvn&)@cS!GijPpAQLJ)SU2qA)$_Y)?DSj2BRUg7UezL@W zD+X;`D$@GWk-~~d+o&iaw|~2d+7(WIZ`ke{?0^-ZBAA7(rFp~Z1ge1M3pH=3IYW&V zHD{=~!)j0!`oUNj3ALaGXuD=aCR-C!MAcZ$US?SjE>hjQ{#VZ%}zR z!uEoagxh0#f)daWw8I8qC%7fyCZNPA5h0Kt>a$!A>Vgg`7)^<*19=I@gxZ8tV>M^* zdW1i6iq)KSgpqfu$Q7|7vwf=)*6G^Tlz4?3W1B(?Xb#Olb;~}xb|>5wI%(cWM{OT% zAHwZep-5U|TR|IW3)#@xKu5wIAT#04*e=iwdO%yWU$AN&eX!a|I4GC?vCIVj6lV^@N5XO*RG$CiU_P!_gA1Z;sape}tgRxL*@ zLoFp5VK4B6u&)ST;4_p$c!PZjYOfFBDqMkcu!;2>VFRp(br5+xsP=sjKh=x1gx5ey z!rJ)+>`YLT-3%LHIs5ED#(#2lB1E;st5}u$dF(k*6FLKXVHc!f-A?Ro*aOEv{ztHf;Sd~z1E8k154#_J z1^H>+QJ4dXRQ{(xHTJk=PhbnPd=fhfdm4KdF2V)41ef6oyax4Z&!8VXg(r}n?XF|h z#)o262;hl3)QeFZN;J9q&_ z@qLc{8I+i>@C81@A3%b6ri6g9_$|okcX$u)EUR|^$y)vs`vGc#w)+VGT)zWN**puY zsS!V{iq4bp|6E7;d$A$`#0MwDg(wgU;t@w&h)FnxARHYV4ZK137v!ty9~Dg;Y(A{~ zRQB;$_QBfAzAPt#gwmll`}asfATi_u-JnpJX2WKJjBt%*r973E@lS~j1RbFgnGDp6 zCdKYT3&8qYS_*7(E1Vje9x^~WNDEL+hFrUYiI?{peZzg+E5E>Ky|1FeboMYu;Z#M%(o)0NH`SAK`AH!D_K_n+XVX) zwm1}nLXe&93u22xAnOZbi&)F4SeFviYLa37At{t(y_$H5FakQ7vM?W^3|2R=lx5O2 z5Yhax!d0LWC^1^D3^hSV)EIt-x=;s{OVS&F=AG+TR{=uRT~;uEF~T7aCD6V0)$ zux(k{lCX+HIiMW|qSs=%y|t_aN!NNi+=XywYq>1Gy6Pzn>b{#pcgl4H>n8$JxRgJE zO|TktKX3(hDGY*v&fddc3{U!X4xfN=08(m+s7_J@9uj%D>J8dqp%YBj^LssrcI z2V;jpJC*-X0z)j+jK&jI>L$QA7z--zF)$iN!AMYj&^bW};3|i!5y+b_qn@nJS*n z7fSqM>@uv1;v_aKQd#`1C|0pDa#1X2*)9rY>q?dtk@!ZW8?n;YV%LDSSKL~^4mQAg z*ao-pdkYiUzsD8?ou^k5$!5YS3G0-+7&a+l*oqzjI%jKKp!EuCovc09-){NX>$T1v zhN}W9LB~Kvqg*=T$n_(u4kM^ysBF|b^@Lr7Rl}8aDsLt7ki*2O%JjaPn1)^v5C=5M zDFJuTqhTH33I7~n{my!Ol=Y186SxJ+gtK5Dv^}yqiguKJ>tIe`j|0UU=Bi9etjbb1 zs&sU!xVr79qpXe9kUW;-ImnEj z2`&)63Jcg)+g~Ak2`I5W)kSW-e3bc)rAPlP{1B9^~k zzk!|o-ej=@a9LtW6;7lg!9fTpE-!x+7Z=DnO_#>&s)yLF6p1%yK15uZGp5 zBy?3CHL=y9h8N}kZvzXv570@-ZvVVlW<{xS!cC7ppGP%4SJ&ezxIkf+4ldXR}B02Zt?%W zUaefqCxR;01nfA_xkCQqE!|$0kHUK5!?nRA97+<7?4Zc(*R~2vvm$hb*Ri}7RIF>jjwgcfM%Vz+VYT}I-lTRj3!7jIYz5mv5w~W& z1{2MoDKr6{9czJ3snwwxsDJ1|wpJxPpKxhxMF@p*Pzp*w70?(!Be5qcf2D3W_Axwy zyKo0?!AyIjx!ptlvvP@V#@|6M7gZhAU*vZ(JRwVDRU*J2uf#2a9e1?zk3gn}8 zuVEeAzQxMVzQd|@@8M6CzZ@idfImQC8(aGm?US|MPJnhMUE6#GZKEA10clBe8gPRA z^|)_J2n6}1!0HbI!t5PHPN9w_87sX&e^#R>F7+6f9&(EVdd^r!rk(l`){!T{CIUS^ znh+8|e252nFe)~9gL*GJQ9Mc<<~nLU*re>y4wYIxai!%bSUou#1N2;(5)c)%PTL6i z%W4~i^?b4t`HvmBia@&UqXUkk@|U12u~*tj0N$4-PaB}`9T+1qMaxuj(q zdtZwCoyuQ=y@4u~%2_#)3UsvEfqZ0DzAD?u{#vKvQV~g4cny9Udar`WzW+R+Fzqn1 zLpC{y3vaD^2>inxd zUlEswG7>=%+x@k=V>^N(tkVv4t|&*iEJRL}{Ip&PR9uQjJC?>j*I%SmWO)t?M|he# z3YtfjDG>`AIj4H&PF(qNh{?`uA{=wOT@@326 zx=2jSnq0+?AG++HEI)h7!JhJHGR<^o>h$#-ZiY2=?W4*qQl?Af6!;%5cOdWjgKZr6 z6OWSi#=IgCA+gAZEI7=pJ9p{2yM1mtJaYzR3uaHQE3FKyNf7claNwo!O@FLui|w%-$a~)U_^z2V$PwZ+vD!L)9Yvj{!|&L#PE)VB(>I_k zTgGS0c;_>uXrHE50*)_tHp-3saGLRWc#bu1o;&?285|Sg80|{*Br8%qjP)ZUB3Q$T zKKy%F)!iMJSDNYYTxBWyEgKrY{McpRJ36h%$(xfVehZH8n#tUPynbrl1bX{^`_qb0{S*pzMQY{?sE*SB=~`J|vO z%m4ARk#R3wiqgs988?c#)zX>YUr&t3WzE{wD=(f%xI3{9o?K!&Vv)IhfdkoWa$a&K zHceYOlkq~^0j-ewo0%AY{dHp!HeJ;*=caZqo6ccVYKQ8_JkvRsx1Ybd7w(IM*Y%ur zz0`-f?A0y-SEPQPZa>d;W?Tj`>8+{K+TNj$32W{2b~_~YCdz^_%)Hi4-`t~!P;s8E zz2Z#ScXJ<5|8u(A;#Xwl=gV`0dSsol+xp3q|bC3rF_Yrok`HOpb!FO~p1& z-{^JOC>h%gHjR%seaxUX&J?`tcVARebkOW-Lm_TAZ`wHh?22Zk(-dy&Od9ZwybECC zX-hJ_`0%jBGb{T@aME~FyHgu;#xwKIVhhGI%i21F+#CCtS8bi%j^6RiA7~*(sHU#& zhR1&OV{r_Yhn?7^o|7&J*_fh2gj5ai?Wo{mMsL8=T@_81_Rge^20o_VMyIc7#DdifsIi?lkV|g2 zzdY`>cjodOZ<2IiCrJ{U&<@VfkknL8^+CrAlqz8QEUrYVRA)HoJgiZJNqIecgY*qj zK60g(@}bjBY)*Bc{3_!S2ag58mnzO({4tMJN_hOow#4cxI3JU}BQ;{GS^vc86D25^ zJXmikb)<_pPY0ZUD2w^5Y@Kv%%|1WMAV*S@e2{V_smZaKt%9?KcvMMh&WuCrl62}U za%GHpMjW0iOodsPGbTkRO4^-^iB08B&dPR{nlqi8&c7{qJ~aJi{^jlKpM#E!@(M4v z`TLz)_3qRl9eJ_^1!c<_?20x~6oR>}0&<0WCo{D>yXwR!J~0!plUk^39Xo$Rjj#Pq zYx|t;rbtEEi=%%*tBN=2oTgCGm~r#EJk^t zr&%eYuo9#+S-QHTnze;&++fy^b@~)=R|2{sRp(eM&Ya2boYji0?2avsJBQkNo-Mz8 z;gkNX;gpky0|-iE))1e&sUr#p=rz+n$*Afm?qs^)%5H-XJRKO z-wHI9>X&fv(Y zsg~Ys??G{oH_9GwvZr}^GiM<=={hY1`*-A70=3$ki)zGL+>DRhxz7QNQFfY+J^#u_ z`mTjN8L`YXZx9{LGMZSuIMuJ$Y`wO?iUi7qMPUfdSo{~y~$3? zae!&u`^SlXv{~DmQ{&z2?k?$2K*DdcpTzYgX>4I=Y=a+vX>=?;}99mBJg z%@@x(H+Rbq$57T(V9lGOo12!%cHoG;CfH-TDc^@|y^KR49NHF$H)m)2Jn3zRJRW&y zp!^HpmT5||S6e4Q*3PSfBp1wY2*{7Qf5swx}IX}UiDtCmaOi8HFEI(li9 zE4sWIsD3e?eMxe+H%Mbs?!Dj44(mUD| z+snB*#YD~k8%&CR9R6K4qB{xSHFA3Lz8AOqxHe+=l-t9b!J(qt=pDEEyzGU&+-vgE z_h-pvI`kuf)$mXT1tiYc0XOhVi(lTTW4BGpooayX zm&=1UfWIcDkcbk{Yk}a zJQRDW?Q1{eeY@|Z?Gfy;-*oOzDju3qn1EOz?hJ4Ba^|37gR*kUbXTTa9zh{yFEQnA zj7L^tn(Eol=i%ssOMiHbWsT}rlc=$$H#gnX+qf!Xh{q}uf1lGQkfRRvIE$C^vh2w! zRqDNsU)A=?d$?XtC@s(taE*^cz4P z&BZ~vemQp3L=UGg`}2nbJr)k0&&_d6K>Pyk`kbuBmWUnYkM{iGm$$&wfll8_EpSjp zDm`;d)k>dl4*TISiZ!a9A+1u+_;~1C=#Mq0Sff+>@a{X)I?60$T z>JOMSEZ#di#rL-5!&E?Y&AOaSR?wXJm3%8)&}}!qN{x%BCrvcr6clH0>w_i3{hp~tI=KT<71^*RA-Glt#iA{U&n?0|e!*e!@E@ifu z`a{X2W7cAX@4*{q&V2jLmBAWPd0aLVhB|{oiWhTV6m=a@=G&&lX>=*6ks~Ewzfiy9 zw9|3>4-Yl*JVWu-rJ#E-m`K-Fj0atVICrufQA(IOBXn^v%$Xp1mJ;q-;VQO7X8bVD zfY!;&tQp4D!v=G7n6qRI+s~_{nG@>m8xX&wJ4u7qH9wsxUnLc+l0^0KFKI%DbKPE} zlnEbBpAv;Vs0Ho$egC60*YZclGY7*@ItMD)rs2*^|JyXAvD5JHMG{2ib01oXzf#MQ zJm*kVx=}_tOGLk4#yu2XVeZcO>nyG5xQgYb>Y|}tIkR)5Gc@E9!0*SWPXbAQFuO|6P5GU>$ixQtgEchP_uWGGbrG{QxUngQjsGaOwd0Tt-=iY zzgS;K!m4J?7>X@&)c>)OufxB(=|7e+lIya-9_<7<+_}g{U1u`lu&a@ELN_zUanVA7 z#G6N7>^s|;+;VsP{ff5WXGnXCJf5f5YeAK)c|L@J+_wVWcXO7u96nU_cLdR2dBDrQY8Ham7<64fayVD%} zpX0`0cek0y%$xS3{rw-tO_5G%$^S*h;i4-s|4is#IqEsl zq@L#XQHE-MWsuX#C-)`(KV$u?CfkSX9^aZHlil@i{B)YurRJ``qzE71bW4*-5o!J1 zl}r`Hz13gsz;z*S$8^<{obe+q_KyG0EzZ|{rV6$jhjoGQ_eyU?AE?s~AIpl@a=hg4)GOI8&kXaO zdF{4s9g8|`I}uh-;BXK45}Qx+odLF+DYL*C5O9X68=Y|D{#5FE+(IwhgT$Q7SBDhn zX2KUR&TG=mJ@Va~t<P`1Wg0>BEjfH&zU0yr! zN`P0{9ve3aXA4J??j~@N>k>*=rtV1q zGCW((oE}}en+{sl&r~|*^fU7oF^4kEl)uk4{z8*_F;}&#%*p$#>9m*={Q@&;G2_BN zd%8z#wW?gGQ2+O%cR3JitP!P`*}K>o>L~DwiL-=qWRkJ?5@#rJja%Xj_8;EIePnf7 zRI6FHboUEvsH=TWd=vSeJo}tyGB0JH-%Z1%bl+^SvBDb++L1V%e8b{nGU} z&6W}A5VM{|&&lS&GG~Rq>Tk9jrs8t05T1m)Z_9iL9rr5dZ>in6?YbOrU!OSmZ1}9@ zq|sf+1Nzl)kCWp>zf&#w%N_MyrGvk#QtCpThLUWByKS-fw;HI`4r|98!;2qozK;BZ zOu?1^!`;UO9-6XeXA()^?X|mbI!b9#T|hUrv7S*(QBx?G;T)o9pw0UM57Ca_c^#2j6Kv$ zTuo0p${bwH==3a(s7@C}N_)}dSj!2SD})wn$sqR(t#9Os7Fxu~wfO&IYTG1U=N#&& zJ;KacM?p6p;Z9x2Gj*$dC{Sl1snZ~d>shNgbRA)y%P}0s7#v1{HXnyhzY%V5RJCQq z=AOsNJrV~stg-dmw{{l1Usy4@Z--4`jV9sSkLefZe&F^JtYJfK>dpcG`8XuOq1}az z;di1tOGkqWFpIV_Up^}MK0l}O!GQ+0ixub>b70z_A8TsQGN-g{(^>9=&hX~etFB32N8l0S zj=eo=G!j@mb*Sf(Nsf*)vv<+Ko-p3K zIh)Nj)pk3Bb620|zQH}(S+(Y;tXrlj-xD1VnVv8r|dNL1*_( zOA>=>igV}As0{4I?_3c`OXIwJ6&%&{&wW;^arY3To`Iw*IcI`ZGy>6A5&x>v&inT zSyWfd@$;HS`zTqinx20nRjxU}M6Mz3db4^T9cPIJCh$84)`3G$$$|BqoVRn-_R}@^ zvC3kc`HZ9gW-D*f1t!juqHm2zg~j+~KMwyoE9gqa0Mq_Ew6xI5ZKH5RRye!Ol|BIQDi8t&1DH5xgr95sLF zz}O#}u|_>BYepDPM)&@+anSh2(L45*k*VT!$ANpia&SF`k(kd7JKHkMl{0tQ{g2sw zTLp%5vsnr#p4h#M9p@f4S=M!vrkVBV1)X>0#OC=iI_-bGh3^_v@NiDxafarPbmrG@uC9MYs8QMxC~IQhK7(HgrtuxU<^)3Mf@+F1K}nmH%9P3*hg zBKHy;~#yBd!KnrHeb-hE6L9e&mi6H<_c=Q zX?V&xfDiZHJ;hKz=0=nFH2eBy%AV##n`E<@#-bzjW^>{+g`Fp{d3f4cBF44N?rz*l z2H$6{aE9!@zQuj}XXL|mAM1Z=o!M%HoF+b*0XR6KN0?b>IN?$HPtOpqd;1^;Dpk(9 z#w!>3tYcWMATzNqD*_u zsY~?m!F$~!gJKPflyx=!17*M9$|II1VF7-LG`RN>Qp z`QbRkJYygJOL5TL!^P=76^AA|)%b_Q->>~nn`&1m-q~Z^d2=aFz77czl`l)0^SSH( zYcu}}V;9#5*T*Eg>a6CU{a1HREO^#CbGLeL-Ob(gWY~DK?}al-Ir!V1q60!Vu{Go77$dhp|JoeqGGHIEJbN9s92() z;YM#v)L2GEV@uSS#Fncj##ob^Vu>YcY=|0r?;XG2Ipx4ZumMavwn(LJX)ZjEM*H8z+%%3;6x$g3O zbr=+}B{DBq7I=tdN?{0fG7(p=b(H(~n$Dlb__+jK$?*(yTyzUnfA>fPu18c9M19Pwmd3|MtLe1dY2l$4_ff7{gpUSZwBB#_y+`b1-Cy z`{`3Wm0Rh=IgI`%YE}x79Hu_u605+1#+;(veo}XdB|R?D?ouo&(ZBOw9CvP0{qsQV z)RBD7gZMKVf}dLJ17cz|pHDuw?#gBbxRGN@4GvJLzvQd}S6`lo$}~Md+CQ;Nl$^&Y zOfG~%fI@cxye%Zd1#r5S)?dK7ZF^8G?9U$OC-<%Q&$^%~@1*{9g{hC5eteyKLJzx& z-nt&7vI}Y-@0n=JjG$#2@`3`F^KOF5Tu9G29_?Fp)P1wO$k8gvCy8}|o|xdQ!h{Fv6V*SvNQQFBrH7h!@9AZ8Y-hEfCF~eLu#KR z_|wp92$Y|pcdubdmJ0~7o6U?fnDPIIk5l=+gkszEp%xt$%|4mp9RjHWf1*^ZB5I4rPgikZqfO@6$DKIoOMx0RA9AqxJ+DD^Y;o~&D z1wU>HwZDa)xYckW(=BzdCi;TVai7+wt^Q&CVwl_m>4BN_+C@Jlc9)dutUO0 zT7Dl=Oua_ifmj2nNo-4Q%}L#57&Va+E=Sf4I^-@nQ@aQ1Sdm?DqU8_NZsw7zTr)L?zpQcTr;e@}ktd2Ud%snCrUfDJ z0Rt2;Et4K&S;)(91F%&gw`o7#X$o%(&tX%o{cGInBzz3om{X=2bLsVCY?_rH2^(N}K2T29ghZ_nteN6( zK7IdHXg|?0D~PKx&cjN%LpIUKr`*UCJ;h!qr$|LSAxM?Af^42)mwlJoJ_Fz8{Nu>` zl!MpiAP60QRvyWAsudzCo#f(Dxw?W!#Kc5|=06aIzVvv}u_J+nO3WBbKVUqTjRjW7 zN6#^rg|zxPEZE2N+6|Vq-V3akc{Jn&2C$aKzQ6#?M(u|eU@3kXmA-%xdV(I=(I)NL z!~%8u&2K|4%uv7uP(2h|Y3qUMDfgE9`Kj4f!VAz{9+KZnwABMcgSJa1DLM^Vv1~*I zMl2w#zU&vPRz^By z9rasU1%eR;pUk-3$o!!=;Yy!)BHW%c?}O#SZFK0_ynWSun zQH!_|6{saw`JN;0A`-GMthnx^2w~hKp zQjGE!TFM^B=#~UZYv@jMDaLF~kiE{fl2TENbFzh$s*+w(2W!Zn;Y%9)mJ}pD_tIB< zV|5yzT4`Uu6#iqIl(o5YS_~b54pC3XI;{PQ>}{kV&3JpUb9LF9lysoQ1LRB0vG+e{ zW{BiSCL76JC1+`9t&QZW{R38vNpE+7u+X7L3Zend$vwA!A|Oflgp=M5((*czUTa({bV@O0$C{tJnpjab1jo3^UQ2iDU^Z)r{mLWaK`kDe z@Sy&6p&IjPR9)zVToSSauQVaJ>k6_j7{Ak@)S-dnGftn6mg|%QS=W<1lt-yWJ@9ma zM%R<{AvWBeA_u%5*OP)(eQT3% zeJNTsyf%%mFCpPro7S=4{p!%m`k1%;y5wXp1%(v+F2-)R-gNO94J(Lwr;(mK9-Wqa&@?4EyJimeD95NLtL3XGgGa$(A!-=uK zf|4AMx>8?^rSwtLoh}phr&jbXX9dyQT}o{LxqLvI8%V`S4)$q?UrT9eL&-%otPyQ% zDCJ|l=o?91+MBpwj6g7*m#p0W8!N0}STIz1PV|ujEYuWQ?SP@op+^o_>nmx9BNYFsOgw(o_;v0R z-(qDYvaIA{BU9rC1>#UZbDbnt6-?y@Cn?G{!Bxqw_$hcuubiYVO&xKE zR3v_;nhZH6<**s4`Z`zx#KP-VuQy9 z=MTJEusk1&lE7TOA`cgc6NSh%RZ&xfQQAhRWwpPQz(|j6yV?(2;mRJyGM-8XX zU~L?Z2F@7Imvy5qU8hwc_R7czR-7Lw?@TEnMYuYOjde{k+tKeM1bhR8!#x zGl`1X)JhAbtkjbOnY2Zt~rO8 zGGpuIi5{vh@du|>kPw@ZeLTJ=xl*b-v!b8VVt1&!Oethg zGqErpOzH8r4~jOvhc0E?cNP#97n(jynmMHFdX`MX?!Y9$L%L3+_mGw%)pXQDkhSrY zqOtGw^MuWd#DKPY!gSWSjdC^NIez{BP1ncK6UIRC|LzZ#&s+=cPcdaS zhu`z>ctO0@h<)AuSI*EI4)1^6GH5JYh8=XiCG>ch4>|e3@@}H;J}^uoyP(+=B^;U$ z+i&0BZOI-49+`c_#-sRxHu_+o*Jz)Q)GFbrkJ#|0D#bc}YwhYsk2Y=0uvaQu3CK!3 zS=6FP{kKhB!}1Vpgki+O2;|qZvW-7rT4uaWxAtrsm6ux`CB?P^Px8l>GpV>0%uUss zE|`(?+oZJCQ}O`4+}v;}n%V3n``d6caKiIp^62a(mtUdpGq71#-_9Y*=|U3}xj zjf&xH1H=IkYnt?p|Ml0x_u&zUQKqEqWFv~5zOR*gvFq5>7>cS zT{a#CgeCS{({LZj!5ae)L}W;D9#~9-6P(*VPk%o?g^Pqk_&2UDF4gaafQ(Vc8bAgg zsgdnaBx;xoB(MY41qcK9Lvg^5Pp82*zqj7{ownCcKw#4h+j$)jwhKr6t=G>R7eps;2v0xZEjRwIj?EerdiUM$ zpyUyK>N7&^*w-A~*W;Q<=HX0VA8a2L+)~tO@-FjoGtv`5qU+MLYgaV>j(sjCyB5_6 zcLWtTPB`35_&?LUg0F~w-Mn3pm=yPgXG-(GbHv(#DEPK0;%<$rvsXdCeB74Vt9dT? z$>=Wx8gFL2kzQzd_xHv;?mcA(@&ueccmi&Ku$kIu!cX(~G%F~*^dIa#SAazT8} zQ|rd>J5O&82v5$_uCLWjVNh7~?hvfxN1P!&PaCB0pTm2 zdcPyNxMK-~gErH<*v=llKeoK$#%c3x63@Rn#Phn`?!aOpfQw0X$`vP+tOkIo3U=o~ zG9;|6)yl(LvslPRo~-QAdCA7CJVn#4?>*mUofrxTbE&|T2v1B#jy^=OEmTPJ&dc?U zizBnyWXr7QrjNzS#_dDb_NBy?=vMGP`6WTdyfmW;;obPb>QWuTN_rmI52|Z2xyYY`!@n9Pf#8iCj876AUD&_~*-?#*1wGo@a$N&7ub>EPdIMbQuXDT2K(Equ0>$CdS z*~H2rp&~T2wd4}cOR6$z3)`4myt{G3G5c8@gy|4cuT>X?y>c#yVLSyiv9;uy+_d& zBnbW^uPbpOcRivB>h@GNK=NmwH?zot9w$OX?^dv9-S%`GPfbvJ(Ph@N@TV~&;#iz7 z826u{%av3dhLdn)dx{K(qZk83CJ4_lJvNvedhFuE4QD-z3#{bGrn72Jds-DN1!V$sc!0 z{gOFlvPDMQ!69JBG6oNXx~O!WX>AB3wz9J@c$qET6W7j7?4?q&%@j*Wkq||`p%BH9 zC>kD$aGH>@Bh3tz9PN_22p9hQF0>9nZ9X^A(?%UV!+bqlLdA9*khuUdmZk`Faaqr=c{v;a?Y%=vt4sYsQwfYQSFJ0^AQw`$=E_xkGa*jp!DLeL$X zXAoP}oeqUTG1bMwk-Ygd@$9fhHo?GZSFzm97!x6G4jwf8$S& zf2)-?40(eLykWB~^h!Hj?(E5$#OU`U}@#n28${BxPa%`2U3y}OTJBV#}{ zx5$uIjdSJcVT@H^&tvi%4RgaA-qR}+ui%E%(3w<9GtON1~;^jr`LnR&*EQ=qBri|5BL z%rLKGNYw%pXj^4=w3ekS_wpBfH0evd+d~5Kz^GvatfD+Ap*Q;qIYj;VGQ9o1QGb`^ z02b8oVtw2#*w@>q`7?2T=X2x{PwP5^pgf@x;;JF>W4BX znTxi2%{J^nevKa>uy7Uw!hEILCm+sB*ixI-&oCZwrdS zp2y=U=WWSJ9i;d(p6YeNIK6raE74_Kr$yiG?jlM9*+;wzv$Su=Q)DbKEvy(Q+KYIa z1zMqX`U#m$SlO$GVcq_;iYd?l!VceS?&rUsu+WQroWwZA-Wkx3N?6-&z+gcZ=jKogvbcH}wx)R|#GhI;{N07$}@gYSD~#Qn}8Y};2V^@T@y%iozboUFoA37BVZJNDMb}k#8}k}66R!G{4KQ=* zB%+)_s z?863m&#<66&`YySWP!;l6r{Cmcg_4(ofUb|Y`3#)+su|rCZe@~2^#?BG^5WafYyN4la2 zi8ED61ehdl9?T2YEE@A~S+3MNzTARUvmvsQnO!YDHD)?hSBua`TnC&^9r|Hb2d9&L ze{hEl8)2`bklCTYU1ryfWuX$>(G)tkzxCRb^xVb%p4kkdNr$B=pHa;1%U6+1D66Het%px;umc1%3 zok9mnQBBRXEzgBK2wK%oFneU6-;eebdXmz5A@%gWpVTFXl~2w@>bVdOuxzNAgfLk0852C~?Bm2hS#L z4~XdB>3$PF9q@&xOIQ46A(X<#{p!7T2rh{`KqCf8k*W>tXsz6iwbwL{5ag*$-zj55 z&xTj$3wHKN)>~^0Mk!B&6oVT`5Q*(rRhedljjg=i&LI4KTl`OLJliED^-`1 zoiQ#YJtKn-|4q^c)d=#}`PbY=hfoIg6|FzVFqfLH;OnHMh-s*S; zkMUST&$>i|NxaU@8tth|5u?sR-ce`FW%tO3)2%d|vNkWY($M<8R@Tlk z3>4l(rd=6U&6-u^NA9RHi@HE6ERejJV64O598I}os*Dn{VKr)CFxAMo%Ss}zxmH@* zFvUvUi2XF8r5R*I2OXb@4y@X}DPxGSypL)S^n!FI>m@Ng%OBZSQbt<2`-wCxnu$Lk zESAz@!b%@8G8g(XBA08qQ8zj-B@7>{S!wIAj2K$*%ouI7vufs22?c;kzvy0bt7eTW zXaQRBg99hmq@F-yi80I^3ub|v4$#!R^z1DEG(&D$wH7(1^f87!W3thhqsvYl!6rF5 zJtZa6n4E6VjT&twG)9Ajfm8PLcc%fT4^`#4- z202#VEvq*GPW6}aq_nKwBSWvohAxO2+?TvtR%IB-RbO%K4X48Kk|)`GZx!Om!XrqGaVGNh!8gL>pb%T1YvjP&uw4q4fW z8Aku4(WWuRT=@rM2tRW1(&(R=4k;cgJS8=$%hPap$DdrW zn#xH##=c13L6!)vFm)QL_l%4{B}Nc=rb}+kDw78~>oOe3@~V`fWS?#2;bcZN&{g2`0aEWQ z$qE)JnGKy=N;$U*nK{{ij*i}U~h delta 87086 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� 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 diff --git a/mobile/package.json b/mobile/package.json index 48d9e94..aeb2cdc 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -12,6 +12,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { + "@farcaster/auth-kit": "0.1.4", "@react-navigation/native": "^6.1.9", "@react-navigation/native-stack": "^6.9.17", "@shopify/flash-list": "^1.6.3", @@ -23,7 +24,8 @@ "react": "18.2.0", "react-native": "0.73.2", "react-native-safe-area-context": "4.8.2", - "react-native-screens": "~3.29.0" + "react-native-screens": "~3.29.0", + "text-encoding-polyfill": "^0.6.7" }, "devDependencies": { "@babel/core": "^7.20.0", diff --git a/mobile/src/components/app/App.tsx b/mobile/src/components/app/App.tsx index 653ba9f..4659d8b 100644 --- a/mobile/src/components/app/App.tsx +++ b/mobile/src/components/app/App.tsx @@ -1,5 +1,6 @@ import { FullscreenLoader } from '@mobile/components/loader/FullscreenLoader'; import { Navigator } from '@mobile/components/navigation/Navigator'; +import { AuthProvider } from '@mobile/contexts/AuthProvider'; import { NavigationContainer } from '@react-navigation/native'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { StatusBar } from 'expo-status-bar'; @@ -15,7 +16,9 @@ export function App() { }> - + + + diff --git a/mobile/src/components/navigation/Navigator.tsx b/mobile/src/components/navigation/Navigator.tsx index 6b88e9b..cef2fe3 100644 --- a/mobile/src/components/navigation/Navigator.tsx +++ b/mobile/src/components/navigation/Navigator.tsx @@ -1,4 +1,6 @@ +import { useAuth } from '@mobile/contexts/AuthProvider'; import { FeedScreen } from '@mobile/screens/FeedScreen'; +import { LandingScreen } from '@mobile/screens/LandingScreen'; import { ProfileScreen } from '@mobile/screens/ProfileScreen'; import { RootParamList } from '@mobile/types/navigation'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; @@ -6,23 +8,37 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack'; const Stack = createNativeStackNavigator(); export function Navigator() { + const { isSignedIn } = useAuth(); + return ( - - { - const { displayName } = route.params as RootParamList['Profile']; - return { - headerTitle: displayName, - }; - }} - /> + {isSignedIn ? ( + <> + + { + const { displayName } = route.params as RootParamList['Profile']; + return { + headerTitle: displayName, + }; + }} + /> + + ) : ( + <> + + + )} ); } diff --git a/mobile/src/contexts/AuthProvider.tsx b/mobile/src/contexts/AuthProvider.tsx new file mode 100644 index 0000000..93e4337 --- /dev/null +++ b/mobile/src/contexts/AuthProvider.tsx @@ -0,0 +1,62 @@ +import { AuthKitProvider, useSignIn } from '@farcaster/auth-kit'; +import { + createContext, + ReactNode, + useCallback, + useContext, + useState, +} from 'react'; + +const AuthContext = createContext<{ + isSignedIn: boolean; + signIn: () => Promise; + token: string | undefined; +}>({ + isSignedIn: false, + signIn: async () => { + throw new Error( + 'You need to add an AuthProvider to the top of your React tree.', + ); + }, + token: undefined, +}); + +type AuthProviderProps = { + children: ReactNode; +}; + +function AuthProviderContent({ children }: AuthProviderProps) { + const { signIn: authKitSignIn } = useSignIn({}); + const [token, setToken] = useState(); + + const signIn = useCallback(async () => { + const res = await authKitSignIn(); + console.log(res); + setToken(res); + }, [authKitSignIn]); + + return ( + + {children} + + ); +} + +export function AuthProvider(props: AuthProviderProps) { + return ( + + + + ); +} + +export function useAuth() { + return useContext(AuthContext); +} diff --git a/mobile/src/index.ts b/mobile/src/index.ts index d1f1656..0d7c7b8 100644 --- a/mobile/src/index.ts +++ b/mobile/src/index.ts @@ -1,3 +1,5 @@ +import 'text-encoding-polyfill'; + import { App } from '@mobile/components/app/App'; import { registerRootComponent } from 'expo'; diff --git a/mobile/src/screens/LandingScreen.tsx b/mobile/src/screens/LandingScreen.tsx new file mode 100644 index 0000000..dce6181 --- /dev/null +++ b/mobile/src/screens/LandingScreen.tsx @@ -0,0 +1,36 @@ +import { Loader } from '@mobile/components/loader/Loader'; +import { useAuth } from '@mobile/contexts/AuthProvider'; +import { buildScreen } from '@mobile/utils/buildScreen'; +import { useState } from 'react'; +import { Pressable, Text, View } from 'react-native'; + +export const LandingScreen = buildScreen(() => { + const { signIn } = useAuth(); + const [isSigningIn, setIsSigningIn] = useState(false); + + return ( + + { + setIsSigningIn(true); + + try { + await signIn(); + } catch (error) { + console.error(error); + } finally { + setIsSigningIn(false); + } + }} + > + + {isSigningIn ? ( + + ) : ( + Login + )} + + + + ); +}); diff --git a/mobile/src/types/navigation.ts b/mobile/src/types/navigation.ts index aa6611e..b579080 100644 --- a/mobile/src/types/navigation.ts +++ b/mobile/src/types/navigation.ts @@ -1,5 +1,6 @@ export type RootParamList = { Feed: NoParams; + Landing: NoParams; Profile: { displayName: string; fid: string }; }; diff --git a/mobile/tailwind.config.js b/mobile/tailwind.config.js index 396e4c6..ca33b2d 100644 --- a/mobile/tailwind.config.js +++ b/mobile/tailwind.config.js @@ -3,7 +3,11 @@ module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}'], theme: { - extend: {}, + extend: { + colors: { + 'fc-purple': '#7c65c1', + }, + }, }, plugins: [], }; diff --git a/web/.eslintrc.js b/web/.eslintrc.js index 653f6d3..669dbcf 100644 --- a/web/.eslintrc.js +++ b/web/.eslintrc.js @@ -1,13 +1,13 @@ module.exports = { - extends: ["next/core-web-vitals", "plugin:tailwindcss/recommended"], - plugins: ["simple-import-sort", "unused-imports"], + extends: ['next/core-web-vitals', 'plugin:tailwindcss/recommended'], + plugins: ['simple-import-sort', 'unused-imports'], rules: { - "@next/next/no-img-element": "off", - "jsx-a11y/alt-text": "off", - "no-duplicate-imports": "error", - "simple-import-sort/exports": "error", - "simple-import-sort/imports": "error", - "tailwindcss/no-custom-classname": "error", - "unused-imports/no-unused-imports": "error", + '@next/next/no-img-element': 'off', + 'jsx-a11y/alt-text': 'off', + 'no-duplicate-imports': 'error', + 'simple-import-sort/exports': 'error', + 'simple-import-sort/imports': 'error', + 'tailwindcss/no-custom-classname': 'off', + 'unused-imports/no-unused-imports': 'error', }, }; diff --git a/web/bun.lockb b/web/bun.lockb index 065d6267011488b5b6ccfc36061eb05be6dce308..f6a29edb5b85c5bf20bc1cde1292d9fe46f5af4d 100755 GIT binary patch delta 15868 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 delta 15773 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 q*|e9Hwl#&Dl-~Y6II2h0Y signOut()} > diff --git a/web/tailwind.config.ts b/web/tailwind.config.ts index 3649b9f..387c55b 100644 --- a/web/tailwind.config.ts +++ b/web/tailwind.config.ts @@ -1,11 +1,11 @@ -import type { Config } from "tailwindcss"; +import type { Config } from 'tailwindcss'; const config: Config = { - content: ["./src/**/*.{js,ts,jsx,tsx,mdx}"], + content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'], theme: { extend: { colors: { - "fc-purple": "#7c65c1", + 'fc-purple': '#7c65c1', }, }, }, From 26bac90ce2c0fb9bf4ed11e0a10fd5bd0e1f8563 Mon Sep 17 00:00:00 2001 From: Nick Cherry Date: Sun, 28 Jan 2024 16:31:04 -0500 Subject: [PATCH 2/5] update hosts --- mobile/src/contexts/AuthProvider.tsx | 14 ++++++++------ web/src/app/api/auth/[...nextauth]/route.ts | 2 +- web/src/components/login/Login.tsx | 20 ++++++++++---------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mobile/src/contexts/AuthProvider.tsx b/mobile/src/contexts/AuthProvider.tsx index 93e4337..f5c3ff6 100644 --- a/mobile/src/contexts/AuthProvider.tsx +++ b/mobile/src/contexts/AuthProvider.tsx @@ -6,6 +6,7 @@ import { useContext, useState, } from 'react'; +import { Linking } from 'react-native'; const AuthContext = createContext<{ isSignedIn: boolean; @@ -26,14 +27,15 @@ type AuthProviderProps = { }; function AuthProviderContent({ children }: AuthProviderProps) { - const { signIn: authKitSignIn } = useSignIn({}); + const { url } = useSignIn({}); const [token, setToken] = useState(); const signIn = useCallback(async () => { - const res = await authKitSignIn(); - console.log(res); - setToken(res); - }, [authKitSignIn]); + console.log(url); + if (url) { + Linking.openURL(url); + } + }, [url]); return ( @@ -49,7 +51,7 @@ export function AuthProvider(props: AuthProviderProps) { relay: 'https://relay.farcaster.xyz', rpcUrl: 'https://mainnet.optimism.io', siweUri: 'http://localhost:3000', - domain: 'example.com', + domain: 'localhost:3000', }} > diff --git a/web/src/app/api/auth/[...nextauth]/route.ts b/web/src/app/api/auth/[...nextauth]/route.ts index 93a8f57..b604fb4 100644 --- a/web/src/app/api/auth/[...nextauth]/route.ts +++ b/web/src/app/api/auth/[...nextauth]/route.ts @@ -31,7 +31,7 @@ export const authOptions = { const verifyResponse = await appClient.verifySignInMessage({ message: credentials!.message as string, signature: credentials!.signature as `0x${string}`, - domain: 'example.com', + domain: 'localhost:3000', nonce: credentials!.csrfToken, }); diff --git a/web/src/components/login/Login.tsx b/web/src/components/login/Login.tsx index 2123764..62ff225 100644 --- a/web/src/components/login/Login.tsx +++ b/web/src/components/login/Login.tsx @@ -1,22 +1,22 @@ -"use client"; +'use client'; import { AuthClientError, AuthKitProvider, SignInButton, StatusAPIResponse, -} from "@farcaster/auth-kit"; -import { getCsrfToken, signIn } from "next-auth/react"; -import { useState } from "react"; +} from '@farcaster/auth-kit'; +import { getCsrfToken, signIn } from 'next-auth/react'; +import { useState } from 'react'; async function getNonce() { const nonce = await getCsrfToken(); - if (!nonce) throw new Error("Unable to generate nonce"); + if (!nonce) throw new Error('Unable to generate nonce'); return nonce; } async function handleSuccess(res: StatusAPIResponse) { - await signIn("credentials", { + await signIn('credentials', { message: res.message, signature: res.signature, name: res.username, @@ -31,10 +31,10 @@ export default function Login() { return ( Date: Mon, 29 Jan 2024 12:29:09 -0500 Subject: [PATCH 3/5] before removing the trashfire that is next auth --- mobile/src/contexts/AuthProvider.tsx | 21 +++++++++++++++------ web/src/app/api/auth/[...nextauth]/route.ts | 13 ++++++++++--- web/src/components/login/Login.tsx | 6 ++++-- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/mobile/src/contexts/AuthProvider.tsx b/mobile/src/contexts/AuthProvider.tsx index f5c3ff6..5c4fc40 100644 --- a/mobile/src/contexts/AuthProvider.tsx +++ b/mobile/src/contexts/AuthProvider.tsx @@ -27,15 +27,24 @@ type AuthProviderProps = { }; function AuthProviderContent({ children }: AuthProviderProps) { - const { url } = useSignIn({}); const [token, setToken] = useState(); + const { + connect, + url, + signIn: authKitSignIn, + } = useSignIn({ + onSuccess: (res) => { + // setToken(res); + }, + }); const signIn = useCallback(async () => { - console.log(url); - if (url) { - Linking.openURL(url); - } - }, [url]); + // if (url) { + await connect(); + await authKitSignIn(); // Starts polling + Linking.openURL(url); + // } + }, [authKitSignIn, connect, url]); return ( diff --git a/web/src/app/api/auth/[...nextauth]/route.ts b/web/src/app/api/auth/[...nextauth]/route.ts index b604fb4..f13e187 100644 --- a/web/src/app/api/auth/[...nextauth]/route.ts +++ b/web/src/app/api/auth/[...nextauth]/route.ts @@ -1,10 +1,13 @@ import { createAppClient, viemConnector } from '@farcaster/auth-client'; -import NextAuth from 'next-auth'; +import NextAuth, { NextAuthOptions } from 'next-auth'; import CredentialsProvider from 'next-auth/providers/credentials'; import { getProfile } from '../../../../lib/services/user'; -export const authOptions = { +export const authOptions: NextAuthOptions = { + session: { + strategy: 'jwt', + }, providers: [ CredentialsProvider({ name: 'Sign in with Farcaster', @@ -23,6 +26,7 @@ export const authOptions = { type: 'text', }, }, + async authorize(credentials) { const appClient = createAppClient({ ethereum: viemConnector(), @@ -48,6 +52,9 @@ export const authOptions = { }), ], callbacks: { + async jwt({ token }) { + return token; + }, async session({ session, token }: any) { const profile = await getProfile({ fid: token.sub }); session.user = profile; @@ -56,7 +63,7 @@ export const authOptions = { }, }; -const auth = NextAuth(authOptions) as any; +const auth = NextAuth(authOptions); export const GET = auth; export const POST = auth; diff --git a/web/src/components/login/Login.tsx b/web/src/components/login/Login.tsx index 62ff225..543666c 100644 --- a/web/src/components/login/Login.tsx +++ b/web/src/components/login/Login.tsx @@ -16,13 +16,15 @@ async function getNonce() { } async function handleSuccess(res: StatusAPIResponse) { - await signIn('credentials', { + const x = await signIn('credentials', { message: res.message, signature: res.signature, name: res.username, pfp: res.pfpUrl, - redirect: true, + redirect: false, }); + + console.log(x); } export default function Login() { From efaf3fa3215af62d0397a844cb63e66d80bb6007 Mon Sep 17 00:00:00 2001 From: Nick Cherry Date: Mon, 29 Jan 2024 14:51:49 -0500 Subject: [PATCH 4/5] asdf --- web/bun.lockb | Bin 204824 -> 194581 bytes web/package.json | 1 - web/src/app/api/auth/[...nextauth]/route.ts | 69 ------------------ web/src/app/api/auth/sign-in/route.ts | 33 +++++++++ web/src/app/layout.tsx | 14 ++-- web/src/app/page.tsx | 28 +++----- web/src/components/login/Login.tsx | 33 ++++----- web/src/contexts/AuthProvider.tsx | 73 ++++++++++++++++++++ 8 files changed, 139 insertions(+), 112 deletions(-) delete mode 100644 web/src/app/api/auth/[...nextauth]/route.ts create mode 100644 web/src/app/api/auth/sign-in/route.ts create mode 100644 web/src/contexts/AuthProvider.tsx diff --git a/web/bun.lockb b/web/bun.lockb index f6a29edb5b85c5bf20bc1cde1292d9fe46f5af4d..9225ee327b06a3fba638f3abc5c55deb4ecdd7d5 100755 GIT binary patch delta 34903 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 l&5Uq6Udu^^8d`> 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 - - - ); - } + // if (session) { + // const { + // user: { fid }, + // } = session; + // return ( + //

+ // + //
+ // ); + // } return ; } diff --git a/web/src/components/login/Login.tsx b/web/src/components/login/Login.tsx index 543666c..d1d0e87 100644 --- a/web/src/components/login/Login.tsx +++ b/web/src/components/login/Login.tsx @@ -6,25 +6,20 @@ import { SignInButton, StatusAPIResponse, } from '@farcaster/auth-kit'; -import { getCsrfToken, signIn } from 'next-auth/react'; import { useState } from 'react'; async function getNonce() { - const nonce = await getCsrfToken(); - if (!nonce) throw new Error('Unable to generate nonce'); - return nonce; + return window.crypto.randomUUID(); } async function handleSuccess(res: StatusAPIResponse) { - const x = await signIn('credentials', { - message: res.message, - signature: res.signature, - name: res.username, - pfp: res.pfpUrl, - redirect: false, + await fetch('/auth/sign-in', { + method: 'POST', + body: JSON.stringify({ + message: res.message, + signature: res.signature, + }), }); - - console.log(x); } export default function Login() { @@ -39,12 +34,14 @@ export default function Login() { domain: 'localhost:3000', }} > - - {error &&
{error.message}
} +
+ + {error &&
{error.message}
} +
); } diff --git a/web/src/contexts/AuthProvider.tsx b/web/src/contexts/AuthProvider.tsx new file mode 100644 index 0000000..a97c821 --- /dev/null +++ b/web/src/contexts/AuthProvider.tsx @@ -0,0 +1,73 @@ +import { AuthKitProvider, useSignIn } from '@farcaster/auth-kit'; +import { + createContext, + ReactNode, + useCallback, + useContext, + useState, +} from 'react'; + +const AuthContext = createContext<{ + isSignedIn: boolean; + signIn: () => Promise; + token: string | undefined; +}>({ + isSignedIn: false, + signIn: async () => { + throw new Error( + 'You need to add an AuthProvider to the top of your React tree.', + ); + }, + token: undefined, +}); + +type AuthProviderProps = { + children: ReactNode; +}; + +function AuthProviderContent({ children }: AuthProviderProps) { + const [token, setToken] = useState(); + + const { + connect, + url, + signIn: authKitSignIn, + } = useSignIn({ + onSuccess: (res) => { + // setToken(res); + }, + }); + + const signIn = useCallback(async () => { + // // if (url) { + // await connect(); + // await authKitSignIn(); // Starts polling + // Linking.openURL(url); + // // } + }, []); + + return ( + + {children} + + ); +} + +export function AuthProvider(props: AuthProviderProps) { + return ( + + + + ); +} + +export function useAuth() { + return useContext(AuthContext); +} From 716b2390e7b9347f5579def2146b332a7cc4941c Mon Sep 17 00:00:00 2001 From: Nick Cherry Date: Tue, 30 Jan 2024 15:54:24 -0500 Subject: [PATCH 5/5] authkit sign in working at least --- mobile/bun.lockb | Bin 460387 -> 460387 bytes mobile/package.json | 2 +- web/bun.lockb | Bin 194581 -> 194581 bytes web/package.json | 2 +- web/src/app/api/auth/sign-in/route.ts | 3 +++ web/src/components/login/Login.tsx | 14 ++++---------- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/mobile/bun.lockb b/mobile/bun.lockb index a9c1f6b2de81d9b77c6c38ef31bf0069e4a3a119..af4463f88867bccf42f929941424d0e2788a8701 100755 GIT binary patch delta 168 zcmV;Z09XIxj2z>P9FQ&`*BHLBvl48FsAWolU5%lm&aVjBZsy)BedWw&XGzw?fljqf z0R||Oltwg%h$sQKh$sTptw70R!e@h)geIB`N&UPjjzB}G2^j*F$`f5hP+v*`xsfq4 zF3R6%{Vb25%Wi(i3=oA;9tap`y*T|=hKZ~Yb%2MR)&jSk)&r=#1_A&80001oOOphL WOOpk+OOpmVGXpX%Ft>=t2HQU%KSvG# delta 168 zcmV;Z09XIxj2z>P9FQ&`uD(+zOn&9Zfk`PvQZ0`dBj1KmXK7a{iz>DG6IyhTfljqf z0R||O6iYORh$sQKh$sTptw8xD9d2j8G)E=iO}~=dA-t0fflf^xW`|MWse;?!@Zv7# zWp7|Y`k*L8Ml(r$Rb|ffu5V2`6Vi+evKphEZLx=))&jSk)&r=#1_3ZGF)lQROOphL WOOpk+OOpmVGXpU$G`EPx2HQW@(MLT1 diff --git a/mobile/package.json b/mobile/package.json index aeb2cdc..c93d641 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -12,7 +12,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@farcaster/auth-kit": "0.1.4", + "@farcaster/auth-kit": "0.2.0", "@react-navigation/native": "^6.1.9", "@react-navigation/native-stack": "^6.9.17", "@shopify/flash-list": "^1.6.3", diff --git a/web/bun.lockb b/web/bun.lockb index 9225ee327b06a3fba638f3abc5c55deb4ecdd7d5..5a0fff88dd243cd3d3f88e065cbb5caa8c6266d4 100755 GIT binary patch delta 150 zcmV;H0BQe~@C%jj3y?1#CQK(1Bzvm55-tQ;2~3;jU3Bo1CT=Im8jsQe%mMSUPKGU$ z)E_jn2rea{K*?jmXM>i6CYlRL{k$oTKtrer83L8c6J146UrGVFkufqZ%HL@HERUee zZhpuN5QR}52pDI*IQ>?JiL4NHfP-z$w{6Y=_%{Xu000000Jm!f09(Drv Efu>4B00000 diff --git a/web/package.json b/web/package.json index 8b000b3..281719c 100644 --- a/web/package.json +++ b/web/package.json @@ -12,7 +12,7 @@ "db:codegen": "kysely-codegen --dialect postgres --out-file ./src/lib/database/types.ts" }, "dependencies": { - "@farcaster/auth-kit": "0.1.4", + "@farcaster/auth-kit": "0.2.0", "@farcaster/core": "^0.13.4", "date-fns": "^3.3.1", "linkify-it": "^5.0.0", diff --git a/web/src/app/api/auth/sign-in/route.ts b/web/src/app/api/auth/sign-in/route.ts index c6be8a7..7092808 100644 --- a/web/src/app/api/auth/sign-in/route.ts +++ b/web/src/app/api/auth/sign-in/route.ts @@ -27,7 +27,10 @@ export async function POST(request: Request) { }); } + const token = window.crypto.randomUUID(); + return NextResponse.json({ id: verifyResult.fid.toString(), + token, }); } diff --git a/web/src/components/login/Login.tsx b/web/src/components/login/Login.tsx index d1d0e87..c5fb572 100644 --- a/web/src/components/login/Login.tsx +++ b/web/src/components/login/Login.tsx @@ -8,18 +8,16 @@ import { } from '@farcaster/auth-kit'; import { useState } from 'react'; -async function getNonce() { - return window.crypto.randomUUID(); -} - async function handleSuccess(res: StatusAPIResponse) { - await fetch('/auth/sign-in', { + await fetch('/api/auth/sign-in', { method: 'POST', body: JSON.stringify({ message: res.message, signature: res.signature, }), }); + + window.location.reload(); } export default function Login() { @@ -35,11 +33,7 @@ export default function Login() { }} >
- + {error &&
{error.message}
}