From 6a8f9759550e4e6e7c1fefe85717769089ef6e17 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 19 Jul 2021 23:57:26 +0200 Subject: [PATCH] build appimage --- .github/workflows/build.yml | 78 ++++++++++++++++++ .../appimage/AppDir/bin/cryptomator.sh | 37 +++++++++ .../org.cryptomator.Cryptomator.desktop | 10 +++ .../apps/org.cryptomator.Cryptomator.png | Bin 0 -> 10950 bytes .../apps/org.cryptomator.Cryptomator.png | Bin 0 -> 23272 bytes .../apps/org.cryptomator.Cryptomator.svg | 1 + .../org.cryptomator.Cryptomator.appdata.xml | 69 ++++++++++++++++ 7 files changed, 195 insertions(+) create mode 100755 dist/appimage/resources/appimage/AppDir/bin/cryptomator.sh create mode 100644 dist/appimage/resources/appimage/AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop create mode 100644 dist/appimage/resources/appimage/AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png create mode 100644 dist/appimage/resources/appimage/AppDir/usr/share/icons/hicolor/512x512/apps/org.cryptomator.Cryptomator.png create mode 100644 dist/appimage/resources/appimage/AppDir/usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg create mode 100644 dist/appimage/resources/appimage/AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c8bc7f5f2..fa34b3438 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,6 +129,84 @@ jobs: path: runtime if-no-files-found: error + + +# +# Linux AppImage +# + + linux-appimage: + name: Build AppDir + runs-on: ubuntu-latest + needs: [buildkit, jlink] + steps: + - uses: actions/checkout@v2 + - name: Set version + id: setversion + run: | + if [[ $GITHUB_REF == refs/tags/* ]]; then + echo "BUILD_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV + else + echo "BUILD_VERSION=SNAPSHOT" >> $GITHUB_ENV + fi + - name: Download buildkit-linux + uses: actions/download-artifact@v2 + with: + name: buildkit-linux + path: Cryptomator.AppDir + - name: Download buildkit-linux + uses: actions/download-artifact@v2 + with: + name: buildkit-linux + path: Cryptomator.AppDir/runtime + - name: Extract libjffi.so # workaround for https://github.com/cryptomator/cryptomator-linux/issues/27 + run: | + JFFI_NATIVE_JAR=`ls libs/ | grep -e 'jffi-[1-9]\.[0-9]\{1,2\}.[0-9]\{1,2\}-native.jar'` + ${JAVA_HOME}/bin/jar -xf libs/${JFFI_NATIVE_JAR} /jni/x86_64-Linux/ + mv jni/x86_64-Linux/* libs/libjffi.so + working-directory: Cryptomator.AppDir + - name: Patch Cryptomator.AppDir + run: | + cp -r dist/appimage/resources/appimage/AppDir/* Cryptomator.AppDir/ + export REVISION_NO=`git rev-list --count HEAD` + envsubst '${REVISION_NO}' < dist/appimage/resources/appimage/AppDir/bin/cryptomator.sh > Cryptomator.AppDir/bin/cryptomator.sh + ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/org.cryptomator.Cryptomator.svg + ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/Cryptomator.svg + ln -s usr/share/icons/hicolor/scalable/apps/org.cryptomator.Cryptomator.svg Cryptomator.AppDir/.DirIcon + ln -s usr/share/applications/org.cryptomator.Cryptomator.desktop Cryptomator.AppDir/Cryptomator.desktop + ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun + - name: Download AppImageKit + run: | + curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage -o appimagetool.AppImage + chmod +x appimagetool.AppImage + ./appimagetool.AppImage --appimage-extract + - name: Prepare GPG-Agent for signing with key 615D449FE6E6A235 + run: | + echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import + echo "${GPG_PASSPHRASE}" | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --dry-run --sign appdir.tar.gz + env: + GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} + GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} + - name: Build AppImage + run: > + ./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage + -u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-x86_64.AppImage.zsync' + --sign --sign-key=615D449FE6E6A235 --sign-args="--batch --pinentry-mode loopback" + - name: Create Detached GPG Signature + run: | + gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage + gpg --batch --quiet --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage.zsync + - name: Upload AppImage + uses: actions/upload-artifact@v2 + with: + name: appimage + path: | + cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage + cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage.asc + cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage.zsync + cryptomator-${{ env.BUILD_VERSION }}-x86_64.AppImage.zsync.asc + if-no-files-found: error + # release: # name: Draft a Release on GitHub Releases # runs-on: ubuntu-latest diff --git a/dist/appimage/resources/appimage/AppDir/bin/cryptomator.sh b/dist/appimage/resources/appimage/AppDir/bin/cryptomator.sh new file mode 100755 index 000000000..4a237c1b2 --- /dev/null +++ b/dist/appimage/resources/appimage/AppDir/bin/cryptomator.sh @@ -0,0 +1,37 @@ +#!/bin/sh +cd $(dirname $0) + +# determine GTK version +GTK2_PRESENT=1 # initially false +GTK3_PRESENT=0 # initially true +if command -v dpkg &> /dev/null; then # do stuff for debian based things + GTK2_PRESENT=`dpkg -l libgtk* | grep -e '\^ii' | grep -e 'libgtk2-*' &> /dev/null; echo $?` + GTK3_PRESENT=`dpkg -l libgtk* | grep -e '\^ii' | grep -e 'libgtk-3-*' &> /dev/null; echo $?` +elif command -v rpm &> /dev/null; then # do stuff for rpm based things (including yum/dnf) + GTK2_PRESENT=`rpm -qa | grep -e '\^gtk2-[0-9][0-9]*' &> /dev/null; echo $?` + GTK3_PRESENT=`rpm -qa | grep -e '\^gtk3-[0-9][0-9]*' &> /dev/null; echo $?` +elif command -v pacman &> /dev/null; then # don't forget arch + GTK2_PRESENT=`pacman -Qi gtk2 &> /dev/null; echo $?` + GTK3_PRESENT=`pacman -Qi gtk3 &> /dev/null; echo $?` +fi + +if [ "$GTK2_PRESENT" -eq 0 ] && [ "$GTK3_PRESENT" -ne 0 ]; then + GTK_FLAG="-Djdk.gtk.version=2" +fi + +# workaround for https://github.com/cryptomator/cryptomator-linux/issues/27 +export LD_PRELOAD=libs/libjffi.so + +# start Cryptomator +./runtime/bin/java \ + -p "mods" \ + -cp "libs/*" \ + -Dcryptomator.logDir="~/.local/share/Cryptomator/logs" \ + -Dcryptomator.mountPointsDir="~/.local/share/Cryptomator/mnt" \ + -Dcryptomator.settingsPath="~/.config/Cryptomator/settings.json:~/.Cryptomator/settings.json" \ + -Dcryptomator.ipcPortPath="~/.config/Cryptomator/ipcPort.bin:~/.Cryptomator/ipcPort.bin" \ + -Dcryptomator.buildNumber="appimage-${REVISION_NO}" \ + $GTK_FLAG \ + -Xss2m \ + -Xmx512m \ + -m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator diff --git a/dist/appimage/resources/appimage/AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop b/dist/appimage/resources/appimage/AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop new file mode 100644 index 000000000..3e1b34830 --- /dev/null +++ b/dist/appimage/resources/appimage/AppDir/usr/share/applications/org.cryptomator.Cryptomator.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Cryptomator +Comment=Cloud Storage Encryption Utility +Exec=cryptomator %F +Icon=org.cryptomator.Cryptomator +Terminal=false +Type=Application +Categories=Utility;Security;FileTools; +StartupWMClass=org.cryptomator.launcher.Cryptomator +MimeType=application/vnd.cryptomator.encrypted;application/x-vnd.cryptomator.vault-metadata; diff --git a/dist/appimage/resources/appimage/AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png b/dist/appimage/resources/appimage/AppDir/usr/share/icons/hicolor/256x256/apps/org.cryptomator.Cryptomator.png new file mode 100644 index 0000000000000000000000000000000000000000..e356c35c6fe7928530de7e95be9c29ee9cf3597e GIT binary patch literal 10950 zcmZvCWl$Vlu=Xqqi!JU>@F2l8I0UyOxCeK4UED2but0Ek3A%U)wgD0>Xt3ZC+%E4| z_5HecYO1E|O!qU>GtW6a-P17|YVueZBIbG`cLYw01~NL{SSX_v z4t%44cF`PNO$u-G<>dz?R(jRVq&Z4JInhox+CYQQHzII1F#u1{*d1V}{%(enFZ~07 z*ZdG14A};BnV`c&ERjA0<-#l{-sS?RaJLVTd@1gE;d9y6lun-M0H#ThwuJQ1fCy-lo5JRKLrj!s~d2N)Jyc(qV;J3JU99 zm}f4Cu6JG)uhH+8D;iFGKk{n%BD>oinzT9Af4w+d*5bI-ITP#n$eh=Jx72!Qfx9%h zF|*j3AZmSFVVSSgvA0rND>oUn>ciT`cI?YJ^|dgCdyNXWnk>Z?J^5okI)@`weRK1H z0>L%eADLnjbsk_tHJ(P8ZZ|4Yo|c!HM7qd~Tf>w7@BJG-3i(fctE7*`6zW{ShFH9b zy;w8nt14J@mJd{}%zbN^V|SlMQf7J@8JjGon1%=N#(7-jk;G&wD_wWehg>5^ny!7N zY>!0zUWEAj`|Fd3q(<1(7I!q;ZI8YTa$bO$lw)QMDd@O*zOMx z9a-34qO2BZK-t^qZ#IasvT~=tBY#oUu>g+X=cFc0Iw$Q9k!;7L3P(^i9mJrQxA!4G ztd|#B%&8*)Y@o+uL83!LKBng+_5FD}C}uXq5A|1FQ;%;;nKb+fMC<$S+{XNJC*`7! zF>xW~YiVAzM_Tn9a**Z$=wd-%)`EgGd>A0HWnnwS2g@(#EkyJAc9bBJKm8wRS*(7G zq&gn@ijdSAhSk(?_^TA8dF)_7Bt`QZI9WHp@99IM-=nK}YisKqa)U7cCPCo~#c>$z zU5$%iaL&^>{Oo&dIp{w3G+>&R4A$h+Z4+~}x7hK7iOds{PPCo^2T#8sgYo+CnH$J9 zJ5uElUZ4GiiPTgPV1H8`{u^WGxqe)|yBLpLc+`m*S9z zF7B8y(lz*F{7rjy1Y1A_j3;}x^;>Mste*u zCOD~IWT9)A@$#wKqky5=k%^|hl|A+Z%{>O`;y5-Lx^C_DA1>pW)@#*u9`WD8zDD)($-&<6mV92-g+5 zwtidlni*p$UVOt$cFl}Ya-UFVfP*D_!lDe)%!U#(rmGpA;}fx>)9z_ZgcbLzeiBCxr{w}+BEfSAG--eOG}ABILA zMwAP=B)zTPAQ0`DUrh6q?D9OgR{i1{Jk3J}aH?C}zp44=XM0`8)^dT>RRo*+SUL*$ z_(&wd>(hu(N|n{Y9~EXS0MXxTxS8*r&W83xwwHR|<@b2kCj?V4Xi*@YQ<)4+8@4;z zsC}4HY5W=(J=M3f?tXfs_SMtJ+&y&!fGGZF|F4Q@u7Bgp5eT;AZyou}vS8`3M64k5 zv8TKp8g8@X&+Uia42sM%JA*ajyhTsm(Paw?I5K8pj2W+=9%&(;&J7+vPFm3*zkmgHP z>)$&`QtT4ypXv7-eh?&v%fP_+dQ+F{nR`ss9~e!# zs@tx)*DSQWyC)&vz^|Eb{oVLw{HwXxtGIm*G+*rOYJ$qZPsRoas>%MsIfW%VDC|Uw ztuibO%&xmmc$za4z-{B2=-h;ayFvr=eVBJw9ufkpD?MR-d>7rIR@l%lhkh(MihSZL zL`8~ht{ZRZ z;l6~?YRCljLRf2u#m3)_$xyE{ob@hihcXtOiaurelh#| z`}Hj?p2z{rcXxN!_5tb#ffIe#gADP@oj8HuFvRpPY%TtlWF1}Pw)fL;zjgfZHzTJd zkeQYbln_anzP4V$#?&Mb1_?u%8qCzuRu;sIkQ)*aoj>iUP5Y-(URyH&48e!baXW&8 zs{6S3#lQvuQ6XjutIuHy_Bza(K%}Figm7#3TK)jTi_((8qzh@tl8B3sr#~m8jCTVf z`5dqkKA5F(1&s??z?flT9!4?*E85|<&9PE6_elGs4*?nc zFDR@hwd{9W84tH`1g4iyuC_kx_15v9&Ulf?lv7e3V5&q*3Jv+x>{+t>gsjGL^7dKU zs$y`F4srQUYWq*3umGI;H#RoPNQj9eceb~Cgn4<-@BaS%+pDgsO0_Z7)YKH5_4)JD z(e(86z|WsrtHGJKNb(K-^_WeaO>}^$=tZ1G}pBCoov_tyMLJKIAVQR z>C2xT{!zodt9uOFOSk)G@;$2a{H2TKC2MYuFwQSqww@^ZLDeDU;Kbmhr=!Vxqx*vc zstl`4uzf8^ul2HAahIy)Bc9GT((>mn3N5?tYk!?odkWNJ~G0QSHSFkwm26d(2 zxRV5-CtxF+e5@xGHKGpqampXHhD5r%QJgt>t?pb@{}<}+-JXsbkWv=C)#0w^wS^(j z;PVdg5R`@Er$J#a(9kt3I!hvkzrMOSJ&n|@0CJQrLa;K+qI#4wK-ZSLC@$Uk8rkoU z6_F%KD2%*4h7vflGuGIA>mO;^oY^w(@V#0Z*f@0NZ}+fBD{U4ayBq~kUeQ-+-xt3t z^io8%7Lf2tRw1fqz#0He7}mPUu{BW_VKyLgEG62CBm;r!oh;oyJesLY$y#-%H?_31Oax_tjl9PxeE5+9UU2K# z_E3%h1zI-5ixH8+FZz@a+VQ>dLAgrUV8D9h=79ZADqlY*3g_S>gw_eU<g+Cmqq)1ZA1@!#+p3tou`SL<$onh-Eg@l6oY2)(J~%BHX6}VgQbTxj#U)mm*I^wuw-}YL{ob%fby1ibp7t z+T=ONFd0vOtiO4G)Q0mRF6s}C3S(5@lL^_MS39G%$g~ZSj~m`u+B{Up@4Zmqv2pL1 zL?CN9No-CI)vHRXyPC~fyEFjyw;F|C7*=cDCXprdgY14ONn+OmR zF?;^NJA=>^b+vQArG5XavhSQO9kwhE?GJ8XaiV**P_XiP7~A6tEjUgE-ij5!S@n|r zFWrtChVoZS6L7h0U3xxHTt}V)E4_OSku=Y)oRDnh1znn8$in68lFaFu^m_M)12P+^o{jigK|9~xHOY8QVV0e(EPWeGgIBB`}bx0|@n&J9VU z#~`Y6&x0uFAkjyFfiT1&5g}is_kE^fu~o*>pyayM^$kG?;uRm1!(BQw#k87GVT-HY zX@)p{LCf>$RNAo@O6tu8>Z^*c|MY|XA~7Fwve{jxVvY2X3?kWts4X;4-g}-eLAiA< zq<|jVT>Wqg!&%`bw33s1DTj3uHV8=~yP+7B`_56`5Y zlEvO1jTb&&xS&YNQ9D#w#)z*iN({wOjgy13qOzeXX1?>V$N7D(V8rb=6lE2TjUrWq zs1(GKS$d}F(`|72KtM{96;)^8POXZW#=(JKM(=K~hVkajHs)fC*t!RP=ue({m2$lt zQ{K#P;mb3KXccJ<8~nus)y~M)JK<*{@?jU%^YP~7iRO)b|DNEXx-#d^y&atIeb?JR z;`8bLDVS3WYGBuD$9#Db!JR=4M|^Y1IMb|j5=4$OBNN+%))KNg77AdE zv!Nt@vCT}sjmz@B5lk@|P~X$?jFlKHtn@^rsNysg{azUINSvq`PDNKe7sQ zl>;0uMttKkcv2zBvRp9YSX?f5ho=$=;eIPwdm)^9Lkr?3b7ZgrPmz`lRd&=R9vJ73 z8vM##DFGrsx9o5th#%TZLzyq|xcX&v_;cQA2p5pch~VL9hl|1qV1Ysdx%ccU?`?zb!U{ZBFpodUoCpISMAiMArSn0b7oPzZF?zifJ(dfzHtnVISt!^AB`99)Ysj#LRMAEA1axu z`5?VNSj_jPgF=#}q0iM@VvCRHwa;eoD?cIC>M{3lKhx^+Zp5D?#uRq|Us6rVU=wxF zQC(I{TxpiDc?4RZ8hjfuTH(SpIQ}T@{%(LBbnvDp#*1H>A}!`+jW;L0+Tn_ z{{QcTq|mZSFJi!h4PJ=BTwhFuOPBeplL?4&hrX#xFjpjr{}e>=Zu8~4 zWv~Kv!K9H0nWPbne5)?EZ;}$o%bGadQ@as%2g0zh8Uc;6I8Xo|tky@izn*4y{*#NLgHbUN;NZ`Ec^e+G!LIPX?IZQ#m#ynV?{}eag2@vOCE6DG=D6#6%pU zG(U*L-Xe8`LXJ@t&V@xt;Vl6FuvDMl1LE-tlr6#?JtpILwe7&sJu>8)S=Ak$|9e2e8tK1Wy63|jwWL@WUREaaSAy<=l1oEpo# z^a?P%vsIKC*cqCi25MUji|h_cV|0Cr3g23x_@YE~;+o457n_9pUcdF;f7suI-PK-2JjG@v3xWJ$m^O4NZ{ss z+~0?aY@^>+L22X9`LWMOHs!7BEBDBMLXrzj+oxq;?pOG$FYHsoQ!6&tP-_Fxy>1`A zoiTiAN@79iMJgTAXW+h1o98v-Qz-#K*A6zj`afv8JbrEYSyYLK+YUzJmx`Hv+paqN z3WS@P!;%45=vCK13kn)wl}!>X*@hI7xAVA?P_i3tS)ZZk1&|fi8h@@CcIpdWYyM8} zWhwclqQQuJxk-;-0zaRC z_{o46HO^T@x2B#}_vfdpHvOy$n>iUiC>&klD;wO+u$2q;y;aHXOTG%%2cs{Kf__wDk zozTf?V6B;*zc~cc`WfYlIfIz$oBP`X!sL3=M+FOQWtO0l=Lm5#7_JVdYtYaQ)sEii zd;oTXDmM(j5A`Xu=@W1D$WgJ5tC_GhBdgemG7VJ<&vkf|!3qSn# z^b+uj&m>ueql{W+Mg?Y_Fdy@V{em<vC@2UyD@jl5AA6L_w&;IW&26=)J5H(rws39^SwzQND?2OM_4@4qoypUC z;^2o7%w2IEGqhZrK?Zu4p-fPhoauqYq%2^}l;LX73jKl}@QF3~ux05&1?XU0NdtvX z%<@Wo3;z;xU|fcHOy$&b0KB8KdmW@_{vdB78UL98m~d${YxVBFLHsa91^Z?b0@8Z*(t-X-!DDL`6tZ4(M)!MAxK8OU~VOr z{qW~yoJ~7afRIM(Yl+)43GqrejMRmu^3uHes0IiUN$vY$n0?mH}9fK&DlCh5B<_aEdiA zp=1eOvcLpj#UWe3{N{R3&46OP!4wR(ThhWV3ajt5*^(eFuDmG^JNH1J!7rqY5H3-@ z&&V&-m;FUtZWwnVCqk~5i^a!G5MV2}i0CM6q*<0TK(wWV==s2OYl}iC7@rKo^s_I52@p#zm<5v6xw4$^@eXdo^g_^r04xHJAmze*Yy9tbHG*Ip z=KFP&H|dn{8~Va7&(g6kIdC^@f_Vzu>MA6KzY&}HN}<6vnnH2o7%QnE-&R>j?~QUF zL3}Vz^>CsDyWT~bnv%&w#%n*cc=`-6$Dbf04`tiwKDS=>xu zxB+1+`a&T~Qm)`f3Omoz&_)t7%0)L7d@9^NaAWVDPvmt z&IDkE&(<+)!HDYC^M+;TO{&$om$~95<%pw&>Vv*B`_$x(v5w9h8y!>fevnGiAgy{y zV|!Q(yO}FHMF#Gvgvm|4-VfdLIVO4+eOr-_t!RM{Q@O97P$kF#tYIAwyq!FZ&@(Iq zkJRz%I~Tx-BPs^E<=>8KOIJT;!FYwwrpI`5kKgwOv$xJTNsybAJsUvO(ACW}_LuHxJFuv3 z24)$KdOt3U!i!8EoIhwg(DLv7+n&_4G#yQhn5vqp1aJ9F6v=yR-O%nIZZhM=ogKQ9 z*`DL!uk!ymlx+UK>JtrVhmk2`^3$HaCg@{Ax7R^1_Slw5SRtjW5~ z>|rf!ZJ068F%9>zZDA=pZtI*$bmn={Nq^7S=C{8N_h0s#%FM(oP@Bnp$;Iw(GJ51e z^1T-|jgX8GhwH7n=WvH;h4vk9bEO|FcADtg9AOLQycLe;V&X13NMqMFe;7By^%Cwh7-)6Wy%6MoNA0AXGwWg`!ip ziiS_%BD5#YnywQ(**~OhQzU1$;8alP$kfLfpOt-RO&U7yan(3`{nAc*Ey=~nE&p&^ zuJgfT3>A;*H4E?4I#NPM*g!Q>s@xV45qUO@;GXoV&ag9IuRKWxzZ>S#9}8Hz1tfo7 zA3k#GKC({GeT*KTkaYPfn7z8F%p`wO+pi-uE`5TM(s4+tta<)@`!&eHEz`u|=NflVAMDdRO5^cyMt$8P%1yv=Ink-4 zo;2l?m&}D6==8N|+{MJNoOgXsgYVVZ^8V4+zoj$2CCj#E@(Jc5gBz$;*S*3uddEO* z_-^tj5Vcq~W^S)HRh`r8eC~w&s#qqu1@Ya9~N?1k(nD8^NwiZN|Yc z52ejG$8R{BVXS-FbB^!SHQ{Dw4?SGwoFf3V4z(QA7JgH2cr)E0WTe#7}j zNnC;~-DrX(=$Z0g)TRwVia@Xi@s1s|#iCra)G76&u{9e0py?-?f`u-}&T4eieJ-AP zp+0AZbDu?_Db9hz*WS7+0d&e#g4`$B8o}8(vb5R(0lPu=gSra!9M&{x~xsxg`5KPahxFN_UEZFiVt3HM^&F?PHoHv8R++A_)n{NXhfj0JN#zD1s zJmpu5mp-mwL`2_U(_{u7Q6^f07(7nUk$S*lw&6E!YBbx7UZ-6qCYtnc;l8j5>LN1Gr;wtt^m=D zZd$SyeTPP&!)Ls-X422goav*a()Pwv6^lZ`H}=UNDxZKA`2lV~3D!{8H0jkH=aI3{ z{N?z2P(%c6P7^N@MVCjGi89aY+{p2(lEK{7z*d!xo(Cnz#8nqN!oMLfK_OxG?}Gy}v$y$zKe*{Z6_B)#AG zm|l@W*SrbW!{Q{4e=K7ccc&JDqU67W9a(Kc(yGekoQz z!V~tpM~>rb{g(}(wuJTp`R-6j4sh67$ux6O^cpbs_Z|ru_D;W3{|Cp2N>`&}=X3eF zDYg}3%aenH&3tCsn$>ZR7J=atW)9fl$kz8jHX1{l^_uh)ZC`TR3^GFn&m3gUuq6t<&Ir_*Z#g4IFzzC8>_*Rsb}kIjo$v6Sz&wAX>6T(Q`V2 zdch-Men)m-`tV|t9lom9U(qGHt)z4#ad`x?`pAU#$0xAW@wvU~|L+rPO%pQ95;-1D z&OCLUrT*4zqntt$POD2(N18fUx(SxIUZ$oZI53~mYJVUcLm)~&{8fLD26z^O+L8VF z!LJG=D5{S&P@nHMBxs=ot&Z2UE!XZl8(w#qtO8jxU^uv7PFZ&rLTo*4m=vNxUnsFk zxSV`^*z^>Va5d!r4>$pKV^M+9aIO%m;XDNKKk;8XAF5KZk4kjE7$KR;Jzsg)F$yqs z<1=xVR)EW9V+s~Z@VVE007DZ_Trl3)oNy1d9#SHiV&K5CIl%AAc^~>Xni~=^UYbd( zhGCxI@bM;@>M6Y4Ih<`VL?Imj)7DDx+9EghZ|X7`+S3;Es#K!8hz3P4&C&>(I-zNh z1HEBbT4ULDr7n515I=g202<3_3nS8?BD8QGSfp0SW|0U_uc$SuxvsxWU*~ zZ@hj;?->w%{MJU~lIWmBM_1Tz-%>%H`v>u$)-{RUCUh%zCT88WmoK9Qv7LQ zWH=@@aB2imWucUCw2IK0i+1bcdrtTd;xh~I0uqb3IEn>*jC7=hJ6GEi8!fOwF5Re- z0shu*w9%im=JW*(_iYrQDm{N)DaFGs;ZyBsai%N^CMWvX;f=D^B9W9!`7!|I5eRoR z_A52ImCJDlh(Um9LsSUwv!rrB9A*PFGGws-LZ{|ShIB$-5~R)+h{sX2{hF>*vzKbm z8qLVGN07&BL$YUD{6k^3|)a64EPK#4q%WY{l4%Uq3zD<$05h6U^6;}iG&1`oPAb@ z&{&?*vARaTJz%~M3|~>W7TzKV6{c*S$_Y|xtv&fdce4KSBC7FIH2+3zjbk{>=>PvR}drTjXatbIovpy%4$U?h~ zuCL(_L4Sihen+OfSl);nxv(_Kigz`y{(7vgcYTLHBP|M?adU`=TWvc)!LDLFgleHy z+vk+by{G^e(-F+d%tYaHyAc)Xl8rG0*{AfEJJh oVE;9qA_2$%+W$RZ`r=th(&(eYNY(<5^?wM8Z`5RKrA?@PLlo(hkR07G!~p3Q0qKw&4T6G#q`(vqkdP2Wax~Hc(lJW9 zJNJEjfBuE)&Ei!gZ%(QQZ+hGRXguQ_P7?It6L`R zkW=0{ldoS8R5@RGzsT6R@^~-U5o5nTQW(GJaT(Q85SP6A=0<90gkea@c)Tz1R2hYq zFiXxLeF>5gwnr(~hDY@4?pnVb*P2;CICDWHYieXk^p6RiI0e$AHbGx}h4&EnTKCMG z0VGf&OzwY!W{K+WCk{=l+H^ep7m$EI9mb~5s#HcU9N}%vrMajz9r15i?j1r@?hhoR2bGr!h2{PI1xtJl4I)4z z9u08bUaxgha|{UkCu>{T9DTEzV?8n>=DjcNKYeC&PvE2-9P7#BaZ$~6pa`O1-0lKCrmeOVUitOeq zYh4ro>~3wwGaB`scMymmwmPgMWs# zdU$!C5JMX_8*1_a2!J`=pYTw%``*-~mt$@1`K{FKRRv}I>zm}GNe@LT*7mDzdE(|d zCMPFFJctZ!vs)T$wg2f!;oVcLcSc#Gk@c-nS>G*YKf@zIl}M9Uk2eP|BO}9(4AK;F z1&t%50)W|ezg}_6o$IiuM{a+aRg^m!i!FPy)sQAnG-Ly>zSq?`exce;*_?81V#EWt zP@keBBodZCV7I#d#+WuU;ZFLeEtQVDugCBMOtaGN;$MnhuuuCm!-xQY&8E`McXDTY zE2p?VlwLxKs^>=gzKSqq3t2u%7Uqf&oYL%gtrZvd!rD4<{Z1?`+EQUis*+J=7-}J@ze)aZASa5`QSFSiX zJNI$1V|~W+-FBc*0J9e;dtr~qJZK%79~Avo-Zu9)ivKuhx)og5)sxM(shumet-Sh` z%3aPE;k!e5Jyy1nHxv=_+tvsGkWBX}6IN|Lv~lgq^*>g6_JpFZx1Wg}KWRRQ03SeM zGD(jUa9ed^oGzi5TOy2>bEuWx2>)|eP&U?LfDslp?wveP@&m~c?kM2`yFh&kwlk0N zzXhsowi!DiFG3R8-hNkepuft32EW|C_3vN1vZn+A_$QKZ0AQ}~+u_NvV7SGW&!E+` z6O|Olm!6SLX-8BOf5H6Esn+l3Soj{E5=W@Df7Y0^Da0;~cnT>Yc(%Pj&3*e$V2+j9 zv)2%*wRlyJ?>B;-WWazT&rhm0Nl2_w!w57IiThc{khotX}e zH(R}%P9P8f{o&ngy7AN?k+W`i)AnqmMFh%w`U3o@_p!Bt-@b$*9yA=d_X6|*6iXoL zN`OPw>*$av?+j4HWLN5;>A-9^-q&ZLecCFGqgNopHnABpaWR5>3!uM{SM_6LWNCH6 zDOp-sBs?Ju|HS!kdb4!esr*o^BrT_i!2BQqfQ^lz?2v;5_sPAT1Rc@Bt1#}cqM}xl znA_p`ODdsqj-|_%&{=jgaTVwcm~Od_>&SPk-abCuqCc=*>w{vxh$XoWyzI{r%X<9%7ZtKaxk>AUcsnOruO&X`SfBAQ-Wo;7e z(}pMJ--(lH=gYAhvYWD&POkCtBOEz0PG5GdLRY=iC-XO zSW~F~p`)%le8@d#K&#sCrw5SBmm#pVi#PQut6yGb^%A+ykbI(v$9sMX!H3!>suAO{ z2W>Su8rt*g`>5|9 zF}9nnbm`bxbd5CER^j@6x1Yee?b z7d3pjX+i({@ZU^Dgf)AweGU|wzARLs?ipv?NZu_lOwY_1107$+pKv{zksSawh2NLt zm6*;X1Y1gGGEn!mFfhk|yq%C*cXscrOBl|MEM%~BOL08VgiALe2d*HB`f9xd;70E; z{;IC|e&^Ul-dot`X?V=a~^}R0d;jAY5%&*=nxTuCta9$KTUGML$Q|KfU$OVdr=>rHbZWDKG?o46A zqB>o!CvH%4e$nt_aqYHGX1TmWcG2^S1>-NR?t2sUzqu{yU%*7CsjVR&l;c+*lb0Tv z)1$-wE;4&d@KsuN`0o#Qj+$Tp_}IY(Mkr9fsWtAQDl$`4^g}JjkI_ZmX%)bhQi#on zEnDRIP1xF)KubzX)@}gR`o^Gh#ch*tq$MXO$2a^nug5JfxTx|ZSNvMmInqeiVrL_y z|09o^ApPU_26_pslQM{b@}I^ZTn{`omom$FeN;5=FL%l;E8uW%z7X!^XucN7oZef` zz;bJh10eg7K(cKu&KqWl$a##L%Y&YWQm@RnkEZEjkXIbEA*bBk?|1ApXGKk7G#_&)M<7T4q@rbWg^ytJ!+LwU z=Tfuy!LE3S@8-pM!NVslU7Ai-72`RI*X#-f4=fVE925FZJAm$DFAC@KT=tAI5%TKR zGF~G+C*Haw$!=zWv_&|`B@o9(xKE7*i+YbX+>E{%{dqA|O!am4`<4jK$&L~BTy-YI zf)GH(SKw^!^tAJiJ<8M=XlLnLM-n{_m1wt5)<*?fvMFALSP%dxN!1D`Cnu!uBfeQ2 z8|D^U?knKBOUe7Xl_a(%mv(Y$Dv<@cfDDGGLI8`@cYJU9_}7mMzL9jiPh=OGz3=QVeYR};`4%djk+S_FnT{E@~5Gwk;!VpZn>0*v>zW6>bgOIs+;U9 z>FWBG$O2ra1X6nuh28*58OC4xzOKkCo2n@@a7tyf5iwSPv~p9-Yt*r>vt@8MdXp+4 zMhd?fubr1^eVn2a;5gifRfG52XXHzrK{=2)K4I6ND zHw}XQhRjCT0f3?XomS9E_)IS$R@Cp?z97D25dO#E>~O!-BMk}}s~zwc)J@%x?{bE9 z`o$%FmWIEVP-vgM77lXHro3w(8^vt;a`}<8&nt$A(?^?U**6qQjW1cGr%A^8sP?}U zj`Pm3X>4~3xr^6dvSi3!X6ijuPnvteZV_PB;&}jo*n!Pp_*GW(-6oy@8=OHyLYR4* zfw@6HUoBxVg-N-j5r76tUV9(hHq%ykT@_7Gv1Mv;Y>Fk&63_*q9E@O5!)Javb2Ccbh?gJ} z68yJEZ#2r?l$@9^H&+G!@Kvb9FM31upN!OlD|?r)sd@qiW~Sr^B)ee+kI`PB8%e7^ zo0_cXJP!_PA^-l9K!&+rZy^MRlAgt6je4}=UBAsLj>afzmPnunJUr{1Xn>b94fjL= z+D}hHl0mB;F#Hk{k+O?V!{tHV0y1(fLywzv(OY^vE1ez6;b0z{I~|e~|^8W#tUq#0=LOUp~`O zyE*;%o-++_S-uBaPHz3?bI>y%GW>F#U$C8`4f63?{iKJRHBd8zQ7zw7+nJJZGV}Ir zlO>^W80Vn)JraMIRxj8*---+JcP6c>8(NIIxP%t{X0SNpmN0eS0erG~nF=BlKecV6e-r zYG{xx=j--vH}9>cSHKvp++C3s{8{v9J9@?7FGKVg;evzltDWs%#7`TXeqTK-AiB}b z6?&mqFg~dE$Nu$lbm=Yj+N(TU@(7pH~RPQN|j(K zkV<42oep~j15m-%xm8i|+2a+bcy0Icy2$`?P#G2QGz;o)0wvYX0FaSkTmi-4uhTsT zk*|@$7;vPtuyTL+1UOY0;UByW0GG5JjIXKYcS-!3QW=B05ENvD<((%XSAIST~qwf z4mcJ5-~8G#Lewz;R;#uIDA)fDsWLb?dph-kQ!#8Aa8V%lvvRar9rF3JI?{Y z@yQ9Oiu?bj2Zg*FJr$yzdF=#d4zSonYFmli{gT^+d}Q)@e}-B+47mWSr)ZD_ zKezKvPJa62xraw0$j=`Ks_l7l%GtX)#DFA#=hhE03Ub~ibFdZx2}*v?*vrAR13`TS z4aU3q_8MfAu3**gmj958_Z#9;mTJuO=e3XHdQy{K=8Wt}Fb*OcB%;odV}1YXuyB8+ zx~3-A_iU#t$-J_xrr^>e(O~$#jL6r^SClfo>MW)+VEwA;^Ww#auz>!j=AVbU zhm$hRm17FmZriXP7-An7LC`m=wD>_BZvrj;TgF@$m_V?{m@O>bDA_AQh#}ZFyUQJulimUdvH4` zvc9(3?zOy+@J}zNfKa~+!h*(f4Pq|a$M#9`7X^694erlB90i{1*NrHGE_P4#S;oh# zzY7xFS@mtf)gSWmY?+u?^|PK837X&3dsof$AR4T--|uVM(yGZ+#lL+se12Zbf4$j$ zjkEGpzz?sh@{&;$=GZu4N<@-^z)S@oMu)nx8iQ)xuOf+H3xA^4G6EGf)AyCl=f?RW zm)l+I!W{`g%mvfrr69*u^Xx3Ej<#;hCs*Me1!i`~RXagd;kLixKX(2^f4aa@Otq4| zNO=aPLHrJ3X^C&Wyah7;*BGB}?Xf>MLG-nfi(=@Y4{4ViBY6_~L=;rOm9{KENbD-< z#riGqERiW+vXhd3(TKUkOzc@n+b^2k8b@4(=74tpX0x^#6Fz}^-`w5JQ|0CPP($T| z-2tIupnj6EA)np%*t^Mpf3og=yrOorxHr+MKW9cs1z4SOWF3!zT>Bd#yjtS#$+^{INNHzAb5j|+_v?n9fU19*_AnHJu>9w5 zQ6LHc%s zOZ|2Xu6B8w;~#j<{7TW`4Lm$Nnxv$qFY-l2MT1W^ zCn|&g24CGfro5cHg5h?W%FD`x>b`$}^rNA}rDTHcCmyJ1|V58cMwX$0*ymNeYq zgBp=@OK?+~5Ti4Pv)v-q9nK3ZGGvB3+6E0)#GoOlcJC97Ec7%&G{}5#O)-y-(FHom`lR*d-CrZ>1Z~-OZgk|rP&+F zM9=iTXyuOCn;i50uJR#aOSY}`%}3y1L3vPt`k6+2rpgMf?b+k`sKL=)yyn~*b^Tn{!A4z zObCkzqb^a-8!Gl3r_e0dUy@8vYFA<=tjG=K?hGO8l=PK8e_Kx#^xLpWp2qKqS$reA z(t?t$iF_%pc@`9r-R1lMU4$*(bL*y=R{y?zqpsrlnSfkwIhFDXLKc?v2Sb`-( z1j~wyfX#HFW}*I&3ae1qknx6XS?5e`?`GyN#K7vpHs?T;dBTa+j%d-Ho}r$E$K&lz z(6DK&jSLnV)Wtbif$_D)%)wa zBAgGNn8nm()+c}QbRPS?1YM??0yR?d{IsKYm@#Ui@S{s59ak3~5P-I@sN zo9L5y_Fgf^!nCQ`^zgOd;5*N|nZzG4pCPDF+KE35y+&l4bW}~4IR~e5%EyWoVn04e zKX@f^oF((>x-d53bIXXhBPD~-(Vx((^7>wPA(lqI24;tg8`>F;Y`B5A-{VV?c4WSn z&ClpB@PHGC-QZxtL^6Evybl`M_5vq=iYZ|3zBk%=@YC13#U`TRf6Wx_+j1vM%g~<*W7^Mzf6x zdxgaNo~w*(Q%arCFh07>3he#4-O?|B+^45;iupq&7&l6lTg@s|g^h91M^A?nVNcyn zZX$jf{e6}9dQ8O7q=SWBM7UA#oX<{K=yP2_&)ay{s&{H`rN=%}nO~m9Dg78K$G8!K zB4p`)x{mIUq?VOtFMqYzij?3gHHHGq zC>5G;8gCQz*0=az^dx4Q+VZ3gMgUD`$t0NU^-(XN+Vqj~&*=wS74@Pgq6z@qWAC5`^TrTFUC ztSQRKE!TNbkchoDqqwf}0w>736N%4Y&!9rh7b5%-%hXIvH%%;F(~7q4suAt}v7O=N z)AKTJH^9fV<%6K0$jZn3+OGqz+)bNy{4+g=S4!*Zii*&pT=Oars#_tUA)QZZCo~~t zx~ncH9)`1K% zM)NIAR!g!b2|Wgs?N8aM=w-I8vN_-z01_HFDU#k;O6My z@cY(F$vSHIsPBo!DKUG^2{9t8%;m`!(E;V;7AItA9T0ueB9GE;&Jnjif$nzNTPhMc z`a^{3vut)LeFeFijes^0`0)D1M&>lRtNMK6Tf%HAXttYF-7R##xS$AaawxS43?Tyq z6YjTs;C-r?PLGNa+r;Tkv_E(ol}&ZKNHX@~2iyLJMy9RQaDBJlsk98B=}HR--{{gx zWxVA{ToaHMTx7U;vf~TtSEeF#;llQcx*N+j!WT?HgCKqjg{OzqM~*TdR-{ei1WxUy zuK-%b<6sNiR#e&d2d$aGgXsz}NK(}4odo{VN1O$0tS3!`-r*iHm*G^T-E0#l$?w^21VbslZz;EJfJR4&JgTy~R zF8NHl(*HyzlHV&CP#Q8?RTJ(1uXOLw`cG+@Ja5p3ItT{}ZQ~q4jg@uBBn* z^j9^77z+|qDs+jYe$3@0ZaO`kX;%K?MNw-JgoOQk`6NGCeD<#QI}S)-V4LhobTcjT zb}AGu4*8i|T|GK^=i?1}RVk(*MIydY+oQsqe$KIdYVi>2W?I0FuIp~9Nlu2hzxcET zu5u-*-|IeTnt=~8F3vX*Hq^K_c~<-X79YeVIDRcED&Zse{?o5AXZ~LJII^mF@-{*$ z(WF;%5cl66ngDn5*~+!{2QucQSR19Rf72w*f~UKgfUeue#g>PpNJSFV4AjChR(D&h zX2W=+&?QKouvL#pf97G|)tYeY@!~@u7dRbb3o!{F@F?bMf3V-eMQqG|+X4#T53|fL z-?#=e)geS3Y$%glwt@NI87p&30^H{7hM>jhlKCt4VStFb{X1HK8?aovK$PSX%sh$rUtH!)qfw)6#8$Ep%dsn~>VH{lP~+P?5!?XOA!ROi z6N+}%-mGXr9S?f`N>hVp{WI^NxJ0rWcg9xt;lE{U@P3k!dih?z75MR_n!r1PO4`xe z=&Uz2xLlZ{LV=hYXg(!L=n>NIJa`2}yoq=lo=x?+rf_`Z4XpK!^+qG~-}Y72PH!ay z)8jA9W!IIL{0_m=D6U5QOrJ`(g`hJocs=p&<^uQ|WC=xO8`&RBYeix!`ToUQ=K>UQ zDgCxW8jpt-bar3(Q_FG+UY)?n<+Wt+5cafxRX%yiqs@Q6!%3z9sScrH3zrBndGz?P zS0~$go>s~@Zd%1w(2zo&z3uhuo10C}ODc6FKt<?i?Pg;XrC)geC+WKOijEUFx1zwnLGJ*fbayK% zFCd17^-0dbvbrfUztkWzdzkY#32cZf_F>RzhtHD9jfcemJxn4cDmml zr-jbtFMP}Tjmuf!z%xq!`lrff1p@r!mn6KO2>H0E?C~BS<6319**P73ixHQ^%EFClKCtMmy%N7i@;bBwIyxt2c9S597hT!)f^MB}G>uFXUsYET`#vPnE*>3A zrnM<@--|cV%iYm~KO#%rkNZPyyV{1rxYU)G!sI(otrf+OjqV+zQh)?Jws;xcZ;{#F zWy4RLlmNAOD4HN1&?~8(URaGgoojiB+4wqYOeFK}JNI(ON*x1VspDb<3f#9}>*YP@8P`(@(#=uJ!EYG0yn;^g2 zAN*?s#H&xpv7HVtq_Gav7*PesYXzf&H&unYHb|raxmVGOsW22$Q!? zg*$rvUEgd-6JPx=D((}lKB-W9lh^Y3Hfbzw{FRzSy>EDw!ac21E7w0^#Rm&^cl~@{ zwt3_Y7*CnEb$mv28D>^VdAQh9frpFIB0MD++>%L4Q}RFF`VnyAa=mBbVJv#ovm*%E ze0Mt0aD-jIHExc{@!(K3XRx*pEsw|tx}Ic~OF8Z=-P)%`kO29g5L;rwzpcKyJTJT6 zHm`G?hhE@gK6l(EHjlSBU_D5@PW9TM=luqi8EV41y>M_W&l2Tafx@-CzN|Zuw;_?A z-b3M1Ehiz+PizJ(Qtl%yy}<{@-rI#U9P=CR3g-9xkVhh`A zC-U4#us?D9X(w*-25HnE3!z}q)Lw-r5tl0*qF&zXWaKKGpjF_8nb>=XPw7XO%u<2J z#rE+_nwpxk7|K2T>yswZHiyl2H|l!UXjW^>G;`I4V)b9g;j?_JupUd8_}>pX|+THn+D+$ZRqGgMLG9h?%ob2@dD)4C!(#>>NF*5RHd zy4y5GEJxN>*jSZy{`VviE5>(a!?sT6Y>Bm-RT#YdNu47QC$0}PQj&bv?Mh0MGWP8F z?z45n=4stEpUtO!<;*uy96#R>`~&c>H1%XQ-KW2XpKnF#c;4O_(ec?BPCU`n(sGe* zro>$ZFGfworPU2=bWo7oziMS6sUS|ET&uGu``nmPYwk^PsOaoi5<|TULAvCNs@lKl zXSNyO{gDC2=7t?j!aFai1JC0%vJs=_Lp}ez03pN)dF3!tLwx_>=frp4iP-OfE2ZX( zQSPkSqXBp{XN^U;;LFvo_xEOK1Oz%I5Y9W$YZT=PSxe zVM37xW9%Id+uM2@oAX>{yt4d9Q z)6cFg>M;akr^@|iJ zfPMJ=sY7A4lJuZt#^M>3tvt_5#36h?7Fc+{+Iw!L9eXf%%mgSGv_F-dnTQ z{=0$}^%poMs{B769A$`wZd}gdz|b{o<=%$wQX)TkjzT6vi<^dpvm<=8AVidGC~@>u z+I{E9E$A+hHKYr&aDQw6{wSJyp9GaXZdmoJ%@GwZOpj7SIVp_(SV^72;ynZ|w;Fa? z&{Kt9zgEkhW)rj<0%rINhmU?E;}x})<0-yrpc?3U?jXMP3S?S;267pENn8oK=xl=g z-(E=XnsEcyo`Uy*nP2lcolX?jW1o0EAd--_ywa-vRw^1d(bf%7OzxX~M)ZILLAnhZ z@Qm0%h%-O%u5aj^1x_>}yV<6Qt&q$DCpwf2vKNNF8Qqh{Yk$Wi>>eqEMg3%TIwt7s zsxYr4q7Ep=YuB-7OCayMM7#|Ky*Zc>7%}4=E3OnfH4hUYAi z=3tzROHM`{?{)Xvlhex>>!Z#ZQp}h_8d`Ml9t>iyerSYgZNS8Etjlg0-`9fT%al)jT&jQ@lc8i6C}qw5d@zUjI*5Ew)PNN?B~-M; zNCU$rqRD&>?b$_s50k0>CG=+<1tkruVIQL{mg0_I(x8`lpKiz-WRSj|Fo6r`IO|Y< zt>8s(LRUE!1>~GR1BdvwJl_&xvX%uaZ7_bIuKo0Y8*y@7p4$6-u|DRLN~<<4Dg;e-dSg|4WMWl=fMY{R zmfkoQs9C1@G=1gx;ql|8cI$%2j<~VSVKoI|DU!D3=?@-st=et6TgwA=xGMJ(7Y}|^ zb&>Nl%tD6CE*|2*RPj4;>|574a-h9v7vvt>UA7aub~6N(()#3VD&*wkJC`2xD62>K zZOb6ZjkV+)(z6mkSbcAry|Nz6iwYZNQCZc z_~LOr^2_Kdr{VN(xU_k|rRs$+0r}JvidolCsR>HfE z{ipW+1_m@^XTErH+%QZd9>PQ*C26Sa<2wS@t8Yzzvd;*SagDGxTaP0;La0t#oYroq z53c7ui=_EybUCUHaDugOQX+Q3i){wXGuOJjw>>J%Nl>PySP%$WK3jEL1khGFwSSeq zO51_7FQp(%Mjw^B!3UMk*W^a7Vhr;MajAO^%n!_Of19U0vGD1_=$3f$c4=2%{xN#1 zEg>wt&*b?IYB9hLr_t=`etx;+z^*4b(dhBi|GFN>Mw=K6xEVcc9QkCC_zlXc72|f2 zf%7Q+$m>>fE#$*VhqB5Qjekiv!MNY%lsPZeqw|KwRhL43W#K zo4*}63?Li!D8O0`%x;>O!3J^@9~QOlngg8 zdroaaxc|)5lqFNnBiVarMorp#>x*gK$smYgo(6f<)##>%D<&?^wzY}(E6ik)@3O|C zKD#fJP+YqW+>!DNYSa27=w@$D&ZTOON0QY4A4UAfSVxVDMUCt$-v~oWm7ap@a04V9 zAfzgLL*wAYvF~Nf`H=%k>XYwzR^&krCPz-IN|FosF5W;3xsywUSb^w*>Pqwz%KWT) zCl%Kr&*XC@N_{jO)g?Xf5J*P|uj7xQTDmwM0=>NWBpmXkQVJ2T0qnfh)5fo zXHOx;fFxN9ea=j`M(p%pE>A;F-mW~yE}xAAqqHl9OkERzq2{>JLWz{GCz@y?b4+5+hKvh3bu~FMb$21bhRjN+A(x%E# z_c~TO`6p@l>YNf4`czj|>fCt%^> ztO@(4bpv6&sA_q{kln;?XME&M+tjWS1vK=wIezbZC{=A9!tygolBEZ#=KJ?5708U_~1fBp~Y# z_-3Oz1^y=Wi@h^tOSv-31;)$NN24j!NvQHQQaClr&b1fTmj-wJjMh#ftB&=2+7!k!0V0XDJw3f#plkyJC^jgkarRyQ09LMY2j0wdEbX;FZ-E zLO@6FE!c5Z+ywZKP)=k^^acVt!tbne5JrPHOYzPIUrmt05qR0%zCf)Kfp&;W*;yX= z#qa>X8%rS-7IIYi#3`Jbm~-WLcDG^}z)NzzG~WLD^#@LOK8mEfuMk0%UQ@^Jai$p- zH?%{@Rw+)x+#|MvLk3zONm9y(Z6J2;^V#EzNl09{>8%Q)DzLe4=rL zKiy?_%&MaYw3Qor8y&;v&yaN29OZ}z`qarIYiGGxo3^nlDoJQCe*pGSYFqqHA0Yj= zq%i@O89qcwce4o=zJK%1#xJJ4Y;#~MX(k@8K0UP%^!6*0W{w^JylA@UlC$Mw&?8Pj0WJjL+4eQaDq1AR5#g? zX-khV8g19pgLLSo7Izj~RJHilNHCLN0)z$SsM5eHR%{_997*3jEL zytC?%)dunQJ!|@bBpJusJx@a1F|6>hHR0FR#bNRozM6q}7#h!}2x^&1oku^uM zQ|466Mv)K%+W`bDfjBmq&!Yk01Lxd8d;~koo|1ry=F4=};x`~l_U|pygRMc%{mo%C zb2(MlV?U=B23t*7K*teOh|UZm;;?g#S89fTp52dT-i5)_2&o=W)7@p{0jO@OtmWIX zqKXLUDSmHwjnCj=>if|+_OZwL#qz6@qpAn)o>4XDv`i@Xqel1=Ua!oB+1E7Fqhyz z4XFq7u4}g-m*?_rU%VlO2Y*GV^4phVK`9}&{%`0|rz`%_ew$VjI11FH36erHN+QIm zN04jK`WxTVBpYvH*T#;5MK-AASY?-P3FSU01J}LBq$|mQQWPAERhTRQ z+ieuAb*mY3@n4O<@)rZoA5+xBY+_mc4;gG6FT=8x=#61$(o2G_FA7Sc4l|KDBa@Ra z7H|8K6NI`y@`3C2IrrT!vq-RJ=PEP#wg(;L7hp1Hs`1`jSc_fM3G5qTOll=)aYUF6 zS-)ZRI2^b3zYLp0(0?PvbTSeIKS|6V$Xy_%uLo~-N#aA@$4z$!c5%!|i=SqTFyJtS z;4Mqt_@k;{%8jN3%XslEdLi}5M*#})Vt&1Dzg)13W;an$SVBbU?>A0+74%@$GkHi6 z?2lzf${~r`)?8;SI~9>KqxVJ=p$TO|zsjxY@Alp0bl-l3l-r})6#nUfW;GD1-kmu* zxPZvm)B@A6JcPios7T5;6X(xFBZ&K4Y-y0T!ordm0=n9LCPXfa==C*@Aix1TSRPwW z-X>8x})Uq z+MI(X0@M_dcS?1SivgK*+C@-Q$sc1Kvg@V@3UmMu$y-b?D)dt)nXLD!aGRbrE1%e7 zU;*S~@=S7m%>2gXn&19t=h@nh3=O#tH=TBLsPb^}<^H2Po3BW@9G6o0(U)YMN3w8T z@YX~FkiPA`{^kUir7oK)up(P;kJ}+w_K~XdirnBEOMC0ow6db!9{Pj=!#hkA@) zy$}o_gF6+4nT{!`u95Frm)HwlO&3E;P%`Z2fHMN08^iv96r@-40HeumY z9O3rC8Fr4ik#wniPJx3~0g}`_Hh&WyU$Vdhm}1G}Sxrqs3wLn}YRDhE3JgU4^Lhx@ z)a^y+;Ef={w!(_M_u!pRicmF|gY|3HB-uX==Ecj4bbgN8$<=gVS!Kd7eKi2=W3t)l z2{0EsWzyR#meeNUj)=$xh^ZtAh8rGs4dKOdphE{4RWUz8$j(V+Ru`$uZbna4-W||@ z8`Dbg{yu=B^D@hR3MUvE{2U!w#97L*U9yEY0gQ*v3>29Pu=&<9+G~i-U?Gwe@f5C9 z+A82n$wk0oDRar#m7oF|K_4;QZ}NaQ#7TeP-eNH=YIfrxA4}z+-pto$U$slFS57){ zv1D_5@lkKl3^HU>^HK@yrb^s^S_s*x>>ZF9aUcn7FxgnSY&sOht`_`dj$qt7i)#3l zlleMb38BqSd!PDu&uJ^~HD&`JTxWpX>74y8K^d7Gv>PRP%8~$43*!gaA|*mn1M%d@ zy3utOya|w;z)M<-n^Zrpya?~4@~h7#zp&jM^CNp(={XG+IS4!4Ts;s65wYN%hIOMU z6>d>gO3b%5)1qLA-t>8PB% z{v(4h+zvW%fE2+(RY|Y#YKi?hzEw3m6}oE;SCtPv3EMXmpsE}=tHB?ExJ~I-wk`_M z>QC$)lK^)blGgWxW9uVj3}6-?1_*Hj5aAx!a`{OMLfhRC>6aO!%0W8nZ=h99j@<4IuKOh4a*h-;)) zhZqvHJ?G(yl_UKoV$K}I51eF--!_~ws_e-TqUEj|E~dDC_UK7{R41RV_{aNVr%$7r zf8hEM+GY_0p%u@0sB&yWXi>bqiPuu06`QcXDzU7`Zp7ncZRDhhzK67kJA9fIW&qgH zU(^Uc@?iJD?Qh{)doM=nf$oa8yIye4r<2A2tBqM97fX`YC8;vmo*U%!V_`$($>{b0 zoC;RGTxA9z2niAE~wA3n?4)Q0%--R;1ZzXtQ1 z&g|6=6hx}n5Qh6G_ukHs)J+FHNP*4A%Y5dxv!7jfpaQKZZ7xTFoKDg#A*$E6?E(bt zNl?jtk~0{$*Ub@11&vj+BiLYaITnI2T-YcZF5`q8PVixi8<2-umC+}K4WUv!_g+C( ziR2+7mR`$Dc+Fh3CvUvI0(VN)#a%x_v;U;mU&uqdcRUI3gf;M%(G4b~(5igEwJ#|f z#?#AIct{jB2I%3X4UUW|gIDu$pSXtJp18dLsT}9Am7K2d_QJ5AVo6~$PRf%!5jx1x zYi{INS<~qHTn_^03{!YefJc?sXo&>2BU3`OCEKOgk%wl93nq}&S^4BMN!x|Fh%cm^ zJJ)(4B!p67A*r6gGP)U|EyD{GqM45<;RIob2nAvWa+~hU3YhjhmsP%dJ#Hl>=)I#g zyu8Bd!>?u>Q-E+B2?h=)zyZqzkL2l4%G^L>I_Yj8oQCPyt>@2w3q`up$`Z6m83BGS z>Xwpn!r%qU?9)~oh$MdZ(_G*VbT8p4fT{kiD37#!2#tiMxz}IU;0Htx>CImS>z#nd z{?g7Wy7L~`vd_8f2uKXW-P$b_;svf4C5jEeM&-`7uM8Jq!$7wI#R(~b@Hte()^g%D z@j2BU=LJ99z_-o>$sYsRGUsE}C=!lopUxf7%zGw!4<-$OAc{5%8ZN>ke5?J(NXtji z&mr0lPL8=B7v`yt6<+&u{+H_KUcD5OA|2AU#E!Il0^LVxb35^kRDQgB7&drNC}~fMO0MS@i(aJGqa{PX|4TjW zgA+wCS_a=kSc%{zg{`9)?t`w&Y&~sorht6=VCOpbhX3KZ#V$_*H+a{jzDuY+XX+Ch z<6R514Q#QrmB&m^&U_)nu_@d`&PVT69lb)neMMykvvMt#g;}suCH4x*rOg31zudLB zk-%+;RX!#m8hOwQ8BhHzkC)qdE_rwt;JkYrAo6x$gBAJ)+YX1 z8BGwLjpk^V@S~^ZE;0pAo)q7w{eJuEeilWs*6&-#gVu$@Kbm^jnAC_5TvM7lmrNTC zpH|JDx_m7wNF^ZeyZ??fIQ&Wo*!Ego+ui}C(#?Vk=rxPMIgRnSK|GAJ1HoQ`Dn}MA zbIh7b+C;G5-O{dghNsC1n+%jfDVR|n$LDpfTA@ip&1{kV@q~6M{lYapYzQqa(l;5B z6R`oOG<*@1U0-Hc+RiBBPa`2Qs7Coy_A3o1Wx6aVvlgaJo>^CtZ;*3ziD zV&Mm!gnAt*$fQ=u)$wc<$f**Y(NKN>w|D>*Vz?%4b9%tlx*bW5C{3-jc(=DZ1SW#d z3K3zgoTm{C4^MN?K3t;<3u8LsvX>OiHp4CuubduGRpMGKvguJch?l6@l@>Gp^1HWX zv|T6(tTmeK9Jmksv;%)do|S~EeA*w;w-Tb5d?p)g9VK6x+*s3+SAR+uK%EpNN8thp z*HLJF;^2yBwrM(}09)LIRzk!{gta2Y8BQL1*#f(waC-7SRt4MT<*e|uS-G0v=EX+x zAojzfj4_L#>p1VtHVt~w#gknkE=m?aB$uu>bRTmEPH+V>t7oD}BD1iQP?6QjGL~6< zktOm~E8pKyb9g`hua7Sehx&{Df6t74-({a{5i!|PXvUT-Mao#Rjfh0ntYKu0EFlyz zLe{L2vdjz;Dq6^zAxkut!C>s)cc0(${Qmep&+j+yd7gRZeeXH%`@Z+wbI(2Jb&uEY zp{20w`cp-(MwkfVOC4-cC&Tw8YP6R7)=C;GlT;GY{MA*Dn00hROOj{&rmu{06hhp- zhR>+uxYS};ngD4?oO3IYSB-~d`V73QS*XL~m~M{olXcCu^ynMVnR*~_q{k4IHF8*R zaMAAO%{v=Z+Zy*Cq)sGH9eZ!xTO4pnxQ+OWgYV&#C_U;EJxix~?nU-@jC-9fn(RpI zTdekmbqG=pG~A=wGw|BEL|24;*dSqF^rWQ89_(LXPz|d7KuOcAgb< zOebTGzs;UH$QD6j6HuYfZ0UwkF(25fWP+Go*55u@{A>%nX?6C~BAN1aC7|M_11Jvg zPbO?i`{7KzwV+eMz`91wgqaJTb{KFsKxhAqy^{PlnaQ+w*XF*d{1wB|^){?^y6eVG z>sw3?>;@&nY|CUv&CfVuYrDuO;R8MnU1&L11RprJ#|o#raBL^o=YkvmC{q=wZz7uZ zU0raAqrpdZ`d$32r2WP)@hrxR%e|A8PF+U2adHq2{H$sH$PAgHhbSx$P_)@ZXcHzU zJ);%FSuIgQ6d^FkBkDEU_TdMQZ^==jY9SNL?hxllvHM8m&6^@R=iCcOs!-HR@Cp;vgICAe$zTHr_&^#YFS6(Iq2fg_0awk0058@Oz0xD;+ z%0>>8hVORCsCIot)9y{_LwcV9#x#;vEuRQvf+mQCO0}Xz}DGWk^ZQ0ayKd85iS} z`1!ZuX-~zCgK=+9&zJJ5w+-#kS)dDY7ATb{Q1vqBUdybN7t5z-8!1BKO5@nE>^^y zIQ9v_bK&8}S7F>`{=8g+G-~2YdS%6CODHvbqUkAlTm`J2kpS}vZSj;#_yjUcE=$}UJEv-|#(~F+i14pc!F%8wck01Jsj_b-nO@UlF88YF4ukL>TZ3aOPTI*imqR9Z_iG)4k(WghW9fFdWCkl% zLo7@GC0y_b$`@Nm$U%YFtI1Ypv9|B2V^6IyXQYY08mj9f9#upHmLDo_3Me(8q10lB z!$j*KKECH29BAvBZzFL{MC9G>UJ-ms?A*|0Wq?FCk83^2{F68w^x*Y2OLbguH0UvZ zo^TSTL15Nox$7)yK#ahNZe9yvm9sQFMg3V6bbU}8d6N;R?p~8$iZK*YVY-AkIGnwp zd226ncGb7nNx9)(Z&S4ldm+djP$~PaM700TPo3^3nw?q(&+4x7)kBkOk5E`@G z%m@^Ik!2)W(#pT^=)&i5HxD$&8iSs0xn~8-raCP4X#WGLahP0PSDu*heQ$Dm=c~wZ zL@0auI{!bss9(b$B%W4sL+tj-HVt<&Y?ilbrh0^}_w|=j&{FI4nC9JE(^Yw-GY<F%%L%EX_2Q%B#P>1( zpa>Ei51>&#Y7;~`t~@(EE8!oui1arinYHdQEdn5wnP?_jUPTKkowA*MY#^)V#P|@+8skKbn9u5 z-~Fj*Y8rkd=_^2Hc>EqQJ`-*JxC0SC;Bfv=_m-uD!$sWnOw9A#R-Dr+^cle3k!xJ9PMRzml=6`gos80x?H)o$XSzMNn*ozDN zwPRv@N*)k8X8f-KQBRct%fQ6?Z^8OZR;M~0s_s-2g}QBuoj7n6A{n|Rmp7OGe0Epg zd^Q+LDYDl#u7EEH{$?4mBg+64l^h>oza&m4K^y&L@= zmSvkiPb8cIVYf@ZhnTV?XDcgpHx3D6*bDNbx(u0D!Hj(VJR#n6&~$U)ijaz;zH-^$ zA^5)ytw@!Ike$J0HYHI#Wh=bF8Sm9Be@j0x1L&`!}G5}E+e4%H{%cC0(0P`s{?Inl)j?Cr42W+fq{2JfyT|E z99Si@&1?Dnc?$Ul``RIk2$@M*{|7~{av6GHS``=ji5?XQgQhzG?E?IyWDTDP)Vpr7D0Zoe=`l4!2}$!qcM&)YXX)~F{OCN1`Wfq+HHkD@qA!|kEbvMnh) zd8i7d@qECxV)laA;%-xZdj4rJ;9+LbIS+*kzzi>l*)b_s{SH5MeYK$dLfeb`^-Gdp z&b$z*51Rm;O~B%N}bFwOwOU0QCaoC91CnmzyyjphZWmPpA>lE4VUB9 zTunFO;o;%)4s`v`Kh=ePanXTa`rOc7r7(i1o^p>oPlD(dG=v?x=$;WefDAMeAp(Qocfd~F>Uo<6C4?#=@Ec^wvJ2I?tNJ9 zDYn0%P#gZirRXTopJ8X+RN%KRzR4kaA=cdbU32Y%)1ryWe0&0mS&$VQ!gbjd@yqa8 zS>cVg7XPP_f5>^n%AzLSwQzF~UKr$QI<=JJzQ`VyJF;{R|C~fK&U}HtDs%lFO-*jb z1%!12Jd^YU?Zb$jC&eGBxM>CY6#6%HUPY0ooxLp!J0@zqDyYMuKjM70#_yYDT740r z%pv;tvC1(#N&>+89r%+X{ZBcdy?eQ|w6sG3YHe5hb>O*!+V*cv^Qjf2(}g@R-VLUU zA-$*qt#wO0WNO8V_+ARP2#T2v&~1&4ore-AcFybH-G(M7KO?3`ZQXoBKP3NCs@u;F z_J(0W7pU{0^1AgRn^Za{$IMZO>;51hFUz+cNEAmsxr(eY@YtOKChv>s1le4}prX6D#!O&q2+ zl7UDa8Et9yF7^)a1`_~+-|%xI&EBMmMjiKK@|0OKiAqh*AKIMR37vBN-j|tq-D;*{ z@Ilb81WS294!ka_>V?V!INogOKH)Z=b5d&g`FkIfBX(_5o|{wvIPiieNM#j533wUf z2Jzai6{h>A+z*5G*Hfhf}l81zz`!mNKwLFY=RpBS7lnp274IdZVwQp>Q89sqotIf1n0RC zOeJ@EAfY4?f(k-m!`Tpzj$TcC(@MYZl|X24t!8R#_6(<+lb)1d#n@`D-IV$~q=T@p z0h>zvM}n3FzA9qN?{9IsiA~(AGqDV(b4(<2yADLg=qh5r$dcD;gFW8xL9n;DozK}^ zlLvbF9tInoYq}KmV?{``??Q7^-8+*ESDAt&R&H0c$h!BNt_4Y*)Yd3hdkF5H8ix%8 zRbxn5&0V0uP{+MCdo8apo9neQ%lp4~n2z;VyZ7sry#jnwYcJ8>66^aGYxU7Tj_zwi z6;$Yf^CHC7S-Xj1{5nU9`KvUtolTRp@%M+d7-3?46@|x(K96&NY|C`qv$_k?b-ocl zAl$E$ybh!n!b3)erk?q!CPzXiY7XZTtj= zZQ~)fHm|natZR65mfUiYt|~#=_&LRR@{tA9efrrb4_YC=b>!(v03XJVGiv$}A@2{Q ze}sn^u}27z-a9f>#RLk?{P49a@!2mlP^}i%bT>E1t!Sz$6BU!6kNdCoMY^^3jPd=W z^pq!cmy9#!LLMLLnSB#FAcc=#3~fKANixih=2$F4W9o zQa~Z~*XBYhSMLP~W?M?SO2TRgAHu0`RwzAp+rt>Ud<5th8~) za-#dJLF|QAW(i$EfllF+fCjGMlLr%&?)Ksi0cOOi#L;NtQ-pjNkdFL6bn~~CZoP-1 zT|v^ck!i13;dk^-1nF#IQhb1)|H12u#;)>Pf}PUw09?W-G4m2sV&Z%DeKTYNBvFd3 zt=c4y(Wm%%DR(+?`M>9p z=!Rz#T!?3pcmpeWaP)kz#%vIj9e0~n$LnG>0Ov(yi`3P zP+X126YIeQX{km-QBmMI8>k4EcJa}Bv&NC&*r$DXJ4(=W$0&Xm&xWE13?Q(ym;m>+|mgFR9CRO#|KqK1u)5B?}`jNI=;09VbB3Hsb?a{G;dw<9pWlXEu%_K7ETe3sX6L{iOn<=n1i4 z34p?vD+hGDDwtLAAzl?J=-7Tdn{o!j^R%>u9V2U}{ZTVxytVz`L-LUDkRGK4k9*D4 zHm+h_J{X=-pPorv(lCq8!7!)=;V!i(N_DAfYKpZN*M8JTN?@+RQuJ7HW%#Y}^uNEt z|M4iE<x&&LrAPZOu)=6h+{2VaMj+L6fUdhOI~Y2ZuMF{2GH{Q8ZGb3<6Z1>ZtCdq3D$1L~YY5{F$8z zyb1J&2f&|tcSSDD$YkY6kRHpllE^;J_?6aBNyQbi?Mz$PRP^3!X|kNHTu7~X_~01- zb_ej~s#fF!<`kG5#YV=bC^A;}D4~($Mog(RXYx$u@V6_gM!+!-8tjMf6@A#0%CgnL zeJv!jf_kV!{l2va6u!!+0P6Ge%*5iEN8$X3H~$*dF`>gY#vlApG!n6ty_^Oe=O_ow+)9%i};CFKF2bz{_#s=zUR4CJ@zHjB&KciM{V~Ef_ph;b2F>)=f<9lb4Vnu z@b%j$dO$g~=ThO7=u3C~H@!U9`uA6;X3H#jx~?Jz%te;9*z5su_2XxPUw&Bt>1iIS z&cE<^N5W)`q!9Y|#O`(@_3ozA)&t&!M^LO+44JEKNl3I}Jf*SG2eF3VFBLU?ESXG! z#F~WMss(Kz5@b*+DmdXhxK@sH_2yl*(zxN4w(*6kp@^NA-uT@XptLZdfMtofk?d(L z&bVpvpKfN~8s4m29~7R?!w3&zy&0Y)U|1mKUoK;WIYJ|7QH%@EpxEl3U8bqJXO$Yo z529OrB}TOqslT)PWomY&s@u=p;17wQIi+}GK*(k~Z+rkV)FYLDGXAlROxZw}g8IP>HJWP<34auth=wlEGiCsqGCErvXBV*dm(+|a9i z3i$=okA_nUQz9Qoe0e*@NrRw?o|j$aFQ%ot2RH{9?L<}5wKT)rstU-5B&NI&*&>Q}_mtoqazdOX9^;~y;3BUsaM3wYMW4#E) z&XVkb%C2dA+2pUR6WUHrYQ59A1E% \ No newline at end of file diff --git a/dist/appimage/resources/appimage/AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml b/dist/appimage/resources/appimage/AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml new file mode 100644 index 000000000..ad4af6c70 --- /dev/null +++ b/dist/appimage/resources/appimage/AppDir/usr/share/metainfo/org.cryptomator.Cryptomator.appdata.xml @@ -0,0 +1,69 @@ + + + + org.cryptomator.Cryptomator + FSFAP + GPL-3.0-or-later + Cryptomator + Multi-platform client-side encryption tool optimized for cloud storages + +

