From 05be26d507f25a4f95b498d003bf17d01651b936 Mon Sep 17 00:00:00 2001 From: "Amir Hossein Goodarzi (Numb)" Date: Wed, 10 Aug 2016 18:31:48 +0430 Subject: [PATCH 1/3] fix names and color --- .../java/org/fdroid/fdroid/#RepoUpdater.java# | 397 ++++++++++++++++++ .../org/fdroid/fdroid/#RepoXMLHandler.java# | 307 ++++++++++++++ app/src/main/res/values-fa/strings.xml | 50 +-- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/strings.xml | 50 +-- 5 files changed, 755 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/org/fdroid/fdroid/#RepoUpdater.java# create mode 100644 app/src/main/java/org/fdroid/fdroid/#RepoXMLHandler.java# diff --git a/app/src/main/java/org/fdroid/fdroid/#RepoUpdater.java# b/app/src/main/java/org/fdroid/fdroid/#RepoUpdater.java# new file mode 100644 index 000000000..293387593 --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/#RepoUpdater.java# @@ -0,0 +1,397 @@ + + +package org.fdroid.fdroid; + +import android.content.ContentValues; +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.util.Log; + +import org.fdroid.fdroid.data.Apk; +import org.fdroid.fdroid.data.App; +import org.fdroid.fdroid.data.Repo; +import org.fdroid.fdroid.data.RepoPersister; +import org.fdroid.fdroid.data.RepoProvider; +import org.fdroid.fdroid.data.Schema.RepoTable; +import org.fdroid.fdroid.net.Downloader; +import org.fdroid.fdroid.net.DownloaderFactory; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.CodeSigner; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.Date; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +/** + * Responsible for updating an individual repository. This will: + * * Download the index.jar + * * Verify that it is signed correctly and by the correct certificate + * * Parse the index.xml from the .jar file + * * Save the resulting repo, apps, and apks to the database. + * + * WARNING: this class is the central piece of the entire security model of + * FDroid! Avoid modifying it when possible, if you absolutely must, be very, + * very careful with the changes that you are making! + */ +public class RepoUpdater { + + private static final String TAG = "RepoUpdater"; + + private final String indexUrl; + + @NonNull + private final Context context; + @NonNull + private final Repo repo; + private boolean hasChanged; + + @Nullable + private ProgressListener downloadProgressListener; + private ProgressListener committingProgressListener; + private ProgressListener processXmlProgressListener; + private String cacheTag; + private X509Certificate signingCertFromJar; + + @NonNull private final RepoPersister persister; + + /** + * Updates an app repo as read out of the database into a {@link Repo} instance. + * + * @param repo A {@link Repo} read out of the local database + */ + public RepoUpdater(@NonNull Context context, @NonNull Repo repo) { + this.context = context; + this.repo = repo; + this.persister = new RepoPersister(context, repo); + + String url = repo.address + "/index.jar"; + String versionName = Utils.getVersionName(context); + if (versionName != null) { + url += "?client_version=" + versionName; + } + this.indexUrl = url; + } + + public void setDownloadProgressListener(ProgressListener progressListener) { + this.downloadProgressListener = progressListener; + } + + public void setProcessXmlProgressListener(ProgressListener progressListener) { + this.processXmlProgressListener = progressListener; + } + + public void setCommittingProgressListener(ProgressListener progressListener) { + this.committingProgressListener = progressListener; + } + + public boolean hasChanged() { + return hasChanged; + } + + private Downloader downloadIndex() throws UpdateException { + Downloader downloader = null; + try { + downloader = DownloaderFactory.create(context, indexUrl); + downloader.setCacheTag(repo.lastetag); + downloader.setListener(downloadProgressListener); + downloader.download(); + + if (downloader.isCached()) { + // The index is unchanged since we last read it. We just mark + // everything that came from this repo as being updated. + Utils.debugLog(TAG, "Repo index for " + indexUrl + " is up to date (by etag)"); + } + + } catch (IOException e) { + if (downloader != null && downloader.outputFile != null) { + if (!downloader.outputFile.delete()) { + Log.w(TAG, "Couldn't delete file: " + downloader.outputFile.getAbsolutePath()); + } + } + + throw new UpdateException(repo, "Error getting index file", e); + } catch (InterruptedException e) { + // ignored if canceled, the local database just won't be updated + e.printStackTrace(); + } + return downloader; + } + + /** + * All repos are represented by a signed jar file, {@code index.jar}, which contains + * a single file, {@code index.xml}. This takes the {@code index.jar}, verifies the + * signature, then returns the unzipped {@code index.xml}. + * + * @throws UpdateException All error states will come from here. + */ + public void update() throws UpdateException { + + final Downloader downloader = downloadIndex(); + hasChanged = downloader.hasChanged(); + + if (hasChanged) { + // Don't worry about checking the status code for 200. If it was a + // successful download, then we will have a file ready to use: + cacheTag = downloader.getCacheTag(); + processDownloadedFile(downloader.outputFile); + } + } + + private ContentValues repoDetailsToSave; + private String signingCertFromIndexXml; + + private RepoXMLHandler.IndexReceiver createIndexReceiver() { + return new RepoXMLHandler.IndexReceiver() { + @Override + public void receiveRepo(String name, String description, String signingCert, int maxAge, int version, long timestamp) { + signingCertFromIndexXml = signingCert; + repoDetailsToSave = prepareRepoDetailsForSaving(name, description, maxAge, version, timestamp); + } + + @Override + public void receiveApp(App app, List packages) { + try { + persister.saveToDb(app, packages); + } catch (UpdateException e) { + throw new RuntimeException("Error while saving repo details to database.", e); + } + } + }; + } + + public void processDownloadedFile(File downloadedFile) throws UpdateException { + InputStream indexInputStream = null; + try { + if (downloadedFile == null || !downloadedFile.exists()) { + throw new UpdateException(repo, downloadedFile + " does not exist!"); + } + + // Due to a bug in Android 5.0 Lollipop, the inclusion of spongycastle causes + // breakage when verifying the signature of the downloaded .jar. For more + // details, check out https://gitlab.com/fdroid/fdroidclient/issues/111. + FDroidApp.disableSpongyCastleOnLollipop(); + + JarFile jarFile = new JarFile(downloadedFile, true); + JarEntry indexEntry = (JarEntry) jarFile.getEntry("index.xml"); + indexInputStream = new ProgressBufferedInputStream(jarFile.getInputStream(indexEntry), + processXmlProgressListener, new URL(repo.address), (int) indexEntry.getSize()); + + // Process the index... + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + final SAXParser parser = factory.newSAXParser(); + final XMLReader reader = parser.getXMLReader(); + final RepoXMLHandler repoXMLHandler = new RepoXMLHandler(repo, createIndexReceiver()); + reader.setContentHandler(repoXMLHandler); + reader.parse(new InputSource(indexInputStream)); + + long timestamp = repoDetailsToSave.getAsLong(RepoTable.Cols.TIMESTAMP); + if (timestamp < repo.timestamp) { + throw new UpdateException(repo, "index.jar is older that current index! " + + timestamp + " < " + repo.timestamp); + } + + signingCertFromJar = getSigningCertFromJar(indexEntry); + + // JarEntry can only read certificates after the file represented by that JarEntry + // has been read completely, so verification cannot run until now... + assertSigningCertFromXmlCorrect(); + commitToDb(); + } catch (SAXException | ParserConfigurationException | IOException e) { + throw new UpdateException(repo, "Error parsing index", e); + } finally { + FDroidApp.enableSpongyCastleOnLollipop(); + Utils.closeQuietly(indexInputStream); + if (downloadedFile != null) { + if (!downloadedFile.delete()) { + Log.w(TAG, "Couldn't delete file: " + downloadedFile.getAbsolutePath()); + } + } + } + } + + private void commitToDb() throws UpdateException { + Log.i(TAG, "Repo signature verified, saving app metadata to database."); + if (committingProgressListener != null) { + try { + //TODO this should be an event, not a progress listener + committingProgressListener.onProgress(new URL(indexUrl), 0, -1); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + persister.commit(repoDetailsToSave); + } + + private void assertSigningCertFromXmlCorrect() throws SigningException { + + // no signing cert read from database, this is the first use + if (repo.signingCertificate == null) { + verifyAndStoreTOFUCerts(signingCertFromIndexXml, signingCertFromJar); + } + verifyCerts(signingCertFromIndexXml, signingCertFromJar); + + } + + /** + * Update tracking data for the repo represented by this instance (index version, etag, + * description, human-readable name, etc. + */ + private ContentValues prepareRepoDetailsForSaving(String name, String description, int maxAge, int version, long timestamp) { + ContentValues values = new ContentValues(); + + values.put(RepoTable.Cols.LAST_UPDATED, Utils.formatTime(new Date(), "")); + + if (repo.lastetag == null || !repo.lastetag.equals(cacheTag)) { + values.put(RepoTable.Cols.LAST_ETAG, cacheTag); + } + + if (version != -1 && version != repo.version) { + Utils.debugLog(TAG, "Repo specified a new version: from " + repo.version + " to " + version); + values.put(RepoTable.Cols.VERSION, version); + } + + if (maxAge != -1 && maxAge != repo.maxage) { + Utils.debugLog(TAG, "Repo specified a new maximum age - updated"); + values.put(RepoTable.Cols.MAX_AGE, maxAge); + } + + if (description != null && !description.equals(repo.description)) { + values.put(RepoTable.Cols.DESCRIPTION, description); + } + + if (name != null && !name.equals(repo.name)) { + values.put(RepoTable.Cols.NAME, name); + } + + if (timestamp != repo.timestamp) { + values.put(RepoTable.Cols.TIMESTAMP, timestamp); + } + + return values; + } + + public static class UpdateException extends Exception { + + private static final long serialVersionUID = -4492452418826132803L; + public final Repo repo; + + public UpdateException(Repo repo, String message) { + super(message); + this.repo = repo; + } + + public UpdateException(Repo repo, String message, Exception cause) { + super(message, cause); + this.repo = repo; + } + } + + public static class SigningException extends UpdateException { + public SigningException(Repo repo, String message) { + super(repo, "Repository was not signed correctly: " + message); + } + } + + /** + * FDroid's index.jar is signed using a particular format and does not allow lots of + * signing setups that would be valid for a regular jar. This validates those + * restrictions. + */ + private X509Certificate getSigningCertFromJar(JarEntry jarEntry) throws SigningException { + final CodeSigner[] codeSigners = jarEntry.getCodeSigners(); + if (codeSigners == null || codeSigners.length == 0) { + throw new SigningException(repo, "No signature found in index"); + } + /* we could in theory support more than 1, but as of now we do not */ + if (codeSigners.length > 1) { + throw new SigningException(repo, "index.jar must be signed by a single code signer!"); + } + List certs = codeSigners[0].getSignerCertPath().getCertificates(); + if (certs.size() != 1) { + throw new SigningException(repo, "index.jar code signers must only have a single certificate!"); + } + return (X509Certificate) certs.get(0); + } + + /** + * A new repo can be added with or without the fingerprint of the signing + * certificate. If no fingerprint is supplied, then do a pure TOFU and just + * store the certificate as valid. If there is a fingerprint, then first + * check that the signing certificate in the jar matches that fingerprint. + */ + private void verifyAndStoreTOFUCerts(String certFromIndexXml, X509Certificate rawCertFromJar) + throws SigningException { + if (repo.signingCertificate != null) { + return; // there is a repo.signingCertificate already, nothing to TOFU + } + + /* The first time a repo is added, it can be added with the signing certificate's + * fingerprint. In that case, check that fingerprint against what is + * actually in the index.jar itself. If no fingerprint, just store the + * signing certificate */ + if (repo.fingerprint != null) { + String fingerprintFromIndexXml = Utils.calcFingerprint(certFromIndexXml); + String fingerprintFromJar = Utils.calcFingerprint(rawCertFromJar); + if (!repo.fingerprint.equalsIgnoreCase(fingerprintFromIndexXml) + || !repo.fingerprint.equalsIgnoreCase(fingerprintFromJar)) { + throw new SigningException(repo, "Supplied certificate fingerprint does not match!"); + } + } // else - no info to check things are valid, so just Trust On First Use + + Utils.debugLog(TAG, "Saving new signing certificate in the database for " + repo.address); + ContentValues values = new ContentValues(2); + values.put(RepoTable.Cols.LAST_UPDATED, Utils.formatDate(new Date(), "")); + values.put(RepoTable.Cols.SIGNING_CERT, Hasher.hex(rawCertFromJar)); + RepoProvider.Helper.update(context, repo, values); + } + + /** + * FDroid works with three copies of the signing certificate: + *
  • in the downloaded jar
  • + *
  • in the index XML
  • + *
  • stored in the local database
  • + * It would work better removing the copy from the index XML, but it needs to stay + * there for backwards compatibility since the old TOFU process requires it. Therefore, + * since all three have to be present, all three are compared. + * + * @param certFromIndexXml the cert written into the header of the index XML + * @param rawCertFromJar the {@link X509Certificate} embedded in the downloaded jar + */ + private void verifyCerts(String certFromIndexXml, X509Certificate rawCertFromJar) throws SigningException { + // convert binary data to string version that is used in FDroid's database + String certFromJar = Hasher.hex(rawCertFromJar); + + // repo and repo.signingCertificate must be pre-loaded from the database + if (TextUtils.isEmpty(repo.signingCertificate) + || TextUtils.isEmpty(certFromJar) + || TextUtils.isEmpty(certFromIndexXml)) { + throw new SigningException(repo, "A empty repo or signing certificate is invalid!"); + } + + // though its called repo.signingCertificate, its actually a X509 certificate + if (repo.signingCertificate.equals(certFromJar) + && repo.signingCertificate.equals(certFromIndexXml) + && certFromIndexXml.equals(certFromJar)) { + return; // we have a match! + } + throw new SigningException(repo, "Signing certificate does not match!"); + } + +} diff --git a/app/src/main/java/org/fdroid/fdroid/#RepoXMLHandler.java# b/app/src/main/java/org/fdroid/fdroid/#RepoXMLHandler.java# new file mode 100644 index 000000000..5173da35d --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/#RepoXMLHandler.java# @@ -0,0 +1,307 @@ +/* + * Copyright (C) 2010-12 Ciaran Gultnieks, ciaran@ciarang.com + * Copyright (C) 2009 Roberto Jacinto, roberto.jacinto@caixamagica.pt + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.fdroid.fdroid; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import org.fdroid.fdroid.data.Apk; +import org.fdroid.fdroid.data.App; +import org.fdroid.fdroid.data.Repo; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import java.util.ArrayList; +import java.util.List; + +/** + * Parses the index.xml into Java data structures. + */ +public class RepoXMLHandler extends DefaultHandler { + + // The repo we're processing. + private final Repo repo; + + private List apksList = new ArrayList<>(); + + private App curapp; + private Apk curapk; + + private String currentApkHashType; + + // After processing the XML, these will be -1 if the index didn't specify + // them - otherwise it will be the value specified. + private int repoMaxAge = -1; + private int repoVersion; + private long repoTimestamp; + private String repoDescription; + private String repoName; + + // the X.509 signing certificate stored in the header of index.xml + private String repoSigningCert; + + private final StringBuilder curchars = new StringBuilder(); + + interface IndexReceiver { + void receiveRepo(String name, String description, String signingCert, int maxage, int version, long timestamp); + + void receiveApp(App app, List packages); + } + + private final IndexReceiver receiver; + + public RepoXMLHandler(Repo repo, @NonNull IndexReceiver receiver) { + this.repo = repo; + this.receiver = receiver; + } + + @Override + public void characters(char[] ch, int start, int length) { + curchars.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) + throws SAXException { + + if ("application".equals(localName) && curapp != null) { + onApplicationParsed(); + } else if ("package".equals(localName) && curapk != null && curapp != null) { + apksList.add(curapk); + curapk = null; + } else if ("repo".equals(localName)) { + onRepoParsed(); + } else if (curchars.length() == 0) { + // All options below require non-empty content + return; + } + final String str = curchars.toString().trim(); + if (curapk != null) { + switch (localName) { + case "version": + curapk.versionName = str; + break; + case "versioncode": + curapk.versionCode = Utils.parseInt(str, -1); + break; + case "size": + curapk.size = Utils.parseInt(str, 0); + break; + case "hash": + if (currentApkHashType == null || "md5".equals(currentApkHashType)) { + if (curapk.hash == null) { + curapk.hash = str; + curapk.hashType = "SHA-256"; + } + } else if ("sha256".equals(currentApkHashType)) { + curapk.hash = str; + curapk.hashType = "SHA-256"; + } + break; + case "sig": + curapk.sig = str; + break; + case "srcname": + curapk.srcname = str; + break; + case "apkname": + curapk.apkName = str; + break; + case "sdkver": + curapk.minSdkVersion = Utils.parseInt(str, Apk.SDK_VERSION_MIN_VALUE); + break; + case "targetSdkVersion": + curapk.targetSdkVersion = Utils.parseInt(str, Apk.SDK_VERSION_MIN_VALUE); + break; + case "maxsdkver": + curapk.maxSdkVersion = Utils.parseInt(str, Apk.SDK_VERSION_MAX_VALUE); + if (curapk.maxSdkVersion == 0) { + // before fc0df0dcf4dd0d5f13de82d7cd9254b2b48cb62d, this could be 0 + curapk.maxSdkVersion = Apk.SDK_VERSION_MAX_VALUE; + } + break; + case "added": + curapk.added = Utils.parseDate(str, null); + break; + case "permissions": + curapk.permissions = Utils.parseCommaSeparatedString(str); + break; + case "features": + curapk.features = Utils.parseCommaSeparatedString(str); + break; + case "nativecode": + curapk.nativecode = Utils.parseCommaSeparatedString(str); + break; + } + } else if (curapp != null) { + switch (localName) { + case "name": + curapp.name = str; + break; + case "icon": + curapp.icon = str; + break; + case "description": + // This is the old-style description. We'll read it + // if present, to support old repos, but in newer + // repos it will get overwritten straight away! + curapp.description = "

    " + str + "

    "; + break; + case "desc": + // New-style description. + curapp.description = str; + break; + case "summary": + curapp.summary = str; + break; + case "license": + curapp.license = str; + break; + case "author": + curapp.author = str; + break; + case "email": + curapp.email = str; + break; + case "source": + curapp.sourceURL = str; + break; + case "changelog": + curapp.changelogURL = str; + break; + case "donate": + curapp.donateURL = str; + break; + case "bitcoin": + curapp.bitcoinAddr = str; + break; + case "litecoin": + curapp.litecoinAddr = str; + break; + case "flattr": + curapp.flattrID = str; + break; + case "web": + curapp.webURL = str; + break; + case "tracker": + curapp.trackerURL = str; + break; + case "added": + curapp.added = Utils.parseDate(str, null); + break; + case "lastupdated": + curapp.lastUpdated = Utils.parseDate(str, null); + break; + case "marketversion": + curapp.upstreamVersionName = str; + break; + case "marketvercode": + curapp.upstreamVersionCode = Utils.parseInt(str, -1); + break; + case "categories": + curapp.categories = Utils.parseCommaSeparatedString(str); + break; + case "antifeatures": + curapp.antiFeatures = Utils.parseCommaSeparatedString(str); + break; + case "requirements": + curapp.requirements = Utils.parseCommaSeparatedString(str); + break; + } + } else if ("description".equals(localName)) { + repoDescription = cleanWhiteSpace(str); + } + } + + private void onApplicationParsed() { + receiver.receiveApp(curapp, apksList); + curapp = null; + apksList = new ArrayList<>(); + // If the app packageName is already present in this apps list, then it + // means the same index file has a duplicate app, which should + // not be allowed. + // However, I'm thinking that it should be undefined behaviour, + // because it is probably a bug in the fdroid server that made it + // happen, and I don't *think* it will crash the client, because + // the first app will insert, the second one will update the newly + // inserted one. + + //////#TODO + + /* + + sample this as a xml handlers + should add screen shot id the project as it be + and also there is no way to contact developer + another is to create a place to collect userr data and vote for a package + + */ + } + + private void onRepoParsed() { + receiver.receiveRepo(repoName, repoDescription, repoSigningCert, repoMaxAge, repoVersion, repoTimestamp); + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attributes) throws SAXException { + super.startElement(uri, localName, qName, attributes); + + if ("repo".equals(localName)) { + repoSigningCert = attributes.getValue("", "pubkey"); + repoMaxAge = Utils.parseInt(attributes.getValue("", "maxage"), -1); + repoVersion = Utils.parseInt(attributes.getValue("", "version"), -1); + repoName = cleanWhiteSpace(attributes.getValue("", "name")); + repoDescription = cleanWhiteSpace(attributes.getValue("", "description")); + repoTimestamp = parseLong(attributes.getValue("", "timestamp"), 0); + } else if ("application".equals(localName) && curapp == null) { + curapp = new App(); + curapp.packageName = attributes.getValue("", "id"); + } else if ("package".equals(localName) && curapp != null && curapk == null) { + curapk = new Apk(); + curapk.packageName = curapp.packageName; + curapk.repo = repo.getId(); + currentApkHashType = null; + + } else if ("hash".equals(localName) && curapk != null) { + currentApkHashType = attributes.getValue("", "type"); + } + curchars.setLength(0); + } + + private static String cleanWhiteSpace(@Nullable String str) { + return str == null ? null : str.replaceAll("\\s", " "); + } + + private static long parseLong(String str, long fallback) { + if (str == null || str.length() == 0) { + return fallback; + } + long result; + try { + result = Long.parseLong(str); + } catch (NumberFormatException e) { + result = fallback; + } + return result; + } +} diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index cff450ab3..0a1dbc924 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -13,7 +13,7 @@ نمایش یک آگهی هنگام موجود بودن به‌روز رسانی‌ها به‌روزرسانی تاریخچه چنین کاره‌ای پیدا نشد. - دربارهٔ F-Droid + دربارهٔ فروشگاه بِل رایانامه نصب شده نصب نشده @@ -28,7 +28,7 @@ افزودن کلید جانویسی به‌روز رسانی‌ها - به‌روزرسانی‌های اف‌دروید موجودند + به‌روزرسانی‌های فروشگاه بِل موجودند هیچ روش ارسال با بلوتوثی پیدا نشد، یکی را برگزینید! گزینش روش ارسال بلوتوث نشانی مخزن @@ -71,7 +71,7 @@ تا %s %1$s تا %2$s نیاز دارد: %1$s -اِف‌-دروید +فروشگاه بِل نگارش جدید با کلیدی متفاوت با قبلی امضا شده است. برای نصب نگارش جدید، باید نخست نگارش قدیمی را حذف کرد. لطفاً این کار را انجام داده و دوباره تلاش کنید. (به خاطر داشته باشید که حذف نصب، تمام داده‌های درونی ذخیره شدهٔ کاره را پاک می‌کند) نگارش @@ -81,7 +81,7 @@ آگهی‌های به‌روز رسانی روزهایی که کاره جدید یا اخیر محسوب شود: %s افزونهٔ ممتاز - استفاده از افزونهٔ ممتاز اف‌دروید برای نصب، به‌روز رسانی و حذف بسته‌ها + استفاده از افزونهٔ ممتاز فروشگاه بِل برای نصب، به‌روز رسانی و حذف بسته‌ها به‌روز رسانی/حذف افزونهٔ ممتاز گشودن صفحهٔ جزییات افزونهٔ ممتاز برای به‌روز رسانی/حذف آن نام مخزن محلّی شما @@ -123,7 +123,7 @@ این مخزن از پیش برپا شده است. تأیید کنید که می‌خواهید دوباره فعّالش کنید. اثر انگشت بد این یک نشانی اینترنتی معتیبر نیست. - هم‌رسانی اف‌دروید با بلوتوث + هم‌رسانی فروشگاه بِل با بلوتوث تنظیمات مخزن جدید @@ -146,7 +146,7 @@ همواره شامل کاره‌هایی که نیازمند صفحه‌لمسی هستند مخزن محلّی - اف‌دروید آمادهٔ تبادل است + فروشگاه بِل آمادهٔ تبادل است برای دیدن جزییات و اجازه به دیگرات برای تبادل کاره‌هایتان، لمس کنید. در حال حذف مخزن جاری… در حال افزودن %s به مخزن… @@ -211,7 +211,7 @@ تمام کاره‌ها به‌روز هستند.\n\nتبریک! تمام کاره‌هایتان به‌روز هستند (یا مخزن‌هایتان منقضی شده‌اند). دسترسی ریشه داده نشد - یا افزارهٔ اندرویدیتان روت شده نیست، یا درخواست ریشه برای اف‌دروید را رد کردید. + یا افزارهٔ اندرویدیتان روت شده نیست، یا درخواست ریشه برای فروشگاه بِل را رد کردید. حذف نصب برای تبادل، لمس کنید @@ -224,7 +224,7 @@ برای گشودن شبکه‌های موجود، ضربه بزنید برای تعویض به یک شبکهٔ وای‌فای، ضربه بزنید گشودن پویشگر QR - به اف‌دروید خوش آمدید! + به فروشگاه بِل خوش آمدید! می‌خواهید اکنون کاره‌ها را از %1$s بگیرید؟ دیگر این را نشان نده لازم است یک نفر رمز دیگری را پوییده، یا نشانی اینترنتیش را در مرورگری بنویسد. @@ -242,7 +242,7 @@ غیرقابل مشاهده از طریق وای‌فای نام افزاره نمی‌توانید کسی که دنبالشید را پیدا کنید؟ - ارسال اف‌دروید + ارسال فروشگاه بِل نمی‌توان افراد نزدیک را برای تبادل با آن‌ها پیدا کرد. در حال اتّصال تأیید تبادل @@ -273,36 +273,36 @@ تمام مخزن‌های دیگر خطایی ایاد نکردند. این مخزن هنوز استفاده نشده است. برای دیدن کاره‌هایی که فراهم می‌کند، باید فعّالش کنید. - حذف یک مخزن به این معناست که کاره‌هایش دیگر در اف‌دروید موجود نخواهند بود.\n\nتوجّه: تمام کاره‌های نصب شدهٔ پیشین، روی افزاره‌تان باقی خواهند ماند. + حذف یک مخزن به این معناست که کاره‌هایش دیگر در فروشگاه بِل موجود نخواهند بود.\n\nتوجّه: تمام کاره‌های نصب شدهٔ پیشین، روی افزاره‌تان باقی خواهند ماند. %1$s غیرفعّال شد.\n\nبرای نصب کاره‌ها از آن باید دوباره فعّالش کنید. - مخزن اف‌دروید %1$s ذخیره شد. - در حال گشتن به دنبال مخزن اف‌دروید در\n%1$s - هیچ کاره‌ای نصب نشده است.\n\nکاره‌هایی روی افزاره‌تان وجود دارند، ولی در اف‌دروید موجود نیستند. دلیل این امر می‌تواند این دلیل باشد که مخازنتان کاره‌هایتان را موجود ندارند یا باید به‌روز شوند. + مخزن فروشگاه بِل %1$s ذخیره شد. + در حال گشتن به دنبال مخزن فروشگاه بِل در\n%1$s + هیچ کاره‌ای نصب نشده است.\n\nکاره‌هایی روی افزاره‌تان وجود دارند، ولی در فروشگاه بِل موجود نیستند. دلیل این امر می‌تواند این دلیل باشد که مخازنتان کاره‌هایتان را موجود ندارند یا باید به‌روز شوند. هیچ کاره‌ای در این دسته نیست.\n\nتلاش کنید دسته‌ای دیگر برگزیده یا مخازنتان را برای گرفتن فهرست تازه‌ای از کاره‌ها به‌روز کنید. شکست در نصب به دلیل خطایی ناشناخته شکست در نصب به دلیل خطایی ناشناخته - افزونهٔ ممتاز اف‌دروید موجود نیست - این گزینه فقط هنگام نصب بودن افزونهٔ ممتاز اف‌دروید، موجود است. + افزونهٔ ممتاز فروشگاه بِل موجود نیست + این گزینه فقط هنگام نصب بودن افزونهٔ ممتاز فروشگاه بِل، موجود است. امضای افزونه اشتباه است! لطفاً یک گزارش خطا ایجاد کنید! اجازه‌های ممتاز به افزونه داده نشده است! لطفاً یک گزارش خطا ایجاد کنید! نصب گشودن افزونه - افزونهٔ ممتاز اف‌دروید با موفّقیت نصب شد - نصب افزونهٔ ممتاز اف‌دروید شکست خورد - افزونهٔ ممتاز اف‌دروید با موفّقیت نصب شد. این مار به اف‌دروید اجازه می‌دهد کاره‌ها را توسّط خودش نصب کرده، ارتفا دهد و حدف کند. - نصب افزونهٔ ممتاز اف‌دروید شکست خورد. روش نصب توسّط همهٔ توزیع‌های اندروید پشتیبانی نمی‌شود. لطفاً برای اطّلاعات بیش‌تر با ردیاب مشکل اف‌دروید مشاوره کنید. + افزونهٔ ممتاز فروشگاه بِل با موفّقیت نصب شد + نصب افزونهٔ ممتاز فروشگاه بِل شکست خورد + افزونهٔ ممتاز فروشگاه بِل با موفّقیت نصب شد. این مار به فروشگاه بِل اجازه می‌دهد کاره‌ها را توسّط خودش نصب کرده، ارتفا دهد و حدف کند. + نصب افزونهٔ ممتاز فروشگاه بِل شکست خورد. روش نصب توسّط همهٔ توزیع‌های اندروید پشتیبانی نمی‌شود. لطفاً برای اطّلاعات بیش‌تر با ردیاب مشکل فروشگاه بِل مشاوره کنید. در حال نصب… در حال نصب و راه‌انداری دوباره… در حال حذف نصب… - می‌خواهید افزونهٔ ممتاز اف‌دروید را نصب کنید؟ + می‌خواهید افزونهٔ ممتاز فروشگاه بِل را نصب کنید؟ این کار بیش از ۱۰ ثانیه زمان می‌برد. این کار بیش از ۱۰ ثانیه زمان برده و پس از آن، افزاره راه‌اندازی مجدّد خواهد شد. - می‌خواهید افزونهٔ ممتاز اف‌دروید را حذف کنید؟ - اگر دوستتان اف‌دروید داشته و NFC اش روشن است، افزاره‌هایتان را با هم تماس بدهید. + می‌خواهید افزونهٔ ممتاز فروشگاه بِل را حذف کنید؟ + اگر دوستتان فروشگاه بِل داشته و NFC اش روشن است، افزاره‌هایتان را با هم تماس بدهید. برای تبادل با استفاده از وای‌فای، مطمئن شوید که روی شبکهٔ یک‌سانی هستید. اگر به شبکهٔ یک‌سان دسترسی ندارید، یکی از شما می‌تواند یک نقطهٔ داغ وای‌فای ایجاد کند. رمز QR ای که پوییدید، شبیه یک رمز تبادل نیست. بلوتوث موجود نیست - نمی‌توان اف‌دروید را فرستاد، زیرا بلوتوث روی این افزاره موحود نیست. + نمی‌توان فروشگاه بِل را فرستاد، زیرا بلوتوث روی این افزاره موحود نیست. در حال بار کردن… هنگام اتّصال به افزاره خطایی رخ داد. به نظر می‌رسد با این وضع نمی‌توانیم تبادل کنیم. تبادل فعّال نیست @@ -323,7 +323,7 @@ هیچ برنامهٔ مطابقی وجود ندارد. هیچ برنامهٔ مطابقی برای به‌روز رسانی وجود ندارد. - اف‌دروید از کار افتاد + فروشگاه بِل از کار افتاد خطایی پیش‌بینی نشده رخ داد که برنامه را وادار به توقّف کرد. می‌خواهید جزئیات را برای کمک به حل کردن مشکل رایانامه کنید؟ در این‌جا می‌توانید اطّلاعات اضافی و نظرها را بیفزایید: استفاده از تور @@ -339,7 +339,7 @@ در حال بارگیری %1$s - در حال حاضر نصب افزونهٔ ممتاز اف‌دروید روی اندروید ۵.۱ یا بالاتر پشتیبانی نمی‌شود. + در حال حاضر نصب افزونهٔ ممتاز فروشگاه بِل روی اندروید ۵.۱ یا بالاتر پشتیبانی نمی‌شود. ۱ ساعت ۱ روز diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 4881e3840..2d6cb5fac 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,7 +5,7 @@ #ff999999 #ffdd2c00 - #ff1976d2 + #ffdd2c00 #ff0d47a1 #ff042570 #ff8ab000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1820746a3..035a69d36 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ - F-Droid + Bel Market The new version is signed with a different key to the old one. To install the new version, the old one must be uninstalled first. Please do this and try again. (Note that uninstalling will erase any internal data stored by the application) It seems like this package is not compatible with your device. Do you want to try and install it anyway? @@ -27,7 +27,7 @@ Update history Days to consider apps new or recent: %s Privileged Extension - Use F-Droid Privileged Extension to install, update, and remove packages + Use Bel Market Privileged Extension to install, update, and remove packages Update/Uninstall Privileged Extension Open details screen of Privileged Extension to update/uninstall it Name of your Local Repo @@ -44,7 +44,7 @@ App Details No such app found. - About F-Droid + About Bel Market Version Website Source code @@ -82,7 +82,7 @@ Updates (%d) 1 update is available. %d updates are available. - F-Droid Updates Available + Bel Market Updates Available +%1$d more… No Bluetooth send method found, choose one! Choose Bluetooth send method @@ -101,7 +101,7 @@ Update Repos Repositories - Share F-Droid by Bluetooth + Share Bel Market by Bluetooth Settings About Search @@ -152,7 +152,7 @@ Always include apps that require touchscreen Local Repo - F-Droid is ready to swap + Bel Market is ready to swap Touch to view details and allow others to swap your apps. Deleting current repo… Adding %s to repo… @@ -216,12 +216,12 @@ Unknown Delete Repository? Deleting a repository means - apps from it will no longer be available from F-Droid.\n\nNote: All + apps from it will no longer be available from Bel Market.\n\nNote: All previously installed apps will remain on your device. Disabled "%1$s".\n\nYou will need to re-enable this repository to install apps from it. - Saved F-Droid repository %1$s. - Looking for F-Droid repository at\n%1$s + Saved Bel Market repository %1$s. + Looking for Bel Market repository at\n%1$s %s or later Up to %s %1$s up to %2$s @@ -255,7 +255,7 @@ Time Writing - No apps installed.\n\nThere are apps on your device, but they are not available from F-Droid. This could be because you need to update your repositories, or the repositories genuinely don\'t have your apps available. + No apps installed.\n\nThere are apps on your device, but they are not available from Bel Market. This could be because you need to update your repositories, or the repositories genuinely don\'t have your apps available. No apps in this category.\n\nTry selecting a different category or updating your repositories to get a fresh list of apps. All apps up to date.\n\nCongratulations! All of your apps are up to date (or your repositories are out of date). No matching installed applications. @@ -264,31 +264,31 @@ Requesting root access… Root access denied - Either your Android device is not rooted or you have denied root access for F-Droid. + Either your Android device is not rooted or you have denied root access for Bel Market. Failed to install due to an unknown error Failed to uninstall due to an unknown error - F-Droid Privileged Extension is not available - This option is only available when F-Droid Privileged Extension is installed. + Bel Market Privileged Extension is not available + This option is only available when Bel Market Privileged Extension is installed. The signature of the extension is wrong! Please create a bug report! The privileged permissions have not been granted to the extension! Please create a bug report! Install Open Extension - Successfully installed F-Droid Privileged Extension - Installation of F-Droid Privileged Extension failed - F-Droid Privileged Extension has been successfully installed. This allows F-Droid to install, upgrade and uninstall apps on its own. - The installation of F-Droid Privileged Extension has failed. The installation method is not supported by all Android distributions, please consult the F-Droid bug tracker for more information. + Successfully installed Bel Market Privileged Extension + Installation of Bel Market Privileged Extension failed + Bel Market Privileged Extension has been successfully installed. This allows Bel Market to install, upgrade and uninstall apps on its own. + The installation of Bel Market Privileged Extension has failed. The installation method is not supported by all Android distributions, please consult the Bel Market bug tracker for more information. Installing… Installing and rebooting… Uninstalling… - Do you want to install F-Droid Privileged Extension? + Do you want to install Bel Market Privileged Extension? This takes up to 10 seconds. This takes up to 10 seconds and the device will be <b>rebooted</b> afterwards. - Do you want to uninstall F-Droid Privileged Extension? + Do you want to uninstall Bel Market Privileged Extension? Uninstall - Installation of F-Droid Privileged Extension is currently not supported on Android 5.1 or later. + Installation of Bel Market Privileged Extension is currently not supported on Android 5.1 or later. Touch to swap - If your friend has F-Droid and NFC turned on touch your devices together. + If your friend has Bel Market and NFC turned on touch your devices together. Join the same Wi-Fi as your friend To swap using Wi-Fi, ensure you are on the same network. If you don\'t have access to the same network, one of you can create a Wi-Fi Hotspot. Help your friend join your hotspot @@ -299,7 +299,7 @@ Tap to open available networks Tap to switch to a Wi-Fi network Open QR Scanner - Welcome to F-Droid! + Welcome to Bel Market! Do you want to get apps from %1$s now? Don\'t show this again One person needs to scan the code, or type the URL of the other in a browser. @@ -318,13 +318,13 @@ Not visible via Wi-Fi Device Name Can\'t find who you\'re looking for? - Send F-Droid + Send Bel Market Could not find people nearby to swap with. Connecting Confirm swap The QR code you scanned doesn\'t look like a swap code. Bluetooth unavailable - Cannot send F-Droid, because Bluetooth is unavailable on this device. + Cannot send Bel Market, because Bluetooth is unavailable on this device. Loading… An error occurred while connecting to device, we can\'t seem to swap with it. Swapping not enabled @@ -383,7 +383,7 @@ Dark Night - F-Droid has crashed + Bel Market has crashed An unexpected error occurred forcing the application to stop. Would you like to e-mail the details to help fix the issue? From 8a375357ed903cbbf35559164e64f376841d0ac8 Mon Sep 17 00:00:00 2001 From: "Amir Hossein Goodarzi (Numb)" Date: Wed, 10 Aug 2016 18:42:30 +0430 Subject: [PATCH 2/3] change logo --- .../main/res/drawable-hdpi/ic_launcher.png | Bin 4065 -> 3119 bytes .../main/res/drawable-ldpi/ic_launcher.png | Bin 1960 -> 3119 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2437 -> 3119 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 5135 -> 3119 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 8544 -> 3119 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 11575 -> 3119 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png index cf3c69370dfd262a3ca718a750b60175a8e04efe..0b4a3266a5b228c44341f3e9475d3f069124c62d 100644 GIT binary patch delta 3016 zcmV;(3pe!PAFmi8iBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTV53o%Xr z05MJhns7dHkwz#!8FWQhbW~|{Y-IpccV%p5AW36yZXi@;ZE$R1bY=2DN2G{^% z3`qlq_=bt7Q6dING$IuvvY4QJQS<|=5luD~5m!Y7!tkbH*RBMzz{0u+yWsBjZD*&Q zxp(e8=kdd|O}CwP?sR`UJJZ|wB~6>@bI<(e{O>()_s)5MI(6#QsZ*y;RiG*#9~OAA z2dYILH?!iYfAWt#E69)@fcxjZT(%L5sj#VIs1Kl_-d@UNG6VpQaMgY(cP^!0AWHK3Al}?MJjwAA&hT1(%KxcoMMJ`7UV`Nxz+_p_j zDL#@&nC`(rvltT=V*vH`_KKmQA<>*p%Sa+2RW2v}W<##$3m}1J0KV3tyBe}mGLVK8 zf>lOvPAQXUXwdm%$8@H>T~C@|Cc^`nP);S$p)d5E6SwWHLds1HG?)JoLJT8gjDFUa zk(*n7{@`2Fuaf2YYG?$twU6ao=aTkcKm6*f zh@ur%Y7{ix;o63`>Vt15;Cm;mHLS4fg2%^OqpRO{Pap8<86zb|p)Ti`u#f@M9qt~0 zXmoTV*DJp?ULHI;vI#vsaz`}Ez416FQ>m#@5-`gIu~2_m{gb1eS9^LS=O*Hn(i}Q+ z6Y;bhw(P@)RqWtFxqrh3(Kk7O!K`L~J_87oXa3Y^2U=HJc6iVl8Er)xZQIU8B3684 zWTpwnG4B=74`Ba>4Wc=nmZGt7u`}isi!w6e3SnbnLfOsDa#cDlhI)JFTm|zQum>Q= zaVXyA39^54bpy(P0kR-$UkF<(Wyx$-9(5d%$z-ONZKfz@0AX^8;S|@U3AaTkH!3SH zJ6sqcteEtajQBDW%gc^VLyqIn?Det*&+MG&j1oy4FB+tpTlG1L|4>YHT{8 zVmX_IdF9{GyZ#CPxu?M+!%HN15n7nZM3~?jlA_SkkGn3-{)AQOT&XDz`|GzZeYp({ zkQaY#g1l%G?5}+bdhkVf+kXT7(%_Q6S2<{72(oxL8s5>35ReycguHMg^x#h9@81gZ z-oa|Cn!|!K;jkb#d=$}NJOsJv(rQbY!-_Bf04Nqi^v-*rHgBo6l;c=21^@trK;-uC zLG+wgZ6(vJECT>QDMW7lE}&|o`&)Si01$ugKNae-E2}L7z%m&HaV7&EIRYLVElji= z2S~JlTH7ExRsptMcA09+C*l8XM+MZDsiWEgO5y+gFL3X@YyJQ!A71MZK15PT^@S&(NHTO2sKEPn%L;6MIn_)mZQ zHE=wgx~_6!0um|%0KnVvaNt;KZmFP>V1&*9v-dTCP3b@Y6tDhm?$8+kW5AhAu-II# zvRVQVJ_7(yG!`h1kB(MYNohi70ClYiJTK7u-l(ve(uB?cb;&0J#qq>A%$u)QSWRg{ zWdJ2wU|s*&K(YFnCxLvv!iq{08UueQ(TeB~?*k=TO9%TtyzLKFUQ_^Tekr09lxTsv z{3=+V`8+5QY+Ua>vK{8#0~J;ljG8wP4sQD}4 zgfRx*BijqjPL-FQixK`SAnyVsAUZm#t)wX7Hy|2=b?tSC{b~S_@7x7yt1TnKZ@?5J zpf+zoY}RMe^+4jx1L%+Nme7Jf;)0#Jc5B(4RGf$NcB!WEW zL$GfAD&)E62P&IlG1xcU2=~6bPf+FJ2~QKm4E@SWaBjH?`E3sbemX*3aW$y5t-|8w zCp-qs!29hscz+6bb6zQ^OE0Uepalq}0RZ4_dm!+7zr65c6;?App*4Si$1~6`{VPzc z_`ul}R{XP$qB*!{l@{D=ww=-s<2sAyqoelac(mJNB{`A}P~f$F^s5W&wY z&Q8D#zF0wV3sdt3s4K39y!hkb;UVzRvBGXC*(}i51Zr*uH77tVt${pL<{r~q)+`~M&BFWLwk0pO975Lzl!N!+&#Stn4X}TL4e+0N65gW&)t0d` z4bX!-;coqYP3*31SV0Exkwb8Q_7mvmQ`MGo9HBSB9C#c4 zAGX7Ld`Hck^)so80X#a2+*dvaaoXt+r=0=OeFms&HAH9EqQ~>oxGv28H=%d$g#VA{ zVD`@5MZUHOWPpDZVrhFTHZc44!W3D9p|%cCXD6to4U}jBwY3+vu54^7%y45dAn$?m z4v@`)vlHOVG4R0yFz+4!4;`+F&J_Rz5gQchZ@!(kOB#?7g5^p4Ks-7O9v|hiOi|UlEY9XB}<~(IHi^mTKGmuX*}tgtQ>!5TMl!v#;}+H41klV6vvce zODVRM3by$|ooOOk`bK%$c7%ycC^IrFIU0>}PdN!3-ibsw6CE?!aq7tf$|P@$M@D;y zMEsmmCT`nBPvUtE=m9vHOq%$JZP3_Qo%?mm6aqNH?Ajd5Q$FvnN@V?HW25Qr?l%3i zVi!!{kW7E2IMd#)F)`tr8W~wE2MidR*>#xnW37(oryKN8GHH4S2IeGso6i6S3hDW} z2M0~2yaTZir7ZljzPpG&tgw0Pie`_WETX5D(#6Na2|yjt{`IL3k^&A zigbV8DC5Fub&^0H>(}dnBAxAglw|+_^z}jD)gGCa!&d%S%+g9(uskI_OZpKbls2Kh z$s>q3FNl>Z3?jZSb<`X8eNQ-!m+$QKuNfTF{bi)IEoU{90Z`8Xc*lk)$46q?Zf=Gd zA7|#6$-@`MA(Am70MI8X@65?$YDvcAh#`N4ap4=|`~Ip#*7wn1a`C}pS+*BsQTc@X z0NTG{gNToe$V_`)#GO`=b6pWPCUliv3`+<;CM8=+v71iomT1)E)~?mPsg&uja6;#) zW2V!Y4-E~8Q(TvFzE1$)PW}!v5v3Rarm|_r<8hu*`9OsYm_Dw5GT$WnfT5w@&{sVC zY?8?oV*r>n+^lF$`T34rag{&G?8+{Ca#T-Ic;eJ&q;={nn*Re_%OjgKjBeZj0000< KMNUMnLSTZrM29;7 delta 3970 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 c1}-J_KgHvnJc*(8UO$Q diff --git a/app/src/main/res/drawable-ldpi/ic_launcher.png b/app/src/main/res/drawable-ldpi/ic_launcher.png index e332ba3602a874a9f2d2a1b613a977e07e0fc688..0b4a3266a5b228c44341f3e9475d3f069124c62d 100644 GIT binary patch delta 3016 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 KMNUMnLSTYkABOS( delta 1848 zcmV-82gmrY7^n{+iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bn2{kG3kqQX z019CN{LD%vkwz#1Qjx43k=HVRb73ztE-)`%gIc@*00zfNL_t(o!^K!zY+P3rUFW{$ zZO=H49f#Pl6Q@R)4^$u#Ae4N7P#aYU2@vpJiGCoEh*T8`XsP&$ zRMZMScvL_|Xj7rIRf!ulb(~2iwi7${yyw2pVc#=;+&goxogy`CYdq(F?0X*T?7j9n z*9OR*JvVDS`}Y$X{!bR{9bgFBO7Lqa<<`b6ZSmzle=m2h!Tjw_6W(O2 zwYjbcwY$CkF@1iq?PbuRIKw#iLiM!^uVhcn&CNOC2ub_hJI8*1P?{+JTEO34ln%@Z zx7|^oXaYvsyGu~rZ^veE9Y*tfXc~{qWklg>pGLHz)T*beJd;dJEOrSuUL*!_I~L=PyH4-l9KBXg%q5BJ5<7f}q6j_cH2f$bmZ z6V<*&xKizjN`G{?V#4EAx%iFlzdAe_`?OJvshnBDB&W}vAsT#JqVPYO{)Q+KmufW9$n(XZaF#Vt^ z{4DOQzK$$DjV3M-#Kp*S&t<55l>Hab3hPxU$J5iPGiS|zj!n8>?3QTK>3cv3v5Q{y z$O4TIz${;XOJ8{L@jWNz=jZKMK!Htt_SopL2ixBo8a1cl)Hl&MPZj{i`{v(S%9bzw zW$@K&m)^b|_V)pL;Ov#h2*Hm%pAE#*6_Lv!+!rwyOaHTOOH)OiGxpRQPs}`@2d|$cecRvvLD| zy$+VnK-)V4B}Mv9n7CuZtJUBxEI=J7B0VuqAl1+sqHk?t*HB{FCv#<^Pm$;>T!kR% zFvbsmLMs;g#_J=a@T%*umTsbb^(r!lk5DdIOr+uqpdXM()?a&R5yCW)rcIPg2EJ{< zUAYav-H}zM zMj;*KVgDzqt=C|ld$>-&3IHzbC z!+Yi8#^?wgOO||;a)V8v40%KPNsAT-``lorA=Jv>*a>@ z2j6N}B)P|>KHaTF01400l9;C$X?bcHt&Ror+PrM1#)-fIuc+g$t-&L~40Kp640OlR zoB(vj+cfD*XW=7R@&=_UH9_eb9i_BTBzz7vo9l9lO5eUgrB4yc96B6-QRW>5|CpkE2#Z4p=6K z%=CRka1)$}9cYw{AZd;=FtDX}SG$8DrSIIjln6*I|M5>EJG#Qtdq?g@J5+-~-4jDt z-`X7vy~Zfkot0qE2v>W#d+7M-FYvLWkNa9-44UUONw_2$nO{_)DiFe~EdANbhh mN2G{^% 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 KMNUMnLSTaM#fH-W delta 2329 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 diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png index ada878738e12a5eaf58f5313e95e1419225cb4d3..0b4a3266a5b228c44341f3e9475d3f069124c62d 100644 GIT binary patch delta 2981 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 delta 5013 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 diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png index 1742f86052941cc2d50421eace551217c44d1bee..0b4a3266a5b228c44341f3e9475d3f069124c62d 100644 GIT binary patch delta 3016 zcmV;(3pe!OLa!JhiBL{Q4GJ0x0000DNk~Le0001B0001B2nGNE0OFW;IFTV53o%Xr z05MJhns7dHkwz#!8FWQhbW~|{Y-IpccV%p5AW36yZXi@;ZE$R1bY=2DN2G{^% z3`qlq_=bt7Q6dING$IuvvY4QJQS<|=5luD~5m!Y7!tkbH*RBMzz{0u+yWsBjZD*&Q zxp(e8=kdd|O}CwP?sR`UJJZ|wB~6>@bI<(e{O>()_s)5MI(6#QsZ*y;RiG*#9~OAA z2dYILH?!iYfAWt#E69)@fcxjZT(%L5sj#VIs1Kl_-d@UNG6VpQaMgY(cP^!0AWHK3Al}?MJjwAA&hT1(%KxcoMMJ`7UV`Nxz+_p_j zDL#@&nC`(rvltT=V*vH`_KKmQA<>*p%Sa+2RW2v}W<##$3m}1J0KV3tyBe}mGLVK8 zf>lOvPAQXUXwdm%$8@H>T~C@|Cc^`nP);S$p)d5E6SwWHLds1HG?)JoLJT8gjDFUa zk(*n7{@`2Fuaf2YYG?$twU6ao=aTkcKm6*f zh@ur%Y7{ix;o63`>Vt15;Cm;mHLS4fg2%^OqpRO{Pap8<86zb|p)Ti`u#f@M9qt~0 zXmoTV*DJp?ULHI;vI#vsaz`}Ez416FQ>m#@5-`gIu~2_m{gb1eS9^LS=O*Hn(i}Q+ z6Y;bhw(P@)RqWtFxqrh3(Kk7O!K`L~J_87oXa3Y^2U=HJc6iVl8Er)xZQIU8B3684 zWTpwnG4B=74`Ba>4Wc=nmZGt7u`}isi!w6e3SnbnLfOsDa#cDlhI)JFTm|zQum>Q= zaVXyA39^54bpy(P0kR-$UkF<(Wyx$-9(5d%$z-ONZKfz@0AX^8;S|@U3AaTkH!3SH zJ6sqcteEtajQBDW%gc^VLyqIn?Det*&+MG&j1oy4FB+tpTlG1L|4>YHT{8 zVmX_IdF9{GyZ#CPxu?M+!%HN15n7nZM3~?jlA_SkkGn3-{)AQOT&XDz`|GzZeYp({ zkQaY#g1l%G?5}+bdhkVf+kXT7(%_Q6S2<{72(oxL8s5>35ReycguHMg^x#h9@81gZ z-oa|Cn!|!K;jkb#d=$}NJOsJv(rQbY!-_Bf04Nqi^v-*rHgBo6l;c=21^@trK;-uC zLG+wgZ6(vJECT>QDMW7lE}&|o`&)Si01$ugKNae-E2}L7z%m&HaV7&EIRYLVElji= z2S~JlTH7ExRsptMcA09+C*l8XM+MZDsiWEgO5y+gFL3X@YyJQ!A71MZK15PT^@S&(NHTO2sKEPn%L;6MIn_)mZQ zHE=wgx~_6!0um|%0KnVvaNt;KZmFP>V1&*9v-dTCP3b@Y6tDhm?$8+kW5AhAu-II# zvRVQVJ_7(yG!`h1kB(MYNohi70ClYiJTK7u-l(ve(uB?cb;&0J#qq>A%$u)QSWRg{ zWdJ2wU|s*&K(YFnCxLvv!iq{08UueQ(TeB~?*k=TO9%TtyzLKFUQ_^Tekr09lxTsv z{3=+V`8+5QY+Ua>vK{8#0~J;ljG8wP4sQD}4 zgfRx*BijqjPL-FQixK`SAnyVsAUZm#t)wX7Hy|2=b?tSC{b~S_@7x7yt1TnKZ@?5J zpf+zoY}RMe^+4jx1L%+Nme7Jf;)0#Jc5B(4RGf$NcB!WEW zL$GfAD&)E62P&IlG1xcU2=~6bPf+FJ2~QKm4E@SWaBjH?`E3sbemX*3aW$y5t-|8w zCp-qs!29hscz+6bb6zQ^OE0Uepalq}0RZ4_dm!+7zr65c6;?App*4Si$1~6`{VPzc z_`ul}R{XP$qB*!{l@{D=ww=-s<2sAyqoelac(mJNB{`A}P~f$F^s5W&wY z&Q8D#zF0wV3sdt3s4K39y!hkb;UVzRvBGXC*(}i51Zr*uH77tVt${pL<{r~q)+`~M&BFWLwk0pO975Lzl!N!+&#Stn4X}TL4e+0N65gW&)t0d` z4bX!-;coqYP3*31SV0Exkwb8Q_7mvmQ`MGo9HBSB9C#c4 zAGX7Ld`Hck^)so80X#a2+*dvaaoXt+r=0=OeFms&HAH9EqQ~>oxGv28H=%d$g#VA{ zVD`@5MZUHOWPpDZVrhFTHZc44!W3D9p|%cCXD6to4U}jBwY3+vu54^7%y45dAn$?m z4v@`)vlHOVG4R0yFz+4!4;`+F&J_Rz5gQchZ@!(kOB#?7g5^p4Ks-7O9v|hiOi|UlEY9XB}<~(IHi^mTKGmuX*}tgtQ>!5TMl!v#;}+H41klV6vvce zODVRM3by$|ooOOk`bK%$c7%ycC^IrFIU0>}PdN!3-ibsw6CE?!aq7tf$|P@$M@D;y zMEsmmCT`nBPvUtE=m9vHOq%$JZP3_Qo%?mm6aqNH?Ajd5Q$FvnN@V?HW25Qr?l%3i zVi!!{kW7E2IMd#)F)`tr8W~wE2MidR*>#xnW37(oryKN8GHH4S2IeGso6i6S3hDW} z2M0~2yaTZir7ZljzPpG&tgw0Pie`_WETX5D(#6Na2|yjt{`IL3k^&A zigbV8DC5Fub&^0H>(}dnBAxAglw|+_^z}jD)gGCa!&d%S%+g9(uskI_OZpKbls2Kh z$s>q3FNl>Z3?jZSb<`X8eNQ-!m+$QKuNfTF{bi)IEoU{90Z`8Xc*lk)$46q?Zf=Gd zA7|#6$-@`MA(Am70MI8X@65?$YDvcAh#`N4ap4=|`~Ip#*7wn1a`C}pS+*BsQTc@X z0NTG{gNToe$V_`)#GO`=b6pWPCUliv3`+<;CM8=+v71iomT1)E)~?mPsg&uja6;#) zW2V!Y4-E~8Q(TvFzE1$)PW}!v5v3Rarm|_r<8hu*`9OsYm_Dw5GT$WnfT5w@&{sVC zY?8?oV*r>n+^lF$`T34rag{&G?8+{Ca#T-Ic;eJ&q;={nn*Re_%OjgKjBeZj0000< KMNUMnLSTYQ&xc(A delta 8484 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 Sz+?0P0000N2G{^% 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 KMNUMnLSTY|V24Zq delta 11539 zcmXw9XE@x=*WSYFL=U2b=)H$v2_d4l=xicL^ys4eR*xPbh(wQGgAgULdPMInSiQ$a zU99zb{@3+>n3*p#_c>?Ixo75FXR2>ETHKA%*VUjPWhMoIKopvf)eLV&)PIc_cGDaF zaUn{+%S~$(;oz5qYTq6Ll92tnUqH2I7>5cuh2U z;ekFJj_p@n15KkUm&G4{<2>ZIMx=49PkZ&mVl+R|v89XeyLJ3ys$P-cQB2gKc)U>S zjzdq?2>8Bh^ecANAkgx&510Vd9cFWXX=~AWb^4kSyRcwxP~^^}P|NW;Y%PmoIrtFH9}nj3Xs6v35~yh|0@2$2K5s<-@n`6 z;4ymfLx_;4M)|9G_WPpynA5OH{M9{a23L^$V@c3xfyj|el1`2%*^`{Nc0%NDG@4*$ zU&rYPtLii)(;vXV^C*9<&&*-vh_{GwuR1%`Dq(L_)i#pkOB*zN{+S?fq`z_`-W3bL~tT z#r{d0VfxB?jTy0;th+Uy(11WTlY~|P(D9+qc~bxa$)Ew6rFq* zveZSM3T-np_(=JkJtOWL#vZ%KZ?|2PK`D{BsMFGukT{%SK;KvO#`A=sAT2?e#2xl@r2>MD%SP6^Kni>j3@gwRfxIrLX02{|9u;bj zurQ!?L2yV?kg7(e6mN3CG>+3y8e-0xVw>U_h@(6_sm`sO6B+r8x?9{1K~{+UUdjAV z&*ke!k0Dy(r73u#LcJIAEreJWiW&w$FW}(<-2Gc{A=-M;g~#z1vFU(>!JJ)#Jxv{s zr*lweqBnA18rgodQhVQ~Ajt9PsmMY{!1=J4jEzM@vNLkuEU@;9gtqI;;M<}b8B$f3 z!9mUHckp8G&Gw$KC)_=_Hw{`U^j0Se-^<;uWR)DWr>`L+hxWU18nB!A-`fDp@^n2t z*~f;Hg+0#aO%zEUd`6E6P!>-^8jjRQ16$9 zXVH5npE5JVTSP=wp>&xJ_lWR`T|w9R`dazNAM4+KL=UXD5$!=bQ4(ScV|z(|+HOaY znX(PX_MLe8I0RDI9}?IxRy+eX!%3#P>MSB`1)e7h@!n#2hEGWtO;OwmK_*UhPz_Wh zV!UGXa?bCI+rdb+>Qc$zFRs^<9afrwLRE0h6S25i!YEryu#E9CI|thvSj{YtZqUyx zE%4!hTjfuTxtIL3jPhHy6Ab{GWsg;A+uphDW^AsG6HC zC$gcqg%8=rbs;mFfdm#Cp=|!->$+i!lZ29F|5@Vcto3?@9c;;!>&tlo)}!wID0o}$ zP<3%rD_k)?8lelly4bhx&m+CzXyFIi}Y>UNx_ar!j4L$@`1s zh0qK`EpQbPDYA^>x$!BaPQs_nV%^UUj*fTcYki9XR${Df-w7r5n^p>4^6;!78JQlf z;(Pd)Z-nvSj*l`??WPJG^ZY3LBiAxCmbJ;^@YkG^g?s%ya`XUIMKGhZ+slVN1CAuU z#VgHA+O=(M_E4b(htOgLqFknarjIoa>kyac>Y*lK=EB-2DIt{yhyFjFiO^TyYWey- zY*{E20dzR-D#o@G?9wm^cZiy37ZHh*23;>DY3VJpHeR``6K#44@-7TtJMYAW@s1nd zQ(g(YEMt&*6vHEEoNcIMm=EH<(9iSyumk1J^c*=JS&(O3%}?A@@7mpFho3A_l~YmWipLxQWN&!L{ySK zX!5U)uL;JPc*{=%O@FUq=%Ee$+kIbj=@7 z;9^K}99p6B^4=g;_~^3yvQ6&uH?4;=-$v-%<(wAC@n4R@^=&3o9nj^JZ6PlJYZi_( z9dV>uF6jyL6{vR}X7Chi1o}`TmmO7^+yT zhFZ07U7d-kTD@l%v%Y#M%HZlWWLR$N$Gx_nJWT`f8Rmu*(O{M^i(!>uR z%Q$GccPjN?+5bo_DW+i(Gi++m*ivUl#jKEDO1MM7aet7*`dByCgVH-=xhgHD!t=Rvszg;|-zfBW?4 z6=J|W%bvd&D`%Y_p|1NZqQ}|`{Kt`U2)*W+N9*!Ns&LS}Ru&{()VQ*L9On zSHT8m{frp%Y-=!JZ|n)CG%9BZ-z3|$^VgaQ-or7kT z-H9ABzF2-#9omPwU9&M4l)_RNIB2mb6@3{R++>%Mw++QwQiTK#;JvS^W59`NzW1s| zKMJtZ0XzFw`e)@pOJ73$)tr8~++oy-kxjx~#+)W2l zE^LR=RG&N)-_$WMwqd6Wm?8(HAGHj9LLZ!|_4&o~RbJc5DnBKxW4P_?-(aejExrx9 z6hZ9rhtMqYmvxVNVb9F-Re_9etEGCA%W!Oq_*{Sud63b`tD>w; z?UD9*^;94YZrH8}>mi=%dJuQg4?^o^G>-{j1yDJsBjnsRUk$-Hb?D;{9^H^aC5cHe zu2~i}`u^|BGwu`yRJuE;)Yo<=AyMIrF98ye6f4q$iA7XajKrgABD()W>0tL8wGhS@ z#&#C8Q*jr)`Eb=IgBqpb%AZK4YI_cSs}T+?ZehZ!QYWqr!FFAvifYhS3phFGXFbIf%9SDa!QghF+^n@RkzR6>C93;WsT`dn>$ZmTRuMsgz!82ny5iWzA0j+iBTo9)#5$Ye#e$3*I`lcUx7pBc_D;=+Y$ac@#lDD059=MG-7l7nu+k%;M zKVXVKtVDkFno^rB2!J_fkJiR+@rRn$oJ*t%H`2TCHz|sEV78QZJfOxVYSO&4%VIXDOdY?PRV!f zCVN9In5{2Bl?qRPl285d^}lvs@7!Ol3on3I=g>Nv7d_{f&t4AeaE+ne=V2qaf=W+q z?aLG(8=0cA#4yQlFPnMD-2caLLzeegj*AUK~h1Q*O^k4ee8 zQsD)1wEBGd@va*zZXk+0(}u#P?>I4T+1e6?rW4}X`xfF;Z?4kWwk#Huntc{uqlT!H;IG+9GfUlgi8;47J|C|N z!&bL|z7{w8`HaU-@xHDgT8c@Q z1%Ku*lk@&p2Nd!VIm}RG)%6eE^6CBQwyAgWC$mN5@1D*@t8Li=Pp1i%1~@7e<}U=n zz=4d-nP9YS(4wO(`M!LmRiiTj&YG_e&(96GB4oElFC8pkHs>*}=O%R?6c=WLb0^{< zp9YVghApKnyDLmfR(qDsDS~lLbsxZA{$2)HFD-3ThqVM3@kRaMM{NpUIn{?KV(r=UQYpf zhGLLZkWFhA5P;JNl;sQ&POM_P@ zgstUuYMv5SB>$YT`0ZN$!Hx6M-}qeC^Pa*t&Y+dxXW7|9%kX(CUHrml!!1kTjcTL?Kvivy`+qaNM~ff@?hZJs%rA)wOH zjI;^Hyu!{uIn`^&Xsojoyp>ek5a zgAf~uAzo@+{&>PZcyf7qy4m(YwcMD_soq6_Z&o{dh+S~Q0O44t`V*0V3^`ciLyZj-_xEI|hi=B5r)%!V3(rxos7pb>p zJj@t!WL*TYMBQ#>H9Q2Ij8%V#fm-ueY(7&QxJHVw+SoSqYZ^KZR(?X?u4+B&XMP36X2WyF)QMqi}ow|>aDf=bb6O{Yt*M$aJV{Y{v(tvD!XSmH*>^J6m@Ag=F?ZzyD6d%=di#lhmvF}h4}~~EjN|J^c#0OFEm>toCNVJta(s{uO2yy%;1b{vXaRe zMiZ-Hp2g6ROb3uBZVCSng_fJr0f_)hssJ^iOraH21E_c^v57Ra`*Vo9Rkg}Eq|@}e zy;D0cE*dsFYmG*~J@ZEO@O-AQV!E@eY~h}bUW7sk$TCQNVNt|2D;pcGc&UhI@ zfR+};$s}YMo}%IY%i%JL4tDO^_EA=;7Fz{ORBqx8+V0wC=9c=_+pJoazD{lgjMH+; z=BhFmO;zkn3?e+w%Q$i{&kNt^<%=&r8t#o)XqA-TyO=d-kKB!_9`fepF+`NBg1*kz z>2xf0fkN&&S}iWwq=r4KG9vV^RIcX1x(ngxn9+)ahcSFrEUdn(5ob~3;d8ZM<|nyd zEk%h8)3#4;2U)jQ56{}>b;RZXKfY}rYPfzSaC#XQ+*t)X*SLPFM{>-Jtd=#;iL$M5 zrHN#mP9p!=T%|JvI**`(>BhTR9HIzsGX&9oown6*bFR9(>0ZsbA)6WZPxNH{OVpjV zr`D8}BS;fd^wud%=qv6bZAdDaren;nxtgU3(ogH+$X>Axq04C(`@MC;nq{0Up1TfX&}h& zT%guxp*bo8yM6CAM@+b8d^|uz@-AAT>wSea=cCHR(!tsnu2vDmzG1B}$v#^#N{;Ez z2dDWwvnD>}&CQoj{YdWDtjS{*N5Kry{Jq66>!uV z2gj{mholQAoJS}D>FDxycmbd$vUJ%bwBO1@Bx{>|wF`S;+sicDa*?`c9in|IqR32! z`y4{iwrMHLN3_^16zyx3(s}IHPo+phgSR3B*{<%wuMdZBq$EFUfILp zOI{6hmRUV+t-tzXx^_*Te***Ikm7f&e*Yl-o`bSG9quE4skZ;H>ulR=K4FYHN-q*{ zy7M8}dAP4VOLi^xtS1&0(&YzW)L?c9oz!o9eLGZ^Pa_H+rQ%<(_}8I^*CwjB0{Mt! ztl$6WR|1|AE;%z}jXJ+Ybd3ZUq){r}BE`FqfUcLug?eb5r8%2h@>O&CN^KV}Ibc6w z$L7(%=yGZ<;CvNeK6m{{W&NrY!}aj^tK*M9R)S+rT_p2)Un%nS+pGN@jVXPt(J;6l zMvq*9+C#5K9=A<^1le^6_v%3i*$GV6>fSzn|(82g%`H;p+@s^qu=OYUV- zSk|&R++fYcQ-w1egC#lT}N9kno8# zq?v~ica&!>Yd>6O^asP+(c<=)vh4xjW{wrU3ldbxnd{3^!CXvdjT0%YAB|-{C<=Vz z|DZLm(Y-%=vbYJY7r~O_b)8Xo7-9)BCxDY&Gqa{ItoQb%d4%VNe5S{qOktqj!^%!y z2;1zIHH7|@>z2nV*SEHn5F!{bPkN+LeSwFo6K8%lj|1}tCrhi%2IZul4Aua5b+9R% zs1$V8zlsj`(`{QRh#1Qo>0XE2l)9!zA2LRUcFn(ve|qIa_P3S4rQ}5!4B%AQCEC(O zuwu!cf@VS4y~V>u`_Gz`_+wyZ41n?=bf}R`1XgLoweS- zzBeVrD6ebkPqC5l3aEx{Ts43sB9*wsvP;$%{!xq3Uvc%I4!BypH{b2qcy`h0QI-D_ zE#jH#A*-FZM7?Vgo{;5yQ0iSy0B{D)SCdfy24uNo5y(Qh1f)bt4!t>D%hStjb)g&l zYIw6uMAr+gC;mP8ZFmcOdVl|)ds`7P!1;$ogqRFyC(D(H3)K`6#*VIy`L!3i|K2Ds z3ajp&LKl$LvDvY7{P^2i2D$|nD2OEnR7i3qh>}Ug6wb*A1JGiu4%Jyu?>ACuiC2s@zkni$F39dT{g7W9G zQiLz$7ywVrNQ@v1{JL5QEBA?P}}}Fbm1j& z^;e1oTW+km(3j%p*Co%euHZG=i&R7>ms2rZy3C{O2qn7z!UkjlPyF5VZfFkSmCd^`AssswmBLim z2O(^wRr7I%7-k+a^2`WHWV?UdJ0_3~{(w4tc7^FQR;TBxJN1&F{t`g*(ww=~625+T za(|j!7Yvt%cxzCDZ~Q6GQ;pC!q6IZn{nK^`;A5P&Tp;nL`t=Bk)NuV+obVD5FgN$eI(mD^3Tg{g1@nYtP{4WQ~vKM(H`e!u&iTVZ_FG_>y}x$@iCli}{f2yphNy2}sE;jz9f+ zd^S(N2Dd*c#uHpZn9lr{HSVWnp*?-%w^L1NKu_{GQSK!F1+Ou%_2*c}C@A69?8i#) z9laXSJ3+rF;Q2121|nLLPx4~VK%P-^kX!m7Crqhy^~mfuW^CUU`z8d=k38kFijv`F zCEZ5n;Cb+YGYm*R2s%=X9U?~hGkY?ECc*Wv18xpd$%24xQt3k>P=VNn1mSNIY>FWV z8`j8(L->KJ6F`~@g7bqO5dKa84MZ63)9jf)$ne7?poTXBqz9b0McNe{8oIdsC2-mx ztv#)pZOE@vLb}C3?sCXt_Dg9DZ5nLY(zI#Wkz2d=`4KV5e#9HY^*b%Ao-o%GbiP;1 z+3HM0S6pocV|jK?0H>x5OJ)q2>gEoFC4t^;@R1?`N^(okXUH#EYz$IV!*$?YFX`Rn z0=ke8Ko*F2d8=CpQ|y1Xn$2p1rM5{7WdIJ|-f)xG{H_bwOdC`qUQPlsGR=gbX!x_Z zV$3w$PD^v@g{$TJDMC1L$N4V8f^}#6EoBf7ccunHgftjU5qlFFBc6QOQoWA^f1kvn zfa)51xfDiy|5vKvHdtB)*v*o_qXT0?H1~sgVNe_ihc<7{&I7M$D$n(^kXp!Y)}YV3 zuR@RKGX}%p%AL|Bn@3^Q4tBbm+x%Q@?=nF+BDOh5O(y7;h(M%3EV75ZNu=rpy|0Ih zGlG00%x$Dm6aAn+|CP4u z4Gkr=|JLeOc3&hhgW-7PW%F`l7014&-(h(eJC(O@fCA3OqOR%<*am24K$;LDO{2>8 zr~mm{uhA&KZLUsy#J;2%{I}!i_3Pt+8}r|S#)d|#Ol-yIbBhV|pk#5+S=U4*NZZ&h zAM#+*-&vV@e z7?hO=-<6*6d~7q)t!Op~;6B|{*r=E`T79c7PzMg-!94giG(bV~K?%_6GkQ_Dqo+cK z5*nc|zwh1mIfyCyF!9gdU3uoGtF_L9$XjUM0VljFuK3$0hG(VOc)FigR4(8Qex!?P zm3jYC?mu5O^2FnWt)01*gt&8p9Bbq4wP`54Ox|fo?^Jv`n~^3&iVj>QK)0;NeYAr;NE!R)$UJ`zs$j3{+)-^)Phn`-M>AAsj&^a2Y+hMT!qi? zJEGIy4R*X$p{UXo#8*}^3;4Zs zL#9zF3}ctBLjj}FcR8(J`o%sMEsZv`%=mmdWNM^Gm3*an$BWLjXmyGhBuS{qC(P`F zr=KNk7VcU`1oju#9^}4$0MR`jE9{kC7PWkxDc$P=UNZn0CUUBI$gh;X+fgTc^ReEB z`pe1EI2n&vCa|^B+7&g?pT?RbT+rQ?gxY-Aw!ty}Ic1E`8*xP>d4?9lrsqsVv_&l5 zT7_fv{jp>ZLGM9e{b0q$^V1!nLf-avqA1kxrdDC{Ddsb7;IQUMQtQ9d^>LW;kWqX4 zjz`sk{B6>_Wrn)E;i(>b-{tjR=d*>)N456oM#7u=xBv2*$7`87v5b`kU!9j2^U@S0 zjY_BCI-WUX;eRt|j%jsYAFkR7GP_?bYFe&C1U@kw5-R;ASJ0_iD@?B#!sEqn7(|a8 z-HA7(Skg4PwRoW@Qj_i4`4CBE$8vP~lDy#yOr)n(650SFphkW~3C42Z@1cDWV?v>g zz$OD&DLZ=l?RyHlUSSBNh^2-7tqZl3{_&%a z>+Oy4pbFBUIUK8Kfqp<>e#q@ty;SC0VlI^IZQ%;4LKv^Ts|eTUd9P>2XIU!7mcJ2l zfH2#33JvKgd!*{Q!y3wJCFJxp*ana%thIymUpUu5GQT{|KmV=UE0Mhipfp9m{EqLp zCzM5nU9=qhy#h&NQO;8Dc@OHOzRbk9NKojhiR zEcdL6TUoZ;ynE-c-Y(k2nPF|K-ZmgAAf#e$P+ABX?k9wZUX;bjCZmVGu@l*ZeE#iU zm;Wl=;==4^V|0~kth40kQNW^J8^bltA4zOF;`;HZaus5J{bN5Z$HR6>|s`00YuasJ0Gbk3C~sJM@nJv}ZxDxhg;o(y}c(8v~_e2lpiz z=47o>QS-?^i1%633jZ1vAjqRD^&us0?f@9#|Mjkg(c;M`TdkHYV4eJjp9^|lO!$oI zguHKAr|q2kHq;qGxwmc!!u|{L@wp@u{c#vuAWu_T=CagcF{gMe#S<1Nv*-JQq3af! zYM=Ry{Lx^x38LcXw@H!>)S?#z=l}EPPdvMWI%i=WvxUQiw9GJxJKUEHq8ve4G9T$W zv#+mkPW30TUGJ_dp!f#r5-MH;+fbuM)jz&>cy{9Ix>Oq6ByBuDgY!ILv6Syrgxc~x zs@W9SUubnybt7WO{<^b>Ut_{4hF_c3A^P9c5cceB4Chd8s67UrpCJT9U#2g`1B_Yq$RaIx>5{?9H;_Ia*rPP*) ztFPBdg1{+1IUekx5c&`alS;r7-6V=_; zIl0kDdR72_?*3{MHGL{OPN@iX5SYSkb!I+3;_RWx!XwDyV|*`q`}4jQgGBfyM@ysx z$1V(YR{tDKN=b`Wx$geqay{Q?H9R)D{Nx(&n(AseP{y`w3)amaZ zF}vN_ZP8TFdp&UJw-a`Qq7GNqbOs)X;p>ynTRXtcvHgWtTu++sMSl8(v|9S4jC6I0tCPLK_(bhk zVnEHy(A^f6Tvqfl!X$`qzrF9^6Y+KZCc$+w9hlAh*StW10ed#=`<>O~ zs3>(GJ1^&j&uQn!@MT-G%oiG?gg?&^AV6qBW+1D72S=c!8!Q$cOLe=J21lzlqJGXS zBJ3YD`0}NoT`4cd^bCk=UG&EaND@&j zoOWbMiZ`a#z6BY}Z*D#x|7YwU^YgL7;&U0N2eHy9kQs;;0geBHyso566uLCz;*X%* zxh*+QaDE^2sAGh{vYfS>Yu0>8@#@tgzG~jNjzP5(ktJY eWIfO|`z;@S{a^F+1vmekL7I Date: Wed, 10 Aug 2016 15:36:49 +0000 Subject: [PATCH 3/3] Update AndroidManifest.xml rebrand fdroid to belmarket --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 41acae8d8..95762b666 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@