From dfbebd5d0d1f56cfd297eb335ad0535d0d1f3a5c Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Wed, 22 Mar 2017 07:22:47 +0100 Subject: [PATCH] 1.01-g offline release --- src/Kp2aBusinessLogic/IKp2aApp.cs | 4 + .../Io/BuiltInFileStorage.cs | 52 ++--- src/Kp2aBusinessLogic/Io/NetFtpFileStorage.cs | 4 +- .../Kp2aBusinessLogic.csproj | 24 --- .../2.2.1/taskArtifacts/fileHashes.bin | Bin 151218 -> 166396 bytes .../2.2.1/taskArtifacts/fileSnapshots.bin | Bin 2852097 -> 2912260 bytes .../2.2.1/taskArtifacts/taskArtifacts.bin | Bin 65961 -> 65961 bytes .../KP2ASoftkeyboard_AS/.idea/workspace.xml | 186 +++++++++++++----- src/java/KP2ASoftkeyboard_AS/app/app.iml | 5 + .../app/build/outputs/aar/app-debug.aar | Bin 1722053 -> 1722436 bytes .../app/src/main/AndroidManifest.xml | 13 +- src/java/KP2ASoftkeyboard_AS/settings.gradle | 1 + src/keepass2android/ChangeLog.cs | 3 + src/keepass2android/FileSelectHelper.cs | 2 + .../Properties/AndroidManifest_nonet.xml | 4 +- src/keepass2android/app/App.cs | 8 +- src/keepass2android/keepass2android.csproj | 23 --- 17 files changed, 205 insertions(+), 124 deletions(-) diff --git a/src/Kp2aBusinessLogic/IKp2aApp.cs b/src/Kp2aBusinessLogic/IKp2aApp.cs index ce6f00a4..de30aae6 100644 --- a/src/Kp2aBusinessLogic/IKp2aApp.cs +++ b/src/Kp2aBusinessLogic/IKp2aApp.cs @@ -9,7 +9,9 @@ using KeePassLib; using KeePassLib.Keys; using KeePassLib.Serialization; using keepass2android.Io; +#if !NoNet using Keepass2android.Javafilestorage; +#endif namespace keepass2android { @@ -107,6 +109,8 @@ namespace keepass2android bool CheckForDuplicateUuids { get; } +#if !NoNet ICertificateErrorHandler CertificateErrorHandler { get; } +#endif } } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs index 19cc9cc3..65525e5e 100644 --- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO; using System.Net; -using System.Net.Http; + using System.Security; using Android; using Android.App; @@ -13,7 +13,7 @@ using Android.OS; using Java.IO; using KeePassLib.Serialization; using KeePassLib.Utility; -using ModernHttpClient; + using File = System.IO.File; using FileNotFoundException = System.IO.FileNotFoundException; using IOException = System.IO.IOException; @@ -416,6 +416,23 @@ namespace keepass2android.Io } } + + public class LocalFileStorage : BuiltInFileStorage + { + public LocalFileStorage(IKp2aApp app) + : base(app) + { + } + + public override IEnumerable SupportedProtocols + { + get + { + yield return "file"; + } + } + } +#if !NoNet public class LegacyFtpStorage : BuiltInFileStorage { public LegacyFtpStorage(IKp2aApp app) : base(app) @@ -426,9 +443,9 @@ namespace keepass2android.Io { get { -#if !NoNet + yield return "ftp"; -#endif + } } } @@ -443,27 +460,14 @@ namespace keepass2android.Io { get { -#if !NoNet + yield return "http"; yield return "https"; + + + } + } + } + #endif - - } - } - } - - public class LocalFileStorage : BuiltInFileStorage - { - public LocalFileStorage(IKp2aApp app) : base(app) - { - } - - public override IEnumerable SupportedProtocols - { - get - { - yield return "file"; - } - } - } } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/NetFtpFileStorage.cs b/src/Kp2aBusinessLogic/Io/NetFtpFileStorage.cs index 01c64daf..5e19d66a 100644 --- a/src/Kp2aBusinessLogic/Io/NetFtpFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/NetFtpFileStorage.cs @@ -1,3 +1,4 @@ +#if !NoNet using System; using System.Collections.Generic; using System.IO; @@ -639,4 +640,5 @@ namespace keepass2android.Io _stream.Close(); } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj index 015203d8..32a1ef3b 100644 --- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj +++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj @@ -47,23 +47,13 @@ 4 - - ..\Components\modernhttpclient-2.4.2\lib\android\ModernHttpClient.dll - - - ..\Components\modernhttpclient-2.4.2\lib\android\OkHttp.dll - - - - ..\packages\Xamarin.Insights.1.11.3\lib\MonoAndroid10\Xamarin.Insights.dll - @@ -133,10 +123,6 @@ - - {48574278-4779-4b3a-a9e4-9cf1bc285d0b} - JavaFileStorageBindings - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54} KeePassLib2Android @@ -145,10 +131,6 @@ {70D3844A-D9FA-4A64-B205-A84C6A822196} KP2AKdbLibraryBinding - - {146FD497-BA03-4740-B6C5-5C84EA8FCDE2} - System.Net.FtpClient.Android - {5CF675A5-9BEE-4720-BED9-D5BF14A2EBF9} TwofishCipher @@ -157,12 +139,6 @@ - - - False - 2.4.2 - - qkz-vNB75+9^q6=9)wYD_)sR`iX=clU7Wfc0<;A7yvf;FWAMQzeNR?mk^7C)rJjd6G_S=#wXovIC15`)Gzqby+yG1}az5 z>q4aJhEWG7gPw7Nwkd^Ry+`Wv8#@Dthgn&PZebf&PTKrcv9%RHy+E6i$Iy37K3p6g z$m&_mDPBj}#@$wXA}`Ees3~$m@>GNN`1V_WKh_BWJ*>(0mReucRO{-Pv6p!pM2i)> zPc({k*(PaTSnlC}63V~yH}GDfS=2}uekh^bOhO$YN4d2c$+26twJi*oKWMUopV4Me z974iiiFPOtbcom@)<_QM&zkik)k9?;WcMbwuUUR-(SAaDwZsX|hmp1^h|zG)(|Lz~ zJ@Qk@fe*S{f4|omk|fE8e?uQ$B*~ejw#{AV#)a7z^UhAJ=`xnlC3Tht`0pCR{50Rt zbs6vMplc8K!E_t%xXv0dZERe|jhlLVZT0i$a@of+6f4FQ0a00$#}tPr7?Q@z!r7e9 zpOqnDqc*z2E(>6)&is4ai)}<*+&#B{g+4rAIv!tC&r`+?xG1D=)h#m`XjpZo>z1Td zEXy^h49nNgSeJ05rd1wku8P2yyj4ugL77_Q&$a`gX;fxXDiG?$hX{$_P!Ulb(!z$B z+`_4dZ&FI0cUF?SAPdbP3iO@3mGjLvF`1k}b;{sIJ+}*!`AK=j!qg*lgNb*42iEs& z`1h-0b{aj{+@E`r2VJ5D813E}uqq@C&NF!^6B#@aNh!NKdm1zQUH!2$>WLWH;%iVW zD|gb?50}9wt%qL-R`rkQGYu`Du{*vv^xAWK#4ZJ%WqOdk2Tzo{6%-O2`)3H*lWT0I z6_w__q)GwUK$UysC*X|9+og+t8a*UNHAU)GK)MLcg^4M-yIB>FMv<`J(Oa{1_^u__?4Ae z@t0&+8VuH4-gqEYRqV_OTs9pkIYsg-U||zLBH9zPPu{l5iTuw?(xRS!+rPO!=ctRH z>(v)GZc0X?qh+R_d8@a7FW*`oR8qp>Iimde+7-=88+~xoeeg0qWPKA21o|qeI$Mgj zg!%EAl0R*<+iypbm2i!M3t(9W_MC{5>leMjYNJOr&85|5FP3F=w(nzHPvX_Z%*>Rk zw0d)(p@R7o(iWRr_*R;K>U-Kd%bkn@;Cnb%Uz$ccye>q}VFN|Gd=5KeWLtib~)62h1*2=GZtp~|Z>&Sbt1SP4`6;%B}ptfhz zN+}JZ6>p^L2VnXE@)Q1ZNhT(bvekqx63`7%2cjWJGfV>(Ij+d`_fA(DJD?evd`Y-O z%rwgIL^o+g*z|pWdd!x_GJ5Kr>7=F?`jO~SOu_Yt0ximLA7f(mdOt_35Yu7mq~>p9 zz={7Z*?F_LJ*A)fi~#n;oa_^Bm?15dggfjxZ-#I!$?|j&xopB}+#ZMo>gUOP2&=k3 z4OnxrL{=cqWmikfnaL1r8}u3u6+>wW^53!>9D(ydh#Lcc)`$q82N5F^BC|cUOi83V@F{}|=V64 zbnn8BZbPVanCEab%sXj+0M4y`TvNpIKoH4K*S_?Bo_S`lD{N_dT*I18AC1x9por1( z#r}j_{^cjY=)<^=1b0R1@E8K^%6$MXBPyJ{cfb)+C6}G6=ga8glL?qRKoGdX0C&iM zCmLWtsEI@{Lnf@K3A7_~>HPXTKbqU*^H z{Ejx$o_uWBwaTB``nkf_TF2rEY;mLjk;Surp8FPXD<63b)tfc2u%DWxSF={S)&C$r ztimwic0jx%(t?eyc7-w^yM(Vb`8+D|LCpG>YkTdeylM$w=d*$ZU0L>|q4-#BJZ#lL z+2EV>CnN>krjwNE0%`~H_BI=4g3_*3BiGEZJuv)0Hs`LBgH6=w<^;1R)ZiYq3;vaV zN$}PvXh&|bN5Ib)I=4TNH+Qes;9#uKYqJs|04T;iz_rMf&<4KE~@y+ebeDS?s8x zY&-a!SiSgBM0|jaB_xp*@JhW|3ZiU(F;D;#MwW|MH;qr^oyGJ3)ApAJ4eholhF8+XMBdi-2&4ldn+y^(Qd{e|Xe; zTBWDhWCJ6ISBl;JqszV9XA8;hr4q}65h%W|{HuGy>X?atLn=&t<5a!LleP_c%cZYppC!bV|wG*aE7UT|%vKwK?OMrFU|c z`+CbPJ=M*XSQ$M@IdR{|X~(@nL%a#dr{@4d!B!1zM#(@s&-AQLLtqL0ZJcDRo!R9t zqOIGVZKrl)qmb{F<)_99O_itrvAFK8Sbx91xui>G1!!QMV}U1<;`nW)(xnGudoH>BdOGg9tO=0@h;-Ki^| z-}iTFe@>c5H_1rjQCaSW-$`6Gq}!jq~(H`%FTgz4sLuAp@7t z+sBH*?dl89v&|b-TGtt-BQ~G=4$>{r%z$bJV>FvpIDCer$!vq{l;jC8Axk0o?vA_M#|~nWhSj|puveS%(Gle~8*q>&W4m|n*nV{foqc+LZXO7bb#zs?VDki~ zNu9}8>q;#5%>5ekRo)w|W%Pi%!Z9&d;wIkI&+GcJKPo0=XgBgHJN)bXmA7G{>Xlsu z(9amnbLVDrMD)$YR=h{i+pIgvMdkZ2>o$1SV##EasFuk+H_cxm?$(nPU^B#Qw2UxM zdocl#XKZn)2S`wVST{^lzjpapH<)b^gdsnTz#5k8F{IwWk8N_mxNLR)83EWBMq|0v z>ZpQ`neS#qex#9c<*i-oC^f?jE;Ebe&S{1fOE1=E-!lp{Zn{+lX}Uh>-|!NeOJZa6 z__s^bYm0$I<`2$}aepFS3Os;JWpM}%Wbp_s;BX0_)Ep*o&$rGfc(k_uj;>?#t;+9a&5Q*9%i#<}zcnf*Tc!vy^&>S7>5~H_}SV)ju zRK$;y#G|@Mh^kTSA(XU34cMocrVK!;+2;xX`R;2AnGa>L<~&XtL4J^G zAlA$4<`GzbQ6_N&%?>K3IEr!D#~9hSU}vJ*%LZaE*u&rna3Hlii1?dCLdF2_{cq}P zC35Z6JzxL;a0mbZ(f_XtE^OdzU})fEB5q=B|38D-VwG*hO;MB|GzheqLX9dqg=Z$o}Kll}kjST_v(jhH5 z_c!a0emzdE&!>95-+=n4T3BcW7{di2#S{r|ih~UysIZlYJW+y!YFIt0pX`<%MFuj1 ztr5~9_ZV_4Jj-`FC~kK&f2Bb*Li$Hrtia_k$qq#pn~Th}#zRiQ24E93ntP!Yoi<^B zHD-~2U|J(us3ofhJK|UyZxF=jJz*Eu*@~-YbWZ-*>wm(qJDKXQ$msE)%PNV7sQ0@B zPjQvpLMNC-)CQX`7#x!{-Cl#%4m)f!7bkB$1W&DfF7QmPNB6yGE8)rIx}_V2v2a;1 zNo#8Y2A;HQP)_+LNM)&5x@41nv&Z0u89$qU#J40O80`C~X75j+!3gDaE*E8?YDTKH zP@^bUm7S_@3VtY40aGIkqKcJ9nJ-(7hm37P?T72`(R`ctu$Gh3CM*lB*N6;|R^km} zJQz1?NYvUDz2}ezci-M1E%EscOcpDHTr%>257U@Xi*}gaX>uvCyyaVT^7L3~b;(zM zU|xy_+o?ifpHIN~8C=oecr0k1upX+=lBjVN6_N=CJ>d{OEOLf=DRx;vwmNvXua;O$ z!W%Gk;MmTjD9z{neOkgcD?7NTAq`J>gV4-kk)|f7G3XwXMqT9k8 zLbVqeb$pIn64wXEGxN2 zn83W+^Z%t9Z2a{qG+*QAYdkKo=dM6p!mu^gT6i_yu?EQzRMh^7LHUJryogwTHTuww zQg&A}tud9n4Rj~R8ZyR+)|>j%ei2*gGH0!5qUvr%U!kM#0!~t_J2Nmkq`Bv!&fLga zP-vr_YfW6TOK?y_WQ#OEQmx1MB_!C3Ynr#nm1}NvL=(+efqTVgy3T@swhmm?fXQRn zXh8LtO;B21<)WmpL~~$JV3kH(k$d(&X9napc<=#n$wCI1i{o<<-JjnJ_^&l2rIUI+ z3=#lf0tEm-`2VYhsMs4DIGYF?DjPUi{ZGp3yPonY>aVV;2lFAa3ktF@wTeUtAV{>9 zygUdZj1~?^Jjq9z$H3Ts9bS(|AcB%sVK^*ViI%lYM@fro?z6ysW!@=(mE{I`8mgpY_n% zJrZ<1lk(d8Axb(~skaVz(6I2}f!VXcD-1M13%km<4-%8@=IFMSuz+YO~>`O;+()@H)_#eA%3$xzrFx%mPN zg&T74Y*V!)9%8%mXo?ce<@u_iPSBNYkR58)y7_^ZdC-Ph3sk_|ok~keGnr!7pqP0} zVVROh?i7}P&#U_}a8ISP*MC-UhcRU(_GAo5 z)s62c@zB1aSJLBs>TWJF-E@WnF1@sJLM2EyrMkL*E#u(WQ_?PieG$Wq8dl7U5MS0T zhVj4{f0N)a-OB1x)@(3Bq9SPEYqhn?;1-Q+zh{8@Q9k|b8W$+(Uc($QbG|}iDtXUG z*}}vZ$f+~{kv<_XMieFTm6?ve3FeZ_-cn!j_BjK5*^Nr9)HV&R6!jo_Nh^KA zjxwfyB>dmk5|kxMZ7*k{#u5#>lHQk6ww%8qQjL&i&G|R7Wt#4LRDICE&CTpPTb<0! z+Iuq&LFQL$#UaxUN#bzvi=R>yV#V=jWtf|avFK_;;7ttRm8@!=ucAJ(JUwwa3`cDkYRAI{lkUB~1P1U;z99Wl z?$P;fbekqH`U05*&C$}_bR_GUf2a=a-nc8@z*~PLRt!?c*B~40->Zvxp}@`|MBkrO z6XW}E6C-DUT6Ku&7K_`Y%TMTpb`!mS(WIl4gjth;SS--SB$2f^j62Uvv78xmC75^l z()XAt^WD&f$xMl2QE944#L`0?4-(w2AUiH4IjTkuBPAsz>D*H6$rlyviq&WfUi1bv zo34}ay5($EDhoxoLK>n+3hpDajqkaFN4tusT;>~rn%^z-G7zZ;m1HxO`{ay&3`Pzb z>si!enbkN-n5`5?H8lklb}-jQ0L+j`d?Oj<=pLyt#EtH(x=~D}-G%0@=;CtuOeA$A zw?vPZsw`CrY=Yd7YcyTU6R(srH--}O4Vn{cBS)8%R-DCH9jU|Bb zwGFKhH0gz3*~7=tuso9#oO zI>75UU&za4+E)gDw9M3LMuSWk zG-p7BAipYV$x5;!NsA%fnSPYo%Q1t<;e>$eV)1M4xxx19?4@SW_br~>c?tdf4cV)t z#~DV6xOo&Mz!&3Ii$|2+t{>1idyOGt2By{~VT#sOj6uDjaZ7pBpeYSF2a+qSW0+)( zz{I3ThWhgTmDciVLBSe-s8U6mC{O|4J{T&7UP`C62TCu->rB7q^vkF_(dP$)+$ZoU zfR95Pw!GSZ}yDZ4d(YIkY3(lrX;cY|2ZnQkVU%UUH0I+BPqLOu>e(!`&ZrVX?NLRR+aMg(6 z4=J#={5;ig#u)AlN4^p4J<`*!oOF!U&p&=ZhL|HGGPh_}Zs;+f!4lkoxS>dHC??!$ zADE5^2QCr*V+((L!1 z56F|Br|Za%z`H`k%0U5>g+ewH#-9lX?4rUOx-_KUL4n_=t)FGO@Np)8*>g1n{`@3i zEPz&^3gn2hPzPhk259y!z-o`U%mB*k=yK)dH3=LQFAb7O##l3@2G0xF~~ z?c$KHlZvA8T+Vo~hInG|HU#)KEa3P<>}-YCO*C*6oj-dhRxDD*GNH!Zm4M(I8 zw_cKK9oKI+N>au#%~75+o2Ly@kw11jjoF_-NJIO7u*=H6-T^Z@dtey%ciUhJCDtg% zec&%r({hwRx*evPI<05zf+am}Fd#>X8sa9tBoIX*X2>}#T33*Xkh-r2H9I|eB<*vf zO+MqZZWs8cIUg$SZse=Rvu{7dcd3K8zQg( z0KeFO|G@&s|EbgaCq2}FbXQtU{;6%|(eTC4N*ne^ZX{VtLAN#+w7$}x1d4PAoZL$* za>*?YRfr=M^MsnCy_Q}iO_x}7W`Z4eHeYCRme>RkfGehyF;A?q=$LWtaLZt`S(G&+ z+qO9Kt2NfpPe+<~ecyJP;eOp}+uk;-Pz~^7OBWADZi)H

