cd4c11f0b2b66219bfef7a62b460adfcb298c6129591f7fcceeec35172b21977 .gitattributes 18663e9b5e75fe772d69f0e860c7013859a8f69dc6f0a95ff609872156d480c2 .github/workflows/verify.yml 6b3f54ad672d4f156186d4c977d8bdc4488cd75bd19ec4d8eef66b42b539253f .gitignore 54183f4323f377b737433a1e98229ead0fdc686f93bab057ecb612daa94002b5 .java-version f41e4fa177de1147ecd3a288783129b93e18d6d0cea0b74fb4e07e697b5bb96d CHANGELOG.md 278f60506368160d1cc4489eca6f11a84148fa6f02a51d0941bf3d4c2e98ac75 LICENSE 6142b1a5ef62f57564d35f4f7d7e5439d7b4857d1986018c85d4e4aef3344a29 README.md 9c7c3eada443a32f6989638a6bf5a6872083290999e03466b74761b96c898f6c THIRD_PARTY_NOTICES.md b09a9cad0f2b2975586a04d54f8bb04159108246d56c6fd3b75f5512ed53fc8a androidApp/build.gradle.kts 6f1c9a2a91066ace901be7e6264d1397bb21091a4e91e58c2c8a4b209bdfbb79 androidApp/proguard-rules.pro a86b0bb22d58bdae87775248a88947f0ea6c523be88b74bcf9892bd72ff44905 androidApp/src/androidTest/kotlin/dev/fileworkbench/android/BrowserIntegrationTest.kt 64403f60cdb16f2a74a358e3b04b77574302a6cf2b880a6f62ab607767317c69 androidApp/src/androidTest/kotlin/dev/fileworkbench/android/ViewerSmokeTest.kt 72fc4847b5d328f5e47e7786b94714e34d965aae9d51b3d570230f1fe9749868 androidApp/src/debug/AndroidManifest.xml 03357942c0b18c2ef90753075b3a762d3c4280840e052f6bab710d0011d68904 androidApp/src/debug/kotlin/dev/fileworkbench/android/testing/FixtureDocumentsProvider.kt d9296b8bf706e983040ccd7c4941bfe6b817101f4a60d4726bf42e5bd9d4448a androidApp/src/main/AndroidManifest.xml 3b1f6547c33587dbedab33563356dfda9a976ed5004c2272033d04139318aad9 androidApp/src/main/kotlin/dev/fileworkbench/android/FilePickerActivity.kt 7b7caad086144cd1636e9ff8ff5058834bbf78e6b3fd67f8c3cd31335b138b40 androidApp/src/main/kotlin/dev/fileworkbench/android/MainActivity.kt dfbd0a3e42fda8ae54f1eab3c8000cda66b2c1768f5db0d5bb7f00bc0a7f4bd5 androidApp/src/main/kotlin/dev/fileworkbench/android/ViewerViewModel.kt c3206004fb2ee76298f50565a8977f6365d85121bbde9caa040532bc05e1908a androidApp/src/main/kotlin/dev/fileworkbench/android/browser/BrowserThumbnails.kt 1e9a7a4fef379b5e20b151c1eeea35421db746b8487fffca2cb1c13cd47dab4a androidApp/src/main/kotlin/dev/fileworkbench/android/browser/BrowserViewModel.kt b1f822189461f50872c6af9c967cbf9793426cd16f36c7b9ba67ef2dc63e7979 androidApp/src/main/kotlin/dev/fileworkbench/android/browser/PickedFileStore.kt 1d43132352e455e5590412dd038f4287cc844fc653ae659daad7753fa2c05c18 androidApp/src/main/kotlin/dev/fileworkbench/android/browser/PickerIntents.kt f47d3724b4b7ef46907f2da57e676500761007d4a7f2ef92a2b4f08070e1a824 androidApp/src/main/kotlin/dev/fileworkbench/android/browser/ProviderIo.kt 62e27adea5a7e701e0d2c626d8332876b3f62e10113c8bdc95c3fd982697e850 androidApp/src/main/kotlin/dev/fileworkbench/android/browser/SafBrowserStore.kt 739306228330c9ac9ee18aaf25a125ce6631a1d91f26d6f0af8e61bcb3eff37d androidApp/src/main/kotlin/dev/fileworkbench/android/browser/UriReadGrants.kt aa87679e0553484a41d8430027b81ddeb453c6efc4988b4a8596e6aebde4d121 androidApp/src/main/kotlin/dev/fileworkbench/android/browser/WorkbenchFileProvider.kt cd0a4dc769e66a83c9b3048ee887199b3845630d72838a388e21425093110114 androidApp/src/main/kotlin/dev/fileworkbench/android/data/DocumentStore.kt 2643c1d387230ea38a924d1b56d0dd239aa2ac7a9c9cca48705ebd16a35f79f7 androidApp/src/main/kotlin/dev/fileworkbench/android/render/ImageLoader.kt b17cb9f569970feb471437434fd26d82a1a81684d6e00e3170e5c5c19ca49269 androidApp/src/main/kotlin/dev/fileworkbench/android/render/PdfRenderClient.kt c4d00c0e2bc2453da0c558b04db4054347460868dd2a8f1b365b88fc1db010a5 androidApp/src/main/kotlin/dev/fileworkbench/android/render/PdfRenderService.kt c91dc3d785c44604f744c016000f00af705b5dfe76e9101a2a69e4f07ebfa1dc androidApp/src/main/kotlin/dev/fileworkbench/android/ui/BrowserScreen.kt e997e40c2bcddce1cde7daad3fc6d468a4ead315bb1eb97a5aeba379c5a22f42 androidApp/src/main/kotlin/dev/fileworkbench/android/ui/DocumentReader.kt 7ab33912e65b82064a8e555af2f180b5a9bfa67254ff18c297b9ec60f6c1b074 androidApp/src/main/kotlin/dev/fileworkbench/android/ui/FileworkbenchApp.kt dfc1ded30dad959dd12d5f7239668d55f2c5c110c8e105e4481147eba3126405 androidApp/src/main/kotlin/dev/fileworkbench/android/ui/RasterViewer.kt c162b473ac7da35182d07f46aaadd25879c1ef4b69e7827ac4c4502ed41813bf androidApp/src/main/kotlin/dev/fileworkbench/android/ui/Theme.kt 50c5c2165fde2ec087a078219fa6b535a1c5c4277bd9967566ffac3c722618e6 androidApp/src/main/res/drawable/ic_launcher.xml 6fc2d07f32c59fb5add68c93e773949fbae1f7a4866540ef996ad18f8fd8d39b androidApp/src/main/res/values/strings.xml d663b6a8961af82a370da4d51bbf84c9996ad20a4769788856fadf6a4758cdee androidApp/src/main/res/values/styles.xml eda9dddce1e895de1efd716fe75e244187bf8f91a3bb7444c6ea1731e51c74a8 androidApp/src/main/res/xml/data_extraction_rules.xml d47d784b60d5d1e85d77e6d43ae32e2dbfedd7ccda89b50694d28ae28d00f236 androidApp/src/main/res/xml/file_paths.xml 4052110e7fb9f58db33bdbb91bc15fcb01196779876ece8f507030547257e8fa build.gradle.kts 5598fa57572105cf64dbe91e299ca4fa8a2573d4e2f5208ade47a720a89f4b6f core/build.gradle.kts 900388fd20269a2e669425eb4df5ee8f893eaee8dc4ae3f7549bdbd7fb35d2fa core/src/commonMain/kotlin/dev/fileworkbench/core/CoreApi.kt f9972b7cba880b8c27a99a4f09dc6313a1177cb9fe1f57191e4ad17eb505b06e core/src/commonMain/kotlin/dev/fileworkbench/core/FileClassifier.kt 2ffc10f941d5782cd8adcdb96e66cb4d5e5a31ed066d8dabb48f1b99f3fc52cb core/src/commonMain/kotlin/dev/fileworkbench/core/Model.kt 1b86c9bbb72f11c53006077ce7ce0eb1e3a22e459984d519b906baa2359087bc core/src/commonMain/kotlin/dev/fileworkbench/core/OfficePreview.kt cf9991d15609602d613cef584a9d8dc3af66f8e80b248b8dca46f2b12bc12bd1 core/src/commonMain/kotlin/dev/fileworkbench/core/PreviewSafety.kt 980e2bbeaa7d40fbe91c2564db74d526ed5f5cb31a0907dde3c7d12355449750 core/src/commonMain/kotlin/dev/fileworkbench/core/SafeXml.kt b8f19912200a5cfd2d5fb90d2fcd79797013ae4c2e0acfb39687f41c884ec35b core/src/commonMain/kotlin/dev/fileworkbench/core/TextCodec.kt b772b69dab4988310c484e1e63f3f14557821bb8670eca69793c0964b6c657fa core/src/commonMain/kotlin/dev/fileworkbench/core/TextPreview.kt 1a153afb2463a89f325e51eb0f2611c0514703a64511f1da1f89e147c5ac20c4 core/src/commonMain/kotlin/dev/fileworkbench/core/browser/BrowserModel.kt aab18a444a6738f198bb4fea937b71e176b8a4eebc1f903fc8ea4ce1ee2f9889 core/src/commonMain/kotlin/dev/fileworkbench/core/browser/PickerRequest.kt 0857a88e0c3515f2d6455503e24b40af3327806695c938cc83d144aa70e587ba core/src/commonTest/kotlin/dev/fileworkbench/core/CoreTests.kt 693f242c4e1fdefbaf0b24fdc58ab0d3d01c0b492e5ba40a4e380dc7bf333d21 core/src/commonTest/kotlin/dev/fileworkbench/core/browser/BrowserTests.kt 08ea99c1040468dc59aba4dc09e55414557b48b39d859340e0951619837f1ffb docs/ARCHITECTURE.md 518f1437e805d200bbf2e6dfe6d21d60d2ff95b8a3019f1bd798876b43225855 docs/BROWSER.md 1648cb066f75542341852a53ab49af15dfa438e84e7ee8c1f104055f292e08ef docs/BROWSER_ACCEPTANCE.md 42b6dbe611670da3ef2c8b5d37bb5b3a7692e0e106f8ffc03a445de9c66beb59 docs/BUILD.md 6ebb9022f399f555281afc01f02e6b736877ec6ba802bee414a29d737ce3090f docs/BUILD_ATTEMPT.txt e8c17a14ba2f0d975d29733191ff4067bc749d27d42ee9359097412e9ffe1c11 docs/CODEX_HANDOFF.md 795f68f5b41d8431af03e23204e52b74601743c4b9a2aaf3d88611915c609685 docs/ENGINE_INTEGRATION.md 20b72e0156be1c6f1459d07a5c9495de1374349332e43d048f3ba486efc1844e docs/FEATURES.md 1bed45ffd05931b90ea64147922a87ccaac988e2b2ee9bc259d9188cb7735b67 docs/HOTFIX-0.2.1.md e87247fda0b4a077cec2cb0d85a55744b174d55038b9aaead65f1b4d001abb39 docs/HOTFIX-0.2.2.md d0a0ef24dea5b799312919ca88372a804bb9b2f919e4b45402287abd5b0a52ca docs/RELEASE-0.2.0.md c30335829f16e0cc664195db101cb409445ef3f7ad699225f34a692365b4b159 docs/RELEASE-0.2.3.md 8ece23033e33aefa8c72e4206806520bc394767209a5365f415248eabc2effe1 docs/ROADMAP.md 969f6cc36c52d9cb361435508746dfb5e498a3b8efebe27ea5895cc2a03f3f2e docs/SECURITY.md eead54e00d25b5d1c72d8ed7acadde316418a14ba64503d3ddad5ed2fa6428f7 docs/SOURCES.md 3026c2d7aaccd8a7635d6578b57c371ec922aa86ca794fd4c9612735e826034b docs/SOURCE_CHECKS.txt 8f6e59726533a5cdf207ad30196dddd26de71843e96877602b7454367b6634ca docs/TEST_RESULTS.txt 386c8e011f58ef0c16a7fdde8cdc2a0caf7dfaa2d03ebd2c724750cc1df4cb41 docs/VALIDATION-0.2.0.md 7385fbd181fde1e610a5f72504e6ef668a44fb833597f7c2867beb6d313d0b3c docs/VALIDATION-0.2.1.md 65b6ac6feaf6bd3451601cc2d8369a8d62ef2edf9c2dc324a30207f54eed0e9e docs/VALIDATION-0.2.2.md 066c561e58f657e72b90a88695c4af4d40ad81bc88eeda5e9ff78a7b0fc1be3f docs/VALIDATION.md c52dd4d2d794d6521c2f67a67f816ab0399c393dfb3085904530f24205b7d852 examples/README.md 91124ca9a95c3e6d4691010648bbaac9e57697d9fa2f01a2b9dddee9983e1c15 examples/archive.zip e2a9fd2ce8d657ac1441582e93b0171623f450434050f12b0c272b2417cd5941 examples/config.json a8c4fa7b0ff7b3a6aa1ee6f44433d8db67a6be4dddd573c43d6591ab91d165e6 examples/safe-source.html 09948d2c0190ba86cfd80c8eba788a65626862e85e150badd253ea570393e6f3 examples/table.csv 42301cf374e3616c1b4f1b4e7c0eedda776d84cadf4d6dabb46760a27762c4cd examples/welcome.md 8f50c61e4b02f5d748566e3e296e66e2cefc2853f6d61e1384634d19051cd4ec gradle/gradle-daemon-jvm.properties 4ac8955c8717d4339baadd76c5aac798659da55552f50e7b032c956b8f01bf87 gradle/libs.versions.toml dbfd722314f09fe55e59ece4742ccb63ed4a75195943b2c5b48ccd3679fdde36 gradle/wrapper/gradle-wrapper.properties 47c3c2a3c564c434b4d009eb72add3b0bd5709568d1eafb61381eaa9f2d65f12 gradle.properties fb20c2396e79d819c544bc580e77151e935e861cefa4b206a047c85f2d6815f2 gradlew 512900312c0d02d616c6cba161a9670679e43a55ef7facf2b2620e1d4f7209ad gradlew.bat 4bbfb6729f208ad41c052fd5f76140228ae3a136c367217742dd3e217604ff93 ios/README.md 7c4927468a9a3f916b193f60d6ba08616fb0971a66e099823f3e9b041eae1710 platform-jvm/build.gradle.kts 8e01457f1bc1f0ab91590e709ce6e23c0e0dde0cf485ab072e90b8350015722b platform-jvm/src/main/kotlin/dev/fileworkbench/platform/JvmZipArchive.kt edce10469e0f0416edf44d9639587dadcd2462cd3ce08381a753259f8e9c5d98 platform-jvm/src/main/kotlin/dev/fileworkbench/platform/LocalPreviewLoader.kt b060fa9f7d2de772574ec1e2e22153b1aedd9bd7c8261d2119eeba91beb38b9d platform-jvm/src/test/kotlin/dev/fileworkbench/platform/ZipTests.kt b4b41265f49705e6d4c97295ef83820cd0c36195ee1cbd2a0e5b86e2e7d04ddf scripts/KotlinSyntaxCheck.kt ffa3a0045027fe2422e637b055bb8bb3119e92d80aa308b1e8c4b17322d61731 scripts/bootstrap-wrapper.ps1 03e5a125b31ba5c0f7253c9bc59ccb53eef6877f09b35a23df6b7bff9f770411 scripts/bootstrap-wrapper.sh 30c807becc4f2fe7a19eceb65bc835feb9c05865ce3bbbd2cf506ce525f7dd34 scripts/check-build-config.py c1a59d08b15e2b89ee0ca02812c704f547e5cc93397bc1cdaf5bbab614f0b2d6 scripts/check-kotlin-syntax.sh 68d90639741e2f0b23dae1cfa59da55369b1812203b71702310576d2665390e1 scripts/check-project.py a4fb1ea570c6567ae50a1b78b8c3248de54cbfda876ee3b8d8e45ac016f6d426 scripts/prepare-offline-tests.py 64fb183feebb01ae7e1c8294cfc67bdbca35623e44ce78f2d424463f38bacac0 scripts/regressions/FolderListingHarness.kt.template 9c176894bef238b27cb5ee45ae331d05868d8a8940b816496c756ab747ac30b2 scripts/test-build-config.py 8c0123f0db840d2685db3ff8ea77300f46dbf20abd870bc3b47464887c6ddced scripts/test-core.sh 30e4dbd55faea1a7d5cac8c8f61369b7217a5aaf31a6d5f91338c8407a43fc65 scripts/test-folder-listing.py 7f85cffa0cefab64598c4bedfd80ae68b4506dab78124714b36705d42b752977 scripts/verify-android.sh bfa20b86dbe9003cc99702f4d868b66780795979c4012adff6d56177ac11ff8e settings.gradle.kts 1093581235d78eceb3ae22c492d05b314c496a8009008784f9cc5b4e00e104da validation/0.2.1/ANDROID_BUILD_ATTEMPT.txt 8f6e59726533a5cdf207ad30196dddd26de71843e96877602b7454367b6634ca validation/0.2.1/CORE_TESTS.txt 2266ed387d8ab59ae60b7028f9594f0eeb005ca438e1bf986fc7237d906cfe4a validation/0.2.1/KOTLIN_SYNTAX.txt f2fb4c75286ba4b7d587781a8566408c507d97ff4604d63ef8d5fe53e7f6e17e validation/0.2.1/PATCH_CHECK.txt ce911bf06515d42f5584070957864b1f51aad6e3d5700d0b81f339dfd18867f1 validation/0.2.1/REGRESSION_GUARD.txt 47648edefc431775af394291f151958b07488fd32866c5071cf14f4cdc548835 validation/0.2.1/SOURCE_CHECKS.txt c5a5882e5b2fddc843ec31c8f1902fac7682eb23617759a20d890534377594e7 validation/0.2.2/android-build-attempt.txt 8f6e59726533a5cdf207ad30196dddd26de71843e96877602b7454367b6634ca validation/0.2.2/core-tests.txt 7f33a6321341b4440a35cdc63b1aa36468a141bcc849f39f81f4316b04807583 validation/0.2.2/folder-listing-fixed.txt a6d323795a72f367b919998c06c2836c2fe3a033c8077fe7233b42dbf5754846 validation/0.2.2/folder-listing-original.txt 2266ed387d8ab59ae60b7028f9594f0eeb005ca438e1bf986fc7237d906cfe4a validation/0.2.2/kotlin-syntax.txt 951a35e6d41c2f739a16d24051327db1e363b38ca4fc5256cd42dda3c43214be validation/0.2.2/patch-checks.txt 47648edefc431775af394291f151958b07488fd32866c5071cf14f4cdc548835 validation/0.2.2/source-checks.txt d1749375f3cb44e76725856023369722da9d1eb1c73624d33714842440a8b014 validation/0.2.3/android-build-attempt.txt a5cc81444212a458318ad43da9dc0794331346d06995ca6ef66ab96c8419fff3 validation/0.2.3/archive-checks.txt e2a4b42cbdc2f450daf247c97e05dd856481d51c796f0b6cf16f5cfbaafbdff1 validation/0.2.3/build-guard-tests.txt 8f6e59726533a5cdf207ad30196dddd26de71843e96877602b7454367b6634ca validation/0.2.3/core-tests.txt 8370aeffcdf9d52bf5d7bcfc9a44b24edc1fa1920d5098fd9db47f7d73aa41f0 validation/0.2.3/environment.txt f213bd6c4f495d96422edda64a9e26fdff823eace970ccaa9919376e34e918d5 validation/0.2.3/folder-listing.txt 2266ed387d8ab59ae60b7028f9594f0eeb005ca438e1bf986fc7237d906cfe4a validation/0.2.3/kotlin-syntax.txt b5a1e21c27820899e9c32607c639d8445b5c0e3e06c6b48abf6859ce6032d6db validation/0.2.3/shell-checks.txt d9c3aaa93b3b571f5249d80616e9efdb25cb15fb5d7774a6506927d4ae4a6da5 validation/0.2.3/source-checks.txt