+ Cryptomator offers multi-platform transparent client-side encryption of your files in the cloud. +

+

+ Features: +

    +
  • Works with Dropbox, Google Drive, OneDrive, ownCloud, Nextcloud and any other cloud storage service which synchronizes with a local directory
  • +
  • Open Source means: No backdoors, control is better than trust
  • +
  • Client-side: No accounts, no data shared with any online service
  • +
  • Totally transparent: Just work on the virtual drive as if it were a USB flash drive
  • +
  • AES encryption with 256-bit key length
  • +
  • File names get encrypted
  • +
  • Folder structure gets obfuscated
  • +
  • Use as many vaults in your Dropbox as you want, each having individual passwords
  • +
  • One thousand commits for the security of your data!! :tada:
  • +
+

+

+ Privacy: +

    +
  • 256-bit keys (unlimited strength policy bundled with native binaries)
  • +
  • Scrypt key derivation
  • +
  • Cryptographically secure random numbers for salts, IVs and the masterkey of course
  • +
  • Sensitive data is wiped from the heap asap
  • +
  • Lightweight: Complexity kills security
  • +
+

+

+ Consistency: +

    +
  • HMAC over file contents to recognize changed ciphertext before decryption
  • +
  • I/O operations are transactional and atomic, if the filesystems support it
  • +
  • Each file contains all information needed for decryption (except for the key of course), no common metadata means no Single Point of Failure
  • +
+

+
+ + Office + Security + FileTools + Java + + http://cryptomator.org + https://github.com/cryptomator/cryptomator/issues + https://community.cryptomator.org/c/kb/faq + https://community.cryptomator.org/ + https://cryptomator.org/ + + none + none + none + none + mild + + Cryptomator + + cryptomator + + org.cryptomator.Cryptomator.desktop +