$tCr4kvlH`f$(xaF6Y=@GE)t zdvu5i`+F;jonyZ*(*C2G@yZSPt-J984*9Jxn7ef+k;6av90lFld4~>5Z^1#Gcbf)- zowCl$W=!&m1UqDCI)KiaAi+#2zhR?)K9UyC;x%1!$aTR+1xm@H}lCq zI)>sPCVkZ>dsXV78tAwmSF7bMP^eIdH}FS)_K#hwcRuu#+zaNX8_Be=D0;muWuf~j5I$Gyd%VjG`FF@-UBT&eR&0RQ>7=` zr24rK(rG|DJKZIm<6+Gh_4Y)6c#!O*hn>~kCjs?s@eu4ft<}Yk9W(=H=E&Xmafrt~ z3*k1VG*fA?$$NQ^}e z7>OP9T|(wo1kQ7ulJji6W@Rb^>NBU}mI_JA6_cyBb*8d)sIHRQX%SO@aZt9+q-WUv z3fuOWvbh{yZDq@x%Y(y9XVjlVoppeC%~lgd(8y%0u*8o~$*+J|x;fqt4>~`7?TAlZ z$;m{ehZ7n}k4zN)ZCMl-Cdnb)sOCisvDuzn6<0kM_C;h&d{mxLMwX)R*43y7w2m4g zQVs2^$=EqR6ueI}8L1+F%hi6>vY{u&H}led7l1YqhE$&Mfbx-VYRV9vf#NM~BF{>(XPb(^eg+PfG0nw!A zeJvm9aVOf!(phJ_>O?-7?rLG#*Y9!@QyS+zT|OP~5gpnaEv0}I;4UCLsaVJt{>jd_5xm5!0R zUFlCVa(==X@Uc#Rl*lf2zEraJqD!|~{8y)3oTaLwkz$IM)z4_wxjIfS$QUbF(3Gj& z^LnG1su75}$W$UjRC8rQe)X!tRCpu`;>1afPIDw#875#FU z+Ij1*Pe+@ic6B7|0oDbjrWt8*N1jdL0;!E5@us(bYS5p@N!PF4jl*4jiH@tEcP}ca z$cG|vJf$Or9U|4jD*#suW+mqsXz{$4f?H14(sXgSYl)#(6WhCCrzWm|iuPJH7om<( z8S2uphKvnp?ZnAbG*VK|LR0Iljlm|~S4RSYoOnr+HX{zYX!AWz^d^ml_XFg_EldtCV;8JMob7=H@SY8g)j{b|dfAeZgoqKXlv0!q2`ngWJ@kb0hJ*g9v51Vn zNRdv3;I)~N89YD_y7NR5ze7bXdk5@{6Kpwuq&Atn8r10IQ{iv4Pn-O@7s_soPIdva zkwA3Ghq>*$FvUk87uD_g{v({YhvQ_dgJUO~uCkrR@#$c+t|W!ZT4Y12lHv*X^G#_?&btCN;|YxMy+32K}Ad3O;d=`d3RATD(Ng^ zI$0)yOZYd9BVxAX2|}Td$7qmL3H+-8QuHao>R^F3k8j~INbrW_;dTYQ&G7i5j@$U) z@dLErbc41Xp$4P$Kf^;G?o1E%dAxBQnBjK?z1{Hm zWW8rS9*8{L;qNma?w;?)`sMnwzLzE_<8R4Py_t8NxJbHGVlpQ9c5d2VKP}itMFt+l zy=ZkuPcOrpooEj()Lmg(h$Eh1CnOTy(AMr%w`wtH7SC{d{By9ULPPvk>`O!3%-bSA(Hxn!&{Vd6me%t`SFq4s zRz9w9m)LuVsjOGS_iMOXfxmW$Y&{1&)cya*9e4H~XYW~NRJKG(c13nZBq2NGsAOeC zd?i^)gjB|%tRf>bJDVtEW@i1rci($@@_YXGygskq&wH=W_zrj1tUl*?d@#IkW+pO4 z!>fLkMw933_K|0~Nj>J((z$y4PLo34Bewrss4zXZV(E@TeOY=RN^OnzX_c5x} zv`7XFes`8ZntoGU3lU$#V()%n$(lrdoMNbnvAq=jTsh)7W-~gct3d{B?iJF=1y{Z{ z>J@x&2~}y3VS=jrSz&_|p&~*IiYpE<5+`l}Mh7pM{ zY@#GSDV}_%50h(}>9%k9Bm`LHc^liA6s2gtQqgaE+4!wcqTA5QTgiYXl z3h`EC_LJcPnq*BK!(PTDcneV-qO=ux)v@#ZQsmH1XjPt5f4&_ziJYzr`lzb#qtVv- zF}FdF$^yYU_y@(&S0;X+Tz)3xRQalXm2CJTsi5QLvyJ)qdd9?uv1&N%7N0{W3#ItB z|GJ(D#naMkm{n!`@0=gE2FikZxXGG*|Hw_-xy%XT_tj3k%BHLF1BI#UQjRGki_tgwSprw} zUO0dA)_o&fw#qf&4;y{9rAWD9Q}S80v1vZ+?MlOxgS5#tlCNyJ zpR09O`xEh&^j@fd#X>Q1kN@WQbN~jA3&bu7uvneYG<08kRQ=F z)v#KA^jaah^5?^E{F86**K8~H#rQ-`&Da6KRFSguV`t_u!dkj-n2OwvVAj@n;@2sn zEXD;p9JEz$P%mVuq*=P;p_4WWNvqTjrmMEj$9TEp)`>E5gfV?LGOkKl z(6-i)U$#FMGuiaESvQ$fc0vEch0-3j>0jKRX`MM4^<~NnNUhv-v!c0#OZ_W>=Z~9t{ z%~w`${!YrQ)+5!ndGn#$Z8B9)SiSdbcWw2_gU*pXOC^l(LEO0-8Z_N4sZYH_6Y&ew z7Ffd-<@NUk@73j+*?bh{VU zZwh2fhQuydtuCjqD5VjbReGnt5i)-!a?GcDMN=y1LA%vA3iv?6hHGoz%R=#`BFf_e zo?8;{OYJKKFc}Y>vXp#AzpPPpTU@uhF4W=oh}M4`HW#8|WCL#xL@5xZE@}CAmcE`4iy_0XD?PkoJUb%lkn@sJ?xn(2 zgCm+_gVG{eGnW?`1D3_9R&Ruse>|;eyQ8T0OZ5PjL1W56m z5*m2GSIuxhhVev3-`G#Gj?vdp{Mp>S)DV3{Gl2e^wzAWmqr+6B_HOa7^UbPkorZW9 zq=!aDBG0R!fNOl$_)4es@2YVd=)3YMVIGIS5qpD(aFV?2Qcz}_wy`NJKcdWLPoGl4(eDV1l$=j0G--@5<-6NmsyYZ%P5WNPI@2vBE?=G9OxEm>(VMK7nG_y6kMufPjK!0t0LSWU zTjZS^`MevLb^Z5gcqIms` zSMl`MEuYgWXUED5NkxA+L5?%c8VgE=}l*cO>d-ln1m)x?d zdJ=5Kxt0sQmorm+6p1Q(`n~Zu>%%cL2BTZU-q>n*{JzK&ts9=jixsD5?$U7Qg*&MZ zXqMX>oOV!sI}un@=UK+K+kR?hWYw{~=&_;na%6@PrfV#3w$g6#Y;2%97?U=@pL{%MVjpz#fi|-yWHMt@v?XxVfa~%Tj%vPEq6cc%ZZGpW`zWKPFGZ&o}SoS&+p?A;eUEamvMX ziFj5bNFc0_;bd{L@4eH~b+_*sN|Q-#KjD2R@qVkz*3F@@S}t8f)_MGythB4Tvs|W`rqvb9IjX5!;#N z792I=;5Rh3z7O>nkh)!oQnR6?b)q<+;i5m`l6+8Aq{ZUw=M&d+hWg1$;`oB6(TO{u ziTT z&CU*JkDP7gR`U_iUe=N@eKEe4B%mqwP(z7{I7|{%Xebo^*6!YSzvcS|ox{)U&~8^! zY0^Ke_3=j8rP8Ds@aR^Z@x7#VLeQE1_s@Xbhp~F&snZ+sm7AiNZe+qarP1FZnuYma zAEoM-Q5xtr!$0-*J<@(BF{)zOdGXH2tU)`aA7{m?JbbG6rFGU?Y+2^xXlmSD`*#~f zkkjWWyOLyPoVU};8yxhDqpz#hi|ae)$zQnlRaNKaa^UXs7Z0Rl?;{peW)q~x9zD%q zZzr4i=*Qw=#NuS>UWj?ZsjcFDK6gI169l#A`DH@oCCoNwQuS;}cts&id{H!~k!R4JTYE)HVByc>>L*QIY8lf3n2 zh0d@qA2h(|ITHL$Wv3o;JXo*n4T@DH&~< zV3qi1%|5y8EQ!o-maq2P6g!-rU4IkmU-_mrwMT3~-RHDn(bZ0jkK`d z9*VotqAVS84z^e$W?#(x4Z)O^%tgnM;vAb=LH(vs}gIq^vSgx5wJaPWr5!XiR z{~YPsx^z1KEc(M!(o33F3b&?Ler1a4y|xY-hJ}#>5=sNDM%Q%abX{v-E-co>OVjO; z&=k9GGzpHJ{+p5pKAD%7XD}CU>M{RBFkScBAMj znIn15K0kxtqJ{CI2^b1iUGg;-(<#Z4=YAv&4e42pmfFTQJ~R{xpEti%b#5x*_-yq> zb`klyu$;g*$7D>`6wv9%)oC3%KQ0mx-@Wk=$2&jUss{jZWUVpJm!JS zSG>$Jn3!F_Q>yVzoZrE`!n`X;WWX#giE%L?FA(DRyzM9 z{3qMhrdJtabhE)3MPg2|n2|9e@k`t_M7>jV-V4kL>6dbyxcb%&n43K&UEQ zwUVB;oN(X+U+Vz)auPBU8?6)?o+T{`%ul^(09V{-ILp6_`Xc1Fz@$40tK!Y!D0rK(@Guzu*- zYyF81ysxPNJN6%!r;aCkUa-v%zjS)X%KQqcsQ+r-)=^iqN)$=y>kF^Gzo-XD>KMKc zmovYIzjW<3UYKBY4`XwCIDDXfyz*QpZ;okF3MaAaZLcRGgS*A9ccP;>QjC$;y{=A)6cMyuc7xUQHSblu5rab3#+~Y;b9J{Oq8Ou>IvjwsFm(B4P(&dxh zNzQ90+%Kz3GUK*9mYzDjEmwd2a#!}WSjwxZyFV-oZo0pkeoxEge9y=R)8$1Xa>M{m zeXYU|xU6C7ahHxEUDy5gL|^RH+s{ZfyM3aQc-Gx33fHN;*L0T+40KKza(F!@QP|sB zBxk%`63jg1|?n1 z0;2b%*d&TMn9}#nS*MKNsj7vI4cRiVJw&M^Lr%LNj8`44lydyM=U`?d5my8B{6_KL ze7@YQ$5mSNb3wiCPC>|Nu~Fc`bdHm}8<=-+eaYUs+dlN`wg0o=MKMOft)FSqlL)bZ>wb~m( z9GhZWW!>z14$_eYw7*WOSm3mbQHRS|S(L zzjP_@qGx6ruu$-w{YtUk!~oe=l?%{E_3lbV2KaLzm*(DH!ie2h*kgaUap|&b$8g5N z;>+AviWDW}amKp%SRvbApNSMYO(Cku2V zFYo9pULQ5x;=w!x%=1>_mvzhQ7%j|8J}rJy{w;KEQD2@$dED~HrR(g+o?p1k1z>_`iE7TxAeVmI| zsI}bw`K`h-F(&Fy)aAc0XK%qAKkWTtR9du{Rcy`V_~pDld+Jy;58Ghvr*>`c8S@h_ z8T8VHB$PBUgJJn$8`PitX7?|K%;zg@L|;Hu_GFp(UsA|?u{3fUo7>oAdxVy%czEMt z)9~u2W-Ay?SCkiPpv*a8oxuH{cYKt3chPN<0d7k|PHmPm`*h4(a7^pzRo&9Yamwin z&Wq2OcBzbaY+mTR<(Eeg`_pX~&F8-8{X9J8(}#(?d}Fik+N~?~=o?>MXj6?4Tynn+ zoc*uO2c{V-x%!r;mPId0{odGmO!noxaH?6IUcnYpqr-Z~)EH%teCzaXR$TwJnNp93 z82`7x^WFiJe9Z7s*<=|^D$A4Gl8q!j(vPFk8O^@4yT^=baj%~rt*EFPw0glGvuQP@ zVHNY0rro%Cs01sywmzGEWN0Ax?rqkx_+D#y>lkr)A-U-}$qmCR-8a;WMw(i`FMXd8 z{5HPCAt)}>-sY{dx#&SZJ7vz@5gN4D|ZKORGYZfuhJFX$r_k??8s^ryH-15 zLvm++G3wk9c`;JC0;bg@Ir{^Fz6 z1m1uHC)L-c=k}h?%C6rd`98;86Vb(75Kwn2SeUch;eLOJ#s%jzEg!iJ=I z_61*$gz;As=L4eC7VGb2FBf%uS85D7c#f@Js&+)IyGkRU6n~tB*J$199A)plUQb*3 z)g+Z$Cm`*$pg=)--tTLtXLge2UsaZ;^^}pbGp|*@>al(%VzqU#2pNXS%c`4pQmW3D zu8Dr9X~HcV`0>17vVIMmA?@{Lzpfg#``W8k-Z3o(uPU_;R$o@VQyccXwx6)O|MUDu zxvmtEuGDgUL7R~;tMps!2|4|C(|(bn>?~Nx%O|tl%>(_a#*gr(#g^7B&eqaREI(4I zNLkzcO8)hcPUz83zh_;`6ETmA zR2OumZ<;RF{hadm{_*(ie7CKBx2_ek_X^^7+Ey>g`HQ}Au}q8>&MH3ASO>d4H{wrX z^}tLn(cMz;fv`fSfbW!l*;VVv7`5?}B&+~?>bG64iaX$6mfaZZBZp652Hq3x^Hjxp zfj^5I{lw!c`-!3>S|bCtQ34FN2TdaHvgIv?M;`NzZ^7pGH#47hoDaG!YhXmnH(+w2 z@WEBpy3Pj)w?yrJ%aF?^8K4vnj4w56HfiP+Tp+o7F(yFpg86q5ZQgSX`~!uI7ps#+ za;`2}*ISBQZ*sfs+kMjbtPmT<_j+hziJdG%UL#JxfX9QQ~czx+-`df`H3{$N6JtjecJ^lcTEVYILWV8xUy&2!Gd*Kocg}A{M@(P!`|nD%fO3wx)Utyc$2c~#A~4-=4Qy$u z>AJ~?+EVk4%`b5Lei|gcdify?vMs82`_;OpvNTz*r-DTzi9gobGLFOu;|4x6&d-d4H zJXs%9it4y$(R$E%LFyEfrFJPv{v+yBLR=Lcdlxf{eRI?#4~%3RuoV0pm!!|D6A$ZJ zm72w!)*jl3HMKL2oLSiYnsO_V+nm0?(f!kprCD|_X@#0kK3P_mbH!|23^B2$QdH5m zq`!QYJ!ieuW_tS0{2(wAC;RHcnglw zvF8`sX>kG4kLm)S=JrR44_QXgh9{e%Kc();O)Ks(b)3{@0z`P=92kd?HzV&yrKyjW z9orsR8(P;`F+LUj@dNl@{l^&r`N@KKuSY(uDK^)CY!+*B){B9tm+|g_$LfYVCmh4g zBBs@pK3o=@-txOse5I#@VqLsXX657;ItiMU-V(Ck_kkdf+zHcT^?a#Z@%fJ#3aF}r zY-+Bl+SWL!Uhk18VAP!y-~*W>u&H-AxaRT=88R8R8RG6o1ywp}CJTM*m{mSzVki8Q z{odYi*NlOQRAW;@Q`Kx)&n150TB;*KFP-v|O`5A_vBxgi3AwNXw7hT;%tXepl0(yb z^CP`tS2Ei4?97M6Zd%^frF#}5Q?Afhb6Z_MTj2!{pxWhhD|qa(LTvKuFQW5Ta=-gg z{cgJ>*PJle{I^w>5T{rFKi@^#OhH$f5YBMz2n?$;x7yWr*7u zxLasPt{TM0cQ_qqIJaq#mY8UG=li}~(&xf{zr|A7cO`5q*>Aho&A-g+Bxt5%?R$Y6 zCGWE&4F%(~Z!`lsZsHg*b-H}rXyKli#plFA;u;Bp{Lk;0XXidwyAx=0`o`5JvHZB1 zir^}4=62_RDb{z^sI!-%-Wmm=Ft5vAHD*P&`Oj=u^^4U@2++;l(>|fp?Qbrn5r1q! zXz_*7*V@lR^F!Kuj3#vxInnnPY~WgnikBSvHkRWQo0sKv?){n}@oIE3%cLnkcGB42 z<*0Ip&{Rz*Rr;oT9obpV1oMY>i;)%I$G)D@m+=;@pY08sHteYS;8^-{L*5gUJ}N2d zeBxavRpEk{y--`jJ3H(n8DZ@ULe94YV&SyS3REIrfyZk&*T|r02Q$F?CIjgFUQIex9!@GX#mRlZa z!WIQnEB=p7J?L6?(+m*0DF^S13@}Q%LSOHrO9d*Zs&c&yIyf^8QiLT{Qz*8(7+YLY zCz`5Fm}@I40!5b+!|z+@CxzJh#VRQAmYEY{9sAS--=Dg0PUOw<(U6-Gv!t5pS3eUs zL}$M)NNRX_F|>8*{@v?Bca!0-(65@4KHb`mN{TwpXPI#H0XIA4DWpZdWkOptrjUws z9cdwMkx=)^lk{#H{FV2sPgg(PB8iHR>MiU|WePn9ex+tq??P_~NmP4OZ**^{Lul}q zbxru|m5foFZMB2`mJj(+6wgDWwxf7+PJ7_O66R5 ztRk?*`F3R4|grny>tyK{jf)RT)Eiz{G9OPneEyBYR zhZU*J7 zZ%&>jCtAs!9XF#Ws{|jKs<_t*EeFgR$bG^H^AiQek*GMGN*&1h3PG=$tr9qgn3G8|*xHXu$+n@c6&7hFI(cJ6c2|o#LxR#NiX*EuD=j#O7*TC^ zR#qAzO08Cv73|;4!FMC;X>c}a;AhSm7g37Pfy-QX-*e^XJ|p4LF`#?$cDj`;E+tLE zJ-kYOjnyn{^L_L240IPJ^OkLTFj)?T_v?EV;v6PGl^}TC-`I@mF8W%=%-n9EbG=D& z>f2i_(3p-#9+5P@wBEWvt&EHj8I~BaxlEkAD$00z>i3a-_A9#O zvORTX%rgbkv#7wWi|o=q2HY~QE;ie>8}KtTB&?c|u!>Bwc-7N2@_Ik$**|e&X2S0@ z+s=!Z?>TEPRyFQz$3(!tzWv$kRHLF5)%3wS?x!*GJ~jI`rbA}|c?3Pp@Fpm6tVY6y zUCd-0!Aixo*I|C1`kUi=%tPSb;^%$p*JI6HhQ(xs!9>xiTE{XPJEvef{3!RJO9ld@ zCDvQ9ua`a1wWzN!85;0sFyzV_opgu-GIwqi!9&Ys_o_jIj zY|=SB=8tt-Vrm8bfAQVlmv2mX{V?A;fX;lK%}LJlQF`nGNA8RJ951LngP+`;kf<4z zxQ|+K_Z&~HhlSX#sPR;5#8q}OXvFcG6=O#tL(*vA{t@f1cl_KbPq9rBm#Xl6Q?`!$ z6^F2=FvO%~D8^ZaE9z}58z6VP=`v&UwK`cT}$Wr{#zi1hUX_y&4(~l=Nbd;F#dO_F7oEUQm#q8326B{)^#iOH`)=i8wHCy;&Mb6$INZAt3H}WN`Q)(=1*_Iw z!P^KABmJ-2Ti4YBNa1>FleEnngEfNMClsIXqtEY@bG*RppnF<_Lx1p8f?uR|KpduI zX7*#mRSb5TMLpbbda*~E_Es)@I8>W$Zqg~NfP80;rc}QFd~n-ko0i)Xag_&a>ACzS za)!48cjV(T-HrIDxs#^tE--O$SWfiAHYc53skUbkaeAH`$}rA?adD>35u)7iE@!tL z)>i9l+tvw~h-bvM;~FJ9lffgSr_Z#`yVRsJuJluf@^i2iB#+pxbD&DZLX-Wj1nWJ0 z5Xzx8GaFu&&hgxi&;R_bxhbMAv?n^zulY;5ZS6(`gR93+X`Vl~jgINQH1%*RpZLtW zM$7Gm6#v?=vza_C$7P?MPD54%K48|I2>PuTb5~@nF%Uz){kdscz5hm=73{h1?(?-{ z9KsL3Yf8jEJ|J-=F4>E+{+f1oUSKt_Y5ENyth%JXbvj6NPjNA!=@&oXNUV56i1@kW z!Sl5x$@J4!u!{Gk?nabkJk~opv(_shW;uM2o-?RMl&38$nEIabxpP%$GyCoTBCMd0*Dqhku=WOub` zM{cZk+tnY$=%1+^+7tO<;+v1*bP~5_tQT$mRBT6tQ44yRafF|&mCk}wuz;7^{TrpH z?{Q`Ij2-UD{rAMTYH5S^!zizXhvt_GA*$2qxam6h`QD(d;ic{$PjP76h{l|L6J~Mu zvN?CJfl5#J>MJ$D$raiF+n3uk;y1mvHyKJr%&S)C)wbI@=@?2=V^k5ljz)aKr3c?p z;SV-{Hehb?+!wIp&mr#{5f1rT&%DxZC1&=zOyxVkBX{YGK8GFrvWb7+zVvd1pJfCv8Ck?vx#bf5i-U;j{^d0O6 zezoe}W9F)*o_$UGaY(ij6KZmo$e202xKg}+9kpZQubl8Y9XUswc6OE4D0JJJx0LBy zh}#h7MT};f=gFVELq zMcU@!%#Uzp(K&BQb@Uu;kHY=u5xaoq$vJwPhdCnQ4^M6M-Q-9X>>(!~?0B>P<`@+p z&z>33W~}B;anCPNxOS5@IOS=+T#x$TFwt4cm{fg?RcTBD7h=szZ_k2goBMZ=@Ru>w z8_S-tIsAxb!HnCO&F_T41V$fF!3X4f~*snfKk`-JcR9y{;zv@L+Om zfGsw}i8zm=-lz>tEZ|9tl&W_)kY@7~nB5IB#|XNY)72XVt4RQ~MUn50aW>v0p?3lJ zz35o1R68$nE9z|yI1JET38y&4U7P$u52i875S|~%70%Mm%^wrkrhghX`TIT+_C;S9 z&LO=PcQnrjR%fbAhp14Rj6@<=kB-HHe-X0>Kg~S(`8$p2N!5L-`SSdQCaX)gYj^M6 zS;ZWz&N-jvo77>T35S;-+zIEnv$Y=!51$%T4c^`NXLyS}!vV|6(9BNFgcTI#5yU1yC?zN1)!!C>`7z=$fG3vV=AKDIfKV z=JnZ}IoDX^Zyt{}&r)IvySBSS;&l1=%#(#B!FOgD^izy2&#X%uS0u^jt}?x|L;XKl z-)%=0J}Ho~aR_7lg}`38!&IkjSgi4&`djK(I9rBoGE1Q>$NNd52pU=W&#M=>%t(~` z&hz^7n8h$+JS;ExeN{x=nQlAsZZe;rw@o|udcdm?L$+&Upa@6nnKmbh7kQD64gxH)?WhQ|0V~K2<8NMtPbaapel8^2p+=Ds>92ULC9x5 z@FNhi+XwDLKUi69}LKCu^CyWSz5^z);!3II+BoIoFFA*|`S7dkz1tmln9tWW1 zQCxsK62T16s(~RKs3Ah}EWofTfq(@GpHTP^XsT zgtAt932_xNCu)w!hM-PsL=_D_wm3IL5|mR>PecwWUh9#M2O3QzFxW>D;L0eH6-fJt zW&o-@Q79~}KcWjtUeHquiYjIpERf|74;z*@7}3a#S394CxJXNlOIc?U7i|kTl_z09 zT`DOnpj(fo1+Y0NdLaA-;sZW--CTqlt9!kZe8J6?(KM&O~MYQzGR%=9{hHw3ZN zBQ~H^(|$rwLJ)T&0tqEpv;|Q?gm+{5GvW#aX}2M|Ac(UAF#thZorp*X3jKm;fFRu- z#8(Is>qF#2&_F+80)pNTB8DI+WeD*M%B9*kB7g*Mt$G@96zZ78c?2C1zGFPgB!4=A z6EEbo^PA8GNtVaLSOP1#{EV{mZec}t&@xUu7Pvv82e zLec4RlQgnGxZ@;staxZhpM(>QhjyGuUPI8UJ0v}5d_7yvme8C=!(ggtfQW*U0WcUM zAq5WfNvN^dR1#x|o2rbYo(->|r<25-950tLy*NTc27{540ebeNLO@Xi83opLh=i34 z&lvHIBoGQ0HBUkW6_9d~q!~)az%LRk60fF)=MyC-7(Oc;Akrok1>7gdNU^OuBtmdJ z*~tEs$16%0ERPaT#)=-0R6#R;mV)#m1>Tf83uzKL9{S2ldIW;Vj*y<9#%qY>5DRdj zhQS=EAq{>Cqyf};?v1mgosfp+3#7g@_Ks7fDwjSFG1bwNd!&=kJj^L(a1zkSmaVN+fa!g67DO zw2&uzRLFJ`d_~$Bkb_X|U-BSFA!AVjNOOp9Rs{JT!sQ-8enH}G+&+eMhj7csk-d;? z(`lp*gJG^Qe7Lpc9jWE2z! zstCyq*%d28wnB}*{SGMyLDF@|hX{Nllp4jahJr;1CdPFn2f*_lNe-wnv!Ss24ait1 z{2sI3SZEQJfOs9;?*GXIf4qeP1S1DC5D4F*#sVXq8M>YJPE+|1I-4U z|Ae5$J{v{efu^3wBr<^oFI&BhWW?j3-E?jj3C(Qe9unFPA^d;RfLBCaLeRM zq(zYc2dXGm>}wH}C$ty|$)J`YUT_1gg*H`i$NUX-;^0{n7&#apwq6I74EboSk7|Y> zabr|JGoDJ~jQRz6yW@(AfV>U!M42M+QwzpumnKdRg9*{&_B@6%Khy#Mm0#ZdNae$`@jl>qbM43Z8GM`o1%lr<=Zk`P07mjC`~r>@N*2sE`Cr#qexfh>K*xPv4ER!xKaH#BFIwaE1d={ryUh6-P5!Sgnp zD9}SV9H{F=JKS$=#^%Q}*?3 z@>9h4$xzkI6-Na!qNs3tHi1zhn4BA8G>9foBAi$rlgC3)P!72mbi&RrC6A}aD^zPD zccX?j>Am)Qec*|ui~3*7fD{!QId;8|d>q=72Byi4p`A!#om?BTQ*OAjUK?iZ-ZOU5``HLQseXg%l;;k>8K*@_B*6 zZdAA#A&C8^PZ0`DITuTc4ycAIwiN1635?rB$v43UUM0mPRRmjVPeBTGaP@VHZm89y zcbwD7Kpq5vr_qCg6{75rvl_&J9UVaeNi*G|cnURhX%NMCNKg8GigQr&{*0k`02MVL zk)j@jKOmPacbmt6x+B0L3OwYX-~*%>!K4MIQ6xjWEYB&Zp)M22qX4%c+>$R@NO2p= zMNuUME0o-pCW?;`F0PM)aO7~AqNsz4C$&uR5rQ^$DO91Hogkxp2Q9)I5*|gO!aGdz6)O2kK36cFG%&f+xb1&3L7N<1tDpXn{LMX^PJPV33Vw z0>~988SozSC{VUS;!8@D2hhf~qDnac;aX2of*0So$O<(nHy|kIEF~IRa6jl!%0aX1 zw;rV!gcCNRB+N|zi{p={M@et5C%gO{SU8SVO z355|mQi6jD9Ms^T0S7HO=)ge_4hC>Az94pFQp8&z$pYVQ!$DAV=+{h8bds-`+8J>1 z1L|ok8~{f>6EsmI>Y2L!!gCD}@KOUz>-c>ZcWmJRPS1mSaI1{jJkt>5Bu)>#-4)6I zIm}?ME-?}Rr7?_{8M5@4n7NMeUk`4v5b#kf%;Ep?)7v{7(ulKpTAcaBUy@H$36h1X z%JzKnca;D@q9X&n3(e zjQE1#^(+XpAp!qpW~hB5nwdHAn>JL1h8EBWu8)RVm;)g^UYSoTs0@b>Z)G0GHw_e5 z*a!jtc!W9o-y8!LD+J@NE6iJe1s4iufocW7Sz7+$4`w0Y<5^fP{}lwe7y-{A#&Yzp z3OT6|@ct?+bKOS?^{nv}>w=8y$7x=n3*0VsVzg^D) zPH@~r!s9Mj*zW&F3#0aIpHs7lVvtb>0Edj2I?aJ^D!%w`t--FAE2hdXDav= zfi?aWs};nG&n(RcR{Z~A1wXJB|ApV|CE%(0SZg6XxLyk4t!>S+dP0X>*LhZDXr+C% zz)HAOLM^k}Lbw~NtaQ*m6|%t!?p?S7#{XvJfuPcTRt^a2Ax6K1Btl5gX%NJRLJvSY z=pGfCa5>t_fcAoL8fdgLbXonH3w;E_jq#&JAsmG$`Ua#WKpYL;>BVJ8P6AE1X(%a; z1`k&_+>v8wa%ev}c^sVzMKo{%y#-Ob717)fbzS8jiB)y<4G3qei4KRnU(iPLL#+z# zbZFp+E*k0^@CT1opyMaT7%hO`!*RO>8mPHU;OM%H-hg~>u}1gdA&BF>1A(L60X+?I zlwC)E{)^-3O#(;JO>`8*q3nyc_=}@7kigLxh&}`PL3bA|frlU~<`D#r8xd&m0uIaw z9{;~n1DB~^QD`nm2V*>X{f`wkKqwgvojQ&uquHTz%EdJF)*lWLe4+!g(LoS#_a)kn z6mb`K&)@D1n78Ag(N}NK0{{DHWc&?UR!I}Q@UtW{+21?@huPV}VHDui=Rcq95JB(~ z&d%kEr>BFbg!2^-105n_M);p6E`a`9G&_+d`19jvnPW_Y6wc8CJd^%gA*J$|SyL9?;itHEK;uGbE!z(2c?C`PjphpPeSz<+shm>nWuJm?q< zR&oIb<2t0YL=6sXsl&N}*Cl959vm-@44$&^A6mk{Fc>XtLEY6G=qyHa;koj^=`1OL z8p}bAe1EubZl-wy)Fo)C|L6iQhzK8?F4mWTRSB9|6lZZFN|h<`2n;q1>H;q@|9rAT z)Ludn`kjym9u|Ymk6V6gO3>^qRQ+(6hlA&#*m1-akVq`u4^Wq)S$ILjImMo0817o< z9C*3N{YN#_z!rgK=|NNCNl|O z%Fy^rX5c9fu%3hiZ`R;kz+f4g7N44*IJDX{0WE?>L))ej7DV&>AfWyJK|jEuiRbZX zZrlSIGHD6F8!rEw4x1;&Kr`qP30T3S|2PExn;ioFG!@PPZh(3TP6H&fvq2|rwQ^8z z&GNrA3gGA}oSf!=6a$$!z8k;rd?Np;f_SUyk_%|o7|hvWvllnuz~fE0#D5eTR)7jA zx8Z=nZ@4hPsz~rhT8fPwp0@)BZVDn8{$mHGz)^qz?HquU7i{Q1pX`t!NJIdrokLRq zdV6qEpuGxB$qOz&=bWvmNcTXgEpVLpBZEtd^giAYUWy8EoI^ufUSTEJnD>Z)hgE1n zoI)OaV;p**c1R5uDS;LDe9h(^njX*JmZ>522E5QN0LRHg{03xy_^E*h;Jra0Z5|EP zWB46t+LY=Koe3CO0Vg}IegAzb_rLnm=^=iwEtv6P<5%On_n;~l^dAyAFv^CY0$djf zrs%3b`ZXRLT^tZwK(q4Tl6B}o-XX7J_;9S+c-7%bA$*Kmq7YO>A&dUZBH8D{W3_$?MGcWc~Zr{=<`cpiNRz7(zPHdPW3Mm_&kvs zFN#kC>4i?lm*6CN4i33PQ5b9g5u%4o;q?8+=`%2bNK`9mG+xWJB3T;?I49`AakyU} zT!dIH%@Jh4-X+9eEl^nps#?Dc(c4zg9C(M>KY-X&D;$;)IR637j8C>Euhotgm}qry z9Cp*f6=F^L0IqAe!sbgbB)NjO2d;sG^H4a0vfVgqw%hM2M9d0G|Sm;88H@Yyv!4&FSH0SEsf15qy_{`xgE zC!Y1~cBO+fSd}B-5Iw{SuYg#eG=K{U&pMhFZ`HX0v>H(Lhs1?1%6lC4dM$)qXh7r7 z&H(!-5IgnZ50)J`v4O_lMhAj%q~UtNum#*ll)%Rnz<3KG+Cdy?z5ycXG=ho1k?@I| zIpweI3ody9;5eMP^(GuYA8=+94V|(dG=f^*v_M#?JQVUj3-1JugQ*qb0PluFdt>L1 za@!5Q}%e_q|;im9RHGP zaHPsPh$OK9D(v3@7cN}qvbTby_W3^~G@!am2;nx46ut;G$Ji41Rt9cC#`ol*r`(5n zQttrbpWa2|A4&sKZQ$-X#YTePCIJNw5-LD-?;i^|8k&m)Fk~TR1d7@SN3kxvh#Ucp zd&n&#E#dC!_`egL)BX6*VemBD4-TP2UcAuzSC|1%+$Y$()ehQgbR^KYuaPhSvH#H8 za5Vprf8^Q;zVLQ{Xu~J}pmDy){eQmXx^z6d3m!9rz;W1@!IHm(0o5`R5+Le;;7~J8 zdqxMIffpD&Ae=7$eP|DZi5&`Te~`cnKF22qsL2Rt5&uq5&&4SMjiZ?i^`FVqiDT)R zg;)~D*%KPODxM|)#1OGTXTdHU z+Uhp}4Za;f0w~h4QR2_a|GpdmgNYo9rf!cQ5JgAObNdUZr<9x&*AW6h95EXmeqL^? zmWvpJmppplIIMz-8Cd>;mdDQ<(QZ&Uhle1n1SjYOzuA->-YW*7W#s?A>izrn!T;)~ zJxNga;~#b6J)pV|X9#E&1i?xO4xMOBKvR7~)8P|r`10sx26#R91RRG;Nn=OgokOre zcX}jyK^2>>1hlm~DH)(cLa1;Aj^^e~prw+4^~0UCSl$QfT7Vma2{;a`j|#-|^5UNB zfG;roqer0+oYaybfK5NRWa*HyG2!Pk=Z>H1D0t=^1jpg6vndQ>1z(V$0A7(2y!naK zvK)yc2?J97Xj*)g{(UV129r8e=>0exs|vnKnf;(_K_aAic5#CE&;{JWr8@v78xOwJ z|Gu>W?(2ub=lww7Rr`wO#=G+OrhYh8EDZ$SjIU@;d`PulL32sX1oZfA@Kql0xfKc+ zCnr>cYY1fc)ka_ljwa^?^e70l2RIt_mw#z!0DK3845<2tVF$->s_$>@Mg3r+*(ky3 zi#w`V`V5X1gV&6`xZ}#9u#S!WE#*$h#*7y@6QjVJ4IbSlk^d`je1Ra~-bBuT?@4?z z47z(QcR^-u@I9r&7R1;7wg5g{W5x@-p+MbY2Q4sz(jArNR(Bk`^?Li=_jH^%BQn1pwL!G_-;~e%nPM0nRPa|I9CKSsW{L^0+kt z%D$I}WdAJ6?Ktcs4G239F4cIKc?ApKS%B-Y2{;bV*ls^St`@z!p$_22vKfrOA z)$20E`e(6jn*?p;*g@DadV;O3&$QXs!2Yub$6*E2Hz8Ks@{D)O{i|8HCAip{g5xl2 zLNLV29ZNw1#4r%*(K-bhlzRY?Mj61>9G6<&Zy+||353Nh(0JYZVOnXLV9%+6L;TQG z(0T!}7Um)ei#AS67fwr0AwlznT-R#C#>^z(w+d%sknD#5AV6Zn;}-K&tR}(-@%gsF4&XbL92eBA<}Rwk_I?g zO*k&bv&k^ngU+Xb-7R#;s{a7Qf51ZM-dUU$z7ZUj5%-Fe5Z;&TKwN_n3k;?Uj>8Jp z#vxXnNhBi>{)1p}SmEHtFc@MgX!P(EWaJja-}D2Gf6)rS-Nqr#+yM@L5N@8-DV_ZM ze~nxTcum*#Pi~OGl?ZZg?#Unnl87KNgbX)>5E8^tHK)`()=)e#ruzH|uXu)qmQX>> z@~W@ZDlybho}o|GSYBVNYO1+J@P2EblXK6$(eL};@7rH>uVJsf_S)0$teuUJy^cYa z+xqu&O8L#!R1Bg(fA+p~r{Wi$GWr8wWE}}SwR<}JHW@`;pzcA$^_DG)bFr#8&>sOMWDomTpz+AJ8s&79pKOOoA4FBTbGk!g_b!x%X+)ReiMp((cV)t8m=ok z0@PzpXY(!y>_CwbAd9Cg??V(%Ly9clbQoc(R4Lgayq(cOLrMg#=v^mq~Bw!5fx3D#@Kr6nY18WC;7h)A4-cb&~|?yh(MjYmeQq~LcvWT=QWcB`!T_(Gc* zMLzF#9miq`qG$Gp(6fCaS47Zz54Ah|%GEX2y@_eUOQ^iTgwIu*%q#HFuptiUJFI2z zJk6R%8a9;t2(?G&lj~yy>-bM9)l{(|j@X#P+uA)g<0y<0E=6qk0+oN-LJx1rODy(i z@pl1#U{X9lkx#chKVq?X5!s24(Jrm#irRE#FMyKikF}ux8e+wU?Y|Xuyov3!9mqzTQB007pC`E2jM1Jr0&PL6N=s#s-7X zn$1WX6%Z1KPTxPE^!P?+I)h2Ij9>vbz=@UA@0rbFO5G$2nCa;s+P?89$yAr$g=AK+ z;@oCgs4_WFCN`zdQ5M#iuz5Mj3F*}TDa@Ob6Fux&p_duE46>quI~Ncl*`?YZ z->VdO*HsEF#WsZe&>(franmKBn40f4h=X2@CSTLgK@oh>&%tzKkAX?XsTMMQ-vOO& zao|+9nRMZxP6~72R2|DeYH&&=%_y_Qi52t12crk<#NNLJMgBrJ`QLP=%oZaoa(w~W z!S_|!uOGl-9h~aOq|GliwJ)^O!NRR)5*GvGSyBP#iMP>ylj0|GSYuy{S2?m>olh3t zO&zk-{H6ARE$byLXpy6n3~1GACRG`sl1{(0)fRnrICK2c@$yHO`M)Q&0>wXv_ou^f5C&f0S-QLH-#=@&Qc7E;E_{%%%l6Dz^1 zyoorHjGYxUs;RP;oVBR~;J2armU(c)Y!rEv?+2)?zgAMjw}fSt(bS@PfyEU>yPlNi6VnE*IP2HU058jINh=u;qxJiyzjP8R@-8bOLX~|JDQ12;o2}x zjn?2S_C~M=NO#ki@>-gN zdnmiscvz8LJ9Vl-CeI7e%G=8#FPOW3x`E_?z?l9!(*x)0^e`H8s)~mL2J2fD^v{;- z^k@eFc7jP+>vd8M((x}bXi;X+C+#xO8R-&M&1I7Lh=Fvvob(%$rhl)JN_?u~5!V%) zpHSGY8c0Py8%QNrw9DugCY3%^N!O|=5uzC{Z`8JNCEpr~1HDo|F^*x++ zr`(vwWeY;{cVUuegO= zTQFR$)p06EGP|?xeq)(cMZVhAfb8~3s;s`^uIAeOX=<&GMjc#M9Ea!bE^a8YwIlwj zvg&A5QI+e7Sy&($HIiAs_?yZqqfx7BqQT51Dv8l3F~UqDnG2Boa!`4+A<7}6-6~0ksD?~G z=Q<7R&tFhvh-%ppmDK@Ju@+YgwDkF2CCL!gbZxUZF)% zzd9KCWk{>+uFB7lmIxakD_TA9T&>m7D*;+xdaLd1afrTAC=I1nD*+f-)T(L->6n(# zwI8}%4^X}pOF5%g0+@C@CUCx2p0=0;R7Cu?fbh1UmgBzqjz2Pqa0SsBLd19__>S{g z1Sdqmr!t5&q#j-KSJY4V-Zu29NfU}jQl2m@hbsm*p^-L4z4F~_r33`;Z($ahZ6o_n zerJN5AIRfz6+&*eTj0%of;oWv746gA>4I;c9LGKPDo!hSe60V9^1n(1YSZ#G3Jp;F8#^b0q3Nv6_I39ddQ#AaJVhpFuv9a#2KEeq znsJ$2QIqE4e}s$H+HaRVhiqF+FZq!FK^FN2DmJM8H?GyBS54b?lsDIJG9 zFsqt+ayoW(o*(9io4a$8-os9+!W{g`o(i|$MS-xc%^S2m5TnBWyo?IB-QCUfq6hrR z&JbJcmvMkz6 zQqyPF(0Xu*-ie4hz1>el)WrTHCpe`{qOE1M;ehAc{U~LppQVDo#x_N}Ck{}*+S<&V z!R)06{K$UDFOYWE)`Exm>?h9|8;W^*NF(Fj9*bVqvv!}J*oV`~$Yd86TwnBGQGVGu z3Jp=BL?jBN_t9@OJVXf*75ID60j7F4X>*7YEBYnOs&tp0hrld$m=X$(xVsb|s_76M z@vby8R5QGgIR?4X9wUc6%3?A2CT3v&3MOwZTtBf(O}rkfU~+d0rG*)r`zeYF!nEc# zg`v6X_35z0k!>fRaE+s3I6OJoZlSMJ@X%&xxY3hiyGdr@g^RN%mw%BtJ_}1A|2YoX zlZD;rbhy!zVcp4ANAqM-9hmh-cj{ROp5$#v_^E6#ZLXu4bqpMC^@mt!^iWHn6c6lY zfu_I6L(ivLDx&FrqYK9OL^Os1N)Oium#1!{DXIv~o@()xwCYA2n@=TmH6yOpg_(cM zr?R@nj(oqGTGzujT#lqpzrNio9{sMrY|Gu!)VRAFQZ}IjYumssBe{nU$@RbnL-+9>?sXkU7KX;(?E%O z3m(kkn8(nF9~Nfq$JyImJ4+^y>_2*-WHd|9IrL&hI!2chJmigHR%a_6>0+(8QHbel z>Pn4cG?Q{-U{d3*G&068sP>@)<<=)wXuD`%kIyc`& zo(Y)x%meG&{$g}1;@n0bQK&zaobi|-MV86_}QK3;U|ZwcC2xiO1(&9V&N@TydV~eM_;6^ zv0BqSe0JYkQupyv%(&QdV8o1nVa-N!*OQ$4k#Y-fnvLB*_>%JCw82>shrzl3(n_Dl zDUpux!#9stS z49ZMO5_vXN0>!Fba&e98V2JInFfH3A`P2Ml|38^@zjmY#phNUw8+>N+%b{0DF+E6Dohn|D)Q_toGD?^i)OIA)8;cO-CXSor}=|`3;H^|<2nP?~U) zI<{2mL~=Z>+HJiR3HjqVBV(THzoPuS+iKVUGKzv*D~gzYA75HKBnI4Dzzuj`{}tt* zy-R0XYQg@B8)rbt&dN4&n=aoQJZ*V}Dxo#6OUxCTJViyaddh+-IV? zChbX3)aOM1{8zt+KSD(ij^6SHoc}`OJ^#|*m-5oIi`n!#?w<{ZsWow#kgo`9T=9;g zGXB_Ck3^i-;RMP{M4KHdiR#)k0`FI%*f-Crtn9lHcdkh}NTkyH%Kp7u#U|z{UhPnD z8iZMkR}%hl41c4enm4kNw`XWKnk_x*4^D@c71&vjoT2}U@|V}3u}Ml@A-n>@CLe!t zO;#*)B1y|Sd^^3w?GZXK2+j`DCE0?hLCmUNa2q8U172u5Uw#)*RF&KpUx{ii4XOi~QuUg+~oM>ETEMKv;i-?DkhZ3VwG(9zal`Ebfnyny9b4z$sagEX~b z1Np0M)K`mO0=02IBE2_U@LFh38$=$f;4YaujiJ<5ikjixhbyLxp^{dLl@_+rV5tp1 zJl_-sm7ijBl}}xs6PZ>0{wS0UokGn-d;4Z+?j6I`SMo)*=3WjF z;a=}KjxN9EkaK3o(F^=Xp!Q%@lV@nlIX0R$7ZKi|wHD#5FL6nMLmys`J1w$VffuV* zy@`%}(ZPAR_7%{g)*5F0Rckoq+Cr|d((kPez6(CT%%OjL#UV;-14%cc+%{U+$7bIc zuon$ZPIvZX=ql#2%3~88xXz%z!jY7`Goe3o9Ytp<5n}NF5g$+^3Ss_UJ7@hzH`&O% z#ilwugdg+roP#gL5A#d=@kzYlPTH4=#87_d>(y2XsNHR+&87dafqcke%n5(q()FTi Nvt=$Wc_6sB{0}XqfN}r; diff --git a/src/java/KP2ASoftkeyboard_AS/app/src/main/AndroidManifest.xml b/src/java/KP2ASoftkeyboard_AS/app/src/main/AndroidManifest.xml index 4101f662..d30c3c69 100644 --- a/src/java/KP2ASoftkeyboard_AS/app/src/main/AndroidManifest.xml +++ b/src/java/KP2ASoftkeyboard_AS/app/src/main/AndroidManifest.xml @@ -4,8 +4,19 @@ - + + diff --git a/src/java/KP2ASoftkeyboard_AS/settings.gradle b/src/java/KP2ASoftkeyboard_AS/settings.gradle index e7b4def4..573abcb3 100644 --- a/src/java/KP2ASoftkeyboard_AS/settings.gradle +++ b/src/java/KP2ASoftkeyboard_AS/settings.gradle @@ -1 +1,2 @@ include ':app' + diff --git a/src/keepass2android/ChangeLog.cs b/src/keepass2android/ChangeLog.cs index 7e369a19..305baf1d 100644 --- a/src/keepass2android/ChangeLog.cs +++ b/src/keepass2android/ChangeLog.cs @@ -26,8 +26,11 @@ namespace keepass2android AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, Android.Resource.Style.ThemeHoloLightDialog)); builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); List changeLog = new List{ + +#if !NoNet ctx.GetString(Resource.String.ChangeLog_1_01g), ctx.GetString(Resource.String.ChangeLog_1_01d), +#endif ctx.GetString(Resource.String.ChangeLog_1_01), ctx.GetString(Resource.String.ChangeLog_1_0_0e), ctx.GetString(Resource.String.ChangeLog_1_0_0), diff --git a/src/keepass2android/FileSelectHelper.cs b/src/keepass2android/FileSelectHelper.cs index 26b52a1a..365f981d 100644 --- a/src/keepass2android/FileSelectHelper.cs +++ b/src/keepass2android/FileSelectHelper.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; +#if !NoNet using System.Net.FtpClient; +#endif using System.Text; using Android.App; diff --git a/src/keepass2android/Properties/AndroidManifest_nonet.xml b/src/keepass2android/Properties/AndroidManifest_nonet.xml index c7efc624..0c5c235d 100644 --- a/src/keepass2android/Properties/AndroidManifest_nonet.xml +++ b/src/keepass2android/Properties/AndroidManifest_nonet.xml @@ -1,7 +1,7 @@  diff --git a/src/keepass2android/app/App.cs b/src/keepass2android/app/App.cs index 462af816..4f6630eb 100644 --- a/src/keepass2android/app/App.cs +++ b/src/keepass2android/app/App.cs @@ -38,9 +38,10 @@ using TwofishCipher; using Keepass2android.Pluginsdk; using keepass2android.Io; using keepass2android.addons.OtpKeyProv; +#if !NoNet using Keepass2android.Javafilestorage; using GoogleDriveFileStorage = keepass2android.Io.GoogleDriveFileStorage; - +#endif namespace keepass2android { #if NoNet @@ -603,12 +604,13 @@ namespace keepass2android return prefs.GetBoolean(Application.Context.GetString(Resource.String.CheckForDuplicateUuids_key), true); } } - +#if !NoNet public ICertificateErrorHandler CertificateErrorHandler { get { return new CertificateErrorHandlerImpl(this); } } + public class CertificateErrorHandlerImpl : Java.Lang.Object, Keepass2android.Javafilestorage.ICertificateErrorHandler { private readonly Kp2aApp _app; @@ -641,7 +643,7 @@ namespace keepass2android } } - +#endif private void ShowValidationWarning(string error) { ShowToast(Application.Context.GetString(Resource.String.CertificateWarning, error)); diff --git a/src/keepass2android/keepass2android.csproj b/src/keepass2android/keepass2android.csproj index 70254f8e..96197e1a 100644 --- a/src/keepass2android/keepass2android.csproj +++ b/src/keepass2android/keepass2android.csproj @@ -112,21 +112,6 @@ ..\packages\Xamarin.Android.Support.Design.22.2.1.0\lib\MonoAndroid403\Xamarin.Android.Support.Design.dll - - ..\packages\Xamarin.GooglePlayServices.Base.27.0.0.0\lib\MonoAndroid41\Xamarin.GooglePlayServices.Base.dll - True - - - ..\packages\Xamarin.GooglePlayServices.Basement.27.0.0.0\lib\MonoAndroid41\Xamarin.GooglePlayServices.Basement.dll - True - - - ..\packages\Xamarin.GooglePlayServices.Drive.27.0.0.0\lib\MonoAndroid41\Xamarin.GooglePlayServices.Drive.dll - True - - - ..\packages\Xamarin.Insights.1.11.3\lib\MonoAndroid10\Xamarin.Insights.dll - @@ -765,10 +750,6 @@ - - {48574278-4779-4B3A-A9E4-9CF1BC285D0B} - JavaFileStorageBindings - {545B4A6B-8BBA-4FBE-92FC-4AC060122A54} KeePassLib2Android @@ -785,10 +766,6 @@ {A8779D4D-7C49-4C2F-82BD-2CDC448391DA} Kp2aKeyboardBinding - - {146FD497-BA03-4740-B6C5-5C84EA8FCDE2} - System.Net.FtpClient.Android - {3DA3911E-36DE-465E-8F15-F1991B6437E5} PluginSdkBinding