diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java new file mode 100644 index 00000000..ebc0f74a --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java @@ -0,0 +1,640 @@ +/** + * Copyright (C) 2017 Ryszard Wiśniewski + * Copyright (C) 2017 Connor Tumbleson + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package brut.androlib.aapt2; + +import brut.androlib.Androlib; +import brut.androlib.ApkDecoder; +import brut.androlib.ApkOptions; +import brut.androlib.TestUtils; +import brut.androlib.meta.MetaInfo; +import brut.common.BrutException; +import brut.directory.ExtFile; +import brut.directory.FileDirectory; +import brut.util.OS; +import brut.util.OSDetection; +import org.custommonkey.xmlunit.DetailedDiff; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier; +import org.custommonkey.xmlunit.ElementQualifier; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.xml.sax.SAXException; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.util.Map; +import java.util.Set; +import java.util.logging.Logger; + +import static org.junit.Assert.*; +import static org.junit.Assume.assumeTrue; + +/** + * @author Ryszard Wiśniewski + */ +public class BuildAndDecodeTest { + + @BeforeClass + public static void beforeClass() throws Exception { + TestUtils.cleanFrameworkFile(); + + sTmpDir = new ExtFile(OS.createTempDirectory()); + sTestOrigDir = new ExtFile(sTmpDir, "testapp-orig"); + sTestNewDir = new ExtFile(sTmpDir, "testapp-new"); + LOGGER.info("Unpacking testapp..."); + TestUtils.copyResourceDir(BuildAndDecodeTest.class, "brut/apktool/aapt2/testapp/", sTestOrigDir); + + ApkOptions apkOptions = new ApkOptions(); + apkOptions.useAapt2 = true; + apkOptions.verbose = true; + + LOGGER.info("Building testapp.apk..."); + File testApk = new File(sTmpDir, "testapp.apk"); + new Androlib(apkOptions).build(sTestOrigDir, testApk); + + LOGGER.info("Decoding testapp.apk..."); + ApkDecoder apkDecoder = new ApkDecoder(testApk); + apkDecoder.setOutDir(sTestNewDir); + apkDecoder.decode(); + } + + @AfterClass + public static void afterClass() throws BrutException { + OS.rmdir(sTmpDir); + } + + @Test + public void buildAndDecodeTest() throws BrutException { + assertTrue(sTestNewDir.isDirectory()); + } + + @Test + public void manifestTaggingNotSupressed() throws BrutException { + compareXmlFiles("AndroidManifest.xml"); + } + + @Test + public void valuesAnimsTest() throws BrutException { + compareValuesFiles("values-mcc001/anims.xml"); + } + + @Test + public void valuesArraysTest() throws BrutException { + compareValuesFiles("values-mcc001/arrays.xml"); + } + + @Test + public void valuesArraysCastingTest() throws BrutException { + compareValuesFiles("values-mcc002/arrays.xml"); + compareValuesFiles("values-mcc003/arrays.xml"); + } + + @Test + public void valuesAttrsTest() throws BrutException { + compareValuesFiles("values/attrs.xml"); + } + + @Test + public void valuesBoolsTest() throws BrutException { + compareValuesFiles("values-mcc001/bools.xml"); + } + + @Test + public void valuesColorsTest() throws BrutException { + compareValuesFiles("values-mcc001/colors.xml"); + } + + @Test + public void bug702Test() throws BrutException { + compareValuesFiles("values-mcc001-mnc00/strings.xml"); + } + + @Test + public void valuesDimensTest() throws BrutException { + compareValuesFiles("values-mcc001/dimens.xml"); + } + + @Test + public void valuesDrawablesTest() throws BrutException { + compareValuesFiles("values-mcc001/drawables.xml"); + } + + @Test + public void valuesIdsTest() throws BrutException { + compareValuesFiles("values-mcc001/ids.xml"); + } + + @Test + public void valuesIntegersTest() throws BrutException { + compareValuesFiles("values-mcc001/integers.xml"); + } + + @Test + public void valuesLayoutsTest() throws BrutException { + compareValuesFiles("values-mcc001/layouts.xml"); + } + + @Test + public void xmlPluralsTest() throws BrutException { + compareValuesFiles("values-mcc001/plurals.xml"); + } + + @Test + public void valuesStringsTest() throws BrutException { + compareValuesFiles("values-mcc001/strings.xml"); + } + + @Test + public void valuesStylesTest() throws BrutException { + compareValuesFiles("values-mcc001/styles.xml"); + } + + @Test + public void valuesReferencesTest() throws BrutException { + compareValuesFiles("values-mcc002/strings.xml"); + } + + @Test + public void valuesExtraLongTest() throws BrutException { + compareValuesFiles("values-en/strings.xml"); + } + + @Test + public void valuesExtraLongExactLengthTest() throws BrutException { + Map strs = TestUtils.parseStringsXml(new File(sTestNewDir, "res/values-en/strings.xml")); + + // long_string6 should be exactly 0x8888 chars of "a" + // the valuesExtraLongTest() should handle this + // but such an edge case, want a specific test + String aaaa = strs.get("long_string6"); + assertEquals(0x8888, aaaa.length()); + } + + @Test + public void crossTypeTest() throws BrutException { + compareValuesFiles("values-mcc003/strings.xml"); + compareValuesFiles("values-mcc003/integers.xml"); + compareValuesFiles("values-mcc003/bools.xml"); + } + + @Test + public void xmlLiteralsTest() throws BrutException { + compareXmlFiles("res/xml/literals.xml"); + } + + @Test + public void xmlReferencesTest() throws BrutException { + compareXmlFiles("res/xml/references.xml"); + } + + @Test + public void xmlReferenceAttributeTest() throws BrutException { + compareXmlFiles("res/layout/issue1040.xml"); + } + + @Test + public void xmlCustomAttributeTest() throws BrutException { + compareXmlFiles("res/layout/issue1063.xml"); + } + + @Test + public void xmlSmallNumbersDontEscapeTest() throws BrutException { + compareXmlFiles("res/layout/issue1130.xml"); + } + + @Test + public void xmlUniformAutoTextTest() throws BrutException { + compareXmlFiles("res/layout/issue1674.xml"); + } + + @Test(expected = AssertionError.class) + public void xmlFillParentBecomesMatchTest() throws BrutException { + compareXmlFiles("res/layout/issue1274.xml"); + } + + @Test + public void xmlCustomAttrsNotAndroidTest() throws BrutException { + compareXmlFiles("res/layout/issue1157.xml"); + } + + @Test + public void qualifiersTest() throws BrutException { + compareValuesFiles("values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp" + + "-xlarge-long-round-highdr-land-desk-night-xhdpi-finger-keyssoft-12key" + + "-navhidden-dpad-v26/strings.xml"); + } + + @Test + public void shortendedMncTest() throws BrutException { + compareValuesFiles("values-mcc001-mnc1/strings.xml"); + } + + @Test + public void shortMncHtcTest() throws BrutException { + compareValuesFiles("values-mnc1/strings.xml"); + } + + @Test + public void shortMncv2Test() throws BrutException { + compareValuesFiles("values-mcc238-mnc6/strings.xml"); + } + + @Test + public void longMncTest() throws BrutException { + compareValuesFiles("values-mcc238-mnc870/strings.xml"); + } + + @Test + public void anyDpiTest() throws BrutException, IOException { + compareValuesFiles("values-watch/strings.xml"); + } + + @Test + public void packed3CharsTest() throws BrutException, IOException { + compareValuesFiles("values-ast-rES/strings.xml"); + } + + @Test + public void rightToLeftTest() throws BrutException, IOException { + compareValuesFiles("values-ldrtl/strings.xml"); + } + + @Test + public void scriptBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+en+Latn+US/strings.xml"); + } + + @Test + public void threeLetterLangBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-ast/strings.xml"); + } + + @Test + public void androidOStringTest() throws BrutException, IOException { + compareValuesFiles("values-ast/strings.xml"); + } + + @Test + public void twoLetterNotHandledAsBcpTest() throws BrutException, IOException { + checkFolderExists("res/values-fr"); + } + + @Test + public void twoLetterLangBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-en-rUS/strings.xml"); + } + + @Test + public void variantBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+en+US+POSIX/strings.xml"); + } + + @Test + public void fourpartBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+ast+Latn+IT+AREVELA/strings.xml"); + } + + @Test + public void RegionLocaleBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+en+Latn+419/strings.xml"); + } + + @Test + public void numericalRegionBcp47Test() throws BrutException, IOException { + compareValuesFiles("values-b+eng+419/strings.xml"); + } + + @Test + public void api23ConfigurationsTest() throws BrutException, IOException { + compareValuesFiles("values-round/strings.xml"); + compareValuesFiles("values-notround/strings.xml"); + } + + @Test + public void api26ConfigurationsTest() throws BrutException, IOException { + compareValuesFiles("values-widecg-v26/strings.xml"); + compareValuesFiles("values-lowdr-v26/strings.xml"); + compareValuesFiles("values-nowidecg-v26/strings.xml"); + compareValuesFiles("values-vrheadset-v26/strings.xml"); + } + + @Test + public void fontTest() throws BrutException, IOException { + File fontXml = new File((sTestNewDir + "/res/font"), "lobster.xml"); + File fontFile = new File((sTestNewDir + "/res/font"), "lobster_regular.otf"); + + // Per #1662, ensure font file is not encoded. + assertTrue(fontXml.isFile()); + compareXmlFiles("/res/font/lobster.xml"); + + // If we properly skipped decoding the font (otf) file, this file should not exist + assertFalse((new File((sTestNewDir + "/res/values"), "fonts.xml")).isFile()); + assertTrue(fontFile.isFile()); + } + + @Test + public void drawableNoDpiTest() throws BrutException, IOException { + compareResFolder("drawable-nodpi"); + } + + @Test + public void drawableAnyDpiTest() throws BrutException, IOException { + compareResFolder("drawable-anydpi"); + } + + @Test + public void drawableNumberedDpiTest() throws BrutException, IOException { + compareResFolder("drawable-534dpi"); + } + + @Test + public void drawableLdpiTest() throws BrutException, IOException { + compareResFolder("drawable-ldpi"); + } + + @Test + public void drawableMdpiTest() throws BrutException, IOException { + compareResFolder("drawable-mdpi"); + } + + @Test + public void drawableTvdpiTest() throws BrutException, IOException { + compareResFolder("drawable-tvdpi"); + } + + @Test + public void drawableXhdpiTest() throws BrutException, IOException { + compareResFolder("drawable-xhdpi"); + } + + @Test + public void ninePatchImageColorTest() throws BrutException, IOException { + char slash = File.separatorChar; + String location = slash + "res" + slash + "drawable-xhdpi" + slash; + + File control = new File((sTestOrigDir + location), "9patch.9.png"); + File test = new File((sTestNewDir + location), "9patch.9.png"); + + BufferedImage controlImage = ImageIO.read(control); + BufferedImage testImage = ImageIO.read(test); + + // lets start with 0,0 - empty + assertEquals(controlImage.getRGB(0, 0), testImage.getRGB(0, 0)); + + // then with 30, 0 - black + assertEquals(controlImage.getRGB(30, 0), testImage.getRGB(30, 0)); + + // then 30, 30 - blue + assertEquals(controlImage.getRGB(30, 30), testImage.getRGB(30, 30)); + } + + @Test + public void issue1508Test() throws BrutException, IOException { + char slash = File.separatorChar; + String location = slash + "res" + slash + "drawable-xhdpi" + slash; + + File control = new File((sTestOrigDir + location), "btn_zoom_up_normal.9.png"); + File test = new File((sTestNewDir + location), "btn_zoom_up_normal.9.png"); + + BufferedImage controlImage = ImageIO.read(control); + BufferedImage testImage = ImageIO.read(test); + + // 0, 0 = clear + assertEquals(controlImage.getRGB(0, 0), testImage.getRGB(0, 0)); + + // 30, 0 = black line + assertEquals(controlImage.getRGB(0, 30), testImage.getRGB(0, 30)); + + // 30, 30 = greyish button + assertEquals(controlImage.getRGB(30, 30), testImage.getRGB(30, 30)); + } + + @Test + public void issue1511Test() throws BrutException, IOException { + char slash = File.separatorChar; + String location = slash + "res" + slash + "drawable-xxhdpi" + slash; + + File control = new File((sTestOrigDir + location), "textfield_activated_holo_dark.9.png"); + File test = new File((sTestNewDir + location), "textfield_activated_holo_dark.9.png"); + + BufferedImage controlImage = ImageIO.read(control); + BufferedImage testImage = ImageIO.read(test); + + // Check entire image as we cannot mess this up + final int w = controlImage.getWidth(), + h = controlImage.getHeight(); + + final int[] controlImageGrid = controlImage.getRGB(0, 0, w, h, null, 0, w); + final int[] testImageGrid = testImage.getRGB(0, 0, w, h, null, 0, w); + + for (int i = 0; i < controlImageGrid.length; i++) { + assertEquals("Image lost Optical Bounds at i = " + i, controlImageGrid[i], testImageGrid[i]); + } + } + + @Test + public void robust9patchTest() throws BrutException, IOException { + String[] ninePatches = {"ic_notification_overlay.9.png", "status_background.9.png", + "search_bg_transparent.9.png", "screenshot_panel.9.png", "recents_lower_gradient.9.png"}; + + char slash = File.separatorChar; + String location = slash + "res" + slash + "drawable-xxhdpi" + slash; + + for (String ninePatch : ninePatches) { + File control = new File((sTestOrigDir + location), ninePatch); + File test = new File((sTestNewDir + location), ninePatch); + + BufferedImage controlImage = ImageIO.read(control); + BufferedImage testImage = ImageIO.read(test); + + int w = controlImage.getWidth(), h = controlImage.getHeight(); + + // Check the entire horizontal line + for (int i = 1; i < w; i++) { + if (isTransparent(controlImage.getRGB(i, 0))) { + assertTrue(isTransparent(testImage.getRGB(i, 0))); + } else { + assertEquals("Image lost npTc chunk on image " + ninePatch + " at (x, y) (" + i + "," + 0 + ")", + controlImage.getRGB(i, 0), testImage.getRGB(i, 0)); + } + } + + // Check the entire vertical line + for (int i = 1; i < h; i++) { + if (isTransparent(controlImage.getRGB(0, i))) { + assertTrue(isTransparent(testImage.getRGB(0, i))); + } else { + assertEquals("Image lost npTc chunk on image " + ninePatch + " at (x, y) (" + 0 + "," + i + ")", + controlImage.getRGB(0, i), testImage.getRGB(0, i)); + } + } + } + } + + @Test + public void drawableXxhdpiTest() throws BrutException, IOException { + compareResFolder("drawable-xxhdpi"); + } + + @Test + public void drawableXxxhdpiTest() throws BrutException, IOException { + compareResFolder("drawable-xxxhdpi"); + } + + @Test + public void resRawTest() throws BrutException, IOException { + compareResFolder("raw"); + } + + @Test + public void libsTest() throws BrutException, IOException { + compareLibsFolder("libs"); + } + + @Test + public void unknownFolderTest() throws BrutException, IOException { + compareUnknownFiles(); + } + + @Test + public void fileAssetTest() throws BrutException, IOException { + compareAssetsFolder("txt"); + } + + @Test + public void unicodeAssetTest() throws BrutException, IOException { + assumeTrue(! OSDetection.isWindows()); + compareAssetsFolder("unicode-txt"); + } + + @Test + public void multipleDexTest() throws BrutException, IOException { + compareBinaryFolder("/smali_classes2", false); + } + + @Test + public void singleDexTest() throws BrutException, IOException { + compareBinaryFolder("/smali", false); + } + + @Test + public void confirmKotlinFolderPersistsTest() throws BrutException, IOException { + checkFolderExists("/kotlin"); + } + + @SuppressWarnings("unchecked") + private void compareUnknownFiles() throws BrutException, IOException { + MetaInfo control = new Androlib().readMetaFile(sTestOrigDir); + MetaInfo test = new Androlib().readMetaFile(sTestNewDir); + assertNotNull(control.unknownFiles); + assertNotNull(test.unknownFiles); + + Map control_files = control.unknownFiles; + Map test_files = test.unknownFiles; + assertTrue(control_files.size() == test_files.size()); + + // Make sure that the compression methods are still the same + for (Map.Entry controlEntry : control_files.entrySet()) { + assertTrue(controlEntry.getValue().equals(test_files.get(controlEntry.getKey()))); + } + } + + private void compareBinaryFolder(String path, boolean res) throws BrutException, IOException { + Boolean exists = true; + + String tmp = ""; + if (res) { + tmp = File.separatorChar + "res" + File.separatorChar; + } + + String location = tmp + path; + + FileDirectory fileDirectory = new FileDirectory(sTestOrigDir, location); + + Set files = fileDirectory.getFiles(true); + for (String filename : files) { + + File control = new File((sTestOrigDir + location), filename); + File test = new File((sTestNewDir + location), filename); + + if (! test.isFile() || ! control.isFile()) { + exists = false; + } + } + + assertTrue(exists); + } + + private void compareResFolder(String path) throws BrutException, IOException { + compareBinaryFolder(path, true); + } + + private void compareLibsFolder(String path) throws BrutException, IOException { + compareBinaryFolder(File.separatorChar + path, false); + } + + private void compareAssetsFolder(String path) throws BrutException, IOException { + compareBinaryFolder(File.separatorChar + "assets" + File.separatorChar + path, false); + } + + private void compareValuesFiles(String path) throws BrutException { + compareXmlFiles("res/" + path, new ElementNameAndAttributeQualifier("name")); + } + + private void compareXmlFiles(String path) throws BrutException { + compareXmlFiles(path, null); + } + + private void checkFolderExists(String path) throws BrutException { + File f = new File(sTestNewDir, path); + + assertTrue(f.isDirectory()); + } + + private boolean isTransparent(int pixel) { + return pixel >> 24 == 0x00; + } + + private void compareXmlFiles(String path, ElementQualifier qualifier) throws BrutException { + DetailedDiff diff; + try { + Reader control = new FileReader(new File(sTestOrigDir, path)); + Reader test = new FileReader(new File(sTestNewDir, path)); + + diff = new DetailedDiff(new Diff(control, test)); + } catch (SAXException | IOException ex) { + throw new BrutException(ex); + } + + if (qualifier != null) { + diff.overrideElementQualifier(qualifier); + } + + assertTrue(path + ": " + diff.getAllDifferences().toString(), diff.similar()); + } + + private static ExtFile sTmpDir; + private static ExtFile sTestOrigDir; + private static ExtFile sTestNewDir; + + private final static Logger LOGGER = Logger.getLogger(BuildAndDecodeTest.class.getName()); +} diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/AndroidManifest.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/AndroidManifest.xml new file mode 100644 index 00000000..057f5576 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/apktool.yml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/apktool.yml new file mode 100644 index 00000000..6386e2ce --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/apktool.yml @@ -0,0 +1,18 @@ +version: 2.0.0 +apkFileName: testapp.apk +isFrameworkApk: false +usesFramework: + ids: + - 1 +packageInfo: + forced-package-id: '127' +versionInfo: + versionCode: '1' + versionName: '1.0' +compressionType: false +unknownFiles: + hidden.file: '8' + non\u007Fprintable.file: '8' + stored.file: '0' + unk_folder/unknown_file: '8' + lib_bug603/bug603: '8' \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/txt/no-unicode.txt b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/txt/no-unicode.txt new file mode 100644 index 00000000..3306f918 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/txt/no-unicode.txt @@ -0,0 +1 @@ +This is an empty file. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/unicode-txt/∂-unicode.txt b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/unicode-txt/∂-unicode.txt new file mode 100644 index 00000000..eea97b75 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/assets/unicode-txt/∂-unicode.txt @@ -0,0 +1 @@ +∂ char. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/kotlin/kotlin.kotlin_builtins b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/kotlin/kotlin.kotlin_builtins new file mode 100644 index 00000000..ee639e57 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/kotlin/kotlin.kotlin_builtins differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/libs/android-support-v13.jar b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/libs/android-support-v13.jar new file mode 100644 index 00000000..57b70721 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/libs/android-support-v13.jar differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-534dpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-534dpi/ic_launcher.png new file mode 100644 index 00000000..96a442e5 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-534dpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-anydpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-anydpi/ic_launcher.png new file mode 100644 index 00000000..96a442e5 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-anydpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-hdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 00000000..96a442e5 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-hdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/data.jpg b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/data.jpg new file mode 100644 index 00000000..81a87b17 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/data.jpg differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/ic_launcher.png new file mode 100644 index 00000000..99238729 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-ldpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-mdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 00000000..359047df Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-mdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-nodpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-nodpi/ic_launcher.png new file mode 100644 index 00000000..359047df Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-nodpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-tvdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-tvdpi/ic_launcher.png new file mode 100644 index 00000000..359047df Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-tvdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch.9.png new file mode 100644 index 00000000..286ab358 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_htc.r.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_htc.r.9.png new file mode 100644 index 00000000..286ab358 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_htc.r.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_samsung.9.qmg b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_samsung.9.qmg new file mode 100644 index 00000000..286ab358 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/9patch_samsung.9.qmg differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/btn_zoom_up_normal.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/btn_zoom_up_normal.9.png new file mode 100644 index 00000000..7f73df09 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/btn_zoom_up_normal.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 00000000..71c6d760 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher_samsung.qmg b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher_samsung.qmg new file mode 100644 index 00000000..71c6d760 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xhdpi/ic_launcher_samsung.qmg differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..359047df Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_notification_overlay.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_notification_overlay.9.png new file mode 100644 index 00000000..fa7de0ed Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/ic_notification_overlay.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/recents_lower_gradient.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/recents_lower_gradient.9.png new file mode 100644 index 00000000..427cad9f Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/recents_lower_gradient.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/screenshot_panel.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/screenshot_panel.9.png new file mode 100644 index 00000000..45259d7f Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/screenshot_panel.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/search_bg_transparent.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/search_bg_transparent.9.png new file mode 100644 index 00000000..c0bf31d0 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/search_bg_transparent.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/status_background.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/status_background.9.png new file mode 100644 index 00000000..727c8040 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/status_background.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/textfield_activated_holo_dark.9.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/textfield_activated_holo_dark.9.png new file mode 100644 index 00000000..e3139b48 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxhdpi/textfield_activated_holo_dark.9.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxxhdpi/ic_launcher.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..96a442e5 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/drawable-xxxhdpi/ic_launcher.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster.xml new file mode 100644 index 00000000..2bcd4354 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster_regular.otf b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster_regular.otf new file mode 100644 index 00000000..5e422816 Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/font/lobster_regular.otf differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1040.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1040.xml new file mode 100644 index 00000000..282c45ca --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1040.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1063.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1063.xml new file mode 100644 index 00000000..c07108b3 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1063.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1130.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1130.xml new file mode 100644 index 00000000..ce05fbc3 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1130.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1157.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1157.xml new file mode 100644 index 00000000..994687e6 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1157.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1274.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1274.xml new file mode 100644 index 00000000..becd4227 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1274.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1674.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1674.xml new file mode 100644 index 00000000..3186e9e7 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/layout/issue1674.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/blank_test.png b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/blank_test.png new file mode 100644 index 00000000..a1d202bc Binary files /dev/null and b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/blank_test.png differ diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/no_extension b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/no_extension new file mode 100644 index 00000000..be0f9bb5 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/raw/no_extension @@ -0,0 +1 @@ +This file has no extension. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ar-rXB/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ar-rXB/strings.xml new file mode 100644 index 00000000..687db601 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ar-rXB/strings.xml @@ -0,0 +1,9 @@ + + + "‏‮Forgot‬‏ ‏‮your‬‏ ‏‮username‬‏ ‏‮or‬‏ ‏‮password?‬‏\n‏‮Visit‬‏ ‏‮google.com/accounts/recover‬‏‏‮y‬‏‏‮.‬‏" + ‏‮Forgot‬‏ ‏‮your‬‏ ‏‮username‬‏ ‏‮or‬‏ ‏‮password?‬\n.‏‮Visit‬‏ ‏‮google.com/accounts/recover‬‏‏‮y‬‏ + (string8) "‏‮Forgot‬‏ ‏‮your‬‏ ‏‮username‬‏ ‏‮or‬‏ ‏‮password?‬‏\n‏‮Visit‬‏ ‏‮google.com/accounts/recover‬‏‏‮y‬‏‏‮.‬‏" + Forgot your username or password?\nVisit google.com/accounts/recovery. + ‏‮Forgot‬‏ ‏‮your‬‏ ‏‮username‬‏ ‏‮or‬‏ ‏‮password?‬‏ + ‏‮Visit‬‏ ‏‮google.com/accounts/recover‬‏‏‮y‬‏‏‮.‬‏ + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast-rES/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast-rES/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast-rES/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ast/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+ast+Latn+IT+AREVELA/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+419/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+419/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+419/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+US/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+US/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+Latn+US/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+US+POSIX/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+US+POSIX/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+en+US+POSIX/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+eng+419/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+eng+419/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-b+eng+419/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en-rUS/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en-rUS/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en/strings.xml new file mode 100644 index 00000000..b717e998 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-en/strings.xml @@ -0,0 +1,9 @@ + + + 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u6MYXpq2b1NwJQjPlQhvYhMltxGKNiDmMoc9BH7akSIO4MA8aGwYzdV7OFdE4xt4LIySWLHrM9nfLYOlZOx80XdNwZtxmNIGVd4cVRzbq0NHjFjm6FdTBEG0zvWXrdDwq5ErpJFsAEcHw8Va7JNMZFbbZaiDd1pdAgtX1nEMWqDquehFy7VyWZW4HdvrZpJa4FaVFHcVGLJlO2boCoqebdUQhVc7vUvaO124p4gGNHo2RsjfwSgC0cwmg0vnVMiex1ezcBcbfc1kXwKixauyMWFKDOvomcolbaSA3OlTScmTfXS2LJixdLOXOBeSD28Ym2klVq6IS5CIGKwpn0CcciycI35ReYMK5f8r1JG3iYnR1jpeCASt9ggmT87eP0zgu01YYVUMNRgm9mDYU16Pce36HwDoD6yNxp6Czk3kJUpqygSpntVyuf6uuOsFwUfi3ii9TZqMlsbbcEqlYybVh5K5OjcZBCzmYqF4D1aLWfDtRDuc314paLfOga7J2ghuujoTXeqP328GdqQmCfsQEvUw9Oxef7hA7X0Bx68XCJ2yMKEaNOdirG5ubXxVQPFb7YFTdtNrMqPpbpVpqMRqU506LGTRnKYD90qqPF7ctgbIfjzQLV5CDymsiclAg77rLgw8T7p9o9CXIJesrZR95YZKGgsE7FOlpnsOrVSnjwQFO6u1I5oe1Q2uoQ33BfrzxwQ99pkZilFlZOzs6xsMtCb6h8E71TtfrLbwoPv15WniTNwvpYIq807Aq8zzVchw5xFF2cX1KohDIDnef8c0EztchHVvwTEOmpOrqslhl5n5yAa1vgorHThisisAnAdditionalBitofTextAddedSoWeCanMakeSureOurShortLimitIsFixedForMoreThanOneStringLongerThanItsLimit + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-fr/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-fr/strings.xml new file mode 100644 index 00000000..ad496d77 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-fr/strings.xml @@ -0,0 +1,5 @@ + + + http://www.foo.com + http://www.foo.com + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ldrtl/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ldrtl/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-ldrtl/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-lowdr-v26/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-lowdr-v26/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-lowdr-v26/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc00/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc00/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc00/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc1/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc1/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001-mnc1/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/anims.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/anims.xml new file mode 100644 index 00000000..cdd947c9 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/anims.xml @@ -0,0 +1,12 @@ + + + @android:anim/bounce_interpolator + @android:anim/cycle_interpolator + @android:anim/decelerate_interpolator + @android:anim/fade_in + @android:anim/fade_out + @android:anim/linear_interpolator + @android:anim/overshoot_interpolator + @android:anim/slide_in_left + @android:anim/slide_out_right + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/arrays.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/arrays.xml new file mode 100644 index 00000000..141babbe --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/arrays.xml @@ -0,0 +1,38 @@ + + + + TEST1 + TEST2 + TEST3 + %2$s foo %1$d + http://google.com&boo=1&foo=2 + <b>Bolded Text</b> + <font size=16 align=middle>Small</font> + + + -1 + 0 + 1 + + + + true + TEST + 5 + 5.5 + 10.0sp + #ff123456 + + + @string/test1 + foo + foo2 + + + category=temp%temp%foo + + + res/ + view/ + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/bools.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/bools.xml new file mode 100644 index 00000000..787bfcad --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/bools.xml @@ -0,0 +1,5 @@ + + + false + true + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/colors.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/colors.xml new file mode 100644 index 00000000..038b11e3 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/colors.xml @@ -0,0 +1,6 @@ + + + #ff123456 + @android:color/white + #00000000 + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/dimens.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/dimens.xml new file mode 100644 index 00000000..2a3a6440 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/dimens.xml @@ -0,0 +1,9 @@ + + + 10.0dip + 10.0sp + 10.0pt + 10.0px + 10.0mm + 10.0in + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/drawables.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/drawables.xml new file mode 100644 index 00000000..5f970b28 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/drawables.xml @@ -0,0 +1,5 @@ + + + @android:drawable/btn_default + #00000000 + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/ids.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/ids.xml new file mode 100644 index 00000000..1d2724aa --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/ids.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/integers.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/integers.xml new file mode 100644 index 00000000..d672d18a --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/integers.xml @@ -0,0 +1,6 @@ + + + -1 + 0 + 1 + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/layouts.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/layouts.xml new file mode 100644 index 00000000..391ab37b --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/layouts.xml @@ -0,0 +1,7 @@ + + + @android:layout/activity_list_item + @android:layout/browser_link_context_header + @android:layout/simple_list_item_1 + @android:layout/simple_spinner_item + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/plurals.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/plurals.xml new file mode 100644 index 00000000..c39ce2cb --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/plurals.xml @@ -0,0 +1,27 @@ + + + + %1$s, %2$d foo(s) + %1$s, %2$d foo + + + %d foos + %d foo + + + foo %d moos + foo %d moo + + + foo %d + foo 1 + + + <b>%d</b> guide123 + <b>%d</b> 1 + + + Vous disposez de <font color=#8c593c>%1$d contenus</font> sur <font color=#8c593c>%2$d disponibles</font> + Vous disposez de <font color=#8c593c>%1$d contenu</font> sur <font color=#8c593c>%2$d disponibles</font> + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/strings.xml new file mode 100644 index 00000000..65ccbe69 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/strings.xml @@ -0,0 +1,44 @@ + + + + Lorem ipsum... + \@ + \? + \#ff123456 + & + "'" + \" + \u0005 + " foo bar " + "foo +bar" + " foo"bar baz foo + foobarbaz + foobar"b + az"foo + %d of %d + foo %d bar % + %2$s foo %1$d + %-e foo %,d + %2$-e foo %1$,d + %02d foo %01d + %d foo %1 + %1% foo %2% + foo %s bar %2$s baz + 賞金鬥士14 + {id:65538,v:2,tid:20003,mst:1,x:-1,y:-1,a:6000,b:3000,lm:{chp:1000,rep:0,bt:0,mp:[[101,0,1,0],[101,0,1,1],[101,0,1,2],[101,0,1,3],[101,0,1,4],[101,0,1,5],[100,0,0,0],[100,0,0,1],[100,0,0,2],[100,0,0,3],[100,0,0,4],[100,0,0,5]]},rm:{chp:1000,rep:0,bt:0,mp:[[100,0,1,0],[100,0,1,1],[100,0,1,2],[100,0,1,3],[100,0,1,4],[100,0,1,5],[101,0,0,0],[101,0,0,1],[101,0,0,2],[101,0,0,3],[101,0,0,4],[101,0,0,5]]}} + {al:[[180,0,7,0,0,1000],[109,0,5,0,0],[109,0,5,2,0],[109,0,5,4,0],[100,0,3,0,0],[100,0,3,1,0],[100,0,3,2,0],[100,0,3,3,0],[100,0,3,4,0],[100,0,3,5,0],[103,0,1,0,0],[103,0,1,1,0],[103,0,1,2,0],[103,0,1,3,0],[103,0,1,4,0],[103,0,1,5,0],[106,0,2,0,0],[106,0,2,1,0],[106,0,2,2,0],[106,0,2,3,0],[106,0,2,4,0],[106,0,2,5,0],[800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[850],[950],[900,0],[1000,0,0]],v:4,s:-1575044211,rl:[[180,0,7,0,0,1000],[103,0,0,0,0],[103,0,0,1,0],[103,0,0,2,0],[103,0,0,3,0],[103,0,0,4,0],[103,0,0,5,0],[111,0,3,0,0],[111,0,3,1,0],[111,0,3,2,0],[111,0,3,3,0],[111,0,3,4,0],[111,0,3,5,0],[102,0,4,0,0],[102,0,4,1,0],[102,0,4,2,0],[102,0,4,3,0],[102,0,4,4,0],[102,0,4,5,0],[107,0,5,0,0],[107,0,5,1,0],[107,0,5,2,0],[107,0,5,3,0],[107,0,5,4,0],[107,0,5,5,0],[106,0,2,0,0],[106,0,2,1,0],[106,0,2,2,0],[106,0,2,3,0],[106,0,2,4,0],[106,0,2,5,0],[900],[1000,0,0]],m:[]} + category=temp%temp%foo + res/foo/ + res/foo + [TEST STRING] + [TEST STRING] + [TEST STRING] + [TEST STRING] + TEST STRING + [Ţåþ ţö ţýþé þåššŵöŕð one two three] + [Ţåþ ţö ţýþé þåššŵöŕð one two three] + [Ţåþ ţö ţýþé þåššŵöŕð one two three] + []Ţåþ ţö ţýþé þåššŵöŕð one two three + [Ţåþ ţö ţýþé þåššŵöŕð one two three] + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/styles.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/styles.xml new file mode 100644 index 00000000..759551e0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc001/styles.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/arrays.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/arrays.xml new file mode 100644 index 00000000..96e27014 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/arrays.xml @@ -0,0 +1,7 @@ + + + + @string/test_string1 + @string/test_string2 + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/strings.xml new file mode 100644 index 00000000..843a88ca --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc002/strings.xml @@ -0,0 +1,6 @@ + + + @string/test1 + @android:string/ok + ?android:textStyle + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/arrays.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/arrays.xml new file mode 100644 index 00000000..3d81bdd5 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/arrays.xml @@ -0,0 +1,10 @@ + + + + 3.0in + + + 65.0% + 65% + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/bools.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/bools.xml new file mode 100644 index 00000000..cf6de945 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/bools.xml @@ -0,0 +1,4 @@ + + + TEST + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/integers.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/integers.xml new file mode 100644 index 00000000..2540c7b4 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/integers.xml @@ -0,0 +1,4 @@ + + + TEST + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/strings.xml new file mode 100644 index 00000000..b97cd2f7 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc003/strings.xml @@ -0,0 +1,5 @@ + + + true + 5 + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-highdr-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad-v26/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-highdr-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad-v26/strings.xml new file mode 100644 index 00000000..00ec9a40 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-highdr-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad-v26/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc6/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc6/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc6/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc870/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc870/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mcc238-mnc870/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mnc1/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mnc1/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-mnc1/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-notround/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-notround/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-notround/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-nowidecg-v26/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-nowidecg-v26/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-nowidecg-v26/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-round/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-round/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-round/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-vrheadset-v26/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-vrheadset-v26/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-vrheadset-v26/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-watch/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-watch/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-watch/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-widecg-v26/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-widecg-v26/strings.xml new file mode 100644 index 00000000..9999efc0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values-widecg-v26/strings.xml @@ -0,0 +1,4 @@ + + + Hello World + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/attrs.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/attrs.xml new file mode 100644 index 00000000..aeb197ad --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/attrs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/integers.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/integers.xml new file mode 100644 index 00000000..856a6da8 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/integers.xml @@ -0,0 +1,9 @@ + + + -1 + 0 + 1 + 0 + 700 + @integer/issue_1223_1 + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/public.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/public.xml new file mode 100644 index 00000000..4a0a3a39 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/public.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/strings.xml new file mode 100644 index 00000000..36c52b04 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/values/strings.xml @@ -0,0 +1,7 @@ + + + + Hello World + divider + divider + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/literals.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/literals.xml new file mode 100644 index 00000000..aa360a75 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/literals.xml @@ -0,0 +1,16 @@ + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/references.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/references.xml new file mode 100644 index 00000000..ebf6ed43 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/res/xml/references.xml @@ -0,0 +1,6 @@ + + diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali/HelloWorld.smali b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali/HelloWorld.smali new file mode 100644 index 00000000..5fb24d8c --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali/HelloWorld.smali @@ -0,0 +1,15 @@ +.class public LHelloWorld; + +.super Ljava/lang/Object; + +.method public static main([Ljava/lang/String;)V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const/high16 v1, 0x7f020000 + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali_classes2/HelloDualDexSupport.smali b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali_classes2/HelloDualDexSupport.smali new file mode 100644 index 00000000..e9613981 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/smali_classes2/HelloDualDexSupport.smali @@ -0,0 +1,15 @@ +.class public LHelloDualDexSupport; + +.super Ljava/lang/Object; + +.method public static main([Ljava/lang/String;)V + .registers 2 + + sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + + const/high16 v1, 0x7f020000 + + invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + + return-void +.end method \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/hidden.file b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/hidden.file new file mode 100644 index 00000000..d90f2a13 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/hidden.file @@ -0,0 +1 @@ +This file is unknown. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/lib_bug603/bug603 b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/lib_bug603/bug603 new file mode 100644 index 00000000..08d7f232 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/lib_bug603/bug603 @@ -0,0 +1 @@ +https://code.google.com/p/android-apktool/issues/detail?id=603 \ No newline at end of file diff --git "a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/non\177printable.file" "b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/non\177printable.file" new file mode 100644 index 00000000..e4a49202 --- /dev/null +++ "b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/non\177printable.file" @@ -0,0 +1 @@ +This file's name contains a non-printable character. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/stored.file b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/stored.file new file mode 100644 index 00000000..b3c9c4a0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/stored.file @@ -0,0 +1 @@ +This file is not compressed. \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/unk_folder/unknown_file b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/unk_folder/unknown_file new file mode 100644 index 00000000..70066423 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/aapt2/testapp/unknown/unk_folder/unknown_file @@ -0,0 +1 @@ +I am a hidden file. Put here by a developer to make recompilation difficult. \ No newline at end of file