Full Code of ianopolous/Peergos for AI

master 51de6b1578fd cached
1087 files
132.4 MB
2.3M tokens
10466 symbols
1 requests
Download .txt
Showing preview only (9,326K chars total). Download the full file or copy to clipboard to get everything.
Repository: ianopolous/Peergos
Branch: master
Commit: 51de6b1578fd
Files: 1087
Total size: 132.4 MB

Directory structure:
gitextract_ojt7wwx5/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── ant.yml
├── .gitignore
├── .travis.yml
├── Licence.txt
├── PrintTestErrors.java
├── README.md
├── ReproducibleJar.java
├── RoadMap.md
├── ant.lib/
│   └── ant-contrib.jar
├── build.xml
├── feedback/
│   └── notes.md
├── gwt/
│   ├── BUILD-GWT.txt
│   └── gwt-2.8.3/
│       ├── COPYING
│       ├── COPYING.html
│       ├── about.html
│       ├── about.txt
│       ├── gwt-api-checker.jar
│       ├── gwt-codeserver.jar
│       ├── gwt-dev.jar
│       ├── gwt-module.dtd
│       ├── gwt-servlet-deps.jar
│       ├── gwt-servlet.jar
│       ├── gwt-user.jar
│       ├── i18nCreator
│       ├── i18nCreator.cmd
│       ├── release_notes.html
│       ├── webAppCreator
│       └── webAppCreator.cmd
├── lib/
│   ├── HikariCP-7.0.2.jar
│   ├── asm-9.2.jar
│   ├── asm-analysis-9.2.jar
│   ├── asm-commons-9.2.jar
│   ├── asm-tree-9.2.jar
│   ├── asm-util-9.2.jar
│   ├── jackson-annotations-2.15.0.jar
│   ├── jackson-core-2.15.0.jar
│   ├── jackson-databind-2.15.0.jar
│   ├── jackson-dataformat-cbor-2.15.0.jar
│   ├── jain-sdp.jar
│   ├── jakarta.servlet-api-5.0.0.jar
│   ├── java-otp-0.4.0.jar
│   ├── jetty-http-11.0.23.jar
│   ├── jetty-io-11.0.23.jar
│   ├── jetty-security-11.0.23.jar
│   ├── jetty-server-11.0.23.jar
│   ├── jetty-servlet-11.0.23.jar
│   ├── jetty-util-11.0.23.jar
│   ├── jffi-1.3.13-native.jar
│   ├── jffi-1.3.13.jar
│   ├── jline-3.27.0.jar
│   ├── jnr-a64asm-1.0.0.jar
│   ├── jnr-constants-0.10.4.jar
│   ├── jnr-ffi-2.2.16.jar
│   ├── jnr-fuse-0.5.8.jar
│   ├── jnr-posix-3.1.19.jar
│   ├── jnr-x86asm-1.0.2.jar
│   ├── kerby-asn1-2.0.3.jar
│   ├── nabu-v0.9-jar-with-dependencies.jar
│   ├── postgresql-42.7.9.jar
│   ├── simpleclient-0.15.0.jar
│   ├── simpleclient_common-0.15.0.jar
│   ├── simpleclient_httpserver-0.15.0.jar
│   ├── slf4j-api-1.7.30.jar
│   ├── slf4j-nop-1.7.30.jar
│   ├── sqlite-jdbc-3.46.1.0.jar
│   ├── webauthn4j-core-0.29.6.RELEASE.jar
│   ├── webp-imageio-core-0.1.3.jar
│   └── weupnp-0.1.2-SNAPSHOT.jar
├── lib-build/
│   ├── gwt-user.jar
│   ├── hamcrest-core-1.3.jar
│   └── junit-4.11.jar
├── reproducible-test.sh
├── scripts/
│   └── ensure-compile.sh
├── src/
│   └── peergos/
│       ├── Peergos.gwt.xml
│       ├── client/
│       │   ├── ConsolePrintStream.java
│       │   ├── JsUtil.java
│       │   ├── PathUtils.java
│       │   └── Start.java
│       ├── gwt/
│       │   └── emu/
│       │       ├── avian/
│       │       │   └── Utf8.java
│       │       ├── com/
│       │       │   └── badlogic/
│       │       │       └── gdx/
│       │       │           └── utils/
│       │       │               ├── Base64Coder.java
│       │       │               └── Utf8Decoder.java
│       │       ├── java/
│       │       │   ├── awt/
│       │       │   │   ├── AlphaComposite.java
│       │       │   │   ├── Composite.java
│       │       │   │   ├── Graphics2D.java
│       │       │   │   ├── Image.java
│       │       │   │   ├── ImageObserver.java
│       │       │   │   ├── RenderingHints.java
│       │       │   │   └── image/
│       │       │   │       ├── BufferedImage.java
│       │       │   │       └── RenderedImage.java
│       │       │   ├── io/
│       │       │   │   ├── BufferedReader.java
│       │       │   │   ├── ByteArrayInputStream.java
│       │       │   │   ├── ByteArrayOutputStream.java
│       │       │   │   ├── Closeable.java
│       │       │   │   ├── DataInput.java
│       │       │   │   ├── DataInputStream.java
│       │       │   │   ├── DataOutput.java
│       │       │   │   ├── DataOutputStream.java
│       │       │   │   ├── EOFException.java
│       │       │   │   ├── File.java
│       │       │   │   ├── FileInputStream.java
│       │       │   │   ├── FileNotFoundException.java
│       │       │   │   ├── FilenameFilter.java
│       │       │   │   ├── Flushable.java
│       │       │   │   ├── InputStreamReader.java
│       │       │   │   ├── OutputStreamWriter.java
│       │       │   │   ├── PrintWriter.java
│       │       │   │   ├── PushbackInputStream.java
│       │       │   │   ├── RandomAccessFile.java
│       │       │   │   ├── Reader.java
│       │       │   │   ├── UTFDataFormatException.java
│       │       │   │   ├── UnsupportedEncodingException.java
│       │       │   │   └── Writer.java
│       │       │   ├── lang/
│       │       │   │   ├── AutoCloseable.java
│       │       │   │   ├── ClassLoader.java
│       │       │   │   ├── ClassNotFoundException.java
│       │       │   │   ├── Exception.java
│       │       │   │   ├── InternalError.java
│       │       │   │   ├── InterruptedException.java
│       │       │   │   ├── OutOfMemoryError.java
│       │       │   │   ├── Readable.java
│       │       │   │   ├── Runnable.java
│       │       │   │   ├── RuntimeException.java
│       │       │   │   ├── SecurityException.java
│       │       │   │   └── Thread.java
│       │       │   ├── net/
│       │       │   │   ├── ConnectException.java
│       │       │   │   ├── HttpURLConnection.java
│       │       │   │   ├── Inet4Address.java
│       │       │   │   ├── Inet6Address.java
│       │       │   │   ├── InetAddress.java
│       │       │   │   ├── MalformedURLException.java
│       │       │   │   ├── ProtocolException.java
│       │       │   │   ├── Proxy.java
│       │       │   │   ├── SocketAddress.java
│       │       │   │   ├── SocketException.java
│       │       │   │   ├── SocketTimeoutException.java
│       │       │   │   ├── URL.java
│       │       │   │   ├── URLConnection.java
│       │       │   │   ├── URLEncoder.java
│       │       │   │   └── UnknownHostException.java
│       │       │   ├── nio/
│       │       │   │   ├── Buffer.java
│       │       │   │   ├── BufferOverflowException.java
│       │       │   │   ├── CharBuffer.java
│       │       │   │   ├── InvalidMarkException.java
│       │       │   │   └── file/
│       │       │   │       ├── Files.java
│       │       │   │       ├── OpenOption.java
│       │       │   │       ├── Path.java
│       │       │   │       ├── Paths.java
│       │       │   │       ├── StandardOpenOption.java
│       │       │   │       └── attribute/
│       │       │   │           └── FileAttribute.java
│       │       │   ├── security/
│       │       │   │   └── SecureRandom.java
│       │       │   ├── time/
│       │       │   │   ├── Clock.java
│       │       │   │   ├── DateTimeException.java
│       │       │   │   ├── Instant.java
│       │       │   │   ├── LocalDate.java
│       │       │   │   ├── LocalDateTime.java
│       │       │   │   ├── LocalTime.java
│       │       │   │   ├── ZoneId.java
│       │       │   │   ├── ZoneOffset.java
│       │       │   │   ├── ZoneRules.java
│       │       │   │   └── format/
│       │       │   │       └── DateTimeParseException.java
│       │       │   └── util/
│       │       │       ├── Base64.java
│       │       │       ├── Optional.java
│       │       │       ├── UUID.java
│       │       │       ├── concurrent/
│       │       │       │   ├── CompletableFuture.java
│       │       │       │   ├── CompletionStage.java
│       │       │       │   ├── ExecutionException.java
│       │       │       │   ├── ExecutorService.java
│       │       │       │   ├── ForkJoinPool.java
│       │       │       │   ├── ScheduledFuture.java
│       │       │       │   ├── ScheduledThreadPoolExecutor.java
│       │       │       │   ├── TimeUnit.java
│       │       │       │   └── TimeoutException.java
│       │       │       ├── function/
│       │       │       │   ├── Consumer.java
│       │       │       │   └── Function.java
│       │       │       └── zip/
│       │       │           ├── Adler32.java
│       │       │           ├── CRC32.java
│       │       │           ├── Checksum.java
│       │       │           ├── Deflater.java
│       │       │           ├── DeflaterConstants.java
│       │       │           ├── DeflaterEngine.java
│       │       │           ├── DeflaterHuffman.java
│       │       │           ├── DeflaterOutputStream.java
│       │       │           ├── DeflaterPending.java
│       │       │           ├── GZIPInputStream.java
│       │       │           ├── InflaterInputStream.java
│       │       │           └── PendingBuffer.java
│       │       ├── javafx/
│       │       │   ├── application/
│       │       │   │   └── Platform.java
│       │       │   ├── embed/
│       │       │   │   └── swing/
│       │       │   │       ├── JFXPanel.java
│       │       │   │       └── SwingFXUtils.java
│       │       │   ├── scene/
│       │       │   │   ├── SnapshotParameters.java
│       │       │   │   ├── image/
│       │       │   │   │   ├── Image.java
│       │       │   │   │   └── WritableImage.java
│       │       │   │   └── media/
│       │       │   │       ├── Media.java
│       │       │   │       ├── MediaPlayer.java
│       │       │   │       └── MediaView.java
│       │       │   └── util/
│       │       │       └── Duration.java
│       │       └── javax/
│       │           ├── crypto/
│       │           │   ├── Mac.java
│       │           │   └── spec/
│       │           │       └── SecretKeySpec.java
│       │           └── imageio/
│       │               └── ImageIO.java
│       ├── server/
│       │   ├── AggregatedMetrics.java
│       │   ├── Builder.java
│       │   ├── Command.java
│       │   ├── DesktopApp.java
│       │   ├── DirectOnlyStorage.java
│       │   ├── HostDirChooser.java
│       │   ├── HostDirEnumerator.java
│       │   ├── JavaCrypto.java
│       │   ├── JdbcAddressLRU.java
│       │   ├── JdbcPkiCache.java
│       │   ├── JdbcRecordLRU.java
│       │   ├── LinkIdentity.java
│       │   ├── Login.java
│       │   ├── LoginUpdate.java
│       │   ├── LookupOwner.java
│       │   ├── Main.java
│       │   ├── Mirror.java
│       │   ├── NonWriteThroughNetwork.java
│       │   ├── Playground.java
│       │   ├── PublicGateway.java
│       │   ├── Publisher.java
│       │   ├── Renew.java
│       │   ├── RenewUsernameClaim.java
│       │   ├── ServerAdmin.java
│       │   ├── ServerIdentity.java
│       │   ├── ServerMessages.java
│       │   ├── ServerProcesses.java
│       │   ├── SyncProperties.java
│       │   ├── UserCleanup.java
│       │   ├── UserService.java
│       │   ├── UserStats.java
│       │   ├── ValidateUser.java
│       │   ├── apps/
│       │   │   └── email/
│       │   │       └── EmailBridgeClient.java
│       │   ├── cli/
│       │   │   ├── CLI.java
│       │   │   ├── CLIContext.java
│       │   │   ├── Command.java
│       │   │   ├── ListFilesCompleter.java
│       │   │   ├── ParsedCommand.java
│       │   │   ├── ProgressBar.java
│       │   │   └── SupplierCompleter.java
│       │   ├── corenode/
│       │   │   ├── CorenodeEvent.java
│       │   │   ├── CorenodeEventPropagator.java
│       │   │   ├── IpfsCoreNode.java
│       │   │   ├── JdbcIpnsAndSocial.java
│       │   │   ├── MirrorCoreNode.java
│       │   │   ├── NonWriteThroughCoreNode.java
│       │   │   ├── SignUpFilter.java
│       │   │   ├── UserRepository.java
│       │   │   └── UsernameValidator.java
│       │   ├── crypto/
│       │   │   ├── JniTweetNacl.java
│       │   │   ├── TweetNaCl.java
│       │   │   ├── asymmetric/
│       │   │   │   ├── curve25519/
│       │   │   │   │   ├── Curve25519Java.java
│       │   │   │   │   └── Ed25519Java.java
│       │   │   │   └── mlkem/
│       │   │   │       ├── CryptoUtils.java
│       │   │   │       ├── JavaMlkem.java
│       │   │   │       ├── MlkemSecureRandom.java
│       │   │   │       ├── fips202/
│       │   │   │       │   ├── Constants.java
│       │   │   │       │   ├── FIPS202.java
│       │   │   │       │   ├── MimicloneFIPS202.java
│       │   │   │       │   └── keccak/
│       │   │   │       │       ├── MimicloneKeccak.java
│       │   │   │       │       ├── core/
│       │   │   │       │       │   ├── AbstractKeccakMessageDigest.java
│       │   │   │       │       │   ├── DuplexRandom.java
│       │   │   │       │       │   ├── Keccak1600.java
│       │   │   │       │       │   ├── KeccakSponge.java
│       │   │   │       │       │   ├── KeccakStateUtils.java
│       │   │   │       │       │   └── KeccakStateValidationFailedException.java
│       │   │   │       │       ├── io/
│       │   │   │       │       │   ├── BitInputStream.java
│       │   │   │       │       │   └── BitOutputStream.java
│       │   │   │       │       ├── spi/
│       │   │   │       │       │   ├── AbstractCipher.java
│       │   │   │       │       │   ├── AbstractSpongeStreamCipher.java
│       │   │   │       │       │   ├── KeccakRnd128.java
│       │   │   │       │       │   ├── KeccakRnd256.java
│       │   │   │       │       │   ├── RawKey.java
│       │   │   │       │       │   ├── Shake128Key.java
│       │   │   │       │       │   ├── Shake128StreamCipher.java
│       │   │   │       │       │   ├── Shake256Key.java
│       │   │   │       │       │   └── Shake256StreamCipher.java
│       │   │   │       │       └── sponge/
│       │   │   │       │           └── MimicloneKeccakSponge.java
│       │   │   │       ├── fips203/
│       │   │   │       │   ├── FIPS203.java
│       │   │   │       │   ├── FIPS203Exception.java
│       │   │   │       │   ├── MimicloneFIPS203.java
│       │   │   │       │   ├── ParameterSet.java
│       │   │   │       │   ├── codec/
│       │   │   │       │   │   ├── Codec.java
│       │   │   │       │   │   └── MLKEMCodec.java
│       │   │   │       │   ├── decaps/
│       │   │   │       │   │   ├── DecapsulationException.java
│       │   │   │       │   │   ├── Decapsulator.java
│       │   │   │       │   │   ├── mlkem/
│       │   │   │       │   │   │   └── MLKEMDecapsulator.java
│       │   │   │       │   │   └── provider/
│       │   │   │       │   │       └── MLKEMDecapsulatorProvider.java
│       │   │   │       │   ├── decrypt/
│       │   │   │       │   │   ├── DecryptionException.java
│       │   │   │       │   │   ├── Decryptor.java
│       │   │   │       │   │   └── kpke/
│       │   │   │       │   │       └── KPKEDecryptor.java
│       │   │   │       │   ├── encaps/
│       │   │   │       │   │   ├── Encapsulation.java
│       │   │   │       │   │   ├── EncapsulationException.java
│       │   │   │       │   │   ├── Encapsulator.java
│       │   │   │       │   │   ├── mlkem/
│       │   │   │       │   │   │   ├── MLKEMEncapsulation.java
│       │   │   │       │   │   │   └── MLKEMEncapsulator.java
│       │   │   │       │   │   └── provider/
│       │   │   │       │   │       └── MLKEMEncapsulationProvider.java
│       │   │   │       │   ├── encrypt/
│       │   │   │       │   │   ├── EncryptionException.java
│       │   │   │       │   │   ├── Encryptor.java
│       │   │   │       │   │   └── kpke/
│       │   │   │       │   │       └── KPKEEncryptor.java
│       │   │   │       │   ├── hash/
│       │   │   │       │   │   ├── Hash.java
│       │   │   │       │   │   ├── MLKEMHash.java
│       │   │   │       │   │   └── XOFParameterSet.java
│       │   │   │       │   ├── key/
│       │   │   │       │   │   ├── DecapsulationKey.java
│       │   │   │       │   │   ├── EncapsulationKey.java
│       │   │   │       │   │   ├── Key.java
│       │   │   │       │   │   ├── KeyPair.java
│       │   │   │       │   │   ├── KeyPairException.java
│       │   │   │       │   │   ├── SharedSecretKey.java
│       │   │   │       │   │   ├── check/
│       │   │   │       │   │   │   └── KeyPairCheckException.java
│       │   │   │       │   │   ├── gen/
│       │   │   │       │   │   │   ├── KeyPairGeneration.java
│       │   │   │       │   │   │   ├── KeyPairGenerationException.java
│       │   │   │       │   │   │   ├── mlkem/
│       │   │   │       │   │   │   │   └── MLKEMKeyPairGenerator.java
│       │   │   │       │   │   │   └── provider/
│       │   │   │       │   │   │       └── MLKEMKeyGenerationProvider.java
│       │   │   │       │   │   └── mlkem/
│       │   │   │       │   │       ├── MLKEMDecapsulationKey.java
│       │   │   │       │   │       ├── MLKEMEncapsulationKey.java
│       │   │   │       │   │       ├── MLKEMKeyPair.java
│       │   │   │       │   │       └── MLKEMSharedSecretKey.java
│       │   │   │       │   ├── message/
│       │   │   │       │   │   ├── CipherText.java
│       │   │   │       │   │   └── MLKEMCipherText.java
│       │   │   │       │   ├── provider/
│       │   │   │       │   │   ├── MLKEMProvider.java
│       │   │   │       │   │   └── MimicloneSecurityProvider.java
│       │   │   │       │   ├── reduce/
│       │   │   │       │   │   ├── Reducer.java
│       │   │   │       │   │   ├── ReductionException.java
│       │   │   │       │   │   └── barrett/
│       │   │   │       │   │       └── BarrettReducer.java
│       │   │   │       │   ├── sample/
│       │   │   │       │   │   ├── MLKEMSampler.java
│       │   │   │       │   │   └── Sampler.java
│       │   │   │       │   └── transform/
│       │   │   │       │       ├── MLKEMTransformer.java
│       │   │   │       │       ├── Transformer.java
│       │   │   │       │       └── TransformerException.java
│       │   │   │       └── package-info.java
│       │   │   ├── hash/
│       │   │   │   ├── Blake3.java
│       │   │   │   ├── ScryptJava.java
│       │   │   │   └── lambdaworks/
│       │   │   │       ├── codec/
│       │   │   │       │   └── Base64.java
│       │   │   │       ├── crypto/
│       │   │   │       │   ├── PBKDF.java
│       │   │   │       │   ├── SCrypt.java
│       │   │   │       │   └── SCryptUtil.java
│       │   │   │       └── jni/
│       │   │   │           ├── LibraryLoader.java
│       │   │   │           ├── LibraryLoaders.java
│       │   │   │           └── NilLibraryLoader.java
│       │   │   ├── random/
│       │   │   │   └── SafeRandomJava.java
│       │   │   └── symmetric/
│       │   │       └── Salsa20Poly1305Java.java
│       │   ├── fuse/
│       │   │   ├── CachingPeergosFS.java
│       │   │   ├── FuseProcess.java
│       │   │   └── PeergosFS.java
│       │   ├── login/
│       │   │   ├── AccountWithStorage.java
│       │   │   ├── JdbcAccount.java
│       │   │   ├── LocalOnlyAccount.java
│       │   │   ├── NonWriteThroughAccount.java
│       │   │   ├── VerifyingAccount.java
│       │   │   └── Webauthn.java
│       │   ├── messages/
│       │   │   └── ServerMessageStore.java
│       │   ├── mutable/
│       │   │   ├── BlockingMutablePointers.java
│       │   │   ├── JdbcPointerCache.java
│       │   │   ├── MutableEvent.java
│       │   │   ├── MutableEventPropagator.java
│       │   │   ├── NonWriteThroughMutablePointers.java
│       │   │   ├── PublicKeyBlackList.java
│       │   │   └── UserBasedBlacklist.java
│       │   ├── net/
│       │   │   ├── AccountHandler.java
│       │   │   ├── AndroidFileReflector.java
│       │   │   ├── BasicAuthHandler.java
│       │   │   ├── BatCaveHandler.java
│       │   │   ├── ConfigHandler.java
│       │   │   ├── CoreNodeHandler.java
│       │   │   ├── CspHost.java
│       │   │   ├── FileHandler.java
│       │   │   ├── GatewayHandler.java
│       │   │   ├── HSTSHandler.java
│       │   │   ├── InverseProxyHandler.java
│       │   │   ├── JarHandler.java
│       │   │   ├── Multipart.java
│       │   │   ├── MultipartReceiver.java
│       │   │   ├── MutationHandler.java
│       │   │   ├── ProxyChooser.java
│       │   │   ├── PublicFileHandler.java
│       │   │   ├── RedirectHandler.java
│       │   │   ├── ResponseHeaderHandler.java
│       │   │   ├── ServerMessageHandler.java
│       │   │   ├── SocialHandler.java
│       │   │   ├── SpaceHandler.java
│       │   │   ├── StaticHandler.java
│       │   │   ├── StopHandler.java
│       │   │   ├── StorageHandler.java
│       │   │   ├── SubdomainHandler.java
│       │   │   └── SyncConfigHandler.java
│       │   ├── simulation/
│       │   │   ├── AccessControl.java
│       │   │   ├── FileAsyncReader.java
│       │   │   ├── FileSystem.java
│       │   │   ├── InputStreamAsyncReader.java
│       │   │   ├── PeergosFileSystemImpl.java
│       │   │   └── Stat.java
│       │   ├── social/
│       │   │   └── NonWriteThroughSocialNetwork.java
│       │   ├── space/
│       │   │   ├── JdbcQuotas.java
│       │   │   ├── JdbcSpaceRequests.java
│       │   │   ├── JdbcUsageStore.java
│       │   │   ├── QuotaCLI.java
│       │   │   ├── SpaceCheckingKeyFilter.java
│       │   │   ├── UsageCLI.java
│       │   │   ├── UsageStore.java
│       │   │   ├── UserUsage.java
│       │   │   ├── UserUsageStore.java
│       │   │   ├── WriterUsage.java
│       │   │   └── WriterUsageStore.java
│       │   ├── sql/
│       │   │   ├── PostgresCommands.java
│       │   │   ├── SqlSupplier.java
│       │   │   └── SqliteCommands.java
│       │   ├── storage/
│       │   │   ├── AuthedCachingStorage.java
│       │   │   ├── AuthedStorage.java
│       │   │   ├── BlockBuffer.java
│       │   │   ├── BlockMetadata.java
│       │   │   ├── BlockMetadataStore.java
│       │   │   ├── BlockVersion.java
│       │   │   ├── CachingBlockMetadataStore.java
│       │   │   ├── CidVersionInfiniFilter.java
│       │   │   ├── DelayingStorage.java
│       │   │   ├── DelegatingDeletableStorage.java
│       │   │   ├── DeletableContentAddressedStorage.java
│       │   │   ├── DirectS3Proxy.java
│       │   │   ├── FileBlockBuffer.java
│       │   │   ├── FileBlockCache.java
│       │   │   ├── FileContentAddressedStorage.java
│       │   │   ├── GarbageCollector.java
│       │   │   ├── GetBlockingStorage.java
│       │   │   ├── IpfsWrapper.java
│       │   │   ├── JdbcBlockMetadataStore.java
│       │   │   ├── JdbcLinkRetrievalcounter.java
│       │   │   ├── JdbcPartitionStatus.java
│       │   │   ├── JdbcServerIdentityStore.java
│       │   │   ├── JdbcTransactionStore.java
│       │   │   ├── LinkRetrievalCounter.java
│       │   │   ├── LocalFirstStorage.java
│       │   │   ├── LocalIpnsStorage.java
│       │   │   ├── LocalS3Handler.java
│       │   │   ├── LocalS3Server.java
│       │   │   ├── LocalVersionInstanceAdmin.java
│       │   │   ├── MetadataCachingStorage.java
│       │   │   ├── MultiIdStorage.java
│       │   │   ├── NewBlocksProcessor.java
│       │   │   ├── NonWriteThroughStorage.java
│       │   │   ├── P2pBlockGet.java
│       │   │   ├── PartitionStatus.java
│       │   │   ├── RAMStorage.java
│       │   │   ├── RamBlockMetadataStore.java
│       │   │   ├── RamLinkRetrievalCounter.java
│       │   │   ├── RequestCountingStorage.java
│       │   │   ├── ResetableFileInputStream.java
│       │   │   ├── S3AdminRequests.java
│       │   │   ├── S3BlockStorage.java
│       │   │   ├── S3BucketCopy.java
│       │   │   ├── S3BucketStats.java
│       │   │   ├── S3BucketSync.java
│       │   │   ├── S3CanonicaliseVersionedBucket.java
│       │   │   ├── S3Config.java
│       │   │   ├── S3DeleteOld.java
│       │   │   ├── S3Exploration.java
│       │   │   ├── S3HasBlock.java
│       │   │   ├── SecretLinkStorage.java
│       │   │   ├── ServerIdentityStore.java
│       │   │   ├── SqliteBlockList.java
│       │   │   ├── SqliteBlockReachability.java
│       │   │   ├── TransactionStore.java
│       │   │   ├── TransactionalIpfs.java
│       │   │   ├── UserBlockVersion.java
│       │   │   ├── UserQuotas.java
│       │   │   ├── VersionFilter.java
│       │   │   ├── admin/
│       │   │   │   ├── Admin.java
│       │   │   │   ├── AdminHandler.java
│       │   │   │   ├── HttpQuotaAdmin.java
│       │   │   │   └── QuotaAdmin.java
│       │   │   └── auth/
│       │   │       ├── BlockRequestAuthoriser.java
│       │   │       ├── JdbcBatCave.java
│       │   │       ├── RamBatCave.java
│       │   │       └── Want.java
│       │   ├── sync/
│       │   │   ├── CopyOp.java
│       │   │   ├── DirectorySync.java
│       │   │   ├── FileState.java
│       │   │   ├── JdbcTreeState.java
│       │   │   ├── LocalFileSystem.java
│       │   │   ├── PeergosSyncFS.java
│       │   │   ├── RamTreeState.java
│       │   │   ├── SyncConfig.java
│       │   │   ├── SyncFilesystem.java
│       │   │   ├── SyncProgress.java
│       │   │   ├── SyncRunner.java
│       │   │   └── SyncState.java
│       │   ├── tests/
│       │   │   ├── ArgsTests.java
│       │   │   ├── BatTests.java
│       │   │   ├── Blake3Tests.java
│       │   │   ├── BlockSizeTests.java
│       │   │   ├── CLITests.java
│       │   │   ├── CborObjects.java
│       │   │   ├── ChampTests.java
│       │   │   ├── CidTests.java
│       │   │   ├── CorenodeTests.java
│       │   │   ├── DifficultyGeneratorTests.java
│       │   │   ├── Exceptions.java
│       │   │   ├── FileBlockBufferTests.java
│       │   │   ├── FileChunkBinarySearchTests.java
│       │   │   ├── FileHandlerTests.java
│       │   │   ├── FragmentedPaddedCipherTextTests.java
│       │   │   ├── FragmenterTest.java
│       │   │   ├── FuseTests.java
│       │   │   ├── GCTests.java
│       │   │   ├── IdentityProofTests.java
│       │   │   ├── InodeFilesystemTests.java
│       │   │   ├── IpfsMetricsTest.java
│       │   │   ├── IpfsUserTests.java
│       │   │   ├── JdbcAddressBookTest.java
│       │   │   ├── JdbcLinkRetrievalCounterTests.java
│       │   │   ├── JdbcRecordStoreTests.java
│       │   │   ├── JdbcUsageStoreTests.java
│       │   │   ├── LegacyWebauthn.java
│       │   │   ├── MLKEMTests.java
│       │   │   ├── MessagingTests.java
│       │   │   ├── MimeTypeTests.java
│       │   │   ├── MirrorTests.java
│       │   │   ├── MultiNodeNetworkTests.java
│       │   │   ├── MultiUserTests.java
│       │   │   ├── MultibaseTests.java
│       │   │   ├── MultipartTests.java
│       │   │   ├── P2pStreamNetworkTests.java
│       │   │   ├── PasswordProtection.java
│       │   │   ├── PeergosNetworkUtils.java
│       │   │   ├── ProofOfWorkTests.java
│       │   │   ├── QrCodeTests.java
│       │   │   ├── QuotaStoreTests.java
│       │   │   ├── QuotaTests.java
│       │   │   ├── RamPki.java
│       │   │   ├── RamUserTests.java
│       │   │   ├── RateLimitTests.java
│       │   │   ├── RateMonitorTests.java
│       │   │   ├── RequestCountTests.java
│       │   │   ├── RequestCountingBlockMetadataStore.java
│       │   │   ├── RestartTests.java
│       │   │   ├── RetryStorageTests.java
│       │   │   ├── S3ParallelListingTest.java
│       │   │   ├── S3V4SignatureTests.java
│       │   │   ├── ServerIdentityTests.java
│       │   │   ├── SqliteBlockMetadataTest.java
│       │   │   ├── SqliteTableTests.java
│       │   │   ├── SqliteblockListTests.java
│       │   │   ├── StandaloneWebauthnDemo.java
│       │   │   ├── SyncTests.java
│       │   │   ├── TestJniTweetNacl.java
│       │   │   ├── TokenSignupTests.java
│       │   │   ├── TorTest.java
│       │   │   ├── TotpTest.java
│       │   │   ├── TransactionsStoreTests.java
│       │   │   ├── TreeHash.java
│       │   │   ├── UserPublicKeyLinkTests.java
│       │   │   ├── UserTests.java
│       │   │   ├── VarintTests.java
│       │   │   ├── VersionedWriteOnlyStorage.java
│       │   │   ├── WriteOnlyStorage.java
│       │   │   ├── WriterDataTests.java
│       │   │   ├── WriterTest.java
│       │   │   ├── fips203/
│       │   │   │   ├── FIPS203Tests.java
│       │   │   │   ├── ParameterSetTests.java
│       │   │   │   ├── decaps/
│       │   │   │   │   └── mlkem/
│       │   │   │   │       ├── MLKEMDecapsulatorTests.java
│       │   │   │   │       └── internalProjection.json
│       │   │   │   ├── encaps/
│       │   │   │   │   └── mlkem/
│       │   │   │   │       ├── MLKEMEncapsulatorTests.java
│       │   │   │   │       └── internalProjection.json
│       │   │   │   ├── harness/
│       │   │   │   │   ├── TestCase.java
│       │   │   │   │   ├── TestGroup.java
│       │   │   │   │   └── TestPrompt.java
│       │   │   │   ├── key/
│       │   │   │   │   └── gen/
│       │   │   │   │       └── mlkem/
│       │   │   │   │           ├── MLKEMKeyGeneratorTests.java
│       │   │   │   │           ├── expectedResults.json
│       │   │   │   │           ├── internalProjection.json
│       │   │   │   │           └── prompt.json
│       │   │   │   ├── provider/
│       │   │   │   │   └── MimicloneSecurityProviderTests.java
│       │   │   │   └── reduce/
│       │   │   │       └── barrett/
│       │   │   │           └── BarrettReducerTests.java
│       │   │   ├── linux/
│       │   │   │   ├── LocalS3ServerTest.java
│       │   │   │   └── S3UserTests.java
│       │   │   ├── simulation/
│       │   │   │   ├── NativeFileSystemImpl.java
│       │   │   │   └── Simulator.java
│       │   │   ├── slow/
│       │   │   │   ├── ChatBenchmark.java
│       │   │   │   ├── DeleteBenchmark.java
│       │   │   │   ├── EfficiencyComparison.java
│       │   │   │   ├── FileBlockCacheTests.java
│       │   │   │   ├── GCBenchmark.java
│       │   │   │   ├── IpfsStressTest.java
│       │   │   │   ├── LoginBenchmark.java
│       │   │   │   ├── MediumFileBenchmark.java
│       │   │   │   ├── MkdirBenchmark.java
│       │   │   │   ├── MultipartBenchmark.java
│       │   │   │   ├── MultipartProfiling.java
│       │   │   │   ├── PostgresUserTests.java
│       │   │   │   ├── SignupBenchmark.java
│       │   │   │   ├── SmallFileBenchmark.java
│       │   │   │   ├── SocialBenchmark.java
│       │   │   │   └── SocialfeedBenchmark.java
│       │   │   └── util/
│       │   │       ├── HashTreeTests.java
│       │   │       ├── NonClosingTransactionService.java
│       │   │       └── TestPorts.java
│       │   ├── user/
│       │   │   └── JavaImageThumbnailer.java
│       │   ├── util/
│       │   │   ├── AddressUtil.java
│       │   │   ├── AlphanumComparator.java
│       │   │   ├── Args.java
│       │   │   ├── DifficultyGenerator.java
│       │   │   ├── HtmlUtil.java
│       │   │   ├── HttpUtil.java
│       │   │   ├── JavaPoster.java
│       │   │   ├── JvmThumbnailer.java
│       │   │   ├── Logging.java
│       │   │   ├── NettyPinnedHttps.java
│       │   │   ├── Passwords.java
│       │   │   ├── PinnedHost.java
│       │   │   ├── Postgres.java
│       │   │   ├── RateMonitor.java
│       │   │   ├── SlidingWindowCounter.java
│       │   │   ├── Sqlite.java
│       │   │   ├── Threads.java
│       │   │   └── TimeLimited.java
│       │   └── webdav/
│       │       ├── WebdavFileSystem.java
│       │       ├── WebdavServer.java
│       │       └── modeshape/
│       │           └── webdav/
│       │               ├── IMethodExecutor.java
│       │               ├── IMimeTyper.java
│       │               ├── ITransaction.java
│       │               ├── IWebdavStore.java
│       │               ├── StoredObject.java
│       │               ├── WebDavServletBean.java
│       │               ├── WebdavServlet.java
│       │               ├── WebdavStatus.java
│       │               ├── exceptions/
│       │               │   ├── AccessDeniedException.java
│       │               │   ├── LockFailedException.java
│       │               │   ├── ObjectAlreadyExistsException.java
│       │               │   ├── ObjectNotFoundException.java
│       │               │   ├── UnauthenticatedException.java
│       │               │   └── WebdavException.java
│       │               ├── fromcatalina/
│       │               │   ├── RequestUtil.java
│       │               │   ├── URLEncoder.java
│       │               │   ├── XMLHelper.java
│       │               │   └── XMLWriter.java
│       │               ├── locking/
│       │               │   ├── IResourceLocks.java
│       │               │   ├── LockedObject.java
│       │               │   └── ResourceLocks.java
│       │               └── methods/
│       │                   ├── AbstractMethod.java
│       │                   ├── DeterminableMethod.java
│       │                   ├── DoCopy.java
│       │                   ├── DoDelete.java
│       │                   ├── DoGet.java
│       │                   ├── DoHead.java
│       │                   ├── DoLock.java
│       │                   ├── DoMkcol.java
│       │                   ├── DoMove.java
│       │                   ├── DoNotImplemented.java
│       │                   ├── DoOptions.java
│       │                   ├── DoPropfind.java
│       │                   ├── DoProppatch.java
│       │                   ├── DoPut.java
│       │                   └── DoUnlock.java
│       └── shared/
│           ├── BufferedNetworkAccess.java
│           ├── Crypto.java
│           ├── CryptreeCache.java
│           ├── MaybeMultihash.java
│           ├── NetworkAccess.java
│           ├── OnlineState.java
│           ├── QRCodeEncoder.java
│           ├── SecretLinkQRCode.java
│           ├── cbor/
│           │   ├── CborConstants.java
│           │   ├── CborDecoder.java
│           │   ├── CborEncoder.java
│           │   ├── CborObject.java
│           │   ├── CborType.java
│           │   └── Cborable.java
│           ├── corenode/
│           │   ├── CoreNode.java
│           │   ├── CoreNodeUtils.java
│           │   ├── HTTPCoreNode.java
│           │   ├── OfflineCorenode.java
│           │   ├── OpLog.java
│           │   ├── PkiCache.java
│           │   ├── Proxy.java
│           │   ├── TofuCoreNode.java
│           │   ├── UserPublicKeyLink.java
│           │   └── Usernames.java
│           ├── crypto/
│           │   ├── AsymmetricCipherText.java
│           │   ├── BoxingKeyPair.java
│           │   ├── CipherText.java
│           │   ├── FragmentedPaddedCipherText.java
│           │   ├── InvalidCipherTextException.java
│           │   ├── OwnerProof.java
│           │   ├── PaddedAsymmetricCipherText.java
│           │   ├── PaddedCipherText.java
│           │   ├── ProofOfWork.java
│           │   ├── RequiredDifficulty.java
│           │   ├── SigningKeyPair.java
│           │   ├── SigningPrivateKeyAndPublicHash.java
│           │   ├── SourcedAsymmetricCipherText.java
│           │   ├── SymmetricLink.java
│           │   ├── SymmetricLinkToSigner.java
│           │   ├── asymmetric/
│           │   │   ├── PublicBoxingKey.java
│           │   │   ├── PublicSigningKey.java
│           │   │   ├── SecretBoxingKey.java
│           │   │   ├── SecretSigningKey.java
│           │   │   ├── curve25519/
│           │   │   │   ├── Curve25519.java
│           │   │   │   ├── Curve25519PublicKey.java
│           │   │   │   ├── Curve25519SecretKey.java
│           │   │   │   ├── Ed25519.java
│           │   │   │   ├── Ed25519PublicKey.java
│           │   │   │   └── Ed25519SecretKey.java
│           │   │   └── mlkem/
│           │   │       ├── HybridCipherText.java
│           │   │       ├── HybridCurve25519MLKEMPublicKey.java
│           │   │       ├── HybridCurve25519MLKEMSecretKey.java
│           │   │       ├── Mlkem.java
│           │   │       ├── MlkemKeyPair.java
│           │   │       ├── MlkemPublicKey.java
│           │   │       └── MlkemSecretKey.java
│           │   ├── hash/
│           │   │   ├── BaseHash.java
│           │   │   ├── Blake2b.java
│           │   │   ├── Hash.java
│           │   │   ├── Hasher.java
│           │   │   ├── NativeScryptJS.java
│           │   │   ├── PublicKeyHash.java
│           │   │   ├── ScryptJS.java
│           │   │   └── Sha256.java
│           │   ├── password/
│           │   │   └── PasswordProtected.java
│           │   ├── random/
│           │   │   ├── JSNaCl.java
│           │   │   └── SafeRandom.java
│           │   └── symmetric/
│           │       ├── Salsa20Poly1305.java
│           │       ├── SymmetricKey.java
│           │       └── TweetNaClKey.java
│           ├── display/
│           │   ├── Content.java
│           │   ├── FileRef.java
│           │   ├── Reference.java
│           │   └── Text.java
│           ├── email/
│           │   ├── Attachment.java
│           │   ├── EmailClient.java
│           │   └── EmailMessage.java
│           ├── fingerprint/
│           │   └── FingerPrint.java
│           ├── hamt/
│           │   ├── Champ.java
│           │   ├── ChampUtil.java
│           │   └── ChampWrapper.java
│           ├── inode/
│           │   ├── DirectoryInode.java
│           │   ├── Inode.java
│           │   ├── InodeCap.java
│           │   ├── InodeFileSystem.java
│           │   └── PathElement.java
│           ├── io/
│           │   └── ipfs/
│           │       ├── Cid.java
│           │       ├── MultiAddress.java
│           │       ├── Multihash.java
│           │       ├── Protocol.java
│           │       ├── api/
│           │       │   ├── JSONParser.java
│           │       │   ├── MerkleNode.java
│           │       │   ├── NamedStreamable.java
│           │       │   └── Peer.java
│           │       └── bases/
│           │           ├── Base16.java
│           │           ├── Base32.java
│           │           ├── Base36.java
│           │           ├── Base58.java
│           │           ├── Base64.java
│           │           ├── BaseNCodec.java
│           │           ├── BinaryDecoder.java
│           │           ├── BinaryEncoder.java
│           │           ├── CharEncoding.java
│           │           ├── Charsets.java
│           │           ├── Decoder.java
│           │           ├── DecoderException.java
│           │           ├── Encoder.java
│           │           ├── EncoderException.java
│           │           ├── Multibase.java
│           │           └── StringUtils.java
│           ├── login/
│           │   ├── LoginCache.java
│           │   ├── LoginResponse.java
│           │   ├── OfflineAccountStore.java
│           │   └── mfa/
│           │       ├── MultiFactorAuthMethod.java
│           │       ├── MultiFactorAuthRequest.java
│           │       ├── MultiFactorAuthResponse.java
│           │       ├── TotpKey.java
│           │       └── WebauthnResponse.java
│           ├── messaging/
│           │   ├── Chat.java
│           │   ├── ChatController.java
│           │   ├── ChatUpdate.java
│           │   ├── FileBackedMessageStore.java
│           │   ├── GroupProperty.java
│           │   ├── Id.java
│           │   ├── Member.java
│           │   ├── MessageEnvelope.java
│           │   ├── MessageRef.java
│           │   ├── MessageStore.java
│           │   ├── Messenger.java
│           │   ├── PrivateChatState.java
│           │   ├── SignedMessage.java
│           │   ├── TreeClock.java
│           │   └── messages/
│           │       ├── ApplicationMessage.java
│           │       ├── DeleteMessage.java
│           │       ├── EditMessage.java
│           │       ├── Invite.java
│           │       ├── Join.java
│           │       ├── Message.java
│           │       ├── RemoveMember.java
│           │       ├── ReplyTo.java
│           │       └── SetGroupState.java
│           ├── mutable/
│           │   ├── BufferedPointers.java
│           │   ├── CachingPointers.java
│           │   ├── HttpMutablePointers.java
│           │   ├── MultiWriterCommit.java
│           │   ├── MutablePointers.java
│           │   ├── MutablePointersProxy.java
│           │   ├── OfflinePointerCache.java
│           │   ├── PointerCache.java
│           │   ├── PointerUpdate.java
│           │   ├── ProxyingMutablePointers.java
│           │   ├── RetryMutablePointers.java
│           │   └── SignedPointerUpdate.java
│           ├── resolution/
│           │   └── ResolutionRecord.java
│           ├── social/
│           │   ├── BlindFollowRequest.java
│           │   ├── FollowRequest.java
│           │   ├── FollowRequestWithCipherText.java
│           │   ├── HttpSocialNetwork.java
│           │   ├── ProcessedCaps.java
│           │   ├── ProxyingSocialNetwork.java
│           │   ├── SharedItem.java
│           │   ├── SocialFeed.java
│           │   ├── SocialNetwork.java
│           │   ├── SocialNetworkProxy.java
│           │   └── SocialPost.java
│           ├── storage/
│           │   ├── BlockCache.java
│           │   ├── BlockMirrorCap.java
│           │   ├── BlockStoreProperties.java
│           │   ├── BlockWriteGroup.java
│           │   ├── BufferedStorage.java
│           │   ├── CachingStorage.java
│           │   ├── CachingVerifyingStorage.java
│           │   ├── CasException.java
│           │   ├── ChunkMirrorCap.java
│           │   ├── ContentAddressedStorage.java
│           │   ├── ContentAddressedStorageProxy.java
│           │   ├── DecodedSpaceRequest.java
│           │   ├── DelegatingStorage.java
│           │   ├── DirectS3BlockStore.java
│           │   ├── HashVerifyingStorage.java
│           │   ├── HttpFileNotFoundException.java
│           │   ├── HttpSpaceUsage.java
│           │   ├── IpfsTransaction.java
│           │   ├── IpnsEntry.java
│           │   ├── JSAccountCache.java
│           │   ├── JSBatCache.java
│           │   ├── JSBlockCache.java
│           │   ├── JSPkiCache.java
│           │   ├── JSPointerCache.java
│           │   ├── LinkCounts.java
│           │   ├── LocalOnlyStorage.java
│           │   ├── LocalRamStorage.java
│           │   ├── MajorRateLimitException.java
│           │   ├── PaymentProperties.java
│           │   ├── PointerCasException.java
│           │   ├── PresignedUrl.java
│           │   ├── ProxyingSpaceUsage.java
│           │   ├── QuotaControl.java
│           │   ├── RamBlockCache.java
│           │   ├── RateLimitException.java
│           │   ├── RetryStorage.java
│           │   ├── SpaceUsage.java
│           │   ├── SpaceUsageProxy.java
│           │   ├── StorageQuotaExceededException.java
│           │   ├── TransactionId.java
│           │   ├── UnauthedCachingStorage.java
│           │   ├── WriteAuthRequest.java
│           │   ├── WriteFilter.java
│           │   ├── auth/
│           │   │   ├── Bat.java
│           │   │   ├── BatCache.java
│           │   │   ├── BatCave.java
│           │   │   ├── BatCaveProxy.java
│           │   │   ├── BatId.java
│           │   │   ├── BatList.java
│           │   │   ├── BatWithId.java
│           │   │   ├── BlockAuth.java
│           │   │   ├── EncryptedBatCache.java
│           │   │   ├── HttpBatCave.java
│           │   │   ├── OfflineBatCache.java
│           │   │   ├── ProxyingBatCave.java
│           │   │   └── S3Request.java
│           │   └── controller/
│           │       ├── AllowedSignups.java
│           │       ├── HttpInstanceAdmin.java
│           │       └── InstanceAdmin.java
│           ├── user/
│           │   ├── Account.java
│           │   ├── AccountProxy.java
│           │   ├── AcquaintanceSourcedTrieNode.java
│           │   ├── App.java
│           │   ├── CapsDiff.java
│           │   ├── CommittedWriterData.java
│           │   ├── Committer.java
│           │   ├── CommitterBuilder.java
│           │   ├── ComplexComputation.java
│           │   ├── ComplexMutation.java
│           │   ├── EntryPoint.java
│           │   ├── ExternalTrieNode.java
│           │   ├── FileSharedWithState.java
│           │   ├── FriendAnnotation.java
│           │   ├── FriendSourcedTrieNode.java
│           │   ├── FriendsGroups.java
│           │   ├── Groups.java
│           │   ├── HttpAccount.java
│           │   ├── HttpPoster.java
│           │   ├── IdentityLink.java
│           │   ├── IdentityLinkProof.java
│           │   ├── ImmutableTree.java
│           │   ├── IncomingCapCache.java
│           │   ├── JavaScriptPoster.java
│           │   ├── LinkProperties.java
│           │   ├── LoginData.java
│           │   ├── Migrate.java
│           │   ├── MutableTree.java
│           │   ├── MutableTreeImpl.java
│           │   ├── Mutation.java
│           │   ├── NativeJSAccountCache.java
│           │   ├── NativeJSBatCache.java
│           │   ├── NativeJSCache.java
│           │   ├── NativeJSHttp.java
│           │   ├── NativeJSPkiCache.java
│           │   ├── NativeJSPointerCache.java
│           │   ├── OwnedKeyChamp.java
│           │   ├── PendingSocialState.java
│           │   ├── Profile.java
│           │   ├── ProfilePaths.java
│           │   ├── ProxyingAccount.java
│           │   ├── RandomSecretType.java
│           │   ├── RetrievedEntryPoint.java
│           │   ├── ScryptGenerator.java
│           │   ├── SecretGenerationAlgorithm.java
│           │   ├── SecretLinkChamp.java
│           │   ├── ServerConversation.java
│           │   ├── ServerMessage.java
│           │   ├── ServerMessager.java
│           │   ├── SharedWithCache.java
│           │   ├── SharedWithState.java
│           │   ├── Snapshot.java
│           │   ├── SocialState.java
│           │   ├── TofuKeyStore.java
│           │   ├── TrieNode.java
│           │   ├── TrieNodeImpl.java
│           │   ├── UserContext.java
│           │   ├── UserSnapshot.java
│           │   ├── UserStaticData.java
│           │   ├── UserUtil.java
│           │   ├── UserWithRoot.java
│           │   ├── WriteSynchronizer.java
│           │   ├── WriterData.java
│           │   ├── app/
│           │   │   ├── ShareLocalAppData.java
│           │   │   └── StoreAppData.java
│           │   └── fs/
│           │       ├── AbsoluteCapability.java
│           │       ├── AsyncReader.java
│           │       ├── Blake3state.java
│           │       ├── BrowserFileReader.java
│           │       ├── CapabilitiesFromUser.java
│           │       ├── CapabilityStore.java
│           │       ├── CapabilityWithPath.java
│           │       ├── Chunk.java
│           │       ├── ChunkHashList.java
│           │       ├── EncryptedCapability.java
│           │       ├── EncryptedChunkRetriever.java
│           │       ├── ErasureFragmenter.java
│           │       ├── FileExistsException.java
│           │       ├── FileProperties.java
│           │       ├── FileRetriever.java
│           │       ├── FileUploader.java
│           │       ├── FileWrapper.java
│           │       ├── Fragment.java
│           │       ├── FragmentWithHash.java
│           │       ├── Fragmenter.java
│           │       ├── HashBranch.java
│           │       ├── HashTree.java
│           │       ├── HashTreeBuilder.java
│           │       ├── JSFileReader.java
│           │       ├── LazyInputStreamCombiner.java
│           │       ├── LocatedChunk.java
│           │       ├── Location.java
│           │       ├── MimeTypes.java
│           │       ├── Mp3CoverImage.java
│           │       ├── NamedAbsoluteCapability.java
│           │       ├── NamedRelativeCapability.java
│           │       ├── NativeJSThumbnail.java
│           │       ├── RelativeCapability.java
│           │       ├── ResumeUploadProps.java
│           │       ├── RetrievedCapability.java
│           │       ├── RootHash.java
│           │       ├── SecretLink.java
│           │       ├── SecretLinkTarget.java
│           │       ├── SplitFragmenter.java
│           │       ├── Thumbnail.java
│           │       ├── ThumbnailGenerator.java
│           │       ├── VideoThumbnail.java
│           │       ├── WritableAbsoluteCapability.java
│           │       ├── cryptree/
│           │       │   └── CryptreeNode.java
│           │       ├── erasure/
│           │       │   ├── Erasure.java
│           │       │   ├── ErrorTests.java
│           │       │   ├── GaloisField.java
│           │       │   ├── GaloisField1024.java
│           │       │   ├── GaloisField16.java
│           │       │   ├── GaloisField256.java
│           │       │   ├── GaloisField4.java
│           │       │   ├── GaloisField65536.java
│           │       │   └── GaloisPolynomial.java
│           │       └── transaction/
│           │           ├── FileUploadTransaction.java
│           │           ├── Transaction.java
│           │           ├── TransactionService.java
│           │           └── TransactionServiceImpl.java
│           ├── util/
│           │   ├── ArrayOps.java
│           │   ├── AsyncLock.java
│           │   ├── ByteArrayWrapper.java
│           │   ├── CappedProgressConsumer.java
│           │   ├── Constants.java
│           │   ├── EfficientHashMap.java
│           │   ├── Either.java
│           │   ├── Exceptions.java
│           │   ├── FileUtils.java
│           │   ├── Futures.java
│           │   ├── LRUCache.java
│           │   ├── LongUtil.java
│           │   ├── Pair.java
│           │   ├── PathUtil.java
│           │   ├── Plan.java
│           │   ├── ProgressConsumer.java
│           │   ├── Serialize.java
│           │   ├── TimeLimitedClient.java
│           │   ├── TriFunction.java
│           │   ├── Triple.java
│           │   └── Version.java
│           └── zxing/
│               ├── BarcodeFormat.java
│               ├── Binarizer.java
│               ├── BinaryBitmap.java
│               ├── ChecksumException.java
│               ├── DecodeHintType.java
│               ├── Dimension.java
│               ├── EncodeHintType.java
│               ├── FormatException.java
│               ├── InvertedLuminanceSource.java
│               ├── LuminanceSource.java
│               ├── NotFoundException.java
│               ├── PlanarYUVLuminanceSource.java
│               ├── RGBLuminanceSource.java
│               ├── Reader.java
│               ├── ReaderException.java
│               ├── Result.java
│               ├── ResultMetadataType.java
│               ├── ResultPoint.java
│               ├── ResultPointCallback.java
│               ├── Writer.java
│               ├── WriterException.java
│               ├── common/
│               │   ├── BitArray.java
│               │   ├── BitMatrix.java
│               │   ├── BitSource.java
│               │   ├── CharacterSetECI.java
│               │   ├── DecoderResult.java
│               │   ├── DefaultGridSampler.java
│               │   ├── DetectorResult.java
│               │   ├── GlobalHistogramBinarizer.java
│               │   ├── GridSampler.java
│               │   ├── HybridBinarizer.java
│               │   ├── PerspectiveTransform.java
│               │   ├── StringUtils.java
│               │   ├── detector/
│               │   │   ├── MathUtils.java
│               │   │   ├── MonochromeRectangleDetector.java
│               │   │   └── WhiteRectangleDetector.java
│               │   └── reedsolomon/
│               │       ├── GenericGF.java
│               │       ├── GenericGFPoly.java
│               │       ├── ReedSolomonDecoder.java
│               │       ├── ReedSolomonEncoder.java
│               │       └── ReedSolomonException.java
│               └── qrcode/
│                   ├── QRCodeReader.java
│                   ├── QRCodeWriter.java
│                   ├── decoder/
│                   │   ├── BitMatrixParser.java
│                   │   ├── DataBlock.java
│                   │   ├── DataMask.java
│                   │   ├── DecodedBitStreamParser.java
│                   │   ├── Decoder.java
│                   │   ├── ErrorCorrectionLevel.java
│                   │   ├── FormatInformation.java
│                   │   ├── Mode.java
│                   │   ├── QRCodeDecoderMetaData.java
│                   │   └── Version.java
│                   ├── detector/
│                   │   ├── AlignmentPattern.java
│                   │   ├── AlignmentPatternFinder.java
│                   │   ├── Detector.java
│                   │   ├── FinderPattern.java
│                   │   ├── FinderPatternFinder.java
│                   │   └── FinderPatternInfo.java
│                   └── encoder/
│                       ├── BlockPair.java
│                       ├── ByteMatrix.java
│                       ├── Encoder.java
│                       ├── MaskUtil.java
│                       ├── MatrixUtil.java
│                       └── QRCode.java
└── test/
    └── resources/
        └── static_handler/
            ├── something.txt
            └── test/
                └── hello.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
ui/doppio/** linguist-vendored
ui/javapoly/** linguist-vendored
ui/browserfs/** linguist-vendored
ui/scripts/jquery*.js linguist-vendored
ui/scripts/react*.js linguist-vendored
ui/scripts/JSX*.js linguist-vendored

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: peergos
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://donorbox.org/peergos']


================================================
FILE: .github/workflows/ant.yml
================================================
name: Java CI

on: [push]

jobs:
  build:

    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 21
      uses: actions/setup-java@v4
      with:
        distribution: temurin
        java-version: 25
    - name: Build with Ant
      run: ant -noinput -buildfile build.xml dist
    - name: GWT build
      run: ant -noinput -buildfile build.xml gwtc
    - name: install fuse 2
      run: sudo apt install libfuse2
      if: matrix.os == 'ubuntu-latest'
    - name: Run tests
      timeout-minutes: 120
      run: ant -noinput -buildfile build.xml test
    - name: Reproducible build
      run: ./reproducible-test.sh


================================================
FILE: .gitignore
================================================
build/*
log/*
dist/*
out/*
log/*
.idea/*
gwt-unitCache/*
war/*
*.iml
*.hprof
*hs_err_pid*
*~
peergos/crypto/RootCertificate.java
peergos/crypto/DirectoryCertificates.java
peergos/crypto/CoreCertificates.java


================================================
FILE: .travis.yml
================================================
language: java
jdk:
  - oraclejdk8

after_failure:
  - cat TEST-*.txt

notifications:
  email:
    - christoph.boddy@gmail.com
    - ianopolous@gmail.com
    - kevodwyer@gmail.com

sudo: required
before_install:
  - sudo apt-get install -qq pkg-config fuse
  - sudo modprobe fuse
  - sudo chmod 666 /dev/fuse
  - sudo chown root:$USER /etc/fuse.conf
  - wget https://dist.ipfs.io/go-ipfs/v0.4.1/go-ipfs_v0.4.1_linux-amd64.tar.gz
  - tar xvfz go-ipfs_v0.4.1_linux-amd64.tar.gz
  - go-ipfs/ipfs init
  - go-ipfs/ipfs daemon &

================================================
FILE: Licence.txt
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.


================================================
FILE: PrintTestErrors.java
================================================
import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.stream.*;

/** Parse junit log files and print errors and exceptions including stack traces to the console
 *  Will exit with status 1 if there are any errors, otherwise exit status 0.
 *
 *  Scan all files in "./test.reports".
 *  Usage "java PrintTestErrors.java
 */
public class PrintTestErrors {

    public static void main(String[] args) throws IOException {
        List<Path> reports = Files.list(Path.of("test.reports")).collect(Collectors.toList());
        boolean anyError = false;
        for (Path report : reports) {
            boolean inErr = false;
            List<String> lines = Files.readAllLines(report);
            for (int i=0; i < lines.size(); i++) {
                String line = lines.get(i);
                if (line.contains("<error") || line.contains("<failure")) {
                    System.out.println(lines.get(i-1));
                    inErr = true;
                    anyError = true;
                }
                if (inErr)
                    System.out.println(line);
                if (line.contains("</error") || line.contains("</failure"))
                    inErr = false;
            }
        }
        if (anyError)
            throw new RuntimeException("Test failure(s)!");
    }
}


================================================
FILE: README.md
================================================
<img src="https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:OpenSourceProjects_Peergos_Build)/statusIcon"></a>

![Peergos Logo](https://peergos.org/theme/img/peergos/logo-main.svg)

Peergos
========

Peergos is building the next web - the private web, where end users are in control. Imagine web apps being secure by default and unable to track you. Imagine being able to control exactly what personal data each web app can see. Imagine never having to log in to an app ever again. You own your data and decide where it is stored and who can see it. At Peergos, we believe that privacy is a fundamental human right and we want to make it easy for everyone to interact online in ways that respect this right.

The foundation of Peergos is a peer-to-peer encrypted global filesystem with fine-grained access control designed to be resistant to surveillance of data content or friendship graphs. It has a secure messenger, an encrypted email client and bridge, and a totally private and secure social network, where users are in control of who sees what (executed cryptographically). Our motto at Peergos is, "Control your data, control your destiny."

The name Peergos comes from the Greek word Πύργος (Pyrgos), which means stronghold or tower, but phonetically spelt with the nice connection to being peer-to-peer. Pronunciation: peer-goss (as in gossip).

Screenshots
----
![Drive](/assets/images.jpg)

See more screenshots in the web-ui repository [https://github.com/Peergos/web-ui](https://github.com/Peergos/web-ui).

Try it now!
----
Want to try it out now? Here's a read-only secret link [to a folder](https://peergos.net/secret/z59vuwzfFDovgun2sU9YF8LqJRVXaoVR39XAkvRR6sNp7CJnseecHhV/3647803968#oqmlU2vyq0Fe);

Sign-up
----
We run a paid server at https://peergos.net/. 

Tech book
---------
You can read more detail about our features and architecture in our [tech book](https://book.peergos.org).

Recent progress
---------
To see recent developments read the latest [release notes](https://peergos.net/public/peergos/releases) or see our [web-ui repo releases](https://github.com/Peergos/web-ui/releases).

Media
---------
The slides of a talk introducing Peergos are [here](https://speakerdeck.com/ianopolous/peergos-architecture) 

Deep dive at IPFS Camp 2024

[![IPFS Camp 2024](https://img.youtube.com/vi/yDU4GHsEo34/0.jpg)](https://www.youtube.com/watch?v=yDU4GHsEo34)

Deep dive at Devstaff Crete:

[![Deep dive](https://img.youtube.com/vi/Po_fdZYcfXo/0.jpg)](https://www.youtube.com/watch?v=Po_fdZYcfXo)

Overview at IPFS Thing:

[![Overview](https://img.youtube.com/vi/g1vzoZjG9Zo/0.jpg)](https://www.youtube.com/watch?v=g1vzoZjG9Zo)

[![Architecture details](https://img.youtube.com/vi/HVyrVUI2-RA/0.jpg)](https://www.youtube.com/watch?v=HVyrVUI2-RA)

Applications on Peergos:

[![Overview](https://img.youtube.com/vi/3i1TtknNw2E/0.jpg)](https://www.youtube.com/watch?v=3i1TtknNw2E)

[![A better web: secure, private p2p apps with user owned data and identity](https://img.youtube.com/vi/mSElk2jcFqY/0.jpg)](https://www.youtube.com/watch?v=mSElk2jcFqY)

Applications deep dive:

[![Overview](https://img.youtube.com/vi/oberD75GU8I/0.jpg)](https://www.youtube.com/watch?v=oberD75GU8I)


Architecture talk at IPFS Lab Day:

[![Architecture Talk](https://img.youtube.com/vi/h54pShffxvI/0.jpg)](https://www.youtube.com/watch?v=h54pShffxvI)

Introduction and 2020 update:

[![Introduction and 2020 update](https://img.youtube.com/vi/oXMqYDLKWPc/0.jpg)](https://www.youtube.com/watch?v=oXMqYDLKWPc)

Introduction:

[![Introduction](https://img.youtube.com/vi/dCLboQDlzds/0.jpg)](https://www.youtube.com/watch?v=dCLboQDlzds)


Support
-------
If you would like to support Peergos development, then please make a 

[recurring donation less than 100 EUR per week](https://liberapay.com/peergos)

or a 

[larger or one off donation](https://donorbox.org/peergos). 

Audits
-----
### 2024
https://peergos.org/posts/security-audit-2024

### 2019
https://peergos.org/posts/security-audit

### All audit reports
https://github.com/Peergos/Peergos/tree/master/audits

Chat room
---------
There is a public chat room for Peergos on [Matrix](https://matrix.to/#/#peergos-chat:matrix.org).

Peergos aims
------------
 - Allow individuals to securely and privately store files in a peer to peer network which has no central node and is generally difficult to disrupt or surveil
 - Allow secure sharing of files with other users of the network without visible meta-data (who shares with who)
 - Allow web apps to be loaded and run directly from Peergos in a sandbox that prevents data exfiltration and with user granted permissions
 - Have a beautiful user interface that any computer or mobile user can understand
 - Be independent of the central TLS Certificate Authority trust architecture
 - Be self-hostable - A user should be able to easily run Peergos on a machine in their home and get their own Peergos storage space, and social communication platform from it. 
 - Have a secure web interface

Project anti-aims
-----------------
 - Peergos does not provide anonymity, yet. Anonymity can be achieved by creating and only ever accessing a User account over Tor

Architecture
------------
1.0 Layers of architecture
 - 1: Peer-to-peer and data layer - [IPFS](https://ipfs.io) provides the data storage, routing and retrieval. A User must have at least one Peergos instance storing their data for it to be available. 
 - 2: Authorization Layer - a key pair controls who is able to modify parts of the file system (every write is signed)
 - 3: Data storage - controlled by a given public key there is a [merkle-champ](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) of encrypted chunks under random labels, without any cross links visible to the server (the server can't deduce the size of files)
 - 4: Encryption - Strong encryption is done on the user's machine using [TweetNaCl](http://tweetnacl.cr.yp.to/), with each 5MiB chunk of a file being encrypted independently. 
 - 5: Social layer implementing the concept of following or being friends with another user, without exposing the friend network to anyone.
 - 6: Sharing - Secure cryptographic sharing of files with friends.

2.0 Language
 - The IPFS layer is coded in Java - we have a minimal ipfs implementation - [Nabu](https://github.com/peergos/nabu)
 - The Peergos server is coded to run on JVM to get portability and speed, predominantly Java
 - The web interface is mostly coded in Java and cross compiled to JavaScript, with the exception of the Tweetnacl and scrypt libraries, and a small amount of GUI code in JS for Vue.js. 
 - Apps are written in HTML5

3.0 Nodes
 - There is a pki node which ensures unique usernames using a structure similar to certificate transparency. This data is mirrored on every peergos server. 
 - A new node contacts any public Peergos server to join the network

4.0 Trust
 - New versions of the software will be delivered through Peergos itself. (Able to be turned off by the user if desired)
 - A user who trusts a public Peergos server (and the SSL Certificate authority chain) can use the web interface over TLS
 - A less trusting user can run a Peergos server/proxy on their own machine and use the web interface over localhost
 - A more paranoid user can run a Peergos server on their own machine and use the CLI or the fuse/webdav binding
 - Servers are trustless - your data and metadata cannot be exposed even if your server is compromised (assuming your client is not compromised)
 - IPFS itself is not trusted and all data stored or retrieved from it is self-certifying. 
 - The data store (which may not be ipfs directly, but S3 compatible service for example) is also not trusted

4.0 Logging in
 - A user's username is used along with a random salt and the hash of their password and run through scrypt (with parameters 17, 8, 1, 96, though users can choose harder parameters if desired) to generate a symmetric key and a signing keypair. The signing keypair is then used to auth and retrieve encrypted login data. This login data is then decrypted using the symmetric key to obtain the identity key pair, social keypair and root directory capability. This means that a user can log in from any machine without transferring any keys, and also that their keys are protected from a brute force attack (see slides mentioned above for a cost estimate).

5.0 Encryption
 - Private keys never leave the client node. Two random symmetric keys are generated for every file or directory (explicitly not convergent encryption, which leaks information)

5.1 Post-quantum encryption
 - Files that haven't been shared with another user are already resistant to quantum computer based attacks. This is because the operations to decrypt them from logging in, to seeing plain-text, include only hashing and symmetric encryption, both of which are currently believed to not be significantly weakened with a quantum computer. 
 - Files that have been shared between users are, currently, vulnerable to a large enough quantum computer if an attacker is able to log the initial follow requests sent between the users (before the user retrieves and deletes them). This will be replaced with a post-quantum asymmetric algorithm as soon as a clear candidate arrives.  

6.0 Friend network
 - Anyone can send anyone else a "follow request". This amounts to "following" someone and is a one way protocol. This is stored in the target user's server, but the server cannot see who is sending the friend request (it is cryptographically blinded). 
 - The target user can respond to friend requests with their own friend request to make it bi-directional (the usual concept of a friend). 
 - Once onion routing is integrated, there will be no way for an attacker (or us) to deduce the friendship graph (who is friends with who). 
 
7.0 Sharing of a file (with another user, through a secret link, or publicly)
 - Once user A is being followed by user B, then A can share files with user B (B can revoke their following at any time)
 - File access control is based on the [cryptree](https://raw.githubusercontent.com/ianopolous/Peergos/master/papers/wuala-cryptree.pdf) system used by Wuala
 - A link can be generated to a file or a folder which can be shared with anyone through any medium. A link is of the form https://demo.peergos.net/#KEY_MATERIAL which has the property that even the link doesn't leak the file contents to the network, as the key material after the # is not sent to the server, but interpreted locally in the browser. We have extended cryptree to protect much more metadata, including file size, names, thumbnails, directory structure and more. 
 - A user can publish a capability to a file or folder they control which makes it publicly visible

Usage - running locally to log in to another instance
-----
Use this method to login to a Peergos account on another instance without any reliance on DNS or the TLS certificate authorities. 

1. Download a release from https://peergos.net/public/peergos/releases

2. If you download the jar, install Java - You will need Java >= 25 installed. 

3. Run Peergos with:

```
java -jar Peergos.jar daemon
```
or for the native packages:
```
peergos daemon
```
All the Peergos data will be stored in ~/.peergos by default, which can be overridden with the environment var or arg - PEERGOS_PATH. 

You can then access the web interface and login via http://localhost:8000.

In this mode of operation all your writes are proxied directly to your home server. The local instance caches any blocks you access for faster subsequent access. 

If you are using the packaged desktop app, or the default `peergos` launcher on macOS, you can point it at a self-hosted instance with:
```bash
peergos -server-url https://YOUR_PEERGOS_SERVER_DOMAIN
```
To make that persistent for the desktop app, add the following to `~/.peergos/config`:
```ini
server-url = https://YOUR_PEERGOS_SERVER_DOMAIN
```
For security, prefer `https` for remote servers, and only use plain `http` for loopback addresses such as `http://localhost:8000`.

Usage - self hosting
-----
Use this method to run a new home-server (which is best with a publicly routable IP, and always on machine) to create accounts on or migrate accounts to.

1. Download a release from https://peergos.net/public/peergos/releases

2. Install Java - You will need Java >= 25 installed. 

3. Run Peergos with:
```
java -jar Peergos.jar daemon -generate-token true
```

4. Ensure you can listen on a public IP address

   Some cloud hosts don't add your public ip to the network interfaces by default. For these cases you may need to run something like
```bash
   sudo ip address add MY.PUBLIC.IP dev eth0
```

All the Peergos data will be stored in ~/.peergos by default, which can be overridden with the environment var or arg - PEERGOS_PATH

You can then access the web interface and signup via the localhost address printed, which includes a single use signup token.

The config is stored in $PEERGOS_PATH/config, so for subsequent runs you can just use the following unless you want to override any config
```
java -jar Peergos.jar daemon
```

Note that whichever Peergos server you sign up through (your home server) will be storing your data, so if you don't intend on leaving your Peergos server running permanently, then we recommend signing up on https://peergos.net and then you can log in through a local Peergos instance and all your data will magically end up on the peergos.net server. Peergos can work behind NATs and firewalls, but we recommend using a server with a public IP. If you want to expose your web interface publicly you will need to arrange a domain name and TLS certificates (we recommend using nginx and letsencrypt). 

If you don't set up a domain name and TLS you can still log in to your account from another Peergos instance, e.g. one you run locally on your laptop - connections are routed securely over P2P TLS1.3 streams to your home server. In this case, any writes are proxied to your home server so your data is always persisted there. If you do expose your instance via a DNS name and TLS certificate, you will need to add this parameter:
> -public-server true

If you are also using a reverse proxy like nginx to terminate TLS you will need to tell Peergos which domain you are using with the following arg:
> -public-domain $YOUR_DOMAIN

And the TLS certificate will also need to cover the wildcard subdomain for the applications (like the PDF viewer, text editor, calendar, and custom 3rd party apps) to work. For example, it should have A records that cover $YOUR_DOMAIN and *.$YOUR_DOMAIN

If you are using a reverse proxy like nginx to terminate TLS here is a good example of the nginx config file (replace $YOUR_DOMAIN_NAME) (On SELinux enabled Linux distributions you need to make sure to allow nginx to access port 8000 tcp_socket.):
```
# Peergos server config

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    location ^~ /.well-known {
         allow all;
         proxy_pass http://127.0.0.1:8888;
    }

    # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
        # SSL configuration
        listen 443 ssl http2;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        ssl_ciphers TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:!TLS_AES_128_GCM_SHA256;
        ssl_certificate /etc/letsencrypt/live/$YOUR_DOMAIN_NAME/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/$YOUR_DOMAIN_NAME/privkey.pem;

        add_header Strict-Transport-Security "max-age=31536000" always;
        server_name $YOUR_DOMAIN_NAME;

        client_max_body_size 2M;

        location / {
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                allow all;
        }

	# pass through for letsencrypt
        location ^~ /.well-known {
                 allow all;
                 proxy_pass http://127.0.0.1:8888;
        }
}

```

Usage - self hosting (with docker)
-----
Get a docker image with:
```bash
docker pull ghcr.io/peergos/web-ui:master
```

Run the Peergos image with:
```bash
docker run --volume $(PEERGOS_PATH):/opt/peergos/data ghcr.io/peergos/web-ui:master daemon -listen-host 0.0.0.0 -public-domain $YOUR_DOMAIN_NAME -public-server true -announce-ipfs-addresses /ip4/$IP/tcp/4001,/ip4/$IP/udp/4001/quic-v1 -log-to-console true
```

Usage - self hosting (with S3 compatible blockstore)
-----
Follow the instructions for self hosting but add the following parameters (either on the command line, or in the .peergos/config file after first run):
```
-use-s3 true
-authed-s3-reads true
-direct-s3-writes true
-s3.accessKey $ACCESS_KEY
-s3.bucket $BUCKET
-s3.region $REGION
-s3.region.endpoint $ENDPOINT (e.g. us-east-1.linodeobjects.com)
-s3.secretKey #SECRET_KEY
```
N.B. Minio seems to have some issues, so with Minio use: -authed-s3-reads false -direct-s3-writes false

You will also need to set the cors.xml for the bucket to the following:
```
<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>https://$YOUR_DOMAIN</AllowedOrigin>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
    <ExposeHeader>Content-Length</ExposeHeader>
    <MaxAgeSeconds>3600</MaxAgeSeconds>
  </CORSRule>
</CORSConfiguration>
```


Usage - self hosting (with Postgres instead of sqlite)
-----
Follow the instructions for self hosting but add the following parameters (either on the command line, or in the .peergos/config file after first run):
```
-use-postgres true
-postgres.database $DATABASE
-postgres.host $HOST
-postgres.password $PASSWORD
-postgres.username $USERNAME
```

Usage - troubleshooting
-----
* You can run with "-log-to-console true" to also show any logging on the console. 
* The very first run will sync the pki and this takes several minutes. Subsequent runs should start within seconds. 


### CLI
There are a range of commands available from a command line. You can run -help to find the available commands or details on any command or sub-command. Most users should only need the *daemon* and *shell* commands, and maybe *identity* or *fuse*. You can use the *migrate* command to move all your data to a new server (where the command is run). 

```
>> java -Djava.library.path=native-lib -jar Peergos.jar -help
Main: Run a Peergos command
Sub commands:
	daemon: The user facing Peergos server
	shell: An interactive command-line-interface to a Peergos server
	fuse: Mount a Peergos user's filesystem natively
	quota: Manage quota of users on this server
	server-msg: Send and receive messages to/from users of this server
	gateway: Serve websites directly from Peergos
	migrate: Move a Peergos account to this server
	identity: Create or verify an identity proof
	ipfs: Install, configure and start IPFS daemon
	pki: Start the Peergos PKI Server that has already been bootstrapped
	pki-init: Bootstrap and start the Peergos PKI Server
```
or
```
>> java -Djava.library.path=native-lib -jar Peergos.jar identity -help
identity: Create or verify an identity proof

Sub commands:
	link: Link your Peergos identity to an account on another service.
	verify: Verify an identity link post from another service.
```

Mirror
--------
To mirror all of your data on another server first run the following command (on any instance):
> java -jar Peergos.jar mirror init -username $username -peergos-url https://YOUR_PEERGOS_SERVER_DOMAIN

It will ask for your password and then print three parameters you need to supply to the mirror daemon.

Then run daemon, on the instance you want to mirror your data, with the following additional args provided by the init command.
> java -jar Peergos.jar daemon -mirror.username $username -mirror.bat $mirrorBat -login-keypair $loginKeypair

This will then continuously mirror that user's data on this instance. 

Migrate
--------
To migrate to another server first ensure you have sufficient quota on it, then run the migrate command on it. 
> java -jar Peergos.jar migrate

It will ask for your username and password, mirror all your data locally, and then update the PKI to make this your home server. 

After migration, your identity is unchanged, all links to your data continue to work, and you keep your social graph without needing to tell anyone. 

Shell
--------
Various operation can be done using the shell.
```shell
java -jar Peergos.jar shell
```

To connect to a server you will need to provide the server address (including http/https), username and password.
```shell
Enter Server address
> https://peergos.net
Enter username
> demo
Enter password for 'demo'
> **************************************
Generating keys
Logging in
Retrieving Friends
demo@https://peergos.net >
```

To show all available commands
```shell
demo@https://peergos.net > help
```

Hint: The following command might be useful to do an initial upload for larger folders.
```shell
put local_path remote_path 
```

Sync
-----
There is a bi-directional sync client that will let you sync a native directory with a Peergos directory (or several pairs of directories). The recommended way to setup syncs is to use the desktop/mobile app. Run the app and login to the browser tab it opens to http://localhost:7777, and click on the sync icon in the left side bar. From there you can choose a host and Peergos folder to sync, and whether or not to sync deletes on either or both ends. 

If for some reason you must use the CLI then continue reading. 

To set this up first run:
```
>> java -jar Peergos.jar sync init -peergos-url https://peergos.net
```
And follow the prompts to enter your username, password and the Peergos dir you want to sync with. This will output something like:
```
>> Run the sync dir command with the following args: -links secret/z59vuwzfFDomTEuyeEw7rkofcd2vt5EnVffmAy5fnQe9V9MG36ZiBVY/3615659421#QUq6mf4gz8uk -local-dirs $LOCAL_DIR
```

Then run the sync client with:
```
>> java -jar Peergos.jar sync dir -peergos-url https://peergos.net -links secret/z59vuwzfFDomTEuyeEw7rkofcd2vt5EnVffmAy5fnQe9V9MG36ZiBVY/3615659421#QUq6mf4gz8uk -local-dirs /path/to/local/dir
```

FUSE (native folder mounting of Peergos)
--------
You can mount your Peergos space with the following command
```
>> java -Djava.library.path=native-lib -jar Peergos.jar fuse -peergos-url https://peergos.net -username $username -password $password
```

### MacOS FUSE prerequisites
Install osxfuse with
```
>> brew install --cask osxfuse
```

### Windows FUSE prerequisites
Install winfsp with
```
>> choco install winfsp
```

Webdav
------
You can run a local webdav bridge which allows you to access your Peergos files with any webdav compatible client. Run the following command (choose an arbitrary webdav username and password): 
```
>> peergos webdav -peergos-url https://peergos.net -username $username -PEERGOS_PASSWORD $password -webdav.username $webdav-username -PEERGOS_WEBDAV_PASSWORD $webdav-password
```
You can then browse to your home directory with http://localhost:8090/$YOUR-USERNAME

Development
--------
### Dependencies
Requires jdk17 and ant to build. Use the following to install dependencies:
#### On debian
```shell
sudo apt-get install ant
sudo apt-get install openjdk-17-jdk
```
#### On macOS
```shell
brew install ant # installs openjdk as a dependency
ant -version
Apache Ant(TM) version 1.10.8 compiled on May 10 2020
```
### Build
Note that this doesn't include any web ui. For the full build including the web interface build https://github.com/peergos/web-ui
```shell
ant dist
```
### Cross compile to JS
```shell
ant gwtc
```
### Run tests
You need to have ant-optional installed:
#### On debian
```shell
sudo apt-get install ant-optional
```
#### On macOS
Nothing additional is needed for the ant package on macOS.

Running tests will install and configure the correct version of IPFS automatically, run the daemon, and terminate it afterwards. 
```shell
ant test
```

### Development Notes
The ``ant compile`` target will only compile sources in src/peergos/{client,server,shared} folders.


================================================
FILE: ReproducibleJar.java
================================================
import java.io.*;
import java.net.*;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;
import java.util.stream.*;
import java.util.zip.*;

public class ReproducibleJar {
    public static void main(String[] args) throws Exception {
        Path inputJar = Paths.get(args[0]);
        long timeStamp = Long.parseLong(args[1]);

        URI uri = URI.create("jar:" + inputJar.toUri());
        byte[] newJar;
        try (FileSystem fs = FileSystems.newFileSystem(uri, Collections.emptyMap())) {
            Iterable<Path> roots = fs.getRootDirectories();
            Path root = roots.iterator().next();
            newJar = setAllTimes(root, FileTime.fromMillis(timeStamp));
        }
        Files.write(inputJar, newJar, StandardOpenOption.TRUNCATE_EXISTING);
    }

    private static byte[] setAllTimes(Path root, FileTime lastModified) {
        Map<Path, byte[]> files = new TreeMap<>();
        try {
            Set<Path> all = Files.walk(root).collect(Collectors.toSet());
            for (Path p: all) {
                if (! Files.isDirectory(p))
                    files.put(p, Files.readAllBytes(p));
            }
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            ZipOutputStream zout = new ZipOutputStream(bout);
            for (Path p: files.keySet()) {
                ZipEntry zipEntry = new ZipEntry(p.toString().substring(1));
                zipEntry.setLastModifiedTime(lastModified);
                zout.putNextEntry(zipEntry);
                zout.write(files.get(p));
                zout.closeEntry();
            }
            zout.close();
            return bout.toByteArray();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}


================================================
FILE: RoadMap.md
================================================
![Peergos Logo](https://peergos.org/theme/img/peergos/logo-main.svg)

Peergos Road Map
========


Centralized Alpha
------------
 - &#10004; Stable web interface and data formats (at least pre-crdt)
 - &#10004; Streaming E2E encrypted video (streaming disabled by default)
 - &#10004; Streaming download of arbitrarily large files (disabled by default)
 - &#10004; Max user count to deny new user signups after some limit (And display error to user)
 - &#10004; Max storage quota per user (enforced on puts) and error shown to user
 - &#10004; Whitelist of users that can write to this server
 - &#10004; Blacklist of users that can't be read from this server (illegal content guard)
 
Decentralized writes + Self-hostable storage
------------
 - &#10004;Each user stores an ipfs node id (cid) in their PKI which is the server responsible for storing their data
 - &#10004;Implement MutablePointers and SocialNetwork in terms of ipfs p2p stream
 - &#10004;Mirror core node PKI on every node for private friend lookups
 - &#10004;Implement corenode in terms of ipfs p2p stream to allow self hosting in ipfs itself

Keymail
------------
 - Initially don't need much UI other than upload text file for keymail an select recipient
 - Application to display and edit text (ideally by granting app write access only to a hidden keymail folder)
 - Decide format, information compatible with email headers
 - Bridge to email - a client that polls an email account, writing newly received emails into peergos, and sending emails from new files in a particular folder

Group chat
------------
 - owner invite others
 - owner can grant admin to others (admin => they can invite new users)
 - allow inline pictures
 - be careful about leaking social metadata accidentally

Social Feed
------------
 - Essentially just a group chat that is for most (all?) your friends, but similar to a Facebook or Twitter feed

Fully Quantum proof
------------
 - Move asymmetric crypto (follow requests and signing roots) to a post-quantum algorithm
 - http://sphincs.cr.yp.to/software.html
 - https://www.win.tue.nl/~tchou/mcbits/
  - Zk-SNARKs for follow requests? https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

Sustainable
------------
 - Use cryptocurrency to pay for username claims, must be privacy preserving, and post-quantum


================================================
FILE: build.xml
================================================
<project name="Peergos" default="dist" basedir=".">
  <description>
    Building Peergos
  </description>

  <!-- Need to run "sudo apt-get install ant-optional" -->
  <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
      <fileset dir="ant.lib"/>
    </classpath>
  </taskdef>
  
  <property name="src" location="src"/>
  <property name="test.sources" location="src"/>
  <property name="build" location="build"/>
  <property name="dist" location="dist"/>
  <property name="test.reports" location="test.reports"/>
  <property name="timestamp.millis" value="1489731900000"/>

  <path id="dep.runtime">
    <fileset dir="./lib">
        <include name="**/*.jar" />
    </fileset>
  </path>

  <path id="dep.build">
    <fileset dir="./lib-build">
        <include name="**/*.jar" />
    </fileset>
  </path>

  <!-- Arguments to gwtc and devmode targets, set style to Obfuscated for 3X smaller output-->
  <property name="gwt.args" value="-generateJsInteropExports -style Pretty -strict" />

  <!-- Configure path to GWT SDK -->
  <!--<property name="gwt.sdk" location="/home/ian/gwt-2.8.0-rc1" />-->
  <property name="gwt.sdk" location="gwt/gwt-2.8.3" />


  <path id="project.class.path">
    <pathelement location="war/WEB-INF/classes"/>
    <pathelement location="${gwt.sdk}/gwt-user.jar"/>
    <pathelement location="${gwt.sdk}/gwt-dev.jar"/>
    <pathelement location="${gwt.sdk}/validation-api-1.0.0.GA.jar"/>
    <pathelement location="${gwt.sdk}/validation-api-1.0.0.GA-sources.jar"/>
    <fileset dir="war/WEB-INF/lib" includes="**/*.jar"/>
    <!-- Add any additional non-server libs (such as JUnit) here -->
    <pathelement location="lib-build/junit-4.11.jar"/>
    <pathelement location="lib-build/hamcrest-core-1.3.jar"/>
  </path>
  
  <target name="init">
    <mkdir dir="${build}"/>
    <mkdir dir="${test.reports}"/>
  </target>

  <target name="compile" depends="clean, init"
        description="compile the source">
    <javac source="17" target="17" encoding="UTF-8" includeantruntime="false" destdir="${build}" debug="true" debuglevel="lines,vars,source">
      <src>
	<pathelement location="${src}/peergos/shared"/>
	<pathelement location="${src}/peergos/server"/>
	<pathelement location="${src}/peergos/client"/>
      </src>
      <classpath>
	<fileset dir="lib">
          <include name="**/*.jar" />
        </fileset>
	<fileset dir="lib-build">
          <include name="**/*.jar" />
        </fileset>
      </classpath>
    </javac>
  </target>

  <target name="dist" depends="compile" description="generate the distribution">
    <mkdir dir="${dist}/lib"/>
    <copy todir="${dist}/lib">
      <fileset dir="lib"/>
    </copy>
    <copy todir="${build}/native-lib">
      <fileset dir="native-lib"/>
    </copy>
    <manifestclasspath property="manifest_cp" jarfile="myjar.jar">
      <classpath refid="dep.runtime" />
    </manifestclasspath>
    <jar jarfile="${dist}/Peergos.jar" basedir="${build}" includes="peergos/server/**,peergos/shared/**,peergos/client/**,native-lib/**,pki/**">
      <manifest>
        <attribute name="Main-Class" value="peergos.server.Main"/>
        <attribute name="Class-Path" value="${manifest_cp}"/>
        <attribute name="Multi-Release" value="true"/>
        <attribute name="Created-By" value="Java"/>
        <attribute name="Ant-Version" value="Ant"/>
      </manifest>
    </jar>
    <exec executable="java">
      <arg value="ReproducibleJar.java"/>
      <arg value="${dist}/Peergos.jar"/>
      <arg value="${timestamp.millis}"/>
    </exec>
    <copy todir=".">
      <fileset file="${dist}/Peergos.jar"/>
    </copy>
  </target>

  <target name="test" depends="parallel_test">
    <exec executable="java" failonerror="true">
      <arg value="PrintTestErrors.java"/>
    </exec>
  </target> 

  <target name="execute.test">
    <!-- we need to have relative path -->
    <pathconvert property="test.source.relative">
      <fileset file="${test.source.absolute}" />
      <map from="${test.sources}/" to="" />
    </pathconvert>
    <!-- run one particular test -->
    <junit fork="true" printsummary="true" haltonfailure="no">
      <jvmarg value="-Xmx4g"/>
      <jvmarg value="-Djava.library.path=native-lib"/>
      <jvmarg value="--enable-native-access=ALL-UNNAMED"/>
      <jvmarg value="--sun-misc-unsafe-memory-access=allow"/>
      <classpath>
	<fileset dir="lib-build">
	  <include name="**/*.jar"/>
	</fileset>
	<fileset dir="lib">
	  <include name="**/*.jar"/>
	</fileset>
	<pathelement location="${build}" />
      </classpath>
      <formatter type="xml" />
      <batchtest todir="${test.reports}" skipNonTests="true">
	<fileset dir="${test.sources}">
          <filename name="${test.source.relative}" />
	</fileset>
      </batchtest>
    </junit>
  </target>

  <target name="parallel_test" depends="compile,dist,linux_tests">
    <for
	keepgoing="false"
	threadCount="1"
	parallel="true"
	param="test.source.absolute">
      <path>
	<fileset dir="${test.sources}">
	  <include name="peergos/server/tests/*.java"/>
	</fileset>
      </path>
      <sequential>
	<antcall target="execute.test">
	  <param name="test.source.absolute" value="@{test.source.absolute}"/>
	</antcall>
      </sequential>
    </for>
  </target>

  <condition property="isMac">
    <os family="mac" />
  </condition>
  <condition property="isLinux">
    <and>
      <os family="unix"/>
      <not>
        <os family="mac"/>
      </not>
    </and>
  </condition>
  
  <target name="linux_tests" depends="compile,dist" if="isLinux">
    <for
	keepgoing="false"
	threadCount="1"
	parallel="true"
	param="test.source.absolute">
      <path>
	<fileset dir="${test.sources}">
	  <include name="peergos/server/tests/linux/*.java"/>
	</fileset>
      </path>
      <sequential>
	<antcall target="execute.test">
	  <param name="test.source.absolute" value="@{test.source.absolute}"/>
	</antcall>
      </sequential>
    </for>
  </target>

  <target name="ipfs_tests" depends="compile,dist">
    <for
	keepgoing="false"
	threadCount="1"
	parallel="true"
	param="test.source.absolute">
      <path>
	<fileset dir="${test.sources}">
	  <include name="peergos/server/tests/IpfsUserTests.java"/>
	</fileset>
      </path>
      <sequential>
	<antcall target="execute.test">
	  <param name="test.source.absolute" value="@{test.source.absolute}"/>
	</antcall>
      </sequential>
    </for>
  </target>

  <!-- GWT stuff -->

  
  <target name="libs" description="Copy libs to WEB-INF/lib">
    <mkdir dir="war/WEB-INF/lib" />
    <copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet.jar" />
    <copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet-deps.jar" />
    <!-- Add any additional server libs that need to be copied -->
    <!-- <copy todir="war/WEB-INF/lib" file="lib/jnr-fuse-0.5.7-all.jar" />-->
  </target>

  <target name="javac" depends="libs" description="Compile java source to bytecode">
    <mkdir dir="war/WEB-INF/classes"/>
    <javac srcdir="src" encoding="utf-8"
        destdir="war/WEB-INF/classes"
        source="17" target="17" nowarn="true"
        debug="true" debuglevel="lines,vars,source">
        <include name="peergos/client/**" />
        <include name="peergos/shared/**" />
      <classpath refid="project.class.path"/>
    </javac>
    <copy todir="war/WEB-INF/classes">
      <fileset dir="src" excludes="**/*.java"/>
    </copy>
  </target>

  <target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler" maxmemory="8g">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
      </classpath>
      <arg value="-sourceLevel"/><arg value="11"/>
      <arg line="-war"/>
      <arg value="war"/>
      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg line="${gwt.args}"/>
      <arg value="peergos.Peergos"/>
    </java>
  </target>

  <target name="devmode" depends="javac" description="Run development mode (pass -Dgwt.args=-nosuperDevMode to fallback to classic DevMode)">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.DevMode" maxmemory="1g">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
        <pathelement location="${gwt.sdk}/gwt-codeserver.jar"/>
      </classpath>
      <arg value="-startupUrl"/>
      <arg value="Peergos.html"/>
      <arg line="-war"/>
      <arg value="war"/>
      <!-- Additional arguments like -style PRETTY, -logLevel DEBUG or -nosuperDevMode -->
      <arg line="${gwt.args}"/>
      <arg value="peergos.Peergos"/>
      <arg value="peergos.Peergos"/>
    </java>
  </target>
  
  <target name="clean" description="clean up">
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
    <delete dir="${dist}"/>
    <delete dir="war"/>
  </target>
</project>


================================================
FILE: feedback/notes.md
================================================
# Design patterns for the Dweb

User testing 2019-06-29

## Who was there?

* Ramine Daribiha (shokunin)
* Victor Rortvedt
* Gorka Ludlow (aquigorka)
* Makoto
* Akshay (aksanoble)

## Impressions

1. It's a thing for uploading files
2. It's to upload any file.
3. Didn't look a photo gallery (not file specific)
4. Not for music
5. For very private but somehow also public
6. For small content (because of small allowance)
7. Kind of like Pastebin
8. It's for data that you care about, 
9. No other service needed.
10. Encrypted, difficult to hack.
11. Dropbox equivalent.
12. Is it for sharing or is it for backup?

## How should it work (jobs to be done)?

Gorka

1. Should be as seamless as going into any browser and dragging and dropping between file browser.
2. Context menu -- when you right-click 
3. Open with native application when opening in Peergos.
4. Moving large files should show a progress bar.
5. Only people who you've shared the folder with could read/write to the folder.
6. Dropbox without Dropbox.

Akshay

1. Immediately share content with someone over a LAN (dropbox for LAN)
2. Find a name for someone nearby, click send, they go to a page and can then download it immediately (encrypted on the way).
3. Mesh network solution

Victor

1. Sharing securely - it first tells me that I am in a safe environment. Need a visualization of "safety". Files are transformed and given a logo. 
2. When it is sent, something that shows it was shared securely. 
3. Visual optionality of being able to retract.
4. Has the recipient received it?
5. OK when uploading should be 'Dismiss'

Makoto

1. Some visual handshake to verify that the person you are sharing with is who you think they are. 
2. Some verification task?
3. Would probably end up verifying over some channel before sharing.
4. Need a shiboleth
5. Finds keybase super-annoying (can copy text but can't take a screen shot)

Ramine

1. Visualizations of encryption, manifest of what has been shared.
2. Key folder.

## Solutions

### Triage

Four options:

1. Drag and drop (8)
2. Mesh network sharing (3)
3. Everything is visually super-encrypted. (7)
4. Sharing and interactively verification (people would pay money for this). (9)
-- Diffie Hellman authentication?
-- Swap public keys over email, chat
-- Add and prove.

-- Generate a 4 digit PIN and send it to that person over another channel. Verify that your follower has received it before your confirm your would like o

-- Send a link for the person to accept the follow request.

What is the cost of delay?


================================================
FILE: gwt/BUILD-GWT.txt
================================================
Built using the instructions on: http://www.gwtproject.org/makinggwtbetter.html#compiling
built from githash c5fd90c6d 6/nov/2019 with the commit 62e0d9a92 1/nov/2017 reversed

build command:
ant -Dgwt.version=2.8.3

















.

================================================
FILE: gwt/gwt-2.8.3/COPYING
================================================
           GWT LICENSE INFORMATION

March 3, 2008

The GWT software and sample code developed by the GWT authors is
licensed under the Apache License, v. 2.0. Other software included in this
distribution is provided under other licenses, as listed in the Included
Software and Licenses section at the bottom of this page. Source code for
software included in this distribution is available from the GWT
project or as otherwise indicated at the bottom of this page.

Please note that the executable version of the GWT SDK
distributed by Google will communicate with Google's servers to check for
available updates. If updates are available, you will receive the option to
install them.

=====

Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/ 

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction, and 
distribution as defined by Sections 1 through 9 of this document. 

"Licensor" shall mean the copyright owner or entity authorized by the 
copyright owner that is granting the License. 

"Legal Entity" shall mean the union of the acting entity and all other 
entities that control, are controlled by, or are under common control with 
that entity. For the purposes of this definition, "control" means (i) the 
power, direct or indirect, to cause the direction or management of such 
entity, whether by contract or otherwise, or (ii) ownership of fifty percent 
(50%) or more of the outstanding shares, or (iii) beneficial ownership of 
such entity. 

"You" (or "Your") shall mean an individual or Legal Entity exercising 
permissions granted by this License. 

"Source" form shall mean the preferred form for making modifications, 
including but not limited to software source code, documentation source, and 
configuration files. 

"Object" form shall mean any form resulting from mechanical transformation 
or translation of a Source form, including but not limited to compiled 
object code, generated documentation, and conversions to other media types. 

"Work" shall mean the work of authorship, whether in Source or Object form, 
made available under the License, as indicated by a copyright notice that is 
included in or attached to the work (an example is provided in the Appendix 
below). 

"Derivative Works" shall mean any work, whether in Source or Object form, 
that is based on (or derived from) the Work and for which the editorial 
revisions, annotations, elaborations, or other modifications represent, as a 
whole, an original work of authorship. For the purposes of this License, 
Derivative Works shall not include works that remain separable from, or 
merely link (or bind by name) to the interfaces of, the Work and Derivative 
Works thereof. 

"Contribution" shall mean any work of authorship, including the original 
version of the Work and any modifications or additions to that Work or 
Derivative Works thereof, that is intentionally submitted to Licensor for 
inclusion in the Work by the copyright owner or by an individual or Legal 
Entity authorized to submit on behalf of the copyright owner. For the 
purposes of this definition, "submitted" means any form of electronic, 
verbal, or written communication sent to the Licensor or its 
representatives, including but not limited to communication on electronic 
mailing lists, source code control systems, and issue tracking systems that 
are managed by, or on behalf of, the Licensor for the purpose of discussing 
and improving the Work, but excluding communication that is conspicuously 
marked or otherwise designated in writing by the copyright owner as "Not a 
Contribution." 

"Contributor" shall mean Licensor and any individual or Legal Entity on 
behalf of whom a Contribution has been received by Licensor and subsequently 
incorporated within the Work. 

2. Grant of Copyright License. Subject to the terms and conditions of this 
License, each Contributor hereby grants to You a perpetual, worldwide, 
non-exclusive, no-charge, royalty-free, irrevocable copyright license to 
reproduce, prepare Derivative Works of, publicly display, publicly perform, 
sublicense, and distribute the Work and such Derivative Works in Source or 
Object form. 

3. Grant of Patent License. Subject to the terms and conditions of this 
License, each Contributor hereby grants to You a perpetual, worldwide, 
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in 
this section) patent license to make, have made, use, offer to sell, sell, 
import, and otherwise transfer the Work, where such license applies only to 
those patent claims licensable by such Contributor that are necessarily 
infringed by their Contribution(s) alone or by combination of their 
Contribution(s) with the Work to which such Contribution(s) was submitted. 
If You institute patent litigation against any entity (including a 
cross-claim or counterclaim in a lawsuit) alleging that the Work or a 
Contribution incorporated within the Work constitutes direct or contributory 
patent infringement, then any patent licenses granted to You under this 
License for that Work shall terminate as of the date such litigation is 
filed. 

4. Redistribution. You may reproduce and distribute copies of the Work or 
Derivative Works thereof in any medium, with or without modifications, and 
in Source or Object form, provided that You meet the following conditions: 

a. You must give any other recipients of the Work or Derivative Works a copy 
of this License; and 

b. You must cause any modified files to carry prominent notices stating that 
You changed the files; and 

c. You must retain, in the Source form of any Derivative Works that You 
distribute, all copyright, patent, trademark, and attribution notices from 
the Source form of the Work, excluding those notices that do not pertain to 
any part of the Derivative Works; and 

d. If the Work includes a "NOTICE" text file as part of its distribution, 
then any Derivative Works that You distribute must include a readable copy 
of the attribution notices contained within such NOTICE file, excluding 
those notices that do not pertain to any part of the Derivative Works, in at 
least one of the following places: within a NOTICE text file distributed as 
part of the Derivative Works; within the Source form or documentation, if 
provided along with the Derivative Works; or, within a display generated by 
the Derivative Works, if and wherever such third-party notices normally 
appear. The contents of the NOTICE file are for informational purposes only 
and do not modify the License. You may add Your own attribution notices 
within Derivative Works that You distribute, alongside or as an addendum to 
the NOTICE text from the Work, provided that such additional attribution 
notices cannot be construed as modifying the License.

You may add Your own copyright statement to Your modifications and may 
provide additional or different license terms and conditions for use, 
reproduction, or distribution of Your modifications, or for any such 
Derivative Works as a whole, provided Your use, reproduction, and 
distribution of the Work otherwise complies with the conditions stated in 
this License. 

5. Submission of Contributions. Unless You explicitly state otherwise, any 
Contribution intentionally submitted for inclusion in the Work by You to the 
Licensor shall be under the terms and conditions of this License, without 
any additional terms or conditions. Notwithstanding the above, nothing 
herein shall supersede or modify the terms of any separate license agreement 
you may have executed with Licensor regarding such Contributions. 

6. Trademarks. This License does not grant permission to use the trade 
names, trademarks, service marks, or product names of the Licensor, except 
as required for reasonable and customary use in describing the origin of the 
Work and reproducing the content of the NOTICE file. 

7. Disclaimer of Warranty. Unless required by applicable law or agreed to in 
writing, Licensor provides the Work (and each Contributor provides its 
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied, including, without limitation, any 
warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or 
FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining 
the appropriateness of using or redistributing the Work and assume any risks 
associated with Your exercise of permissions under this License. 

8. Limitation of Liability. In no event and under no legal theory, whether 
in tort (including negligence), contract, or otherwise, unless required by 
applicable law (such as deliberate and grossly negligent acts) or agreed to 
in writing, shall any Contributor be liable to You for damages, including 
any direct, indirect, special, incidental, or consequential damages of any 
character arising as a result of this License or out of the use or inability 
to use the Work (including but not limited to damages for loss of goodwill, 
work stoppage, computer failure or malfunction, or any and all other 
commercial damages or losses), even if such Contributor has been advised of 
the possibility of such damages. 

9. Accepting Warranty or Additional Liability. While redistributing the Work 
or Derivative Works thereof, You may choose to offer, and charge a fee for, 
acceptance of support, warranty, indemnity, or other liability obligations 
and/or rights consistent with this License. However, in accepting such 
obligations, You may act only on Your own behalf and on Your sole 
responsibility, not on behalf of any other Contributor, and only if You 
agree to indemnify, defend, and hold each Contributor harmless for any 
liability incurred by, or claims asserted against, such Contributor by 
reason of your accepting any such warranty or additional liability. 

===

LICENSE INFORMATION REGARDING BUNDLED THIRD-PARTY SOFTWARE

The following third party software is distributed with GWT
and is provided under other licenses and/or has source 
available from other locations. Where "gwt-dev.jar" is listed, 
substitute in the name of the jar corresponding to your platform, 
e.g. "gwt-dev-linux.jar".

* Apache Tomcat
  License: Apache License v. 2.0 (above)
  Source code availability: http://tomcat.apache.org
    modifications are at org/apache/tomcat/ within gwt-dev.jar

* Apache Tapestry
  License: Apache License v. 2.0 (above)
  Source code availability: http://tapestry.apache.org

* ASM 3.1
  License: (custom)
    http://asm.objectweb.org/license.html
  Source code availability: com/google/gwt/dev/asm/ within gwt-dev.jar
  
* Eclipse Java Development Tools (JDT)
  License: Eclipse Public License v. 1.0 
    http://www.eclipse.org/legal/epl-v10.html
  Source code availability:
    http://archive.eclipse.org/eclipse/downloads/drops/R-3.3.1-200709211145/download.php?dropFile=eclipse-JDT-SDK-3.3.1.zip

* Eclipse Standard Widget Toolkit (SWT)
  License: Eclipse Public License v. 1.0
    http://www.eclipse.org/legal/epl-v10.html
  Source code availability:
    Linux: http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-gtk-linux-x86.zip
    Windows: http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-win32-win32-x86.zip
    Mac: http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-carbon-macosx.zip
    modifications are at org/eclipse/swt/ within gwt-dev.jar

* Jetty
  License: Apache License v. 2.0 (above)
  Source code availability:
    http://mortbay.org/jetty/

* Mozilla Rhino
  License: Mozilla Public License v. 1.1
    http://www.mozilla.org/MPL/MPL-1.1.txt
  Source code availability: com/google/gwt/dev/js/rhino/ within gwt-dev.jar

* Mozilla 1.7.12 (Linux only)
  License: Mozilla Public License v. 1.1
    http://www.mozilla.org/MPL/MPL-1.1.txt
  Source code availability: 
    http://developer.mozilla.org/en/docs/Download_Mozilla_Source_Code

* Protobuf
  License: New BSD License
    http://www.opensource.org/licenses/bsd-license.php
  Source code availablility:
    http://code.google.com/p/protobuf/source/checkout
  Binary modifications consist of package-rebasing. The rebased classes are rooted at com/google/gwt/dev/protobuf/ within gwt-dev.jar


================================================
FILE: gwt/gwt-2.8.3/COPYING.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>

<meta http-equiv="content-type" content="text/html; charset=utf-8">

<title>Google Web Toolkit License Information</title>

<style type="text/css">

p.heading {
    font-weight: bold;
}

.licenses {
    border-collapse: separate;
}

.licenses th {
    text-align: left;
    background-color: #ccccff;
    padding: 3px;
}

.licenses td {
    background-color: #f4f4f4;
    padding: 3px;
    text-align: left;
    vertical-align: top;
}

.licenses tr.even td {
    background-color: #eeeeee;
}

</style></head>

<body>
    
<div id="body">



<h1>Google Web Toolkit License Information</h1>

<p>March 3, 2008</p>

<p>The Google Web Toolkit software and sample code developed by Google
is licensed under the Apache License, v. 2.0.  Other software included
in this distribution is provided under other licenses, as listed in the
Included Software and Licenses section at the bottom of this page.
Source code for software included in this distribution is available
from the
<a href="http://code.google.com/p/google-web-toolkit/">Google Web Toolkit</a>
project or as otherwise indicated at the bottom of this page.
</p>

<p>Please note that the executable version of the Google Web Toolkit
distributed by Google will communicate with Google's servers to check
for available updates.  If updates are available, you will receive the
option to install them.
</p>

<h2>Apache License, Version 2.0</h2>

<p>
Apache License<br>
Version 2.0, January 2004<br>
<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a>

</p>

<p><b><a name="definitions">1. Definitions</a></b>.</p>
<p>
      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.
</p>
<p>
      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.
</p>
<p>
      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

</p>
<p>
      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.
</p>
<p>
      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.
</p>
<p>
      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.
</p>
<p>
      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).
</p>

<p>
      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.
</p>
<p>
      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."
</p>
<p>
      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.
</p>
<p><b><a name="copyright">2. Grant of Copyright License</a></b>.
Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.
</p>
<p><b><a name="patent">3. Grant of Patent License</a></b>.
Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

</p>
<p><b><a name="redistribution">4. Redistribution</a></b>.
You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:
</p><ol type="a">
<li>You must give any other recipients of the Work or
          Derivative Works a copy of this License; and
<br> <br></li>

<li>You must cause any modified files to carry prominent notices
          stating that You changed the files; and
<br> <br></li>

<li>You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and
<br> <br></li>

<li>If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.</li>

</ol>
      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

<p><b><a name="contributions">5. Submission of Contributions</a></b>.
Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.
</p>
<p><b><a name="trademarks">6. Trademarks</a></b>.
This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.
</p>
<p><b><a name="no-warranty">7. Disclaimer of Warranty</a></b>.
Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.
</p>
<p><b><a name="no-liability">8. Limitation of Liability</a></b>.
In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.
</p>
<p><b><a name="additional">9. Accepting Warranty or Additional Liability</a></b>.
While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.
</p>

<a name="licenses"></a>
<h2>License Information regarding Bundled Third-Party Software</h2>

<p>The following third party software is distributed with Google Web
Toolkit and is provided under other licenses and/or has source available
from other locations.  Where "gwt-dev.jar" is listed, substitute in the
name of the jar corresponding to your platform, e.g. "gwt-dev-linux.jar".
</p>

<table class="licenses">
  <tbody><tr>
    <th>Package</th>
    <th>License</th>
    <th>Source Code Availability</th>
  </tr>
  <tr>
    <td class="package">Apache Tomcat</td>
    <td class="license">Apache License v. 2.0 (above)</td>
    <td class="location"><a href="http://tomcat.apache.org/">tomcat.apache.org</a>; modifications are at org/apache/tomcat/ within gwt-dev.jar</td>
  </tr>
  <tr class="even">
    <td class="package">Apache Tapestry</td>
    <td class="license">Apache License v. 2.0 (above)</td>
    <td class="location"><a href="http://tapestry.apache.org/">tapestry.apache.org</a></td>
  </tr>
  <tr>
    <td class="package">ASM 3.1</td>
    <td class="license">(<a href="http://asm.objectweb.org/license.html">custom</a>)</td>
    <td class="location">com/google/gwt/dev/asm/ within gwt-dev.jar</td>
  </tr>
  <tr>
    <td class="package">Eclipse Java Development Tools (JDT)</td>
    <td class="license"><a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License v. 1.0</a></td>
    <td class="location"><a href="http://archive.eclipse.org/eclipse/downloads/drops/R-3.3.1-200709211145/download.php?dropFile=eclipse-JDT-SDK-3.3.1.zip">eclipse.org</a></td>
  </tr>
  <tr class="even">
    <td class="package">Eclipse Standard Widget Toolkit (SWT)</td>
    <td class="license"><a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License v. 1.0</a></td>
    <td class="location">
    <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-gtk-linux-x86.zip">Linux</a>,
    <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-win32-win32-x86.zip">Windows</a>, and
    <a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/download.php?dropFile=swt-3.2.1-carbon-macosx.zip">Mac</a>;
    modifications are at org/eclipse/swt/ within gwt-dev.jar
    </td>
  </tr>
  <tr>
    <td class="package">Jetty 6.1.11</td>
    <td class="license">Apache License v. 2.0 (above)</td>
    <td class="location"><a href="http://mortbay.org/jetty/">mortbay.org/jetty</a></td>
  </tr>
  <tr class="even">
    <td class="package">Mozilla Rhino</td>
    <td class="license"><a href="http://www.mozilla.org/MPL/MPL-1.1.txt">Mozilla Public License v. 1.1</a></td>
    <td class="location">com/google/gwt/dev/js/rhino/ within gwt-dev.jar</td>
  </tr>
  <tr>
    <td class="package">Mozilla 1.7.12 (Linux only)</td>
    <td class="license"><a href="http://www.mozilla.org/MPL/MPL-1.1.txt">Mozilla Public License v. 1.1</a></td>
    <td class="location"><a href="http://developer.mozilla.org/en/docs/Download_Mozilla_Source_Code">mozilla.org</a></td>
  </tr>
  <tr class="even">
    <td class="package">Protobuf</td>
    <td class="license"><a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a></td>
    <td class="location">
      <a href="http://code.google.com/p/protobuf/source/checkout">code.google.com/p/protobuf</a>;
      binary modifications consist of package-rebasing. The rebased classes are rooted at com/google/gwt/dev/protobuf/ within gwt-dev.jar
    </td>
  </tr>
</tbody></table>

</div> 

</body></html>


================================================
FILE: gwt/gwt-2.8.3/about.html
================================================
<html>

   <head>
      <title>Google Web Toolkit 2.8.3</title>
      <style>
         body {
            background-color: white;
            color: black;
            font-family: Arial, sans-serif;
            font-size: 10pt;
            margin: 20px;
            overflow: hidden;
         }

         #title {
            font-size: 14pt;
            font-weight: bold;
         }

         #title a {
            text-decoration: none;
         }

         #version {
            font-size: 8pt;
            font-weight: bold;
            text-align: right;
         }
         
         #intro {
            margin: 10px 0px 10px 0px ;
         }
         
         #attribs {
         }
         
      </style>
   </head>

   <body>
      <table align="center">
         <tr>
            <td id="title"><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></td>
         </tr>
         <tr>
            <td id="version">Version 2.8.3 <br> (Git revision 0d0b5d352)</td>
         </tr>
      </table>

      <hr/>

      <div id="intro">
         Copyright &copy; 2009 <a href="http://www.google.com/">Google Inc.</a>
         All rights reserved.  
         All other product, service names, brands, or trademarks, are the property of their respective owners.
      </div>

      <div id="attribs">
         This product includes software developed by
         <ul>
            <li>
                The <a href="http://www.apache.org/">Apache Software Foundation</a>
                <ul>
                    <li><a href="http://tomcat.apache.org/">Tomcat</a> (with modifications)</li>
                    <li><a href="http://tapestry.apache.org/">Tapestry</a></li>
                </ul
            </li>
            <li>
                The <a href="http://www.eclipse.org/">Eclipse Foundation</a>
                <ul>
                    <li><a href="http://www.eclipse.org/jdt/">Java Development Tools</a></li>
                    <li><a href="http://www.eclipse.org/swt/">Standard Widget Toolkit</a> (with modifications)</li>
                </ul
            </li>
            <li>The <a href="http://www.mortbay.com/">Mort Bay Consulting</a>
              <ul>
                <li><a href="http://mortbay.org/jetty/">Jetty 6.1.11</a> </li>
              </ul>
            </li>
            <li>
                The <a href="http://www.mozilla.org/">Mozilla Foundation</a>
                <ul>
                    <li><a href="http://www.mozilla.org/releases/mozilla1.7.12/">Mozilla 1.7.12</a></li>
                    <li><a href="http://www.mozilla.org/rhino/">Rhino</a> (with modifications)</li>
                </ul
            </li>
            <li>The <a href="http://www.objectweb.org/">ObjectWeb</a>
              <ul>
                <li><a href="http://asm.objectweb.org/">ASM</a> (with modifications)</li>
              </ul>
            </li>
            <li>The <a href="http://openqa.org/">OpenQA Project</a>
              <ul>
                <li><a href="http://selenium-rc.openqa.org/">Selenium-RC</a> </li>
              </ul>
            </li>
            <li>The <a href="http://code.google.com/p/protobuf/">Protobuf Project</a> (with modifications)</li>
         </ul>
         For source availability and license information see COPYING.html.

      </div>
      
   </body>

</html>


================================================
FILE: gwt/gwt-2.8.3/about.txt
================================================
GWT 2.8.3
(git revision 0d0b5d352)
Copyright (c) Google, Inc. 2009.  All rights reserved.
Visit http://www.gwtproject.org.

This product includes software developed by:
 - The Apache Software Foundation (http://www.apache.org/).
   - Tomcat (http://tomcat.apache.org/) with modifications
   - Tapestry (http://tapestry.apache.org/)
 - The Eclipse Foundation (http://www.eclipse.org/).
   - Java Development Tools (http://www.eclipse.org/jdt/)
   - Standard Widget Toolkit (http://www.eclipse.org/swt/) with modifications
 - Mort Bay Consulting (http://www.mortbay.com/)
   - Jetty 6.1.11 (http://mortbay.org/jetty/)
 - The Mozilla Foundation (http://www.mozilla.org/).
   - Mozilla 1.7.12 (http://www.mozilla.org/releases/mozilla1.7.12/)
   - Rhino (http://www.mozilla.org/rhino/) with modifications
 - ObjectWeb (http://www.objectweb.org/)
   - ASM (http://asm.objectweb.org/) with modifications
 - The OpenQA Project (http://openqa.org/)
   - Selenium-RC (http://selenium-rc.openqa.org/)
 - The Protobuf Project (http://code.google.com/p/protobuf/) with modifications

For source availability and license information see COPYING.


================================================
FILE: gwt/gwt-2.8.3/gwt-dev.jar
================================================
[File too large to display: 43.1 MB]

================================================
FILE: gwt/gwt-2.8.3/gwt-module.dtd
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--                                                                        -->
<!-- Copyright 2008 Google Inc.                                             -->
<!-- Licensed under the Apache License, Version 2.0 (the "License"); you    -->
<!-- may not use this file except in compliance with the License. You may   -->
<!-- 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. License for the specific language governing permissions and   -->
<!-- limitations under the License.                                         -->

<!-- The module root element -->
<!ELEMENT module (inherits | source | public | super-source | entry-point | 
  stylesheet | script | servlet | replace-with | generate-with |
  define-property | extend-property | set-property | set-property-fallback |
  clear-configuration-property | define-configuration-property |
  extend-configuration-property | set-configuration-property |
  property-provider | define-linker | add-linker | collapse-all-properties |
  collapse-property)*>
<!ATTLIST module
	rename-to CDATA #IMPLIED
>
<!-- Inherit the contents of another module -->
<!ELEMENT inherits EMPTY>
<!ATTLIST inherits
	name CDATA #REQUIRED
>
<!-- Specify the source path, relative to the classpath location of the module descriptor -->
<!ELEMENT source (include | exclude)*>
<!ATTLIST source
	path CDATA #REQUIRED
	includes CDATA #IMPLIED
	excludes CDATA #IMPLIED
	defaultexcludes (yes | no) "yes"
	casesensitive (true | false) "true"
>
<!-- Specify the public resource path, relative to the classpath location of the module descriptor -->
<!ELEMENT public (include | exclude)*>
<!ATTLIST public
	path CDATA #REQUIRED
	includes CDATA #IMPLIED
	excludes CDATA #IMPLIED
	defaultexcludes (yes | no) "yes"
	casesensitive (true | false) "true"
>
<!-- Specify a source path that rebases subpackages into the root namespace -->
<!ELEMENT super-source (include | exclude)*>
<!ATTLIST super-source
	path CDATA #REQUIRED
	includes CDATA #IMPLIED
	excludes CDATA #IMPLIED
	defaultexcludes (yes | no) "yes"
	casesensitive (true | false) "true"
>
<!ELEMENT include EMPTY>
<!ATTLIST include
	name CDATA #REQUIRED
>
<!ELEMENT exclude EMPTY>
<!ATTLIST exclude
	name CDATA #REQUIRED
>

<!-- Define a module entry point -->
<!ELEMENT entry-point EMPTY>
<!ATTLIST entry-point
	class CDATA #REQUIRED
>

<!-- Preload a stylesheet before executing the GWT application -->
<!ELEMENT stylesheet EMPTY>
<!ATTLIST stylesheet
	src CDATA #REQUIRED
>
<!-- Preload an external JavaScript file before executing the GWT application -->
<!ELEMENT script (#PCDATA)>
<!ATTLIST script
	src CDATA #REQUIRED
>
<!-- Map a named servlet class to a module-relative path in hosted mode -->
<!ELEMENT servlet EMPTY>
<!ATTLIST servlet 
	path CDATA #REQUIRED
	class CDATA #REQUIRED
>

<!-- Adds a Linker to the compilation process -->
<!ELEMENT add-linker EMPTY>
<!-- A comma-separated list of linker names -->
<!ATTLIST add-linker
	name CDATA #REQUIRED
>

<!-- Defines a Linker type to package compiler output -->
<!ELEMENT define-linker EMPTY>
<!ATTLIST define-linker
	class CDATA #REQUIRED
	name CDATA #REQUIRED
>

<!--                 ^^^ Commonly-used elements ^^^                -->
<!--                VVV Deferred binding elements VVV              -->

<!-- All possible predicates -->
<!ENTITY % predicates "when-property-is | when-type-assignable | when-type-is | when-linker-added | all | any | none">
<!-- Define a property and allowable values (comma-separated identifiers) -->
<!ELEMENT define-property EMPTY>
<!ATTLIST define-property
	name CDATA #REQUIRED
	values CDATA #REQUIRED
>
<!-- Define a configuration property -->
<!ELEMENT define-configuration-property EMPTY>
<!ATTLIST define-configuration-property
	name CDATA #REQUIRED
	is-multi-valued CDATA #REQUIRED
>
<!-- Set the value of a previously-defined property -->
<!ELEMENT set-property (%predicates;)*>
<!ATTLIST set-property
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!-- Set the value of a previously-defined property -->
<!ELEMENT set-property-fallback EMPTY>
<!ATTLIST set-property-fallback
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!-- Set the value of a configuration property -->
<!ELEMENT set-configuration-property EMPTY>
<!ATTLIST set-configuration-property
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!-- Add additional allowable values to a property -->
<!ELEMENT extend-property EMPTY>
<!ATTLIST extend-property
	name CDATA #REQUIRED
	values CDATA #REQUIRED
	fallback-value CDATA #IMPLIED
>
<!-- Collapse property values to produce soft permutations -->
<!ELEMENT collapse-property EMPTY>
<!ATTLIST collapse-property
	name CDATA #REQUIRED
	values CDATA #REQUIRED
>
<!-- Collapse all deferred-binding properties to produce a single permutation -->
<!ELEMENT collapse-all-properties EMPTY>
<!ATTLIST collapse-all-properties
	value (true | false) "true"
>
<!-- Add additional allowable values to a configuration property -->
<!ELEMENT extend-configuration-property EMPTY>
<!ATTLIST extend-configuration-property
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!-- Remove all allowable values from a configuration property -->
<!ELEMENT clear-configuration-property EMPTY>
<!ATTLIST clear-configuration-property
	name CDATA #REQUIRED
>
<!-- Define a JavaScript fragment that will return the value for the named property at runtime -->
<!ELEMENT property-provider (#PCDATA)>
<!ATTLIST property-provider
	name CDATA #REQUIRED
	generator CDATA #IMPLIED
>
<!-- Deferred binding assignment to substitute a named class -->
<!ELEMENT replace-with (%predicates;)*>
<!ATTLIST replace-with
	class CDATA #REQUIRED
>
<!-- Deferred binding assignment to substitute a generated class -->
<!ELEMENT generate-with (%predicates;)*>
<!ATTLIST generate-with
	class CDATA #REQUIRED
>
<!-- Deferred binding predicate that is true when a named property has a given value-->
<!ELEMENT when-property-is EMPTY>
<!ATTLIST when-property-is
	name CDATA #REQUIRED
	value CDATA #REQUIRED
>
<!-- Deferred binding predicate that is true for types in the type system that are assignable to the specified type -->
<!ELEMENT when-type-assignable EMPTY>
<!ATTLIST when-type-assignable
	class CDATA #REQUIRED
>
<!-- Deferred binding predicate that is true for exactly one type in the type system -->
<!ELEMENT when-type-is EMPTY>
<!ATTLIST when-type-is
	class CDATA #REQUIRED
>
<!-- Deferred binding predicate that is true when there are linker with such name -->
<!ELEMENT when-linker-added EMPTY>
<!ATTLIST when-linker-added
	name CDATA #REQUIRED
>
<!-- Predicate that ANDs all child conditions -->
<!ELEMENT all (%predicates;)*>
<!-- Predicate that ORs all child conditions -->
<!ELEMENT any (%predicates;)*>
<!-- Predicate that NANDs all child conditions -->
<!ELEMENT none (%predicates;)*>


================================================
FILE: gwt/gwt-2.8.3/gwt-user.jar
================================================
[File too large to display: 16.9 MB]

================================================
FILE: gwt/gwt-2.8.3/i18nCreator
================================================
#!/bin/sh
HOMEDIR=`dirname $0`;
java -cp $HOMEDIR/gwt-user.jar:$HOMEDIR/gwt-dev.jar com.google.gwt.i18n.tools.I18NCreator "$@";


================================================
FILE: gwt/gwt-2.8.3/i18nCreator.cmd
================================================
@java -cp "%~dp0\gwt-user.jar;%~dp0\gwt-dev.jar" com.google.gwt.i18n.tools.I18NCreator %*


================================================
FILE: gwt/gwt-2.8.3/release_notes.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8">
      <title>Google Web Toolkit Release Notes</title>
      
      <style>
         body {
            background-color: white;
            color: black;
            font-family: Arial, sans-serif;
            font-size: large;
            margin: 20px;
         }
         a {
            color: blue;
            font-weight: bold;
         }
      </style></head>

   <body>
      <h1 style="margin-bottom: 0;">Google Web Toolkit Release Notes</h1>
      <p>
          Release notes can be found on the <a href="http://www.gwtproject.org/release-notes.html">GWT project hosting website</a>.
      </p>
   </body>
</html>


================================================
FILE: gwt/gwt-2.8.3/webAppCreator
================================================
#!/bin/sh
HOMEDIR=`dirname $0`;
java -cp $HOMEDIR/gwt-user.jar:$HOMEDIR/gwt-dev.jar com.google.gwt.user.tools.WebAppCreator "$@";


================================================
FILE: gwt/gwt-2.8.3/webAppCreator.cmd
================================================
@java -cp "%~dp0\gwt-user.jar;%~dp0\gwt-dev.jar" com.google.gwt.user.tools.WebAppCreator %*


================================================
FILE: lib/nabu-v0.9-jar-with-dependencies.jar
================================================
[File too large to display: 46.8 MB]

================================================
FILE: lib-build/gwt-user.jar
================================================
[File too large to display: 16.9 MB]

================================================
FILE: reproducible-test.sh
================================================
#!/bin/bash

ant dist
hash1=`sha256sum Peergos.jar`
ant dist
hash2=`sha256sum Peergos.jar`
if [[ $hash1 == $hash2 ]];
then
    exit 0
else
    exit -1
fi


================================================
FILE: scripts/ensure-compile.sh
================================================
#!/bin/bash

##
## To set this as the pre-commit hook do:
##
## ln -s $(git rev-parse --show-toplevel)/scripts/ensure-compile.sh $(git rev-parse --show-toplevel)/.git/hooks/pre-commit
##

echo "********************************"
echo " Checking if project compiles.."
echo "********************************"

if ! ant compile;
then 
    echo "Project failed to compile"
    exit 1
fi



================================================
FILE: src/peergos/Peergos.gwt.xml
================================================
<module rename-to='peergoslib'>

  <set-property name="compiler.useSourceMaps" value="false"/>
  <set-property name="user.agent" value="safari"/>
  
  <entry-point class='peergos.client.Start'/>
  <public path="gwt/resources"/>
  <super-source path="gwt/emu" />
  <source path="gwt">
    <exclude name="**/emu/**" />
  </source>
  <source path='client'/>
  <source path='shared'/>
  	<add-linker name="sso" />
</module>


================================================
FILE: src/peergos/client/ConsolePrintStream.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 peergos.client;

import java.io.OutputStream;
import java.io.PrintStream;

/** Print stream for GWT that prints to the browser console.
 * 
 * @author Stefan Haustein */
public class ConsolePrintStream extends PrintStream {

	StringBuilder buf = new StringBuilder();

	public ConsolePrintStream () {
		super((OutputStream)null);
	}

	public void print (String s) {

		while (true) {
			int cut = s.indexOf('\n');
			if (cut == -1) {
				break;
			}
			println(s.substring(0, cut));
			s = s.substring(cut + 1);
		}

		buf.append(s);
	}

	public native void consoleLog (String msg) /*-{
																if (window.console) {
																window.console.log(msg);
																} else {
																document.title = "LOG:" + msg;
																}
																}-*/;

	public void print (char c) {
		if (c == '\n') {
			println("");
		} else {
			buf.append(c);
		}
	}

	public void println () {
		println("");
	}

	@Override
	public void println (String s) {
		buf.append(s);
		consoleLog(buf.toString());
		buf.setLength(0);
	}

}


================================================
FILE: src/peergos/client/JsUtil.java
================================================
package peergos.client;

import jsinterop.annotations.*;
import peergos.shared.cbor.CborObject;
import peergos.shared.login.mfa.MultiFactorAuthResponse;
import peergos.shared.login.mfa.WebauthnResponse;
import peergos.shared.util.Either;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;

/** Utility methods to handle conversion between types necessary for Javascript interop
 *
 */
public class JsUtil {

    @JsMethod
    public static LocalDateTime fromUtcMillis(long millis) {
        return LocalDateTime.ofEpochSecond(millis/1_000, ((int)(millis % 1000)) * 1_000_000, ZoneOffset.UTC);
    }

    @JsMethod
    public static CborObject fromByteArray(byte[] cbor) {
        return CborObject.fromByteArray(cbor);
    }

    @JsMethod
    public static <T> List<T> asList(T[] array) {
        return Arrays.asList(array);
    }

    @JsMethod
    public static <T> Set<T> asSet(T[] array) {
        return Arrays.asList(array).stream().collect(Collectors.toSet());
    }

    @JsMethod
    public static <T> List<T> emptyList() {
        return Collections.emptyList();
    }

    @JsMethod
    public static <T> Optional<T> emptyOptional() {
        return Optional.empty();
    }

    @JsMethod
    public static <T> Optional<T> optionalOf(T of) {
        return Optional.of(of);
    }


    @JsMethod
    public static LocalDateTime now() {
        return LocalDateTime.now();
    }

    @JsMethod
    public static MultiFactorAuthResponse generateAuthResponse(byte[] credentialId, String code) {
        return new MultiFactorAuthResponse(credentialId, Either.a(code));
    }

    @JsMethod
    public static MultiFactorAuthResponse generateWebAuthnResponse(byte[] credentialId, byte[] authenticatorData,
                                                                   byte[] clientDataJson, byte[] signature) {
        WebauthnResponse resp = new WebauthnResponse(authenticatorData, clientDataJson, signature);
        return new MultiFactorAuthResponse(credentialId, Either.b(resp));
    }

}


================================================
FILE: src/peergos/client/PathUtils.java
================================================
package peergos.client;

import jsinterop.annotations.JsMethod;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class PathUtils {


    @JsMethod
    public static Path getFileName(Path another) {
        return another.getFileName();
    }

    @JsMethod
    public static Path subpath(Path another, int from, int to) {
        return another.subpath(from, to);
    }

    @JsMethod
    public static int getNameCount(Path another) {
        return another.getNameCount();
    }

    @JsMethod
    public static Path getParent(Path another) {
        return another.getParent();
    }

    @JsMethod
    public static Path directoryToPath(String[] parts) {
        if (parts == null || parts.length == 0) {
            throw new IllegalArgumentException("Invalid params");
        }else if (parts.length == 1) {
            return Paths.get(parts[0]);
        } else {
            List<String> pathFragments = Stream.of(parts).skip(1).collect(Collectors.toList());
            String[] remainder = pathFragments.toArray(new String[1]);
            return Paths.get(parts[0], remainder);
        }
    }

    @JsMethod
    public static Path toPath(String[] parts, String filename) {
        if (parts == null || parts.length == 0 || filename == null) {
            throw new IllegalArgumentException("Invalid params");
        }else if (parts.length == 1) {
            return Paths.get(parts[0], filename);
        } else {
            List<String> pathFragments = Stream.of(parts).skip(1).collect(Collectors.toList());
            pathFragments.add(filename);
            String[] remainder = pathFragments.toArray(new String[1]);
            return Paths.get(parts[0], remainder);
        }
    }

}


================================================
FILE: src/peergos/client/Start.java
================================================
package peergos.client;

import com.google.gwt.core.client.EntryPoint;

public class Start implements EntryPoint {
	public void onModuleLoad() {
		System.setOut(new ConsolePrintStream());
		System.setErr(new ConsolePrintStream());
	}
}


================================================
FILE: src/peergos/gwt/emu/avian/Utf8.java
================================================
/* Copyright (c) 2010, Avian Contributors

   Permission to use, copy, modify, and/or distribute this software
   for any purpose with or without fee is hereby granted, provided
   that the above copyright notice and this permission notice appear
   in all copies.

   There is NO WARRANTY for this software.  See license.txt for
   details. */

package avian;

import java.io.ByteArrayOutputStream;

public class Utf8 {
	public static boolean test (Object data) {
		if (!(data instanceof byte[])) return false;
		byte[] b = (byte[])data;
		for (int i = 0; i < b.length; ++i) {
			if (((int)b[i] & 0x080) != 0) return true;
		}
		return false;
	}

	public static byte[] encode (char[] s16, int offset, int length) {
		ByteArrayOutputStream buf = new ByteArrayOutputStream();
		for (int i = offset; i < offset + length; ++i) {
			char c = s16[i];
			if (c == '\u0000') { // null char
				buf.write(0);
				buf.write(0);
			} else if (c < 0x080) { // 1 byte char
				buf.write(c);
			} else if (c < 0x0800) { // 2 byte char
				buf.write(0x0c0 | (c >>> 6));
				buf.write(0x080 | (c & 0x03f));
			} else { // 3 byte char
				buf.write(0x0e0 | ((c >>> 12) & 0x0f));
				buf.write(0x080 | ((c >>> 6) & 0x03f));
				buf.write(0x080 | (c & 0x03f));
			}
		}
		return buf.toByteArray();
	}

	public static Object decode (byte[] s8, int offset, int length) {
		Object buf = new byte[length];
		boolean isMultiByte = false;
		int i = offset, j = 0;
		while (i < offset + length) {
			int x = s8[i++];
			if ((x & 0x080) == 0x0) { // 1 byte char
				if (x == 0) ++i; // 2 byte null char
				cram(buf, j++, x);
			} else if ((x & 0x0e0) == 0x0c0) { // 2 byte char
				if (!isMultiByte) {
					buf = widen(buf, j, length - 1);
					isMultiByte = true;
				}
				int y = s8[i++];
				cram(buf, j++, ((x & 0x1f) << 6) | (y & 0x3f));
			} else if ((x & 0x0f0) == 0x0e0) { // 3 byte char
				if (!isMultiByte) {
					buf = widen(buf, j, length - 2);
					isMultiByte = true;
				}
				int y = s8[i++];
				int z = s8[i++];
				cram(buf, j++, ((x & 0xf) << 12) | ((y & 0x3f) << 6) | (z & 0x3f));
			}
		}

		return trim(buf, j);
	}

	public static char[] decode16 (byte[] s8, int offset, int length) {
		Object decoded = decode(s8, offset, length);
		if (decoded instanceof char[]) return (char[])decoded;
		return (char[])widen(decoded, length, length);
	}

	private static void cram (Object data, int index, int val) {
		if (data instanceof byte[])
			((byte[])data)[index] = (byte)val;
		else
			((char[])data)[index] = (char)val;
	}

	private static Object widen (Object data, int length, int capacity) {
		byte[] src = (byte[])data;
		char[] result = new char[capacity];
		for (int i = 0; i < length; ++i)
			result[i] = (char)((int)src[i] & 0x0ff);
		return result;
	}

	private static Object trim (Object data, int length) {
		if (data instanceof byte[]) return data;
		if (((char[])data).length == length) return data;
		char[] result = new char[length];
		System.arraycopy(data, 0, result, 0, length);
		return result;
	}
}


================================================
FILE: src/peergos/gwt/emu/com/badlogic/gdx/utils/Base64Coder.java
================================================
//Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland
// www.source-code.biz, www.inventec.ch/chdh
//
// This module is multi-licensed and may be used under the terms
// of any of the following licenses:
//
//  EPL, Eclipse Public License, V1.0 or later, http://www.eclipse.org/legal
//  LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html
//  GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html
//  AL, Apache License, V2.0 or later, http://www.apache.org/licenses
//  BSD, BSD License, http://www.opensource.org/licenses/bsd-license.php
//
// Please contact the author if you need another license.
// This module is provided "as is", without warranties of any kind.
/**
 * A Base64 encoder/decoder.
 *
 * <p>
 * This class is used to encode and decode data in Base64 format as described in RFC 1521.
 *
 * <p>
 * Project home page: <a href="http://www.source-code.biz/base64coder/java/">www.source-code.biz/base64coder/java</a><br>
 * Author: Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland<br>
 * Multi-licensed: EPL / LGPL / GPL / AL / BSD.
 *
 * @author Christian d'Heureuse
 * @author vaxquis
 */

package com.badlogic.gdx.utils;

public class Base64Coder {
	public static class CharMap {
		protected final char[] encodingMap = new char[64];
		protected final byte[] decodingMap = new byte[128];

		public CharMap (char char63, char char64) {
			int i = 0;
			for (char c = 'A'; c <= 'Z'; c++) {
				encodingMap[i++] = c;
			}
			for (char c = 'a'; c <= 'z'; c++) {
				encodingMap[i++] = c;
			}
			for (char c = '0'; c <= '9'; c++) {
				encodingMap[i++] = c;
			}
			encodingMap[i++] = char63;
			encodingMap[i++] = char64;
			for (i = 0; i < decodingMap.length; i++) {
				decodingMap[i] = -1;
			}
			for (i = 0; i < 64; i++) {
				decodingMap[encodingMap[i]] = (byte)i;
			}
		}

		public byte[] getDecodingMap () {
			return decodingMap;
		}

		public char[] getEncodingMap () {
			return encodingMap;
		}
	}

	// The line separator string of the operating system.
	private static final String systemLineSeparator = "\n";

	public static final CharMap regularMap = new CharMap('+', '/'), urlsafeMap = new CharMap('-', '_');

	/** Encodes a string into Base64 format. No blanks or line breaks are inserted.
	 * @param s A String to be encoded.
	 * @return A String containing the Base64 encoded data. */
	public static String encodeString (String s) {
		return encodeString(s, false);
	}

	public static String encodeString (String s, boolean useUrlsafeEncoding) {
		return new String(encode(s.getBytes(), useUrlsafeEncoding ? urlsafeMap.encodingMap : regularMap.encodingMap));
	}

	/** Encodes a byte array into Base 64 format and breaks the output into lines of 76 characters. This method is compatible with
	 * <code>sun.misc.BASE64Encoder.encodeBuffer(byte[])</code>.
	 * @param in An array containing the data bytes to be encoded.
	 * @return A String containing the Base64 encoded data, broken into lines. */
	public static String encodeLines (byte[] in) {
		return encodeLines(in, 0, in.length, 76, systemLineSeparator, regularMap.encodingMap);
	}

	public static String encodeLines (byte[] in, int iOff, int iLen, int lineLen, String lineSeparator, CharMap charMap) {
		return encodeLines(in, iOff, iLen, lineLen, lineSeparator, charMap.encodingMap);
	}

	/** Encodes a byte array into Base 64 format and breaks the output into lines.
	 * @param in An array containing the data bytes to be encoded.
	 * @param iOff Offset of the first byte in <code>in</code> to be processed.
	 * @param iLen Number of bytes to be processed in <code>in</code>, starting at <code>iOff</code>.
	 * @param lineLen Line length for the output data. Should be a multiple of 4.
	 * @param lineSeparator The line separator to be used to separate the output lines.
	 * @param charMap char map to use
	 * @return A String containing the Base64 encoded data, broken into lines. */
	public static String encodeLines (byte[] in, int iOff, int iLen, int lineLen, String lineSeparator, char[] charMap) {
		int blockLen = (lineLen * 3) / 4;
		if (blockLen <= 0) {
			throw new IllegalArgumentException();
		}
		int lines = (iLen + blockLen - 1) / blockLen;
		int bufLen = ((iLen + 2) / 3) * 4 + lines * lineSeparator.length();
		StringBuilder buf = new StringBuilder(bufLen);
		int ip = 0;
		while (ip < iLen) {
			int l = Math.min(iLen - ip, blockLen);
			buf.append(encode(in, iOff + ip, l, charMap));
			buf.append(lineSeparator);
			ip += l;
		}
		return buf.toString();
	}

	/** Encodes a byte array into Base64 format. No blanks or line breaks are inserted in the output.
	 * @param in An array containing the data bytes to be encoded.
	 * @return A character array containing the Base64 encoded data. */
	public static char[] encode (byte[] in) {
		return encode(in, regularMap.encodingMap);
	}

	public static char[] encode (byte[] in, CharMap charMap) {
		return encode(in, 0, in.length, charMap);
	}

    public static char[] encode (byte[] in, char[] charMap) {
		return encode(in, 0, in.length, charMap);
	}

	/** Encodes a byte array into Base64 format. No blanks or line breaks are inserted in the output.
	 * @param in An array containing the data bytes to be encoded.
	 * @param iLen Number of bytes to process in <code>in</code>.
	 * @return A character array containing the Base64 encoded data. */
	public static char[] encode (byte[] in, int iLen) {
		return encode(in, 0, iLen, regularMap.encodingMap);
	}

	public static char[] encode (byte[] in, int iOff, int iLen, CharMap charMap) {
		return encode(in, iOff, iLen, charMap.encodingMap);
	}

	/** Encodes a byte array into Base64 format. No blanks or line breaks are inserted in the output.
	 * @param in An array containing the data bytes to be encoded.
	 * @param iOff Offset of the first byte in <code>in</code> to be processed.
	 * @param iLen Number of bytes to process in <code>in</code>, starting at <code>iOff</code>.
	 * @param charMap char map to use
	 * @return A character array containing the Base64 encoded data. */
	public static char[] encode (byte[] in, int iOff, int iLen, char[] charMap) {
		int oDataLen = (iLen * 4 + 2) / 3; // output length without padding
		int oLen = ((iLen + 2) / 3) * 4; // output length including padding
		char[] out = new char[oLen];
		int ip = iOff;
		int iEnd = iOff + iLen;
		int op = 0;
		while (ip < iEnd) {
			int i0 = in[ip++] & 0xff;
			int i1 = ip < iEnd ? in[ip++] & 0xff : 0;
			int i2 = ip < iEnd ? in[ip++] & 0xff : 0;
			int o0 = i0 >>> 2;
			int o1 = ((i0 & 3) << 4) | (i1 >>> 4);
			int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6);
			int o3 = i2 & 0x3F;
			out[op++] = charMap[o0];
			out[op++] = charMap[o1];
			out[op] = op < oDataLen ? charMap[o2] : '=';
			op++;
			out[op] = op < oDataLen ? charMap[o3] : '=';
			op++;
		}
		return out;
	}

	/** Decodes a string from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
	 * @param s A Base64 String to be decoded.
	 * @return A String containing the decoded data.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static String decodeString (String s) {
		return decodeString(s, false);
	}

	public static String decodeString (String s, boolean useUrlSafeEncoding) {
		return new String(decode(s.toCharArray(), useUrlSafeEncoding ? urlsafeMap.decodingMap : regularMap.decodingMap));
	}

    public static byte[] decodeLines (String s) {
        return decodeLines(s, regularMap.decodingMap);
    }

    public static byte[] decodeLines (String s, CharMap inverseCharMap) {
        return decodeLines(s, inverseCharMap.decodingMap);
    }

	/** Decodes a byte array from Base64 format and ignores line separators, tabs and blanks. CR, LF, Tab and Space characters are
	 * ignored in the input data. This method is compatible with <code>sun.misc.BASE64Decoder.decodeBuffer(String)</code>.
	 * @param s A Base64 String to be decoded.
     * @param inverseCharMap
	 * @return An array containing the decoded data bytes.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static byte[] decodeLines (String s, byte[] inverseCharMap) {
		char[] buf = new char[s.length()];
		int p = 0;
		for (int ip = 0; ip < s.length(); ip++) {
			char c = s.charAt(ip);
			if (c != ' ' && c != '\r' && c != '\n' && c != '\t') {
				buf[p++] = c;
			}
		}
		return decode(buf, 0, p, inverseCharMap);
	}
	
	/** Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
	 * @param s A Base64 String to be decoded.
	 * @return An array containing the decoded data bytes.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static byte[] decode (String s) {
		return decode(s.toCharArray());
	}

	/** Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
	 * @param s A Base64 String to be decoded.
	 * @param inverseCharMap
	 * @return An array containing the decoded data bytes.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static byte[] decode (String s, CharMap inverseCharMap) {
		return decode(s.toCharArray(), inverseCharMap);
	}

    public static byte[] decode (char[] in, byte[] inverseCharMap) {
		return decode(in, 0, in.length, inverseCharMap);
	}

	public static byte[] decode (char[] in, CharMap inverseCharMap) {
		return decode(in, 0, in.length, inverseCharMap);
	}

	/** Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
	 * @param in A character array containing the Base64 encoded data.
	 * @return An array containing the decoded data bytes.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static byte[] decode (char[] in) {
		return decode(in, 0, in.length, regularMap.decodingMap);
	}

	public static byte[] decode (char[] in, int iOff, int iLen, CharMap inverseCharMap) {
		return decode(in, iOff, iLen, inverseCharMap.decodingMap);
	}

	/** Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded input data.
	 * @param in A character array containing the Base64 encoded data.
	 * @param iOff Offset of the first character in <code>in</code> to be processed.
	 * @param iLen Number of characters to process in <code>in</code>, starting at <code>iOff</code>.
	 * @param inverseCharMap charMap to use
	 * @return An array containing the decoded data bytes.
	 * @throws IllegalArgumentException If the input is not valid Base64 encoded data. */
	public static byte[] decode (char[] in, int iOff, int iLen, byte[] inverseCharMap) {
		if (iLen % 4 != 0) {
			throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
		}
		while (iLen > 0 && in[iOff + iLen - 1] == '=') {
			iLen--;
		}
		int oLen = (iLen * 3) / 4;
		byte[] out = new byte[oLen];
		int ip = iOff;
		int iEnd = iOff + iLen;
		int op = 0;
		while (ip < iEnd) {
			int i0 = in[ip++];
			int i1 = in[ip++];
			int i2 = ip < iEnd ? in[ip++] : 'A';
			int i3 = ip < iEnd ? in[ip++] : 'A';
			if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) {
				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
			}
			int b0 = inverseCharMap[i0];
			int b1 = inverseCharMap[i1];
			int b2 = inverseCharMap[i2];
			int b3 = inverseCharMap[i3];
			if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) {
				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
			}
			int o0 = (b0 << 2) | (b1 >>> 4);
			int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
			int o2 = ((b2 & 3) << 6) | b3;
			out[op++] = (byte)o0;
			if (op < oLen) {
				out[op++] = (byte)o1;
			}
			if (op < oLen) {
				out[op++] = (byte)o2;
			}
		}
		return out;
	}

	// Dummy constructor.
	private Base64Coder () {
	}
}


================================================
FILE: src/peergos/gwt/emu/com/badlogic/gdx/utils/Utf8Decoder.java
================================================
/*******************************************************************************
 * Copyright 2015 See AUTHORS file.
 * 
 * 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.
 ******************************************************************************/

/*******************************************************************************
 * Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 *  IN THE SOFTWARE.
 ******************************************************************************/

package com.badlogic.gdx.utils;

/** Utf8Decoder converts UTF-8 encoded bytes into characters properly handling buffer boundaries.
 *
 * This class is stateful and up to 4 calls to {@link #decode(byte)} may be needed before a character is appended to the char
 * buffer.
 *
 * The UTF-8 decoding is done by this class and no additional buffers are created. The UTF-8 code was inspired by
 * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
 * 
 * @author davebaol */
public class Utf8Decoder {

	private static final char REPLACEMENT = '\ufffd';
	private static final int UTF8_ACCEPT = 0;
	private static final int UTF8_REJECT = 12;

	// This table maps bytes to character classes to reduce
	// the size of the transition table and create bitmasks.
	private static final byte[] BYTE_TABLE = {
		// @off - disable libgdx formatter
		 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
		 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
		 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
		10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8
		// @on - enable libgdx formatter
	};

	// This is a transition table that maps a combination of a
	// state of the automaton and a character class to a state.
	private static final byte[] TRANSITION_TABLE = {
		// @off - disable libgdx formatter
		 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12,
		12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12,
		12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12,
		12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
		12,36,12,12,12,12,12,12,12,12,12,12
		// @on - enable libgdx formatter
	};

	private int codePoint;
	private int state;
	private final char[] utf16Char = new char[2];
	private char[] charBuffer;
	private int charOffset;

	public Utf8Decoder () {
		this.state = UTF8_ACCEPT;
	}

	protected void reset () {
		state = UTF8_ACCEPT;
	}

	public int decode (byte[] b, int offset, int length, char[] charBuffer, int charOffset) {
		this.charBuffer = charBuffer;
		this.charOffset = charOffset;
		int end = offset + length;
		for (int i = offset; i < end; i++)
			decode(b[i]);
		return this.charOffset - charOffset;
	}

	private void decode (byte b) {

		if (b > 0 && state == UTF8_ACCEPT) {
			charBuffer[charOffset++] = (char)(b & 0xFF);
		} else {
			int i = b & 0xFF;
			int type = BYTE_TABLE[i];
			codePoint = state == UTF8_ACCEPT ? (0xFF >> type) & i : (i & 0x3F) | (codePoint << 6);
			int next = TRANSITION_TABLE[state + type];

			switch (next) {
			case UTF8_ACCEPT:
				state = next;
				if (codePoint < Character.MIN_HIGH_SURROGATE) {
					charBuffer[charOffset++] = (char)codePoint;
				} else {
					// The code below is equivalent to
					// for (char c : Character.toChars(codePoint)) charBuffer[charOffset++] = c;
					// but does not allocate a char array.
					int codePointLength = Character.toChars(codePoint, utf16Char, 0);
					charBuffer[charOffset++] = utf16Char[0];
					if (codePointLength == 2) charBuffer[charOffset++] = utf16Char[1];
				}
				break;

			case UTF8_REJECT:
				codePoint = 0;
				state = UTF8_ACCEPT;
				charBuffer[charOffset++] = REPLACEMENT;
				break;

			default:
				state = next;
				break;
			}
		}
	}
}


================================================
FILE: src/peergos/gwt/emu/java/awt/AlphaComposite.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public class AlphaComposite extends Object implements Composite {

    public static final AlphaComposite Src = new AlphaComposite();

    private AlphaComposite(){}

}


================================================
FILE: src/peergos/gwt/emu/java/awt/Composite.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public interface Composite {
}


================================================
FILE: src/peergos/gwt/emu/java/awt/Graphics2D.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public class Graphics2D {

    public void setComposite(Composite comp) {}

    public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) {}

    public boolean drawImage(Image img, int x, int y,
                                      int width, int height,
                                      ImageObserver observer) { return false; }

    public void dispose() {}
}


================================================
FILE: src/peergos/gwt/emu/java/awt/Image.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public class Image {
    public static final int TYPE_INT_ARGB = 2;

    public synchronized void setRGB(int var1, int var2, int var3) {}
}


================================================
FILE: src/peergos/gwt/emu/java/awt/ImageObserver.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public class ImageObserver {
}


================================================
FILE: src/peergos/gwt/emu/java/awt/RenderingHints.java
================================================
package java.awt;

/*
*  Dummy implementation - does nothing
* */
public class RenderingHints {
    public static class Key {

    }
    public static final Key KEY_INTERPOLATION = null;
    public static final Key VALUE_INTERPOLATION_BILINEAR = null;
    public static final Key KEY_RENDERING = null;
    public static final Key VALUE_RENDER_QUALITY = null;
    public static final Key KEY_ANTIALIASING = null;
    public static final Key VALUE_ANTIALIAS_ON = null;
}


================================================
FILE: src/peergos/gwt/emu/java/awt/image/BufferedImage.java
================================================
package java.awt.image;

import java.awt.*;

/*
*  Dummy implementation - does nothing
* */
public class BufferedImage extends Image implements RenderedImage {

    public BufferedImage(int width,
                         int height,
                         int imageType) {

    }

    public int getType() {
        return -1;
    }

    public Graphics2D createGraphics() {
        return null;
    }

    public int getWidth() {
        return -1;
    }

    public int getHeight() {
        return -1;
    }

    public int getRGB(int x, int y) {
        return -1;
    }
}


================================================
FILE: src/peergos/gwt/emu/java/awt/image/RenderedImage.java
================================================
package java.awt.image;

/*
*  Dummy implementation - does nothing
* */
public interface RenderedImage {
}


================================================
FILE: src/peergos/gwt/emu/java/io/BufferedReader.java
================================================
/* Copyright (c) 2008, Avian Contributors

   Permission to use, copy, modify, and/or distribute this software
   for any purpose with or without fee is hereby granted, provided
   that the above copyright notice and this permission notice appear
   in all copies.

   There is NO WARRANTY for this software.  See license.txt for
   details. */

package java.io;

public class BufferedReader extends Reader {
	private final Reader in;
	private final char[] buffer;
	private int position;
	private int limit;

	public BufferedReader (Reader in, int bufferSize) {
		this.in = in;
		this.buffer = new char[bufferSize];
	}

	public BufferedReader (Reader in) {
		this(in, 8192);
	}

	private void fill () throws IOException {
		position = 0;
		limit = in.read(buffer);
	}

	public String readLine () throws IOException {
		StringBuilder sb = new StringBuilder();
		while (true) {
			if (position >= limit) {
				fill();
			}

			if (position >= limit) {
				return sb.length() == 0 ? null : sb.toString();
			}

			for (int i = position; i < limit; ++i) {
				if (buffer[i] == '\r') {
					sb.append(buffer, position, i - position);
					position = i + 1;
					if (i + 1 < limit) {
						if (buffer[i + 1] == '\n') {
							position = i + 2;
						}
					} else {
						fill();
						if (buffer[position] == '\n') {
							position += 1;
						}
					}
					return sb.toString();
				} else if (buffer[i] == '\n') {
					sb.append(buffer, position, i - position);
					position = i + 1;
					return sb.toString();
				}
			}
			sb.append(buffer, position, limit - position);
			position = limit;
		}
	}

	public int read (char[] b, int offset, int length) throws IOException {
		int count = 0;

		if (position >= limit && length < buffer.length) {
			fill();
		}

		if (position < limit) {
			int remaining = limit - position;
			if (remaining > length) {
				remaining = length;
			}

			System.arraycopy(buffer, position, b, offset, remaining);

			count += remaining;
			position += remaining;
			offset += remaining;
			length -= remaining;
		}

		if (length > 0) {
			int c = in.read(b, offset, length);
			if (c == -1) {
				if (count == 0) {
					count = -1;
				}
			} else {
				count += c;
			}
		}

		return count;
	}

	public void close () throws IOException {
		in.close();
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/ByteArrayInputStream.java
================================================
/*******************************************************************************
 * Copyright 2011 See AUTHORS file.
 * 
 * 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 java.io;

public class ByteArrayInputStream extends InputStream {
    byte buf[];
    int pos;
    int count;
    int mark = 0;

    public ByteArrayInputStream(byte buf[]) {
        this.buf = buf;
        this.pos = 0;
        this.count = buf.length;
    }

    public ByteArrayInputStream(byte buf[], int offset, int length) {
        this.buf = buf;
        this.pos = offset;
        this.count = Math.min(offset + length, buf.length);
        this.mark = offset;
    }

    public synchronized int read() {
        return (pos < count) ? (buf[pos++] & 0xff) : -1;
    }

    public synchronized int read(byte b[], int off, int len) {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        }

        if (pos >= count) {
            return -1;
        }

        int avail = count - pos;
        if (len > avail) {
            len = avail;
        }
        if (len <= 0) {
            return 0;
        }
        System.arraycopy(buf, pos, b, off, len);
        pos += len;
        return len;
    }

    public synchronized long skip(long n) {
        long k = count - pos;
        if (n < k) {
            k = n < 0 ? 0 : n;
        }

        pos += k;
        return k;
    }

    public synchronized int available() {
        return count - pos;
    }

    public boolean markSupported() {
        return true;
    }

    public void mark(int readAheadLimit) {
        mark = pos;
    }

    public synchronized void reset() {
        pos = mark;
    }

    public void close() throws IOException {
    }
}

================================================
FILE: src/peergos/gwt/emu/java/io/ByteArrayOutputStream.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public class ByteArrayOutputStream extends OutputStream {

	protected int count;
	protected byte[] buf;

	public ByteArrayOutputStream () {
		this(16);
	}

	public ByteArrayOutputStream (int initialSize) {
		buf = new byte[initialSize];
	}

	@Override
	public void write (int b) {
		if (buf.length == count) {
			grow(count + 1);
		}

		buf[count++] = (byte)b;
	}

	//added
    public void write(byte b[], int off, int len) {
        if ((off < 0) || (off > b.length) || (len < 0) ||
            ((off + len) - b.length > 0)) {
            throw new IndexOutOfBoundsException();
        }
        if (count + len > buf.length) {
			grow(count + len);
		}
        System.arraycopy(b, off, buf, count, len);
        count += len;
    }

    private void grow(int required) {
        int current = this.buf.length;
        int newSize = current << 1;
        if(newSize - required < 0) {
            newSize = required;
        }

        if(newSize - 2147483639 > 0) {
            newSize = hugeCapacity(required);
        }

        byte[] newBuf = new byte[newSize];
		System.arraycopy(buf, 0, newBuf, 0, count);
        this.buf = newBuf;
    }

    private static int hugeCapacity(int size) {
        if(size < 0) {
            throw new OutOfMemoryError();
        } else {
            return size > 2147483639 ? 2147483647 : 2147483639;
        }
    }
    
	public byte[] toByteArray () {
		byte[] result = new byte[count];
		System.arraycopy(buf, 0, result, 0, count);
		return result;
	}

	public int size () {
		return count;
	}

	public String toString () {
		return new String(buf, 0, count);
	}

	public String toString (String enc) throws UnsupportedEncodingException {
		return new String(buf, 0, count, enc);
	}

	public void close() throws IOException {
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/Closeable.java
================================================
/** Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 java.io;

/*** Defines an interface for classes that can (or need to) be closed once they are not used any longer. This usually includes all
 * sorts of {@link InputStream}s and {@link OutputStream}s. Calling the {@code close} method releases resources that the object
 * holds. */
public interface Closeable extends AutoCloseable {

	/*** Closes the object and release any system resources it holds. If the object has already been closed, then invoking this
	 * method has no effect.
	 * 
	 * @throws IOException if any error occurs when closing the object. */
	public void close () throws IOException;
}


================================================
FILE: src/peergos/gwt/emu/java/io/DataInput.java
================================================
package java.io;

public interface DataInput {

    void readFully(byte b[]) throws IOException;

    void readFully(byte b[], int off, int len) throws IOException;

    int skipBytes(int n) throws IOException;

    boolean readBoolean() throws IOException;

    byte readByte() throws IOException;

    int readUnsignedByte() throws IOException;

    short readShort() throws IOException;

    int readUnsignedShort() throws IOException;

    char readChar() throws IOException;

    int readInt() throws IOException;

    long readLong() throws IOException;

    float readFloat() throws IOException;

    double readDouble() throws IOException;

    String readLine() throws IOException;

    String readUTF() throws IOException;
}


================================================
FILE: src/peergos/gwt/emu/java/io/DataInputStream.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public class DataInputStream extends InputStream implements DataInput {

	private final InputStream is;

	public DataInputStream (final InputStream is) {
		this.is = is;
	}

	@Override
	public int read () throws IOException {
		return is.read();
	}

	public boolean readBoolean () throws IOException {
		return readByte() != 0;
	}

	public byte readByte () throws IOException {
		int i = read();
		if (i == -1) {
			throw new EOFException();
		}
		return (byte)i;
	}

	public char readChar () throws IOException {
		int a = is.read();
		int b = readUnsignedByte();
		return (char)((a << 8) | b);
	}

	public double readDouble () throws IOException {
		return Double.longBitsToDouble(readLong());
	}

	public float readFloat () throws IOException {
		return Float.intBitsToFloat(readInt());
	}

	public void readFully (byte[] b) throws IOException {
		readFully(b, 0, b.length);
	}

	public void readFully (byte[] b, int off, int len) throws IOException {
		while (len > 0) {
			int count = is.read(b, off, len);
			if (count <= 0) {
				throw new EOFException();
			}
			off += count;
			len -= count;
		}
	}

	public int readInt () throws IOException {
		int a = is.read();
		int b = is.read();
		int c = is.read();
		int d = readUnsignedByte();
		return (a << 24) | (b << 16) | (c << 8) | d;
	}

	public String readLine () throws IOException {
		throw new RuntimeException("readline NYI");
	}

	public long readLong () throws IOException {
		long a = readInt();
		long b = readInt() & 0x0ffffffff;
		return (a << 32) | b;
	}

	public short readShort () throws IOException {
		int a = is.read();
		int b = readUnsignedByte();
		return (short)((a << 8) | b);
	}

	public String readUTF () throws IOException {
		int bytes = readUnsignedShort();
		StringBuilder sb = new StringBuilder();

		while (bytes > 0) {
			bytes -= readUtfChar(sb);
		}

		return sb.toString();
	}

	private int readUtfChar (StringBuilder sb) throws IOException {
		int a = readUnsignedByte();
		if ((a & 0x80) == 0) {
			sb.append((char)a);
			return 1;
		}
		if ((a & 0xe0) == 0xc0) {
			int b = readUnsignedByte();
			sb.append((char)(((a & 0x1F) << 6) | (b & 0x3F)));
			return 2;
		}
		if ((a & 0xf0) == 0xe0) {
			int b = readUnsignedByte();
			int c = readUnsignedByte();
			sb.append((char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F)));
			return 3;
		}
		throw new UTFDataFormatException();
	}

	public int readUnsignedByte () throws IOException {
		int i = read();
		if (i == -1) {
			throw new EOFException();
		}
		return i;
	}

	public int readUnsignedShort () throws IOException {
		int a = is.read();
		int b = readUnsignedByte();
		return ((a << 8) | b);
	}

	public int skipBytes (int n) throws IOException {
		// note: This is actually a valid implementation of this method, rendering it quite useless...
		return 0;
	}

	@Override
	public int available () throws IOException {
		return is.available();
	}
	
	@Override
	public void close () throws IOException {
		is.close();
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/DataOutput.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public interface DataOutput {
	public void write (byte[] data) throws IOException;

	public void write (byte[] data, int ofs, int len) throws IOException;

	public void write (int v) throws IOException;

	public void writeBoolean (boolean v) throws IOException;

	public void writeByte (int v) throws IOException;

	public void writeBytes (String s) throws IOException;

	public void writeChar (int v) throws IOException;

	public void writeChars (String s) throws IOException;

	public void writeDouble (double v) throws IOException;

	public void writeFloat (float v) throws IOException;

	public void writeInt (int v) throws IOException;

	public void writeLong (long v) throws IOException;

	public void writeShort (int v) throws IOException;

	public void writeUTF (String s) throws IOException;
}


================================================
FILE: src/peergos/gwt/emu/java/io/DataOutputStream.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public class DataOutputStream extends OutputStream implements DataOutput {

	OutputStream os;

	public DataOutputStream (OutputStream os) {
		this.os = os;
	}

	@Override
	public void write (int b) throws IOException {
		os.write(b);
	}

	public void writeBoolean (boolean v) throws IOException {
		os.write(v ? 1 : 0);
	}

	public void writeByte (int v) throws IOException {
		os.write(v);
	}

	public void writeBytes (String s) throws IOException {
		int len = s.length();
		for (int i = 0; i < len; i++) {
			os.write(s.charAt(i) & 0xff);
		}
	}

	public void writeChar (int v) throws IOException {
		os.write(v >> 8);
		os.write(v);
	}

	public void writeChars (String s) throws IOException {
		throw new RuntimeException("writeChars NYI");
	}

	public void writeDouble (double v) throws IOException {
		writeLong(Double.doubleToLongBits(v));
	}

	public void writeFloat (float v) throws IOException {
		writeInt(Float.floatToIntBits(v));
	}

	public void writeInt (int v) throws IOException {
		os.write(v >> 24);
		os.write(v >> 16);
		os.write(v >> 8);
		os.write(v);
	}

	public void writeLong (long v) throws IOException {
		writeInt((int)(v >> 32L));
		writeInt((int)v);
	}

	public void writeShort (int v) throws IOException {
		os.write(v >> 8);
		os.write(v);
	}

	public void writeUTF (String s) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if (c > 0 && c < 80) {
				baos.write(c);
			} else if (c < '\u0800') {
				baos.write(0xc0 | (0x1f & (c >> 6)));
				baos.write(0x80 | (0x3f & c));
			} else {
				baos.write(0xe0 | (0x0f & (c >> 12)));
				baos.write(0x80 | (0x3f & (c >> 6)));
				baos.write(0x80 | (0x3f & c));
			}
		}
		writeShort(baos.count);
		os.write(baos.buf, 0, baos.count);
	}

	public void flush() throws IOException {
		os.flush();
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/EOFException.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public class EOFException extends IOException {

}


================================================
FILE: src/peergos/gwt/emu/java/io/File.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

import java.nio.file.Path;
import java.util.ArrayList;

/** LocalStorage based File implementation for GWT. Should probably have used Harmony as a starting point instead of writing this
 * from scratch.
 * 
 * @author Stefan Haustein */
public class File {

	public static final File ROOT = new File("");

	public static final char separatorChar = '/';

	public static final String separator = "" + separatorChar;

	public static final char pathSeparatorChar = ':';

	public static final String pathSeparator = "" + pathSeparatorChar;

	File parent;
	String name;
	boolean absolute;

	public File (String pathname) {
		while (pathname.endsWith(separator) && pathname.length() > 0) {
			pathname = pathname.substring(0, pathname.length() - 1);
		}

		int cut = pathname.lastIndexOf(separatorChar);
		if (cut == -1) {
			name = pathname;
		} else if (cut == 0) {
			name = pathname.substring(cut);
			parent = name.equals("") ? null : ROOT;
		} else {
			name = pathname.substring(cut + 1);
			parent = new File(pathname.substring(0, cut));
		}

// Compatibility.println("new File ('"+pathname+ "'); canonical name: '" + getCanonicalPath() + "'");
	}

	public File (String parent, String child) {
		this(new File(parent), child);
	}

	public File (File parent, String child) {
		this.parent = parent;
		this.name = child;
	}

	/*
	 * public File(URI uri) { }
	 */

	public String getName () {
		return name;
	}

	public String getParent () {
		return parent == null ? "" : parent.getPath();
	}

	public File getParentFile () {
		return parent;
	}

	public String getPath () {
		return parent == null ? name : (parent.getPath() + separatorChar + name);
	}

	private boolean isRoot () {
		return name.equals("") && parent == null;
	}

	public boolean isAbsolute () {
		if (isRoot()) {
			return true;
		}
		if (parent == null) {
			return false;
		}
		return parent.isAbsolute();
	}

	public String getAbsolutePath () {
		String path = getAbsoluteFile().getPath();
		return path.length() == 0 ? "/" : path;
	}

	public File getAbsoluteFile () {
		if (isAbsolute()) {
			return this;
		}
		if (parent == null) {
			return new File(ROOT, name);
		}
		return new File(parent.getAbsoluteFile(), name);
	}

	public String getCanonicalPath () {
		return getCanonicalFile().getAbsolutePath();
	}

	public File getCanonicalFile () {
		File cParent = parent == null ? null : parent.getCanonicalFile();
		if (name.equals(".")) {
			return cParent == null ? ROOT : cParent;
		}
		if (cParent != null && cParent.name.equals("")) {
			cParent = null;
		}
		if (name.equals("..")) {
			if (cParent == null) {
				return ROOT;
			}
			if (cParent.parent == null) {
				return ROOT;
			}
			return cParent.parent;
		}
		if (cParent == null && !name.equals("")) {
			return new File(ROOT, name);
		}
		return new File(cParent, name);
	}

	/*
	 * public URL toURL() throws MalformedURLException { }
	 * 
	 * public URI toURI() { }
	 */

	public boolean canRead () {
		return true;
	}

	public boolean canWrite () {
		return true;
	}

	public boolean exists () {
		throw new Error("Not implemented");
	}

	public boolean isDirectory () {
		throw new Error("Not implemented");

	}

	public boolean isFile () {
		throw new Error("Not implemented");
	}

	public boolean isHidden () {
		return false;
	}

	public long lastModified () {
		return 0;
	}

	public long length () {
		try {
			if (!exists()) {
				return 0;
			}

			RandomAccessFile raf = new RandomAccessFile(this, "r");
			long len = raf.length();
			raf.close();
			return len;
		} catch (IOException e) {
			return 0;
		}
	}

	public boolean createNewFile () throws IOException {
		throw new Error("Not implemented");
	}

	public boolean delete () {
		throw new Error("Not implemented");
	}

	public void deleteOnExit () {
		throw new RuntimeException("NYI: File.deleteOnExit()");
	}

	public String[] list () {
		throw new RuntimeException("NYI: File.list()");
	}

	/*
	 * public String[] list(FilenameFilter filter) { return null; }
	 */

	public File[] listFiles () {
		return listFiles(null);
	}

	public File[] listFiles (FilenameFilter filter) {
		throw new Error("Not implemented");
	}

	/*
	 * public File[] listFiles(FileFilter filter) { return null; }
	 */

	public boolean mkdir () {
		throw new Error("Not implemented");
	}

	public boolean mkdirs () {
		if (parent != null) {
			parent.mkdirs();
		}
		return mkdir();
	}

	public boolean renameTo (File dest) {
		throw new RuntimeException("renameTo()");
	}

	public boolean setLastModified (long time) {
		return false;
	}

	public boolean setReadOnly () {
		return false;
	}

	public static File[] listRoots () {
		return new File[] {ROOT};
	}

	public static File createTempFile (String prefix, String suffix, File directory) throws IOException {
		throw new RuntimeException("NYI: createTempFile");
	}

	public static File createTempFile (String prefix, String suffix) throws IOException {
		throw new RuntimeException("NYI: createTempFile");
	}

	public int compareTo (File pathname) {
		throw new RuntimeException("NYI: File.compareTo()");
	}

	public boolean equals (Object obj) {
		if (!(obj instanceof File)) {
			return false;
		}
		return getPath().equals(((File)obj).getPath());
	}

	public Path toPath() {
		return null;
	}
	
	public int hashCode () {
		return parent != null ? parent.hashCode() + name.hashCode() : name.hashCode();
	}

	public String toString () {
		return name;
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/FileInputStream.java
================================================
package java.io;

public class FileInputStream extends InputStream{
	protected InputStream in;

	public FileInputStream (InputStream in) {
		this.in = in;
	}

	public FileInputStream (File file) {
	}

	public FileInputStream (String filename) {
	}
	
	public int read () throws IOException {
		return in.read();
	}

	public int read (byte b[]) throws IOException {
		return read(b, 0, b.length);
	}

	public int read (byte b[], int off, int len) throws IOException {
		return in.read(b, off, len);
	}

	public long skip (long n) throws IOException {
		return 0;
	}

	//added
	public int available () throws IOException{
		return in.available();
	}

	public void close () throws IOException {
		in.close();
	}

	public synchronized void mark (int readlimit) {
	}

	public synchronized void reset () throws IOException {
	}

	public boolean markSupported () {
		return false;
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/FileNotFoundException.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public class FileNotFoundException extends IOException {

	public FileNotFoundException () {
		super();
	}

	public FileNotFoundException (String s) {
		super(s);
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/FilenameFilter.java
================================================
/*
 * Copyright 2010 Google Inc.
 * 
 * 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 java.io;

public interface FilenameFilter {

	boolean accept (File file, String name);
}


================================================
FILE: src/peergos/gwt/emu/java/io/Flushable.java
================================================
/** Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 java.io;

/*** Defines an interface for classes that can (or need to) be flushed, typically before some output processing is considered to be
 * finished and the object gets closed. */
public interface Flushable {
	/*** Flushes the object by writing out any buffered data to the underlying output.
	 * 
	 * @throws IOException if there are any issues writing the data. */
	void flush () throws IOException;
}


================================================
FILE: src/peergos/gwt/emu/java/io/InputStreamReader.java
================================================
/* Copyright (c) 2008-2010, Avian Contributors

   Permission to use, copy, modify, and/or distribute this software
   for any purpose with or without fee is hereby granted, provided
   that the above copyright notice and this permission notice appear
   in all copies.

   There is NO WARRANTY for this software.  See license.txt for
   details. */

package java.io;

import com.badlogic.gdx.utils.Utf8Decoder;

public class InputStreamReader extends Reader {
	private final InputStream in;

	private final Utf8Decoder utf8Decoder;

	public InputStreamReader (InputStream in) {
		this.in = in;
		this.utf8Decoder = new Utf8Decoder();
	}

	public InputStreamReader (InputStream in, String encoding) throws UnsupportedEncodingException {
		this(in);

		// FIXME this is bad, but some APIs seem to use "ISO-8859-1", fuckers...
// if (! encoding.equals("UTF-8")) {
// throw new UnsupportedEncodingException(encoding);
// }
	}

	public int read (char[] b, int offset, int length) throws IOException {
		byte[] buffer = new byte[length];
		int c = in.read(buffer);
		return c <= 0 ? c : utf8Decoder.decode(buffer, 0, c, b, offset);
	}

	public void close () throws IOException {
		in.close();
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/OutputStreamWriter.java
================================================
/* Copyright (c) 2008-2010, Avian Contributors

   Permission to use, copy, modify, and/or distribute this software
   for any purpose with or without fee is hereby granted, provided
   that the above copyright notice and this permission notice appear
   in all copies.

   There is NO WARRANTY for this software.  See license.txt for
   details. */

package java.io;

import avian.Utf8;

public class OutputStreamWriter extends Writer {
	private final OutputStream out;

	public OutputStreamWriter (OutputStream out, String encoding) {
		this(out);
	}

	public OutputStreamWriter (OutputStream out) {
		this.out = out;
	}

	public void write (char[] b, int offset, int length) throws IOException {
		out.write(Utf8.encode(b, offset, length));
	}

	public void flush () throws IOException {
		out.flush();
	}

	public void close () throws IOException {
		out.close();
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/PrintWriter.java
================================================
package java.io;

public class PrintWriter extends Writer{

	public PrintWriter() {
	}
	
	public PrintWriter(int initialCapacity) {
	}
	public PrintWriter(Writer out,
            boolean autoFlush) {
		
	}
	public PrintWriter append(CharSequence csq) {
		return null;
	}
	public void write (char[] b, int offset, int length) throws IOException {
	}

	public String toString () {
		return null;
	}

	public void flush () {
	}

	public void close () throws IOException {
	}
}


================================================
FILE: src/peergos/gwt/emu/java/io/PushbackInputStream.java
================================================
package java.io;

/* PushbackInputStream.java -- An input stream that can unread bytes
    Copyright (C) 1998, 1999, 2001, 2002, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
 GNU Classpath is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
 any later version.
  
 GNU Classpath is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU Classpath; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 02110-1301 USA.
 
 Linking this library statically or dynamically with other modules is
 making a combined work based on this library.  Thus, the terms and
 conditions of the GNU General Public License cover the whole
 combination.
 
 As a special exception, the copyright holders of this library give you
 permission to link this library with independent modules to produce an
 executable, regardless of the license terms of these independent
 modules, and to copy and distribute the resulting executable under
 terms of your choice, provided that you also meet, for each linked
 independent module, the terms and conditions of the license of that
 module.  An independent module is a module which is not derived from
 or based on this library.  If you modify this library, you may extend
 this exception to your version of the library, but you are not
 obligated to do so.  If you do not wish to do so, delete this
 exception statement from your version. */

/**
 * This subclass of <code>FilterInputStream</code> provides the ability to
 * unread data from a stream.  It maintains an internal buffer of unread
 * data that is supplied to the next read operation.  This is conceptually
 * similar to mark/reset functionality, except that in this case the
 * position to reset the stream to does not need to be known in advance.
 * <p>
 * The default pushback buffer size one byte, but this can be overridden
 * by the creator of the stream.
 * <p>
 *
 * @author Aaron M. Renn (arenn@urbanophile.com)
 * @author Warren Levy (warrenl@cygnus.com)
 */
public class PushbackInputStream extends FilterInputStream
{
    /**
     * This is the default buffer size
     */
    private static final int DEFAULT_BUFFER_SIZE = 1;

    /**
     * This is the buffer that is used to store the pushed back data
     */
    protected byte[] buf;

    /**
     * This is the position in the buffer from which the next byte will be
     * read.  Bytes are stored in reverse order in the buffer, starting from
     * <code>buf[buf.length - 1]</code> to <code>buf[0]</code>.  Thus when
     * <code>pos</code> is 0 the buffer is full and <code>buf.length</code> when
     * it is empty
     */
    protected int pos;

    /**
     * This method initializes a <code>PushbackInputStream</code> to
     * read from the specified subordinate <code>InputStream</code>
     * with a default pushback buffer size of 1.
     *
     * @param in The subordinate stream to read from
     */
    public PushbackInputStream(InputStream in)
    {
        this(in, DEFAULT_BUFFER_SIZE);
    }

    /**
     * This method initializes a <code>PushbackInputStream</code> to
     * read from the specified subordinate <code>InputStream</code> with
     * the specified buffer size
     *
     * @param in The subordinate <code>InputStream</code> to read from
     * @param size The pushback buffer size to use
     */
    public PushbackInputStream(InputStream in, int size)
    {
        super(in);
        if (size < 0)
            throw new IllegalArgumentException();
        buf = new byte[size];
        pos = buf.length;
    }

    /**
     * This method returns the number of bytes that can be read from this
     * stream before a read can block.  A return of 0 indicates that blocking
     * might (or might not) occur on the very next read attempt.
     * <p>
     * This method will return the number of bytes available from the
     * pushback buffer plus the number of bytes available from the
     * underlying stream.
     *
     * @return The number of bytes that can be read before blocking could occur
     *
     * @exception IOException If an error occurs
     */
    public int available() throws IOException
    {
        try
        {
            return (buf.length - pos) + super.available();
        }
        catch (NullPointerException npe)
        {
            throw new IOException ("Stream closed");
        }
    }

    /**
     * This method closes the stream and releases any associated resources.
     *
     * @exception IOException If an error occurs.
     */
    public synchronized void close() throws IOException
    {
        buf = null;
        super.close();
    }

    /**
     * This method returns <code>false</code> to indicate that it does
     * not support mark/reset functionality.
     *
     * @return This method returns <code>false</code> to indicate that
     * this class does not support mark/reset functionality
     */
    public boolean markSupported()
    {
        return false;
    }

    /**
     * This method always throws an IOException in this class because
     * mark/reset functionality is not supported.
     *
     * @exception IOException Always thrown for this class
     */
    public void reset() throws IOException
    {
        throw new IOException("Mark not supported in this class");
    }

    /**
     * This method reads an unsigned byte from the input stream and returns it
     * as an int in the range of 0-255.  This method also will return -1 if
     * the end of the stream has been reached.  The byte returned will be read
     * from the pushback buffer, unless the buffer is empty, in which case
     * the byte will be read from the underlying stream.
     * <p>
     * This method will block until the byte can be read.
     *
     * @return The byte read or -1 if end of stream
     *
     * @exception IOException If an error occurs
     */
    public synchronized int read() throws IOException
    {
        if (pos < buf.length)
            return ((int) buf[pos++]) & 0xFF;

        return super.read();
    }

    /**
     * This method read bytes from a stream and stores them into a
     * caller supplied buffer.  It starts storing the data at index
     * <code>offset</code> into the buffer and attempts to read
     * <code>len</code> bytes.  This method can return before reading the
     * number of bytes requested.  The actual number of bytes read is
     * returned as an int.  A -1 is returned to indicate the end of the
     * stream.
     *  <p>
     * This method will block until some data can be read.
     * <p>
     * This method first reads bytes from the pushback buffer in order to
     * satisfy the read request.  If the pushback buffer cannot provide all
     * of the bytes requested, the remaining bytes are read from the
     * underlying stream.
     *
     * @param b The array into which the bytes read should be stored
     * @param off The offset into the array to start storing bytes
     * @param len The requested number of bytes to read
     *
     * @return The actual number of bytes read, or -1 if end of stream.
     *
     * @exception IOException If an error occurs.
     */
    public synchronized int read(byte[] b, int off, int len) throws IOException
    {
        int numBytes = Math.min(buf.length - pos, len);

        if (numBytes > 0)
        {
            System.arraycopy (buf, pos, b, off, numBytes);
            pos += numBytes;
            len -= numBytes;
            off += numBytes;
        }

        if (len > 0)
        {
            len = super.read(b, off, len);
            if (len == -1) //EOF
                return numBytes > 0 ? numBytes : -1;
            numBytes += len;
        }
        return numBytes;
    }

    /**
     * This method pushes a single byte of data into the pushback buffer.
     * The byte pushed back is the one that will be returned as the first byte
     * of the next read.
     * <p>
     * If the pushback buffer is full, this method throws an exception.
     * <p>
     * The argument to this method is an <code>int</code>.  Only the low
     * eight bits of this value are pushed back.
     *
     * @param b The byte to be pushed back, passed as an int
     *
     * @exception IOException If the pushback buffer is full.
     */
    public synchronized void unread(int b) throws IOException
    {
        if (pos <= 0)
            throw new IOException("Insufficient space in pushback buffer");

        buf[--pos] = (byte) b;
    }

    /**
     * This method pushes all of the bytes in the passed byte array into
     * the pushback bfer.  These bytes are pushed in reverse order so that
     * the next byte read from the stream after this operation will be
     * <code>b[0]</code> followed by <code>b[1]</code>, etc.
     * <p>
     * If the pushback buffer cannot hold all of the requested bytes, an
     * exception is thrown.
     *
     * @param b The byte array to be pushed back
     *
     * @exception IOException If the pushback buffer is full
     */
    public synchronized void unread(byte[] b) throws IOException
    {
        unread(b, 0, b.length);
    }

    /**
     * This method pushed back bytes from the passed in array into the
     * pushback buffer.  The bytes from <code>b[offset]</code> to
     * <code>b[offset + len]</code> are pushed in reverse order so that
     * the next byte read from the stream after this operation will be
     * <code>b[offset]</code> followed by <code>b[offset + 1]</code>,
     * etc.
     * <p>
     * If the pushback buffer cannot hold all of the requested bytes, an
     * exception is thrown.
     *
     * @param b The byte array to be pushed back
     * @param off The index into the array where the bytes to be push start
     * @param len The number of bytes to be pushed.
     *
     * @exception IOException If the pushback buffer is full
     */
    public synchronized void unread(byte[] b, int off, int len)
            throws IOException
    {
        if (pos < len)
            throw new IOException("Insufficient space in pushback buffer");

        // Note the order that these bytes are being added is the opposite
        // of what would be done if they were added to the buffer one at a time.
        // See the Java Class Libraries book p. 1390.
        System.arraycopy(b, off, buf, pos - len, len);

        // Don't put this into the arraycopy above, an exception might be thrown
        // and in that case we don't want to modify pos.
        pos -= len;
    }

    /**
     * This method skips the specified number of bytes in the stream.  It
     * returns the actual number of bytes skipped, which may be less than the
     * requested amount.
     * <p>
     * This method first discards bytes from the buffer, then calls the
     * <code>skip</code> method on the underlying <code>InputStream</code> to
     * skip additional bytes if necessary.
     *
     * @param n The requested number of bytes to skip
     *
     * @return The actual number of bytes skipped.
     *
     * @exception IOException If an error occurs
     *
     * @since 1.2
     */
    public synchronized long skip(long n) throws IOException
    {
        final long origN = n;

        if (n > 0
Download .txt
gitextract_ojt7wwx5/

├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       └── ant.yml
├── .gitignore
├── .travis.yml
├── Licence.txt
├── PrintTestErrors.java
├── README.md
├── ReproducibleJar.java
├── RoadMap.md
├── ant.lib/
│   └── ant-contrib.jar
├── build.xml
├── feedback/
│   └── notes.md
├── gwt/
│   ├── BUILD-GWT.txt
│   └── gwt-2.8.3/
│       ├── COPYING
│       ├── COPYING.html
│       ├── about.html
│       ├── about.txt
│       ├── gwt-api-checker.jar
│       ├── gwt-codeserver.jar
│       ├── gwt-dev.jar
│       ├── gwt-module.dtd
│       ├── gwt-servlet-deps.jar
│       ├── gwt-servlet.jar
│       ├── gwt-user.jar
│       ├── i18nCreator
│       ├── i18nCreator.cmd
│       ├── release_notes.html
│       ├── webAppCreator
│       └── webAppCreator.cmd
├── lib/
│   ├── HikariCP-7.0.2.jar
│   ├── asm-9.2.jar
│   ├── asm-analysis-9.2.jar
│   ├── asm-commons-9.2.jar
│   ├── asm-tree-9.2.jar
│   ├── asm-util-9.2.jar
│   ├── jackson-annotations-2.15.0.jar
│   ├── jackson-core-2.15.0.jar
│   ├── jackson-databind-2.15.0.jar
│   ├── jackson-dataformat-cbor-2.15.0.jar
│   ├── jain-sdp.jar
│   ├── jakarta.servlet-api-5.0.0.jar
│   ├── java-otp-0.4.0.jar
│   ├── jetty-http-11.0.23.jar
│   ├── jetty-io-11.0.23.jar
│   ├── jetty-security-11.0.23.jar
│   ├── jetty-server-11.0.23.jar
│   ├── jetty-servlet-11.0.23.jar
│   ├── jetty-util-11.0.23.jar
│   ├── jffi-1.3.13-native.jar
│   ├── jffi-1.3.13.jar
│   ├── jline-3.27.0.jar
│   ├── jnr-a64asm-1.0.0.jar
│   ├── jnr-constants-0.10.4.jar
│   ├── jnr-ffi-2.2.16.jar
│   ├── jnr-fuse-0.5.8.jar
│   ├── jnr-posix-3.1.19.jar
│   ├── jnr-x86asm-1.0.2.jar
│   ├── kerby-asn1-2.0.3.jar
│   ├── nabu-v0.9-jar-with-dependencies.jar
│   ├── postgresql-42.7.9.jar
│   ├── simpleclient-0.15.0.jar
│   ├── simpleclient_common-0.15.0.jar
│   ├── simpleclient_httpserver-0.15.0.jar
│   ├── slf4j-api-1.7.30.jar
│   ├── slf4j-nop-1.7.30.jar
│   ├── sqlite-jdbc-3.46.1.0.jar
│   ├── webauthn4j-core-0.29.6.RELEASE.jar
│   ├── webp-imageio-core-0.1.3.jar
│   └── weupnp-0.1.2-SNAPSHOT.jar
├── lib-build/
│   ├── gwt-user.jar
│   ├── hamcrest-core-1.3.jar
│   └── junit-4.11.jar
├── reproducible-test.sh
├── scripts/
│   └── ensure-compile.sh
├── src/
│   └── peergos/
│       ├── Peergos.gwt.xml
│       ├── client/
│       │   ├── ConsolePrintStream.java
│       │   ├── JsUtil.java
│       │   ├── PathUtils.java
│       │   └── Start.java
│       ├── gwt/
│       │   └── emu/
│       │       ├── avian/
│       │       │   └── Utf8.java
│       │       ├── com/
│       │       │   └── badlogic/
│       │       │       └── gdx/
│       │       │           └── utils/
│       │       │               ├── Base64Coder.java
│       │       │               └── Utf8Decoder.java
│       │       ├── java/
│       │       │   ├── awt/
│       │       │   │   ├── AlphaComposite.java
│       │       │   │   ├── Composite.java
│       │       │   │   ├── Graphics2D.java
│       │       │   │   ├── Image.java
│       │       │   │   ├── ImageObserver.java
│       │       │   │   ├── RenderingHints.java
│       │       │   │   └── image/
│       │       │   │       ├── BufferedImage.java
│       │       │   │       └── RenderedImage.java
│       │       │   ├── io/
│       │       │   │   ├── BufferedReader.java
│       │       │   │   ├── ByteArrayInputStream.java
│       │       │   │   ├── ByteArrayOutputStream.java
│       │       │   │   ├── Closeable.java
│       │       │   │   ├── DataInput.java
│       │       │   │   ├── DataInputStream.java
│       │       │   │   ├── DataOutput.java
│       │       │   │   ├── DataOutputStream.java
│       │       │   │   ├── EOFException.java
│       │       │   │   ├── File.java
│       │       │   │   ├── FileInputStream.java
│       │       │   │   ├── FileNotFoundException.java
│       │       │   │   ├── FilenameFilter.java
│       │       │   │   ├── Flushable.java
│       │       │   │   ├── InputStreamReader.java
│       │       │   │   ├── OutputStreamWriter.java
│       │       │   │   ├── PrintWriter.java
│       │       │   │   ├── PushbackInputStream.java
│       │       │   │   ├── RandomAccessFile.java
│       │       │   │   ├── Reader.java
│       │       │   │   ├── UTFDataFormatException.java
│       │       │   │   ├── UnsupportedEncodingException.java
│       │       │   │   └── Writer.java
│       │       │   ├── lang/
│       │       │   │   ├── AutoCloseable.java
│       │       │   │   ├── ClassLoader.java
│       │       │   │   ├── ClassNotFoundException.java
│       │       │   │   ├── Exception.java
│       │       │   │   ├── InternalError.java
│       │       │   │   ├── InterruptedException.java
│       │       │   │   ├── OutOfMemoryError.java
│       │       │   │   ├── Readable.java
│       │       │   │   ├── Runnable.java
│       │       │   │   ├── RuntimeException.java
│       │       │   │   ├── SecurityException.java
│       │       │   │   └── Thread.java
│       │       │   ├── net/
│       │       │   │   ├── ConnectException.java
│       │       │   │   ├── HttpURLConnection.java
│       │       │   │   ├── Inet4Address.java
│       │       │   │   ├── Inet6Address.java
│       │       │   │   ├── InetAddress.java
│       │       │   │   ├── MalformedURLException.java
│       │       │   │   ├── ProtocolException.java
│       │       │   │   ├── Proxy.java
│       │       │   │   ├── SocketAddress.java
│       │       │   │   ├── SocketException.java
│       │       │   │   ├── SocketTimeoutException.java
│       │       │   │   ├── URL.java
│       │       │   │   ├── URLConnection.java
│       │       │   │   ├── URLEncoder.java
│       │       │   │   └── UnknownHostException.java
│       │       │   ├── nio/
│       │       │   │   ├── Buffer.java
│       │       │   │   ├── BufferOverflowException.java
│       │       │   │   ├── CharBuffer.java
│       │       │   │   ├── InvalidMarkException.java
│       │       │   │   └── file/
│       │       │   │       ├── Files.java
│       │       │   │       ├── OpenOption.java
│       │       │   │       ├── Path.java
│       │       │   │       ├── Paths.java
│       │       │   │       ├── StandardOpenOption.java
│       │       │   │       └── attribute/
│       │       │   │           └── FileAttribute.java
│       │       │   ├── security/
│       │       │   │   └── SecureRandom.java
│       │       │   ├── time/
│       │       │   │   ├── Clock.java
│       │       │   │   ├── DateTimeException.java
│       │       │   │   ├── Instant.java
│       │       │   │   ├── LocalDate.java
│       │       │   │   ├── LocalDateTime.java
│       │       │   │   ├── LocalTime.java
│       │       │   │   ├── ZoneId.java
│       │       │   │   ├── ZoneOffset.java
│       │       │   │   ├── ZoneRules.java
│       │       │   │   └── format/
│       │       │   │       └── DateTimeParseException.java
│       │       │   └── util/
│       │       │       ├── Base64.java
│       │       │       ├── Optional.java
│       │       │       ├── UUID.java
│       │       │       ├── concurrent/
│       │       │       │   ├── CompletableFuture.java
│       │       │       │   ├── CompletionStage.java
│       │       │       │   ├── ExecutionException.java
│       │       │       │   ├── ExecutorService.java
│       │       │       │   ├── ForkJoinPool.java
│       │       │       │   ├── ScheduledFuture.java
│       │       │       │   ├── ScheduledThreadPoolExecutor.java
│       │       │       │   ├── TimeUnit.java
│       │       │       │   └── TimeoutException.java
│       │       │       ├── function/
│       │       │       │   ├── Consumer.java
│       │       │       │   └── Function.java
│       │       │       └── zip/
│       │       │           ├── Adler32.java
│       │       │           ├── CRC32.java
│       │       │           ├── Checksum.java
│       │       │           ├── Deflater.java
│       │       │           ├── DeflaterConstants.java
│       │       │           ├── DeflaterEngine.java
│       │       │           ├── DeflaterHuffman.java
│       │       │           ├── DeflaterOutputStream.java
│       │       │           ├── DeflaterPending.java
│       │       │           ├── GZIPInputStream.java
│       │       │           ├── InflaterInputStream.java
│       │       │           └── PendingBuffer.java
│       │       ├── javafx/
│       │       │   ├── application/
│       │       │   │   └── Platform.java
│       │       │   ├── embed/
│       │       │   │   └── swing/
│       │       │   │       ├── JFXPanel.java
│       │       │   │       └── SwingFXUtils.java
│       │       │   ├── scene/
│       │       │   │   ├── SnapshotParameters.java
│       │       │   │   ├── image/
│       │       │   │   │   ├── Image.java
│       │       │   │   │   └── WritableImage.java
│       │       │   │   └── media/
│       │       │   │       ├── Media.java
│       │       │   │       ├── MediaPlayer.java
│       │       │   │       └── MediaView.java
│       │       │   └── util/
│       │       │       └── Duration.java
│       │       └── javax/
│       │           ├── crypto/
│       │           │   ├── Mac.java
│       │           │   └── spec/
│       │           │       └── SecretKeySpec.java
│       │           └── imageio/
│       │               └── ImageIO.java
│       ├── server/
│       │   ├── AggregatedMetrics.java
│       │   ├── Builder.java
│       │   ├── Command.java
│       │   ├── DesktopApp.java
│       │   ├── DirectOnlyStorage.java
│       │   ├── HostDirChooser.java
│       │   ├── HostDirEnumerator.java
│       │   ├── JavaCrypto.java
│       │   ├── JdbcAddressLRU.java
│       │   ├── JdbcPkiCache.java
│       │   ├── JdbcRecordLRU.java
│       │   ├── LinkIdentity.java
│       │   ├── Login.java
│       │   ├── LoginUpdate.java
│       │   ├── LookupOwner.java
│       │   ├── Main.java
│       │   ├── Mirror.java
│       │   ├── NonWriteThroughNetwork.java
│       │   ├── Playground.java
│       │   ├── PublicGateway.java
│       │   ├── Publisher.java
│       │   ├── Renew.java
│       │   ├── RenewUsernameClaim.java
│       │   ├── ServerAdmin.java
│       │   ├── ServerIdentity.java
│       │   ├── ServerMessages.java
│       │   ├── ServerProcesses.java
│       │   ├── SyncProperties.java
│       │   ├── UserCleanup.java
│       │   ├── UserService.java
│       │   ├── UserStats.java
│       │   ├── ValidateUser.java
│       │   ├── apps/
│       │   │   └── email/
│       │   │       └── EmailBridgeClient.java
│       │   ├── cli/
│       │   │   ├── CLI.java
│       │   │   ├── CLIContext.java
│       │   │   ├── Command.java
│       │   │   ├── ListFilesCompleter.java
│       │   │   ├── ParsedCommand.java
│       │   │   ├── ProgressBar.java
│       │   │   └── SupplierCompleter.java
│       │   ├── corenode/
│       │   │   ├── CorenodeEvent.java
│       │   │   ├── CorenodeEventPropagator.java
│       │   │   ├── IpfsCoreNode.java
│       │   │   ├── JdbcIpnsAndSocial.java
│       │   │   ├── MirrorCoreNode.java
│       │   │   ├── NonWriteThroughCoreNode.java
│       │   │   ├── SignUpFilter.java
│       │   │   ├── UserRepository.java
│       │   │   └── UsernameValidator.java
│       │   ├── crypto/
│       │   │   ├── JniTweetNacl.java
│       │   │   ├── TweetNaCl.java
│       │   │   ├── asymmetric/
│       │   │   │   ├── curve25519/
│       │   │   │   │   ├── Curve25519Java.java
│       │   │   │   │   └── Ed25519Java.java
│       │   │   │   └── mlkem/
│       │   │   │       ├── CryptoUtils.java
│       │   │   │       ├── JavaMlkem.java
│       │   │   │       ├── MlkemSecureRandom.java
│       │   │   │       ├── fips202/
│       │   │   │       │   ├── Constants.java
│       │   │   │       │   ├── FIPS202.java
│       │   │   │       │   ├── MimicloneFIPS202.java
│       │   │   │       │   └── keccak/
│       │   │   │       │       ├── MimicloneKeccak.java
│       │   │   │       │       ├── core/
│       │   │   │       │       │   ├── AbstractKeccakMessageDigest.java
│       │   │   │       │       │   ├── DuplexRandom.java
│       │   │   │       │       │   ├── Keccak1600.java
│       │   │   │       │       │   ├── KeccakSponge.java
│       │   │   │       │       │   ├── KeccakStateUtils.java
│       │   │   │       │       │   └── KeccakStateValidationFailedException.java
│       │   │   │       │       ├── io/
│       │   │   │       │       │   ├── BitInputStream.java
│       │   │   │       │       │   └── BitOutputStream.java
│       │   │   │       │       ├── spi/
│       │   │   │       │       │   ├── AbstractCipher.java
│       │   │   │       │       │   ├── AbstractSpongeStreamCipher.java
│       │   │   │       │       │   ├── KeccakRnd128.java
│       │   │   │       │       │   ├── KeccakRnd256.java
│       │   │   │       │       │   ├── RawKey.java
│       │   │   │       │       │   ├── Shake128Key.java
│       │   │   │       │       │   ├── Shake128StreamCipher.java
│       │   │   │       │       │   ├── Shake256Key.java
│       │   │   │       │       │   └── Shake256StreamCipher.java
│       │   │   │       │       └── sponge/
│       │   │   │       │           └── MimicloneKeccakSponge.java
│       │   │   │       ├── fips203/
│       │   │   │       │   ├── FIPS203.java
│       │   │   │       │   ├── FIPS203Exception.java
│       │   │   │       │   ├── MimicloneFIPS203.java
│       │   │   │       │   ├── ParameterSet.java
│       │   │   │       │   ├── codec/
│       │   │   │       │   │   ├── Codec.java
│       │   │   │       │   │   └── MLKEMCodec.java
│       │   │   │       │   ├── decaps/
│       │   │   │       │   │   ├── DecapsulationException.java
│       │   │   │       │   │   ├── Decapsulator.java
│       │   │   │       │   │   ├── mlkem/
│       │   │   │       │   │   │   └── MLKEMDecapsulator.java
│       │   │   │       │   │   └── provider/
│       │   │   │       │   │       └── MLKEMDecapsulatorProvider.java
│       │   │   │       │   ├── decrypt/
│       │   │   │       │   │   ├── DecryptionException.java
│       │   │   │       │   │   ├── Decryptor.java
│       │   │   │       │   │   └── kpke/
│       │   │   │       │   │       └── KPKEDecryptor.java
│       │   │   │       │   ├── encaps/
│       │   │   │       │   │   ├── Encapsulation.java
│       │   │   │       │   │   ├── EncapsulationException.java
│       │   │   │       │   │   ├── Encapsulator.java
│       │   │   │       │   │   ├── mlkem/
│       │   │   │       │   │   │   ├── MLKEMEncapsulation.java
│       │   │   │       │   │   │   └── MLKEMEncapsulator.java
│       │   │   │       │   │   └── provider/
│       │   │   │       │   │       └── MLKEMEncapsulationProvider.java
│       │   │   │       │   ├── encrypt/
│       │   │   │       │   │   ├── EncryptionException.java
│       │   │   │       │   │   ├── Encryptor.java
│       │   │   │       │   │   └── kpke/
│       │   │   │       │   │       └── KPKEEncryptor.java
│       │   │   │       │   ├── hash/
│       │   │   │       │   │   ├── Hash.java
│       │   │   │       │   │   ├── MLKEMHash.java
│       │   │   │       │   │   └── XOFParameterSet.java
│       │   │   │       │   ├── key/
│       │   │   │       │   │   ├── DecapsulationKey.java
│       │   │   │       │   │   ├── EncapsulationKey.java
│       │   │   │       │   │   ├── Key.java
│       │   │   │       │   │   ├── KeyPair.java
│       │   │   │       │   │   ├── KeyPairException.java
│       │   │   │       │   │   ├── SharedSecretKey.java
│       │   │   │       │   │   ├── check/
│       │   │   │       │   │   │   └── KeyPairCheckException.java
│       │   │   │       │   │   ├── gen/
│       │   │   │       │   │   │   ├── KeyPairGeneration.java
│       │   │   │       │   │   │   ├── KeyPairGenerationException.java
│       │   │   │       │   │   │   ├── mlkem/
│       │   │   │       │   │   │   │   └── MLKEMKeyPairGenerator.java
│       │   │   │       │   │   │   └── provider/
│       │   │   │       │   │   │       └── MLKEMKeyGenerationProvider.java
│       │   │   │       │   │   └── mlkem/
│       │   │   │       │   │       ├── MLKEMDecapsulationKey.java
│       │   │   │       │   │       ├── MLKEMEncapsulationKey.java
│       │   │   │       │   │       ├── MLKEMKeyPair.java
│       │   │   │       │   │       └── MLKEMSharedSecretKey.java
│       │   │   │       │   ├── message/
│       │   │   │       │   │   ├── CipherText.java
│       │   │   │       │   │   └── MLKEMCipherText.java
│       │   │   │       │   ├── provider/
│       │   │   │       │   │   ├── MLKEMProvider.java
│       │   │   │       │   │   └── MimicloneSecurityProvider.java
│       │   │   │       │   ├── reduce/
│       │   │   │       │   │   ├── Reducer.java
│       │   │   │       │   │   ├── ReductionException.java
│       │   │   │       │   │   └── barrett/
│       │   │   │       │   │       └── BarrettReducer.java
│       │   │   │       │   ├── sample/
│       │   │   │       │   │   ├── MLKEMSampler.java
│       │   │   │       │   │   └── Sampler.java
│       │   │   │       │   └── transform/
│       │   │   │       │       ├── MLKEMTransformer.java
│       │   │   │       │       ├── Transformer.java
│       │   │   │       │       └── TransformerException.java
│       │   │   │       └── package-info.java
│       │   │   ├── hash/
│       │   │   │   ├── Blake3.java
│       │   │   │   ├── ScryptJava.java
│       │   │   │   └── lambdaworks/
│       │   │   │       ├── codec/
│       │   │   │       │   └── Base64.java
│       │   │   │       ├── crypto/
│       │   │   │       │   ├── PBKDF.java
│       │   │   │       │   ├── SCrypt.java
│       │   │   │       │   └── SCryptUtil.java
│       │   │   │       └── jni/
│       │   │   │           ├── LibraryLoader.java
│       │   │   │           ├── LibraryLoaders.java
│       │   │   │           └── NilLibraryLoader.java
│       │   │   ├── random/
│       │   │   │   └── SafeRandomJava.java
│       │   │   └── symmetric/
│       │   │       └── Salsa20Poly1305Java.java
│       │   ├── fuse/
│       │   │   ├── CachingPeergosFS.java
│       │   │   ├── FuseProcess.java
│       │   │   └── PeergosFS.java
│       │   ├── login/
│       │   │   ├── AccountWithStorage.java
│       │   │   ├── JdbcAccount.java
│       │   │   ├── LocalOnlyAccount.java
│       │   │   ├── NonWriteThroughAccount.java
│       │   │   ├── VerifyingAccount.java
│       │   │   └── Webauthn.java
│       │   ├── messages/
│       │   │   └── ServerMessageStore.java
│       │   ├── mutable/
│       │   │   ├── BlockingMutablePointers.java
│       │   │   ├── JdbcPointerCache.java
│       │   │   ├── MutableEvent.java
│       │   │   ├── MutableEventPropagator.java
│       │   │   ├── NonWriteThroughMutablePointers.java
│       │   │   ├── PublicKeyBlackList.java
│       │   │   └── UserBasedBlacklist.java
│       │   ├── net/
│       │   │   ├── AccountHandler.java
│       │   │   ├── AndroidFileReflector.java
│       │   │   ├── BasicAuthHandler.java
│       │   │   ├── BatCaveHandler.java
│       │   │   ├── ConfigHandler.java
│       │   │   ├── CoreNodeHandler.java
│       │   │   ├── CspHost.java
│       │   │   ├── FileHandler.java
│       │   │   ├── GatewayHandler.java
│       │   │   ├── HSTSHandler.java
│       │   │   ├── InverseProxyHandler.java
│       │   │   ├── JarHandler.java
│       │   │   ├── Multipart.java
│       │   │   ├── MultipartReceiver.java
│       │   │   ├── MutationHandler.java
│       │   │   ├── ProxyChooser.java
│       │   │   ├── PublicFileHandler.java
│       │   │   ├── RedirectHandler.java
│       │   │   ├── ResponseHeaderHandler.java
│       │   │   ├── ServerMessageHandler.java
│       │   │   ├── SocialHandler.java
│       │   │   ├── SpaceHandler.java
│       │   │   ├── StaticHandler.java
│       │   │   ├── StopHandler.java
│       │   │   ├── StorageHandler.java
│       │   │   ├── SubdomainHandler.java
│       │   │   └── SyncConfigHandler.java
│       │   ├── simulation/
│       │   │   ├── AccessControl.java
│       │   │   ├── FileAsyncReader.java
│       │   │   ├── FileSystem.java
│       │   │   ├── InputStreamAsyncReader.java
│       │   │   ├── PeergosFileSystemImpl.java
│       │   │   └── Stat.java
│       │   ├── social/
│       │   │   └── NonWriteThroughSocialNetwork.java
│       │   ├── space/
│       │   │   ├── JdbcQuotas.java
│       │   │   ├── JdbcSpaceRequests.java
│       │   │   ├── JdbcUsageStore.java
│       │   │   ├── QuotaCLI.java
│       │   │   ├── SpaceCheckingKeyFilter.java
│       │   │   ├── UsageCLI.java
│       │   │   ├── UsageStore.java
│       │   │   ├── UserUsage.java
│       │   │   ├── UserUsageStore.java
│       │   │   ├── WriterUsage.java
│       │   │   └── WriterUsageStore.java
│       │   ├── sql/
│       │   │   ├── PostgresCommands.java
│       │   │   ├── SqlSupplier.java
│       │   │   └── SqliteCommands.java
│       │   ├── storage/
│       │   │   ├── AuthedCachingStorage.java
│       │   │   ├── AuthedStorage.java
│       │   │   ├── BlockBuffer.java
│       │   │   ├── BlockMetadata.java
│       │   │   ├── BlockMetadataStore.java
│       │   │   ├── BlockVersion.java
│       │   │   ├── CachingBlockMetadataStore.java
│       │   │   ├── CidVersionInfiniFilter.java
│       │   │   ├── DelayingStorage.java
│       │   │   ├── DelegatingDeletableStorage.java
│       │   │   ├── DeletableContentAddressedStorage.java
│       │   │   ├── DirectS3Proxy.java
│       │   │   ├── FileBlockBuffer.java
│       │   │   ├── FileBlockCache.java
│       │   │   ├── FileContentAddressedStorage.java
│       │   │   ├── GarbageCollector.java
│       │   │   ├── GetBlockingStorage.java
│       │   │   ├── IpfsWrapper.java
│       │   │   ├── JdbcBlockMetadataStore.java
│       │   │   ├── JdbcLinkRetrievalcounter.java
│       │   │   ├── JdbcPartitionStatus.java
│       │   │   ├── JdbcServerIdentityStore.java
│       │   │   ├── JdbcTransactionStore.java
│       │   │   ├── LinkRetrievalCounter.java
│       │   │   ├── LocalFirstStorage.java
│       │   │   ├── LocalIpnsStorage.java
│       │   │   ├── LocalS3Handler.java
│       │   │   ├── LocalS3Server.java
│       │   │   ├── LocalVersionInstanceAdmin.java
│       │   │   ├── MetadataCachingStorage.java
│       │   │   ├── MultiIdStorage.java
│       │   │   ├── NewBlocksProcessor.java
│       │   │   ├── NonWriteThroughStorage.java
│       │   │   ├── P2pBlockGet.java
│       │   │   ├── PartitionStatus.java
│       │   │   ├── RAMStorage.java
│       │   │   ├── RamBlockMetadataStore.java
│       │   │   ├── RamLinkRetrievalCounter.java
│       │   │   ├── RequestCountingStorage.java
│       │   │   ├── ResetableFileInputStream.java
│       │   │   ├── S3AdminRequests.java
│       │   │   ├── S3BlockStorage.java
│       │   │   ├── S3BucketCopy.java
│       │   │   ├── S3BucketStats.java
│       │   │   ├── S3BucketSync.java
│       │   │   ├── S3CanonicaliseVersionedBucket.java
│       │   │   ├── S3Config.java
│       │   │   ├── S3DeleteOld.java
│       │   │   ├── S3Exploration.java
│       │   │   ├── S3HasBlock.java
│       │   │   ├── SecretLinkStorage.java
│       │   │   ├── ServerIdentityStore.java
│       │   │   ├── SqliteBlockList.java
│       │   │   ├── SqliteBlockReachability.java
│       │   │   ├── TransactionStore.java
│       │   │   ├── TransactionalIpfs.java
│       │   │   ├── UserBlockVersion.java
│       │   │   ├── UserQuotas.java
│       │   │   ├── VersionFilter.java
│       │   │   ├── admin/
│       │   │   │   ├── Admin.java
│       │   │   │   ├── AdminHandler.java
│       │   │   │   ├── HttpQuotaAdmin.java
│       │   │   │   └── QuotaAdmin.java
│       │   │   └── auth/
│       │   │       ├── BlockRequestAuthoriser.java
│       │   │       ├── JdbcBatCave.java
│       │   │       ├── RamBatCave.java
│       │   │       └── Want.java
│       │   ├── sync/
│       │   │   ├── CopyOp.java
│       │   │   ├── DirectorySync.java
│       │   │   ├── FileState.java
│       │   │   ├── JdbcTreeState.java
│       │   │   ├── LocalFileSystem.java
│       │   │   ├── PeergosSyncFS.java
│       │   │   ├── RamTreeState.java
│       │   │   ├── SyncConfig.java
│       │   │   ├── SyncFilesystem.java
│       │   │   ├── SyncProgress.java
│       │   │   ├── SyncRunner.java
│       │   │   └── SyncState.java
│       │   ├── tests/
│       │   │   ├── ArgsTests.java
│       │   │   ├── BatTests.java
│       │   │   ├── Blake3Tests.java
│       │   │   ├── BlockSizeTests.java
│       │   │   ├── CLITests.java
│       │   │   ├── CborObjects.java
│       │   │   ├── ChampTests.java
│       │   │   ├── CidTests.java
│       │   │   ├── CorenodeTests.java
│       │   │   ├── DifficultyGeneratorTests.java
│       │   │   ├── Exceptions.java
│       │   │   ├── FileBlockBufferTests.java
│       │   │   ├── FileChunkBinarySearchTests.java
│       │   │   ├── FileHandlerTests.java
│       │   │   ├── FragmentedPaddedCipherTextTests.java
│       │   │   ├── FragmenterTest.java
│       │   │   ├── FuseTests.java
│       │   │   ├── GCTests.java
│       │   │   ├── IdentityProofTests.java
│       │   │   ├── InodeFilesystemTests.java
│       │   │   ├── IpfsMetricsTest.java
│       │   │   ├── IpfsUserTests.java
│       │   │   ├── JdbcAddressBookTest.java
│       │   │   ├── JdbcLinkRetrievalCounterTests.java
│       │   │   ├── JdbcRecordStoreTests.java
│       │   │   ├── JdbcUsageStoreTests.java
│       │   │   ├── LegacyWebauthn.java
│       │   │   ├── MLKEMTests.java
│       │   │   ├── MessagingTests.java
│       │   │   ├── MimeTypeTests.java
│       │   │   ├── MirrorTests.java
│       │   │   ├── MultiNodeNetworkTests.java
│       │   │   ├── MultiUserTests.java
│       │   │   ├── MultibaseTests.java
│       │   │   ├── MultipartTests.java
│       │   │   ├── P2pStreamNetworkTests.java
│       │   │   ├── PasswordProtection.java
│       │   │   ├── PeergosNetworkUtils.java
│       │   │   ├── ProofOfWorkTests.java
│       │   │   ├── QrCodeTests.java
│       │   │   ├── QuotaStoreTests.java
│       │   │   ├── QuotaTests.java
│       │   │   ├── RamPki.java
│       │   │   ├── RamUserTests.java
│       │   │   ├── RateLimitTests.java
│       │   │   ├── RateMonitorTests.java
│       │   │   ├── RequestCountTests.java
│       │   │   ├── RequestCountingBlockMetadataStore.java
│       │   │   ├── RestartTests.java
│       │   │   ├── RetryStorageTests.java
│       │   │   ├── S3ParallelListingTest.java
│       │   │   ├── S3V4SignatureTests.java
│       │   │   ├── ServerIdentityTests.java
│       │   │   ├── SqliteBlockMetadataTest.java
│       │   │   ├── SqliteTableTests.java
│       │   │   ├── SqliteblockListTests.java
│       │   │   ├── StandaloneWebauthnDemo.java
│       │   │   ├── SyncTests.java
│       │   │   ├── TestJniTweetNacl.java
│       │   │   ├── TokenSignupTests.java
│       │   │   ├── TorTest.java
│       │   │   ├── TotpTest.java
│       │   │   ├── TransactionsStoreTests.java
│       │   │   ├── TreeHash.java
│       │   │   ├── UserPublicKeyLinkTests.java
│       │   │   ├── UserTests.java
│       │   │   ├── VarintTests.java
│       │   │   ├── VersionedWriteOnlyStorage.java
│       │   │   ├── WriteOnlyStorage.java
│       │   │   ├── WriterDataTests.java
│       │   │   ├── WriterTest.java
│       │   │   ├── fips203/
│       │   │   │   ├── FIPS203Tests.java
│       │   │   │   ├── ParameterSetTests.java
│       │   │   │   ├── decaps/
│       │   │   │   │   └── mlkem/
│       │   │   │   │       ├── MLKEMDecapsulatorTests.java
│       │   │   │   │       └── internalProjection.json
│       │   │   │   ├── encaps/
│       │   │   │   │   └── mlkem/
│       │   │   │   │       ├── MLKEMEncapsulatorTests.java
│       │   │   │   │       └── internalProjection.json
│       │   │   │   ├── harness/
│       │   │   │   │   ├── TestCase.java
│       │   │   │   │   ├── TestGroup.java
│       │   │   │   │   └── TestPrompt.java
│       │   │   │   ├── key/
│       │   │   │   │   └── gen/
│       │   │   │   │       └── mlkem/
│       │   │   │   │           ├── MLKEMKeyGeneratorTests.java
│       │   │   │   │           ├── expectedResults.json
│       │   │   │   │           ├── internalProjection.json
│       │   │   │   │           └── prompt.json
│       │   │   │   ├── provider/
│       │   │   │   │   └── MimicloneSecurityProviderTests.java
│       │   │   │   └── reduce/
│       │   │   │       └── barrett/
│       │   │   │           └── BarrettReducerTests.java
│       │   │   ├── linux/
│       │   │   │   ├── LocalS3ServerTest.java
│       │   │   │   └── S3UserTests.java
│       │   │   ├── simulation/
│       │   │   │   ├── NativeFileSystemImpl.java
│       │   │   │   └── Simulator.java
│       │   │   ├── slow/
│       │   │   │   ├── ChatBenchmark.java
│       │   │   │   ├── DeleteBenchmark.java
│       │   │   │   ├── EfficiencyComparison.java
│       │   │   │   ├── FileBlockCacheTests.java
│       │   │   │   ├── GCBenchmark.java
│       │   │   │   ├── IpfsStressTest.java
│       │   │   │   ├── LoginBenchmark.java
│       │   │   │   ├── MediumFileBenchmark.java
│       │   │   │   ├── MkdirBenchmark.java
│       │   │   │   ├── MultipartBenchmark.java
│       │   │   │   ├── MultipartProfiling.java
│       │   │   │   ├── PostgresUserTests.java
│       │   │   │   ├── SignupBenchmark.java
│       │   │   │   ├── SmallFileBenchmark.java
│       │   │   │   ├── SocialBenchmark.java
│       │   │   │   └── SocialfeedBenchmark.java
│       │   │   └── util/
│       │   │       ├── HashTreeTests.java
│       │   │       ├── NonClosingTransactionService.java
│       │   │       └── TestPorts.java
│       │   ├── user/
│       │   │   └── JavaImageThumbnailer.java
│       │   ├── util/
│       │   │   ├── AddressUtil.java
│       │   │   ├── AlphanumComparator.java
│       │   │   ├── Args.java
│       │   │   ├── DifficultyGenerator.java
│       │   │   ├── HtmlUtil.java
│       │   │   ├── HttpUtil.java
│       │   │   ├── JavaPoster.java
│       │   │   ├── JvmThumbnailer.java
│       │   │   ├── Logging.java
│       │   │   ├── NettyPinnedHttps.java
│       │   │   ├── Passwords.java
│       │   │   ├── PinnedHost.java
│       │   │   ├── Postgres.java
│       │   │   ├── RateMonitor.java
│       │   │   ├── SlidingWindowCounter.java
│       │   │   ├── Sqlite.java
│       │   │   ├── Threads.java
│       │   │   └── TimeLimited.java
│       │   └── webdav/
│       │       ├── WebdavFileSystem.java
│       │       ├── WebdavServer.java
│       │       └── modeshape/
│       │           └── webdav/
│       │               ├── IMethodExecutor.java
│       │               ├── IMimeTyper.java
│       │               ├── ITransaction.java
│       │               ├── IWebdavStore.java
│       │               ├── StoredObject.java
│       │               ├── WebDavServletBean.java
│       │               ├── WebdavServlet.java
│       │               ├── WebdavStatus.java
│       │               ├── exceptions/
│       │               │   ├── AccessDeniedException.java
│       │               │   ├── LockFailedException.java
│       │               │   ├── ObjectAlreadyExistsException.java
│       │               │   ├── ObjectNotFoundException.java
│       │               │   ├── UnauthenticatedException.java
│       │               │   └── WebdavException.java
│       │               ├── fromcatalina/
│       │               │   ├── RequestUtil.java
│       │               │   ├── URLEncoder.java
│       │               │   ├── XMLHelper.java
│       │               │   └── XMLWriter.java
│       │               ├── locking/
│       │               │   ├── IResourceLocks.java
│       │               │   ├── LockedObject.java
│       │               │   └── ResourceLocks.java
│       │               └── methods/
│       │                   ├── AbstractMethod.java
│       │                   ├── DeterminableMethod.java
│       │                   ├── DoCopy.java
│       │                   ├── DoDelete.java
│       │                   ├── DoGet.java
│       │                   ├── DoHead.java
│       │                   ├── DoLock.java
│       │                   ├── DoMkcol.java
│       │                   ├── DoMove.java
│       │                   ├── DoNotImplemented.java
│       │                   ├── DoOptions.java
│       │                   ├── DoPropfind.java
│       │                   ├── DoProppatch.java
│       │                   ├── DoPut.java
│       │                   └── DoUnlock.java
│       └── shared/
│           ├── BufferedNetworkAccess.java
│           ├── Crypto.java
│           ├── CryptreeCache.java
│           ├── MaybeMultihash.java
│           ├── NetworkAccess.java
│           ├── OnlineState.java
│           ├── QRCodeEncoder.java
│           ├── SecretLinkQRCode.java
│           ├── cbor/
│           │   ├── CborConstants.java
│           │   ├── CborDecoder.java
│           │   ├── CborEncoder.java
│           │   ├── CborObject.java
│           │   ├── CborType.java
│           │   └── Cborable.java
│           ├── corenode/
│           │   ├── CoreNode.java
│           │   ├── CoreNodeUtils.java
│           │   ├── HTTPCoreNode.java
│           │   ├── OfflineCorenode.java
│           │   ├── OpLog.java
│           │   ├── PkiCache.java
│           │   ├── Proxy.java
│           │   ├── TofuCoreNode.java
│           │   ├── UserPublicKeyLink.java
│           │   └── Usernames.java
│           ├── crypto/
│           │   ├── AsymmetricCipherText.java
│           │   ├── BoxingKeyPair.java
│           │   ├── CipherText.java
│           │   ├── FragmentedPaddedCipherText.java
│           │   ├── InvalidCipherTextException.java
│           │   ├── OwnerProof.java
│           │   ├── PaddedAsymmetricCipherText.java
│           │   ├── PaddedCipherText.java
│           │   ├── ProofOfWork.java
│           │   ├── RequiredDifficulty.java
│           │   ├── SigningKeyPair.java
│           │   ├── SigningPrivateKeyAndPublicHash.java
│           │   ├── SourcedAsymmetricCipherText.java
│           │   ├── SymmetricLink.java
│           │   ├── SymmetricLinkToSigner.java
│           │   ├── asymmetric/
│           │   │   ├── PublicBoxingKey.java
│           │   │   ├── PublicSigningKey.java
│           │   │   ├── SecretBoxingKey.java
│           │   │   ├── SecretSigningKey.java
│           │   │   ├── curve25519/
│           │   │   │   ├── Curve25519.java
│           │   │   │   ├── Curve25519PublicKey.java
│           │   │   │   ├── Curve25519SecretKey.java
│           │   │   │   ├── Ed25519.java
│           │   │   │   ├── Ed25519PublicKey.java
│           │   │   │   └── Ed25519SecretKey.java
│           │   │   └── mlkem/
│           │   │       ├── HybridCipherText.java
│           │   │       ├── HybridCurve25519MLKEMPublicKey.java
│           │   │       ├── HybridCurve25519MLKEMSecretKey.java
│           │   │       ├── Mlkem.java
│           │   │       ├── MlkemKeyPair.java
│           │   │       ├── MlkemPublicKey.java
│           │   │       └── MlkemSecretKey.java
│           │   ├── hash/
│           │   │   ├── BaseHash.java
│           │   │   ├── Blake2b.java
│           │   │   ├── Hash.java
│           │   │   ├── Hasher.java
│           │   │   ├── NativeScryptJS.java
│           │   │   ├── PublicKeyHash.java
│           │   │   ├── ScryptJS.java
│           │   │   └── Sha256.java
│           │   ├── password/
│           │   │   └── PasswordProtected.java
│           │   ├── random/
│           │   │   ├── JSNaCl.java
│           │   │   └── SafeRandom.java
│           │   └── symmetric/
│           │       ├── Salsa20Poly1305.java
│           │       ├── SymmetricKey.java
│           │       └── TweetNaClKey.java
│           ├── display/
│           │   ├── Content.java
│           │   ├── FileRef.java
│           │   ├── Reference.java
│           │   └── Text.java
│           ├── email/
│           │   ├── Attachment.java
│           │   ├── EmailClient.java
│           │   └── EmailMessage.java
│           ├── fingerprint/
│           │   └── FingerPrint.java
│           ├── hamt/
│           │   ├── Champ.java
│           │   ├── ChampUtil.java
│           │   └── ChampWrapper.java
│           ├── inode/
│           │   ├── DirectoryInode.java
│           │   ├── Inode.java
│           │   ├── InodeCap.java
│           │   ├── InodeFileSystem.java
│           │   └── PathElement.java
│           ├── io/
│           │   └── ipfs/
│           │       ├── Cid.java
│           │       ├── MultiAddress.java
│           │       ├── Multihash.java
│           │       ├── Protocol.java
│           │       ├── api/
│           │       │   ├── JSONParser.java
│           │       │   ├── MerkleNode.java
│           │       │   ├── NamedStreamable.java
│           │       │   └── Peer.java
│           │       └── bases/
│           │           ├── Base16.java
│           │           ├── Base32.java
│           │           ├── Base36.java
│           │           ├── Base58.java
│           │           ├── Base64.java
│           │           ├── BaseNCodec.java
│           │           ├── BinaryDecoder.java
│           │           ├── BinaryEncoder.java
│           │           ├── CharEncoding.java
│           │           ├── Charsets.java
│           │           ├── Decoder.java
│           │           ├── DecoderException.java
│           │           ├── Encoder.java
│           │           ├── EncoderException.java
│           │           ├── Multibase.java
│           │           └── StringUtils.java
│           ├── login/
│           │   ├── LoginCache.java
│           │   ├── LoginResponse.java
│           │   ├── OfflineAccountStore.java
│           │   └── mfa/
│           │       ├── MultiFactorAuthMethod.java
│           │       ├── MultiFactorAuthRequest.java
│           │       ├── MultiFactorAuthResponse.java
│           │       ├── TotpKey.java
│           │       └── WebauthnResponse.java
│           ├── messaging/
│           │   ├── Chat.java
│           │   ├── ChatController.java
│           │   ├── ChatUpdate.java
│           │   ├── FileBackedMessageStore.java
│           │   ├── GroupProperty.java
│           │   ├── Id.java
│           │   ├── Member.java
│           │   ├── MessageEnvelope.java
│           │   ├── MessageRef.java
│           │   ├── MessageStore.java
│           │   ├── Messenger.java
│           │   ├── PrivateChatState.java
│           │   ├── SignedMessage.java
│           │   ├── TreeClock.java
│           │   └── messages/
│           │       ├── ApplicationMessage.java
│           │       ├── DeleteMessage.java
│           │       ├── EditMessage.java
│           │       ├── Invite.java
│           │       ├── Join.java
│           │       ├── Message.java
│           │       ├── RemoveMember.java
│           │       ├── ReplyTo.java
│           │       └── SetGroupState.java
│           ├── mutable/
│           │   ├── BufferedPointers.java
│           │   ├── CachingPointers.java
│           │   ├── HttpMutablePointers.java
│           │   ├── MultiWriterCommit.java
│           │   ├── MutablePointers.java
│           │   ├── MutablePointersProxy.java
│           │   ├── OfflinePointerCache.java
│           │   ├── PointerCache.java
│           │   ├── PointerUpdate.java
│           │   ├── ProxyingMutablePointers.java
│           │   ├── RetryMutablePointers.java
│           │   └── SignedPointerUpdate.java
│           ├── resolution/
│           │   └── ResolutionRecord.java
│           ├── social/
│           │   ├── BlindFollowRequest.java
│           │   ├── FollowRequest.java
│           │   ├── FollowRequestWithCipherText.java
│           │   ├── HttpSocialNetwork.java
│           │   ├── ProcessedCaps.java
│           │   ├── ProxyingSocialNetwork.java
│           │   ├── SharedItem.java
│           │   ├── SocialFeed.java
│           │   ├── SocialNetwork.java
│           │   ├── SocialNetworkProxy.java
│           │   └── SocialPost.java
│           ├── storage/
│           │   ├── BlockCache.java
│           │   ├── BlockMirrorCap.java
│           │   ├── BlockStoreProperties.java
│           │   ├── BlockWriteGroup.java
│           │   ├── BufferedStorage.java
│           │   ├── CachingStorage.java
│           │   ├── CachingVerifyingStorage.java
│           │   ├── CasException.java
│           │   ├── ChunkMirrorCap.java
│           │   ├── ContentAddressedStorage.java
│           │   ├── ContentAddressedStorageProxy.java
│           │   ├── DecodedSpaceRequest.java
│           │   ├── DelegatingStorage.java
│           │   ├── DirectS3BlockStore.java
│           │   ├── HashVerifyingStorage.java
│           │   ├── HttpFileNotFoundException.java
│           │   ├── HttpSpaceUsage.java
│           │   ├── IpfsTransaction.java
│           │   ├── IpnsEntry.java
│           │   ├── JSAccountCache.java
│           │   ├── JSBatCache.java
│           │   ├── JSBlockCache.java
│           │   ├── JSPkiCache.java
│           │   ├── JSPointerCache.java
│           │   ├── LinkCounts.java
│           │   ├── LocalOnlyStorage.java
│           │   ├── LocalRamStorage.java
│           │   ├── MajorRateLimitException.java
│           │   ├── PaymentProperties.java
│           │   ├── PointerCasException.java
│           │   ├── PresignedUrl.java
│           │   ├── ProxyingSpaceUsage.java
│           │   ├── QuotaControl.java
│           │   ├── RamBlockCache.java
│           │   ├── RateLimitException.java
│           │   ├── RetryStorage.java
│           │   ├── SpaceUsage.java
│           │   ├── SpaceUsageProxy.java
│           │   ├── StorageQuotaExceededException.java
│           │   ├── TransactionId.java
│           │   ├── UnauthedCachingStorage.java
│           │   ├── WriteAuthRequest.java
│           │   ├── WriteFilter.java
│           │   ├── auth/
│           │   │   ├── Bat.java
│           │   │   ├── BatCache.java
│           │   │   ├── BatCave.java
│           │   │   ├── BatCaveProxy.java
│           │   │   ├── BatId.java
│           │   │   ├── BatList.java
│           │   │   ├── BatWithId.java
│           │   │   ├── BlockAuth.java
│           │   │   ├── EncryptedBatCache.java
│           │   │   ├── HttpBatCave.java
│           │   │   ├── OfflineBatCache.java
│           │   │   ├── ProxyingBatCave.java
│           │   │   └── S3Request.java
│           │   └── controller/
│           │       ├── AllowedSignups.java
│           │       ├── HttpInstanceAdmin.java
│           │       └── InstanceAdmin.java
│           ├── user/
│           │   ├── Account.java
│           │   ├── AccountProxy.java
│           │   ├── AcquaintanceSourcedTrieNode.java
│           │   ├── App.java
│           │   ├── CapsDiff.java
│           │   ├── CommittedWriterData.java
│           │   ├── Committer.java
│           │   ├── CommitterBuilder.java
│           │   ├── ComplexComputation.java
│           │   ├── ComplexMutation.java
│           │   ├── EntryPoint.java
│           │   ├── ExternalTrieNode.java
│           │   ├── FileSharedWithState.java
│           │   ├── FriendAnnotation.java
│           │   ├── FriendSourcedTrieNode.java
│           │   ├── FriendsGroups.java
│           │   ├── Groups.java
│           │   ├── HttpAccount.java
│           │   ├── HttpPoster.java
│           │   ├── IdentityLink.java
│           │   ├── IdentityLinkProof.java
│           │   ├── ImmutableTree.java
│           │   ├── IncomingCapCache.java
│           │   ├── JavaScriptPoster.java
│           │   ├── LinkProperties.java
│           │   ├── LoginData.java
│           │   ├── Migrate.java
│           │   ├── MutableTree.java
│           │   ├── MutableTreeImpl.java
│           │   ├── Mutation.java
│           │   ├── NativeJSAccountCache.java
│           │   ├── NativeJSBatCache.java
│           │   ├── NativeJSCache.java
│           │   ├── NativeJSHttp.java
│           │   ├── NativeJSPkiCache.java
│           │   ├── NativeJSPointerCache.java
│           │   ├── OwnedKeyChamp.java
│           │   ├── PendingSocialState.java
│           │   ├── Profile.java
│           │   ├── ProfilePaths.java
│           │   ├── ProxyingAccount.java
│           │   ├── RandomSecretType.java
│           │   ├── RetrievedEntryPoint.java
│           │   ├── ScryptGenerator.java
│           │   ├── SecretGenerationAlgorithm.java
│           │   ├── SecretLinkChamp.java
│           │   ├── ServerConversation.java
│           │   ├── ServerMessage.java
│           │   ├── ServerMessager.java
│           │   ├── SharedWithCache.java
│           │   ├── SharedWithState.java
│           │   ├── Snapshot.java
│           │   ├── SocialState.java
│           │   ├── TofuKeyStore.java
│           │   ├── TrieNode.java
│           │   ├── TrieNodeImpl.java
│           │   ├── UserContext.java
│           │   ├── UserSnapshot.java
│           │   ├── UserStaticData.java
│           │   ├── UserUtil.java
│           │   ├── UserWithRoot.java
│           │   ├── WriteSynchronizer.java
│           │   ├── WriterData.java
│           │   ├── app/
│           │   │   ├── ShareLocalAppData.java
│           │   │   └── StoreAppData.java
│           │   └── fs/
│           │       ├── AbsoluteCapability.java
│           │       ├── AsyncReader.java
│           │       ├── Blake3state.java
│           │       ├── BrowserFileReader.java
│           │       ├── CapabilitiesFromUser.java
│           │       ├── CapabilityStore.java
│           │       ├── CapabilityWithPath.java
│           │       ├── Chunk.java
│           │       ├── ChunkHashList.java
│           │       ├── EncryptedCapability.java
│           │       ├── EncryptedChunkRetriever.java
│           │       ├── ErasureFragmenter.java
│           │       ├── FileExistsException.java
│           │       ├── FileProperties.java
│           │       ├── FileRetriever.java
│           │       ├── FileUploader.java
│           │       ├── FileWrapper.java
│           │       ├── Fragment.java
│           │       ├── FragmentWithHash.java
│           │       ├── Fragmenter.java
│           │       ├── HashBranch.java
│           │       ├── HashTree.java
│           │       ├── HashTreeBuilder.java
│           │       ├── JSFileReader.java
│           │       ├── LazyInputStreamCombiner.java
│           │       ├── LocatedChunk.java
│           │       ├── Location.java
│           │       ├── MimeTypes.java
│           │       ├── Mp3CoverImage.java
│           │       ├── NamedAbsoluteCapability.java
│           │       ├── NamedRelativeCapability.java
│           │       ├── NativeJSThumbnail.java
│           │       ├── RelativeCapability.java
│           │       ├── ResumeUploadProps.java
│           │       ├── RetrievedCapability.java
│           │       ├── RootHash.java
│           │       ├── SecretLink.java
│           │       ├── SecretLinkTarget.java
│           │       ├── SplitFragmenter.java
│           │       ├── Thumbnail.java
│           │       ├── ThumbnailGenerator.java
│           │       ├── VideoThumbnail.java
│           │       ├── WritableAbsoluteCapability.java
│           │       ├── cryptree/
│           │       │   └── CryptreeNode.java
│           │       ├── erasure/
│           │       │   ├── Erasure.java
│           │       │   ├── ErrorTests.java
│           │       │   ├── GaloisField.java
│           │       │   ├── GaloisField1024.java
│           │       │   ├── GaloisField16.java
│           │       │   ├── GaloisField256.java
│           │       │   ├── GaloisField4.java
│           │       │   ├── GaloisField65536.java
│           │       │   └── GaloisPolynomial.java
│           │       └── transaction/
│           │           ├── FileUploadTransaction.java
│           │           ├── Transaction.java
│           │           ├── TransactionService.java
│           │           └── TransactionServiceImpl.java
│           ├── util/
│           │   ├── ArrayOps.java
│           │   ├── AsyncLock.java
│           │   ├── ByteArrayWrapper.java
│           │   ├── CappedProgressConsumer.java
│           │   ├── Constants.java
│           │   ├── EfficientHashMap.java
│           │   ├── Either.java
│           │   ├── Exceptions.java
│           │   ├── FileUtils.java
│           │   ├── Futures.java
│           │   ├── LRUCache.java
│           │   ├── LongUtil.java
│           │   ├── Pair.java
│           │   ├── PathUtil.java
│           │   ├── Plan.java
│           │   ├── ProgressConsumer.java
│           │   ├── Serialize.java
│           │   ├── TimeLimitedClient.java
│           │   ├── TriFunction.java
│           │   ├── Triple.java
│           │   └── Version.java
│           └── zxing/
│               ├── BarcodeFormat.java
│               ├── Binarizer.java
│               ├── BinaryBitmap.java
│               ├── ChecksumException.java
│               ├── DecodeHintType.java
│               ├── Dimension.java
│               ├── EncodeHintType.java
│               ├── FormatException.java
│               ├── InvertedLuminanceSource.java
│               ├── LuminanceSource.java
│               ├── NotFoundException.java
│               ├── PlanarYUVLuminanceSource.java
│               ├── RGBLuminanceSource.java
│               ├── Reader.java
│               ├── ReaderException.java
│               ├── Result.java
│               ├── ResultMetadataType.java
│               ├── ResultPoint.java
│               ├── ResultPointCallback.java
│               ├── Writer.java
│               ├── WriterException.java
│               ├── common/
│               │   ├── BitArray.java
│               │   ├── BitMatrix.java
│               │   ├── BitSource.java
│               │   ├── CharacterSetECI.java
│               │   ├── DecoderResult.java
│               │   ├── DefaultGridSampler.java
│               │   ├── DetectorResult.java
│               │   ├── GlobalHistogramBinarizer.java
│               │   ├── GridSampler.java
│               │   ├── HybridBinarizer.java
│               │   ├── PerspectiveTransform.java
│               │   ├── StringUtils.java
│               │   ├── detector/
│               │   │   ├── MathUtils.java
│               │   │   ├── MonochromeRectangleDetector.java
│               │   │   └── WhiteRectangleDetector.java
│               │   └── reedsolomon/
│               │       ├── GenericGF.java
│               │       ├── GenericGFPoly.java
│               │       ├── ReedSolomonDecoder.java
│               │       ├── ReedSolomonEncoder.java
│               │       └── ReedSolomonException.java
│               └── qrcode/
│                   ├── QRCodeReader.java
│                   ├── QRCodeWriter.java
│                   ├── decoder/
│                   │   ├── BitMatrixParser.java
│                   │   ├── DataBlock.java
│                   │   ├── DataMask.java
│                   │   ├── DecodedBitStreamParser.java
│                   │   ├── Decoder.java
│                   │   ├── ErrorCorrectionLevel.java
│                   │   ├── FormatInformation.java
│                   │   ├── Mode.java
│                   │   ├── QRCodeDecoderMetaData.java
│                   │   └── Version.java
│                   ├── detector/
│                   │   ├── AlignmentPattern.java
│                   │   ├── AlignmentPatternFinder.java
│                   │   ├── Detector.java
│                   │   ├── FinderPattern.java
│                   │   ├── FinderPatternFinder.java
│                   │   └── FinderPatternInfo.java
│                   └── encoder/
│                       ├── BlockPair.java
│                       ├── ByteMatrix.java
│                       ├── Encoder.java
│                       ├── MaskUtil.java
│                       ├── MatrixUtil.java
│                       └── QRCode.java
└── test/
    └── resources/
        └── static_handler/
            ├── something.txt
            └── test/
                └── hello.txt
Download .txt
Showing preview only (850K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10466 symbols across 1005 files)

FILE: PrintTestErrors.java
  class PrintTestErrors (line 12) | public class PrintTestErrors {
    method main (line 14) | public static void main(String[] args) throws IOException {

FILE: ReproducibleJar.java
  class ReproducibleJar (line 9) | public class ReproducibleJar {
    method main (line 10) | public static void main(String[] args) throws Exception {
    method setAllTimes (line 24) | private static byte[] setAllTimes(Path root, FileTime lastModified) {

FILE: src/peergos/client/ConsolePrintStream.java
  class ConsolePrintStream (line 25) | public class ConsolePrintStream extends PrintStream {
    method ConsolePrintStream (line 29) | public ConsolePrintStream () {
    method print (line 33) | public void print (String s) {
    method consoleLog (line 47) | public native void consoleLog (String msg) /*-{
    method print (line 55) | public void print (char c) {
    method println (line 63) | public void println () {
    method println (line 67) | @Override

FILE: src/peergos/client/JsUtil.java
  class JsUtil (line 17) | public class JsUtil {
    method fromUtcMillis (line 19) | @JsMethod
    method fromByteArray (line 24) | @JsMethod
    method asList (line 29) | @JsMethod
    method asSet (line 34) | @JsMethod
    method emptyList (line 39) | @JsMethod
    method emptyOptional (line 44) | @JsMethod
    method optionalOf (line 49) | @JsMethod
    method now (line 55) | @JsMethod
    method generateAuthResponse (line 60) | @JsMethod
    method generateWebAuthnResponse (line 65) | @JsMethod

FILE: src/peergos/client/PathUtils.java
  class PathUtils (line 11) | public class PathUtils {
    method getFileName (line 14) | @JsMethod
    method subpath (line 19) | @JsMethod
    method getNameCount (line 24) | @JsMethod
    method getParent (line 29) | @JsMethod
    method directoryToPath (line 34) | @JsMethod
    method toPath (line 47) | @JsMethod

FILE: src/peergos/client/Start.java
  class Start (line 5) | public class Start implements EntryPoint {
    method onModuleLoad (line 6) | public void onModuleLoad() {

FILE: src/peergos/gwt/emu/avian/Utf8.java
  class Utf8 (line 15) | public class Utf8 {
    method test (line 16) | public static boolean test (Object data) {
    method encode (line 25) | public static byte[] encode (char[] s16, int offset, int length) {
    method decode (line 46) | public static Object decode (byte[] s8, int offset, int length) {
    method decode16 (line 76) | public static char[] decode16 (byte[] s8, int offset, int length) {
    method cram (line 82) | private static void cram (Object data, int index, int val) {
    method widen (line 89) | private static Object widen (Object data, int length, int capacity) {
    method trim (line 97) | private static Object trim (Object data, int length) {

FILE: src/peergos/gwt/emu/com/badlogic/gdx/utils/Base64Coder.java
  class Base64Coder (line 32) | public class Base64Coder {
    class CharMap (line 33) | public static class CharMap {
      method CharMap (line 37) | public CharMap (char char63, char char64) {
      method getDecodingMap (line 58) | public byte[] getDecodingMap () {
      method getEncodingMap (line 62) | public char[] getEncodingMap () {
    method encodeString (line 75) | public static String encodeString (String s) {
    method encodeString (line 79) | public static String encodeString (String s, boolean useUrlsafeEncodin...
    method encodeLines (line 87) | public static String encodeLines (byte[] in) {
    method encodeLines (line 91) | public static String encodeLines (byte[] in, int iOff, int iLen, int l...
    method encodeLines (line 103) | public static String encodeLines (byte[] in, int iOff, int iLen, int l...
    method encode (line 124) | public static char[] encode (byte[] in) {
    method encode (line 128) | public static char[] encode (byte[] in, CharMap charMap) {
    method encode (line 132) | public static char[] encode (byte[] in, char[] charMap) {
    method encode (line 140) | public static char[] encode (byte[] in, int iLen) {
    method encode (line 144) | public static char[] encode (byte[] in, int iOff, int iLen, CharMap ch...
    method encode (line 154) | public static char[] encode (byte[] in, int iOff, int iLen, char[] cha...
    method decodeString (line 183) | public static String decodeString (String s) {
    method decodeString (line 187) | public static String decodeString (String s, boolean useUrlSafeEncodin...
    method decodeLines (line 191) | public static byte[] decodeLines (String s) {
    method decodeLines (line 195) | public static byte[] decodeLines (String s, CharMap inverseCharMap) {
    method decodeLines (line 205) | public static byte[] decodeLines (String s, byte[] inverseCharMap) {
    method decode (line 221) | public static byte[] decode (String s) {
    method decode (line 230) | public static byte[] decode (String s, CharMap inverseCharMap) {
    method decode (line 234) | public static byte[] decode (char[] in, byte[] inverseCharMap) {
    method decode (line 238) | public static byte[] decode (char[] in, CharMap inverseCharMap) {
    method decode (line 246) | public static byte[] decode (char[] in) {
    method decode (line 250) | public static byte[] decode (char[] in, int iOff, int iLen, CharMap in...
    method decode (line 261) | public static byte[] decode (char[] in, int iOff, int iLen, byte[] inv...
    method Base64Coder (line 303) | private Base64Coder () {

FILE: src/peergos/gwt/emu/com/badlogic/gdx/utils/Utf8Decoder.java
  class Utf8Decoder (line 50) | public class Utf8Decoder {
    method Utf8Decoder (line 89) | public Utf8Decoder () {
    method reset (line 93) | protected void reset () {
    method decode (line 97) | public int decode (byte[] b, int offset, int length, char[] charBuffer...
    method decode (line 106) | private void decode (byte b) {

FILE: src/peergos/gwt/emu/java/awt/AlphaComposite.java
  class AlphaComposite (line 6) | public class AlphaComposite extends Object implements Composite {
    method AlphaComposite (line 10) | private AlphaComposite(){}

FILE: src/peergos/gwt/emu/java/awt/Composite.java
  type Composite (line 6) | public interface Composite {

FILE: src/peergos/gwt/emu/java/awt/Graphics2D.java
  class Graphics2D (line 6) | public class Graphics2D {
    method setComposite (line 8) | public void setComposite(Composite comp) {}
    method setRenderingHint (line 10) | public void setRenderingHint(RenderingHints.Key hintKey, Object hintVa...
    method drawImage (line 12) | public boolean drawImage(Image img, int x, int y,
    method dispose (line 16) | public void dispose() {}

FILE: src/peergos/gwt/emu/java/awt/Image.java
  class Image (line 6) | public class Image {
    method setRGB (line 9) | public synchronized void setRGB(int var1, int var2, int var3) {}

FILE: src/peergos/gwt/emu/java/awt/ImageObserver.java
  class ImageObserver (line 6) | public class ImageObserver {

FILE: src/peergos/gwt/emu/java/awt/RenderingHints.java
  class RenderingHints (line 6) | public class RenderingHints {
    class Key (line 7) | public static class Key {

FILE: src/peergos/gwt/emu/java/awt/image/BufferedImage.java
  class BufferedImage (line 8) | public class BufferedImage extends Image implements RenderedImage {
    method BufferedImage (line 10) | public BufferedImage(int width,
    method getType (line 16) | public int getType() {
    method createGraphics (line 20) | public Graphics2D createGraphics() {
    method getWidth (line 24) | public int getWidth() {
    method getHeight (line 28) | public int getHeight() {
    method getRGB (line 32) | public int getRGB(int x, int y) {

FILE: src/peergos/gwt/emu/java/awt/image/RenderedImage.java
  type RenderedImage (line 6) | public interface RenderedImage {

FILE: src/peergos/gwt/emu/java/io/BufferedReader.java
  class BufferedReader (line 13) | public class BufferedReader extends Reader {
    method BufferedReader (line 19) | public BufferedReader (Reader in, int bufferSize) {
    method BufferedReader (line 24) | public BufferedReader (Reader in) {
    method fill (line 28) | private void fill () throws IOException {
    method readLine (line 33) | public String readLine () throws IOException {
    method read (line 70) | public int read (char[] b, int offset, int length) throws IOException {
    method close (line 105) | public void close () throws IOException {

FILE: src/peergos/gwt/emu/java/io/ByteArrayInputStream.java
  class ByteArrayInputStream (line 18) | public class ByteArrayInputStream extends InputStream {
    method ByteArrayInputStream (line 24) | public ByteArrayInputStream(byte buf[]) {
    method ByteArrayInputStream (line 30) | public ByteArrayInputStream(byte buf[], int offset, int length) {
    method read (line 37) | public synchronized int read() {
    method read (line 41) | public synchronized int read(byte b[], int off, int len) {
    method skip (line 64) | public synchronized long skip(long n) {
    method available (line 74) | public synchronized int available() {
    method markSupported (line 78) | public boolean markSupported() {
    method mark (line 82) | public void mark(int readAheadLimit) {
    method reset (line 86) | public synchronized void reset() {
    method close (line 90) | public void close() throws IOException {

FILE: src/peergos/gwt/emu/java/io/ByteArrayOutputStream.java
  class ByteArrayOutputStream (line 19) | public class ByteArrayOutputStream extends OutputStream {
    method ByteArrayOutputStream (line 24) | public ByteArrayOutputStream () {
    method ByteArrayOutputStream (line 28) | public ByteArrayOutputStream (int initialSize) {
    method write (line 32) | @Override
    method write (line 42) | public void write(byte b[], int off, int len) {
    method grow (line 54) | private void grow(int required) {
    method hugeCapacity (line 70) | private static int hugeCapacity(int size) {
    method toByteArray (line 78) | public byte[] toByteArray () {
    method size (line 84) | public int size () {
    method toString (line 88) | public String toString () {
    method toString (line 92) | public String toString (String enc) throws UnsupportedEncodingException {
    method close (line 96) | public void close() throws IOException {

FILE: src/peergos/gwt/emu/java/io/Closeable.java
  type Closeable (line 22) | public interface Closeable extends AutoCloseable {
    method close (line 28) | public void close () throws IOException;

FILE: src/peergos/gwt/emu/java/io/DataInput.java
  type DataInput (line 3) | public interface DataInput {
    method readFully (line 5) | void readFully(byte b[]) throws IOException;
    method readFully (line 7) | void readFully(byte b[], int off, int len) throws IOException;
    method skipBytes (line 9) | int skipBytes(int n) throws IOException;
    method readBoolean (line 11) | boolean readBoolean() throws IOException;
    method readByte (line 13) | byte readByte() throws IOException;
    method readUnsignedByte (line 15) | int readUnsignedByte() throws IOException;
    method readShort (line 17) | short readShort() throws IOException;
    method readUnsignedShort (line 19) | int readUnsignedShort() throws IOException;
    method readChar (line 21) | char readChar() throws IOException;
    method readInt (line 23) | int readInt() throws IOException;
    method readLong (line 25) | long readLong() throws IOException;
    method readFloat (line 27) | float readFloat() throws IOException;
    method readDouble (line 29) | double readDouble() throws IOException;
    method readLine (line 31) | String readLine() throws IOException;
    method readUTF (line 33) | String readUTF() throws IOException;

FILE: src/peergos/gwt/emu/java/io/DataInputStream.java
  class DataInputStream (line 19) | public class DataInputStream extends InputStream implements DataInput {
    method DataInputStream (line 23) | public DataInputStream (final InputStream is) {
    method read (line 27) | @Override
    method readBoolean (line 32) | public boolean readBoolean () throws IOException {
    method readByte (line 36) | public byte readByte () throws IOException {
    method readChar (line 44) | public char readChar () throws IOException {
    method readDouble (line 50) | public double readDouble () throws IOException {
    method readFloat (line 54) | public float readFloat () throws IOException {
    method readFully (line 58) | public void readFully (byte[] b) throws IOException {
    method readFully (line 62) | public void readFully (byte[] b, int off, int len) throws IOException {
    method readInt (line 73) | public int readInt () throws IOException {
    method readLine (line 81) | public String readLine () throws IOException {
    method readLong (line 85) | public long readLong () throws IOException {
    method readShort (line 91) | public short readShort () throws IOException {
    method readUTF (line 97) | public String readUTF () throws IOException {
    method readUtfChar (line 108) | private int readUtfChar (StringBuilder sb) throws IOException {
    method readUnsignedByte (line 128) | public int readUnsignedByte () throws IOException {
    method readUnsignedShort (line 136) | public int readUnsignedShort () throws IOException {
    method skipBytes (line 142) | public int skipBytes (int n) throws IOException {
    method available (line 147) | @Override
    method close (line 152) | @Override

FILE: src/peergos/gwt/emu/java/io/DataOutput.java
  type DataOutput (line 19) | public interface DataOutput {
    method write (line 20) | public void write (byte[] data) throws IOException;
    method write (line 22) | public void write (byte[] data, int ofs, int len) throws IOException;
    method write (line 24) | public void write (int v) throws IOException;
    method writeBoolean (line 26) | public void writeBoolean (boolean v) throws IOException;
    method writeByte (line 28) | public void writeByte (int v) throws IOException;
    method writeBytes (line 30) | public void writeBytes (String s) throws IOException;
    method writeChar (line 32) | public void writeChar (int v) throws IOException;
    method writeChars (line 34) | public void writeChars (String s) throws IOException;
    method writeDouble (line 36) | public void writeDouble (double v) throws IOException;
    method writeFloat (line 38) | public void writeFloat (float v) throws IOException;
    method writeInt (line 40) | public void writeInt (int v) throws IOException;
    method writeLong (line 42) | public void writeLong (long v) throws IOException;
    method writeShort (line 44) | public void writeShort (int v) throws IOException;
    method writeUTF (line 46) | public void writeUTF (String s) throws IOException;

FILE: src/peergos/gwt/emu/java/io/DataOutputStream.java
  class DataOutputStream (line 19) | public class DataOutputStream extends OutputStream implements DataOutput {
    method DataOutputStream (line 23) | public DataOutputStream (OutputStream os) {
    method write (line 27) | @Override
    method writeBoolean (line 32) | public void writeBoolean (boolean v) throws IOException {
    method writeByte (line 36) | public void writeByte (int v) throws IOException {
    method writeBytes (line 40) | public void writeBytes (String s) throws IOException {
    method writeChar (line 47) | public void writeChar (int v) throws IOException {
    method writeChars (line 52) | public void writeChars (String s) throws IOException {
    method writeDouble (line 56) | public void writeDouble (double v) throws IOException {
    method writeFloat (line 60) | public void writeFloat (float v) throws IOException {
    method writeInt (line 64) | public void writeInt (int v) throws IOException {
    method writeLong (line 71) | public void writeLong (long v) throws IOException {
    method writeShort (line 76) | public void writeShort (int v) throws IOException {
    method writeUTF (line 81) | public void writeUTF (String s) throws IOException {
    method flush (line 100) | public void flush() throws IOException {

FILE: src/peergos/gwt/emu/java/io/EOFException.java
  class EOFException (line 19) | public class EOFException extends IOException {

FILE: src/peergos/gwt/emu/java/io/File.java
  class File (line 26) | public class File {
    method File (line 42) | public File (String pathname) {
    method File (line 61) | public File (String parent, String child) {
    method File (line 65) | public File (File parent, String child) {
    method getName (line 74) | public String getName () {
    method getParent (line 78) | public String getParent () {
    method getParentFile (line 82) | public File getParentFile () {
    method getPath (line 86) | public String getPath () {
    method isRoot (line 90) | private boolean isRoot () {
    method isAbsolute (line 94) | public boolean isAbsolute () {
    method getAbsolutePath (line 104) | public String getAbsolutePath () {
    method getAbsoluteFile (line 109) | public File getAbsoluteFile () {
    method getCanonicalPath (line 119) | public String getCanonicalPath () {
    method getCanonicalFile (line 123) | public File getCanonicalFile () {
    method canRead (line 152) | public boolean canRead () {
    method canWrite (line 156) | public boolean canWrite () {
    method exists (line 160) | public boolean exists () {
    method isDirectory (line 164) | public boolean isDirectory () {
    method isFile (line 169) | public boolean isFile () {
    method isHidden (line 173) | public boolean isHidden () {
    method lastModified (line 177) | public long lastModified () {
    method length (line 181) | public long length () {
    method createNewFile (line 196) | public boolean createNewFile () throws IOException {
    method delete (line 200) | public boolean delete () {
    method deleteOnExit (line 204) | public void deleteOnExit () {
    method list (line 208) | public String[] list () {
    method listFiles (line 216) | public File[] listFiles () {
    method listFiles (line 220) | public File[] listFiles (FilenameFilter filter) {
    method mkdir (line 228) | public boolean mkdir () {
    method mkdirs (line 232) | public boolean mkdirs () {
    method renameTo (line 239) | public boolean renameTo (File dest) {
    method setLastModified (line 243) | public boolean setLastModified (long time) {
    method setReadOnly (line 247) | public boolean setReadOnly () {
    method listRoots (line 251) | public static File[] listRoots () {
    method createTempFile (line 255) | public static File createTempFile (String prefix, String suffix, File ...
    method createTempFile (line 259) | public static File createTempFile (String prefix, String suffix) throw...
    method compareTo (line 263) | public int compareTo (File pathname) {
    method equals (line 267) | public boolean equals (Object obj) {
    method toPath (line 274) | public Path toPath() {
    method hashCode (line 278) | public int hashCode () {
    method toString (line 282) | public String toString () {

FILE: src/peergos/gwt/emu/java/io/FileInputStream.java
  class FileInputStream (line 3) | public class FileInputStream extends InputStream{
    method FileInputStream (line 6) | public FileInputStream (InputStream in) {
    method FileInputStream (line 10) | public FileInputStream (File file) {
    method FileInputStream (line 13) | public FileInputStream (String filename) {
    method read (line 16) | public int read () throws IOException {
    method read (line 20) | public int read (byte b[]) throws IOException {
    method read (line 24) | public int read (byte b[], int off, int len) throws IOException {
    method skip (line 28) | public long skip (long n) throws IOException {
    method available (line 33) | public int available () throws IOException{
    method close (line 37) | public void close () throws IOException {
    method mark (line 41) | public synchronized void mark (int readlimit) {
    method reset (line 44) | public synchronized void reset () throws IOException {
    method markSupported (line 47) | public boolean markSupported () {

FILE: src/peergos/gwt/emu/java/io/FileNotFoundException.java
  class FileNotFoundException (line 19) | public class FileNotFoundException extends IOException {
    method FileNotFoundException (line 21) | public FileNotFoundException () {
    method FileNotFoundException (line 25) | public FileNotFoundException (String s) {

FILE: src/peergos/gwt/emu/java/io/FilenameFilter.java
  type FilenameFilter (line 19) | public interface FilenameFilter {
    method accept (line 21) | boolean accept (File file, String name);

FILE: src/peergos/gwt/emu/java/io/Flushable.java
  type Flushable (line 21) | public interface Flushable {
    method flush (line 25) | void flush () throws IOException;

FILE: src/peergos/gwt/emu/java/io/InputStreamReader.java
  class InputStreamReader (line 15) | public class InputStreamReader extends Reader {
    method InputStreamReader (line 20) | public InputStreamReader (InputStream in) {
    method InputStreamReader (line 25) | public InputStreamReader (InputStream in, String encoding) throws Unsu...
    method read (line 34) | public int read (char[] b, int offset, int length) throws IOException {
    method close (line 40) | public void close () throws IOException {

FILE: src/peergos/gwt/emu/java/io/OutputStreamWriter.java
  class OutputStreamWriter (line 15) | public class OutputStreamWriter extends Writer {
    method OutputStreamWriter (line 18) | public OutputStreamWriter (OutputStream out, String encoding) {
    method OutputStreamWriter (line 22) | public OutputStreamWriter (OutputStream out) {
    method write (line 26) | public void write (char[] b, int offset, int length) throws IOException {
    method flush (line 30) | public void flush () throws IOException {
    method close (line 34) | public void close () throws IOException {

FILE: src/peergos/gwt/emu/java/io/PrintWriter.java
  class PrintWriter (line 3) | public class PrintWriter extends Writer{
    method PrintWriter (line 5) | public PrintWriter() {
    method PrintWriter (line 8) | public PrintWriter(int initialCapacity) {
    method PrintWriter (line 10) | public PrintWriter(Writer out,
    method append (line 14) | public PrintWriter append(CharSequence csq) {
    method write (line 17) | public void write (char[] b, int offset, int length) throws IOException {
    method toString (line 20) | public String toString () {
    method flush (line 24) | public void flush () {
    method close (line 27) | public void close () throws IOException {

FILE: src/peergos/gwt/emu/java/io/PushbackInputStream.java
  class PushbackInputStream (line 54) | public class PushbackInputStream extends FilterInputStream
    method PushbackInputStream (line 82) | public PushbackInputStream(InputStream in)
    method PushbackInputStream (line 95) | public PushbackInputStream(InputStream in, int size)
    method available (line 117) | public int available() throws IOException
    method close (line 134) | public synchronized void close() throws IOException
    method markSupported (line 147) | public boolean markSupported()
    method reset (line 158) | public void reset() throws IOException
    method read (line 176) | public synchronized int read() throws IOException
    method read (line 208) | public synchronized int read(byte[] b, int off, int len) throws IOExce...
    method unread (line 244) | public synchronized void unread(int b) throws IOException
    method unread (line 265) | public synchronized void unread(byte[] b) throws IOException
    method unread (line 287) | public synchronized void unread(byte[] b, int off, int len)
    method skip (line 320) | public synchronized long skip(long n) throws IOException

FILE: src/peergos/gwt/emu/java/io/RandomAccessFile.java
  class RandomAccessFile (line 21) | public class RandomAccessFile implements Closeable/* implements DataOutp...
    method RandomAccessFile (line 23) | public RandomAccessFile (File file, String mode) throws FileNotFoundEx...
    method close (line 27) | @Override
    method length (line 31) | public long length () throws IOException {
    method read (line 35) | public int read () throws IOException {
    method read (line 39) | public int read (byte b[]) throws IOException {
    method read (line 43) | public int read (byte b[], int offset, int len) throws IOException {
    method seek (line 47) | public void seek (long pos) throws IOException {
    method setLength (line 50) | public void setLength (long newLength) throws IOException {
    method write (line 53) | public void write (byte b[]) throws IOException {

FILE: src/peergos/gwt/emu/java/io/Reader.java
  class Reader (line 21) | public abstract class Reader {
    method close (line 30) | public abstract void close() throws IOException;
    method mark (line 40) | public void mark(int readAheadLimit) throws IOException {
    method markSupported (line 47) | public boolean markSupported() {
    method read (line 54) | public int read() throws IOException {
    method read (line 62) | public int read(char[] buf) throws IOException {
    method read (line 70) | public abstract int read(char[] buf, int off, int len) throws IOExcept...
    method ready (line 75) | public boolean ready() throws IOException {
    method reset (line 82) | public void reset() throws IOException {
    method skip (line 89) | public long skip(long n) throws IOException {

FILE: src/peergos/gwt/emu/java/io/UTFDataFormatException.java
  class UTFDataFormatException (line 19) | public class UTFDataFormatException extends IOException {
    method UTFDataFormatException (line 21) | public UTFDataFormatException (String msg) {
    method UTFDataFormatException (line 25) | public UTFDataFormatException () {

FILE: src/peergos/gwt/emu/java/io/UnsupportedEncodingException.java
  class UnsupportedEncodingException (line 19) | public class UnsupportedEncodingException extends IOException {
    method UnsupportedEncodingException (line 20) | public UnsupportedEncodingException () {
    method UnsupportedEncodingException (line 24) | public UnsupportedEncodingException (String s) {

FILE: src/peergos/gwt/emu/java/io/Writer.java
  class Writer (line 30) | public abstract class Writer implements Appendable, Closeable, Flushable {
    method Writer (line 38) | protected Writer () {
    method Writer (line 47) | protected Writer (Object lock) {
    method close (line 57) | public abstract void close () throws IOException;
    method flush (line 62) | public abstract void flush () throws IOException;
    method write (line 68) | public void write (char buf[]) throws IOException {
    method write (line 80) | public abstract void write (char buf[], int offset, int count) throws ...
    method write (line 86) | public void write (int oneChar) throws IOException {
    method write (line 98) | public void write (String str) throws IOException {
    method write (line 110) | public void write (String str, int offset, int count) throws IOExcepti...
    method append (line 127) | public Writer append (char c) throws IOException {
    method append (line 139) | public Writer append (CharSequence csq) throws IOException {
    method append (line 159) | public Writer append (CharSequence csq, int start, int end) throws IOE...
    method checkError (line 170) | boolean checkError () {

FILE: src/peergos/gwt/emu/java/lang/AutoCloseable.java
  type AutoCloseable (line 3) | public interface AutoCloseable {
    method close (line 4) | void close() throws Exception;

FILE: src/peergos/gwt/emu/java/lang/ClassLoader.java
  class ClassLoader (line 6) | public class ClassLoader {
    method getSystemClassLoader (line 8) | public static ClassLoader getSystemClassLoader() {
    method getResourceAsStream (line 12) | public InputStream getResourceAsStream(String name) {
    method getResource (line 16) | public URL getResource(String name) {

FILE: src/peergos/gwt/emu/java/lang/ClassNotFoundException.java
  class ClassNotFoundException (line 31) | public class ClassNotFoundException extends Exception {
    method ClassNotFoundException (line 42) | public ClassNotFoundException () {
    method ClassNotFoundException (line 49) | public ClassNotFoundException (String s) {
    method ClassNotFoundException (line 59) | public ClassNotFoundException (String s, Throwable ex) {
    method getException (line 73) | public Throwable getException () {
    method getCause (line 82) | public Throwable getCause () {

FILE: src/peergos/gwt/emu/java/lang/Exception.java
  class Exception (line 23) | public class Exception extends Throwable {
    method Exception (line 25) | public Exception() {
    method Exception (line 28) | public Exception(String message) {
    method Exception (line 32) | public Exception(String message, Throwable cause) {
    method Exception (line 36) | public Exception(Throwable cause) {
    method Exception (line 40) | protected Exception(String message, Throwable cause, boolean enableSup...
    method Exception (line 45) | Exception(Object backingJsObject) {

FILE: src/peergos/gwt/emu/java/lang/InternalError.java
  class InternalError (line 35) | public class InternalError extends Error {
    method InternalError (line 41) | public InternalError() {
    method InternalError (line 51) | public InternalError(String s) {

FILE: src/peergos/gwt/emu/java/lang/InterruptedException.java
  class InterruptedException (line 13) | public class InterruptedException extends Exception {
    method InterruptedException (line 14) | public InterruptedException (String message, Throwable cause) {
    method InterruptedException (line 18) | public InterruptedException (String message) {
    method InterruptedException (line 22) | public InterruptedException (Throwable cause) {
    method InterruptedException (line 26) | public InterruptedException () {

FILE: src/peergos/gwt/emu/java/lang/OutOfMemoryError.java
  class OutOfMemoryError (line 3) | public class OutOfMemoryError extends Error {
    method OutOfMemoryError (line 5) | public OutOfMemoryError() {}
    method OutOfMemoryError (line 7) | public OutOfMemoryError(String msg) {

FILE: src/peergos/gwt/emu/java/lang/Readable.java
  type Readable (line 22) | public interface Readable {
    method read (line 23) | int read (CharBuffer cb) throws IOException;

FILE: src/peergos/gwt/emu/java/lang/Runnable.java
  type Runnable (line 5) | @FunctionalInterface
    method run (line 8) | @JsMethod

FILE: src/peergos/gwt/emu/java/lang/RuntimeException.java
  class RuntimeException (line 23) | public class RuntimeException extends Exception {
    method RuntimeException (line 25) | public RuntimeException() {
    method RuntimeException (line 28) | public RuntimeException(String message) {
    method RuntimeException (line 32) | public RuntimeException(String message, Throwable cause) {
    method RuntimeException (line 36) | public RuntimeException(Throwable cause) {
    method RuntimeException (line 40) | protected RuntimeException(String message, Throwable cause, boolean en...
    method RuntimeException (line 45) | RuntimeException(Object backingJsObject) {

FILE: src/peergos/gwt/emu/java/lang/SecurityException.java
  class SecurityException (line 13) | public class SecurityException extends RuntimeException {
    method SecurityException (line 14) | public SecurityException (String message, Throwable cause) {
    method SecurityException (line 18) | public SecurityException (String message) {
    method SecurityException (line 22) | public SecurityException (Throwable cause) {
    method SecurityException (line 26) | public SecurityException () {

FILE: src/peergos/gwt/emu/java/lang/Thread.java
  class Thread (line 21) | public class Thread {
    method Thread (line 23) | public Thread() {
    method Thread (line 27) | public Thread(Runnable runnable) {
    method currentThread (line 31) | public static Thread currentThread() {
    method start (line 35) | public synchronized void start() {
    method getContextClassLoader (line 39) | public ClassLoader getContextClassLoader() {
    method sleep (line 43) | public static void sleep (long millis) throws InterruptedException {
    method setDefaultUncaughtExceptionHandler (line 47) | public static void setDefaultUncaughtExceptionHandler(final Thread.Unc...
    type UncaughtExceptionHandler (line 62) | public static interface UncaughtExceptionHandler {
      method uncaughtException (line 63) | void uncaughtException(Thread t, Throwable e);

FILE: src/peergos/gwt/emu/java/net/ConnectException.java
  class ConnectException (line 5) | public class ConnectException extends SocketException {
    method ConnectException (line 7) | public ConnectException() {
    method ConnectException (line 11) | @JsConstructor

FILE: src/peergos/gwt/emu/java/net/HttpURLConnection.java
  class HttpURLConnection (line 3) | public class HttpURLConnection extends URLConnection{
    method setRequestMethod (line 8) | public void setRequestMethod(String method) throws ProtocolException {
    method setRequestProperty (line 11) | public void setRequestProperty(String key, String value) {
    method setUseCaches (line 14) | public void setUseCaches(boolean b) {
    method setDoInput (line 17) | public void setDoInput(boolean b) {
    method setConnectTimeout (line 21) | public void setConnectTimeout(int timeout) {}
    method setReadTimeout (line 22) | public void setReadTimeout(int timeout) {}
    method getResponseCode (line 23) | public int getResponseCode() {
    method getContentLength (line 26) | public int getContentLength() {
    method connect (line 29) | public void connect() {
    method disconnect (line 31) | public void disconnect() {
    method getHeaderField (line 33) | public String getHeaderField(String name) {
    method getResponseMessage (line 37) | public String getResponseMessage() {

FILE: src/peergos/gwt/emu/java/net/Inet4Address.java
  class Inet4Address (line 3) | public class Inet4Address extends InetAddress{

FILE: src/peergos/gwt/emu/java/net/Inet6Address.java
  class Inet6Address (line 3) | public class Inet6Address extends InetAddress{

FILE: src/peergos/gwt/emu/java/net/InetAddress.java
  class InetAddress (line 3) | public class InetAddress {
    method getByName (line 5) | public static InetAddress getByName(String host)
    method getAddress (line 9) | public byte[] getAddress() {
    method getByAddress (line 12) | public static InetAddress getByAddress(byte[] addr)
    method getLocalHost (line 17) | public static InetAddress getLocalHost() throws UnknownHostException {

FILE: src/peergos/gwt/emu/java/net/MalformedURLException.java
  class MalformedURLException (line 5) | public class MalformedURLException extends IOException {
    method MalformedURLException (line 7) | public MalformedURLException() {
    method MalformedURLException (line 10) | public MalformedURLException(String msg) {

FILE: src/peergos/gwt/emu/java/net/ProtocolException.java
  class ProtocolException (line 5) | public class ProtocolException extends IOException{
    method ProtocolException (line 6) | public ProtocolException() {
    method ProtocolException (line 9) | public ProtocolException(String msg) {

FILE: src/peergos/gwt/emu/java/net/Proxy.java
  class Proxy (line 3) | public class Proxy {
    type Type (line 4) | public enum Type {DIRECT, HTTP, SOCKS}
    method Proxy (line 6) | public Proxy(Type type, SocketAddress addr) {}

FILE: src/peergos/gwt/emu/java/net/SocketAddress.java
  class SocketAddress (line 3) | public class SocketAddress {

FILE: src/peergos/gwt/emu/java/net/SocketException.java
  class SocketException (line 5) | public class SocketException extends IOException{
    method SocketException (line 7) | public SocketException() {
    method SocketException (line 10) | public SocketException(String msg) {

FILE: src/peergos/gwt/emu/java/net/SocketTimeoutException.java
  class SocketTimeoutException (line 5) | public class SocketTimeoutException extends IOException {

FILE: src/peergos/gwt/emu/java/net/URL.java
  class URL (line 6) | public class URL {
    method URL (line 8) | public URL(String protocol, String host, int port, String file) throws...
    method URL (line 12) | public URL(String url) throws MalformedURLException
    method URL (line 16) | public URL(URL context, String spec) throws MalformedURLException {
    method openConnection (line 20) | public URLConnection openConnection() throws java.io.IOException {
    method openConnection (line 24) | public URLConnection openConnection(Proxy proxy) throws java.io.IOExce...
    method openStream (line 28) | public final InputStream openStream() throws java.io.IOException {
    method getPath (line 32) | public String getPath() {

FILE: src/peergos/gwt/emu/java/net/URLConnection.java
  class URLConnection (line 10) | public class URLConnection {
    method getInputStream (line 12) | public InputStream getInputStream() throws IOException {
    method getOutputStream (line 15) | public OutputStream getOutputStream() throws IOException {
    method getErrorStream (line 18) | public InputStream getErrorStream() throws IOException {
    method getHeaderFields (line 21) | public Map<String,List<String>> getHeaderFields() {
    method setDoOutput (line 24) | public void setDoOutput(boolean dooutput) {
    method getContentEncoding (line 27) | public String getContentEncoding() {

FILE: src/peergos/gwt/emu/java/net/URLEncoder.java
  class URLEncoder (line 26) | public class URLEncoder {
    method URLEncoder (line 33) | private URLEncoder() {
    method encode (line 50) | @Deprecated
    method encode (line 90) | public static String encode(String s, String enc) throws UnsupportedEn...
    method convert (line 125) | private static void convert(String s, StringBuilder buf, String enc)

FILE: src/peergos/gwt/emu/java/net/UnknownHostException.java
  class UnknownHostException (line 5) | public class UnknownHostException extends IOException{
    method UnknownHostException (line 7) | public UnknownHostException() {
    method UnknownHostException (line 10) | public UnknownHostException(String msg) {

FILE: src/peergos/gwt/emu/java/nio/Buffer.java
  class Buffer (line 43) | public abstract class Buffer {
    method Buffer (line 65) | Buffer (int capacity) {
    method capacity (line 77) | public final int capacity () {
    method clear (line 89) | public final Buffer clear () {
    method flip (line 106) | public final Buffer flip () {
    method hasRemaining (line 117) | public final boolean hasRemaining () {
    method isReadOnly (line 125) | public abstract boolean isReadOnly ();
    method limit (line 131) | public final int limit () {
    method limit (line 146) | public final Buffer limit (int newLimit) {
    method mark (line 165) | public final Buffer mark () {
    method position (line 174) | public final int position () {
    method position (line 187) | public final Buffer position (int newPosition) {
    method remaining (line 203) | public final int remaining () {
    method reset (line 212) | public final Buffer reset () {
    method rewind (line 227) | public final Buffer rewind () {

FILE: src/peergos/gwt/emu/java/nio/BufferOverflowException.java
  class BufferOverflowException (line 23) | public class BufferOverflowException extends RuntimeException {
    method BufferOverflowException (line 30) | public BufferOverflowException () {

FILE: src/peergos/gwt/emu/java/nio/CharBuffer.java
  class CharBuffer (line 32) | public abstract class CharBuffer extends Buffer implements Comparable<Ch...
    method CharBuffer (line 38) | CharBuffer (int capacity) {
    method put (line 49) | public abstract CharBuffer put (char c);
    method put (line 61) | public final CharBuffer put (char[] src) {
    method put (line 76) | public CharBuffer put (char[] src, int off, int len) {

FILE: src/peergos/gwt/emu/java/nio/InvalidMarkException.java
  class InvalidMarkException (line 22) | public class InvalidMarkException extends IllegalStateException {
    method InvalidMarkException (line 29) | public InvalidMarkException () {

FILE: src/peergos/gwt/emu/java/nio/file/Files.java
  class Files (line 7) | public final class Files {
    method write (line 9) | public static Path write(Path path, byte[] bytes, OpenOption... option...
    method delete (line 13) | public static void delete(Path path) throws IOException {

FILE: src/peergos/gwt/emu/java/nio/file/OpenOption.java
  type OpenOption (line 3) | public interface OpenOption {

FILE: src/peergos/gwt/emu/java/nio/file/Path.java
  class Path (line 7) | public class Path {
    method Path (line 13) | protected Path (String pathString) {
    method toString (line 17) | public String toString()
    method getParent (line 22) | public Path getParent() {
    method getFileName (line 38) | public Path getFileName() {
    method resolve (line 47) | public Path resolve(String other) {
    method relativize (line 56) | public Path relativize(Path other) {
    method resolve (line 60) | public Path resolve(Path other) {
    method isAbsolute (line 64) | public boolean isAbsolute() {
    method startsWith (line 68) | public boolean startsWith(Path other) {
    method toFile (line 72) | public File toFile() {
    method getName (line 76) | public Path getName(int index) {
    method getNameCount (line 89) | public int getNameCount() {
    method subpath (line 98) | public Path subpath(int from, int to) {
    method of (line 118) | public static Path of(String name) {
    method of (line 122) | public static Path of(String name, String... rest) {
    method equals (line 128) | @Override
    method hashCode (line 136) | @Override

FILE: src/peergos/gwt/emu/java/nio/file/Paths.java
  class Paths (line 9) | public class Paths {
    method get (line 15) | @JsMethod

FILE: src/peergos/gwt/emu/java/nio/file/StandardOpenOption.java
  type StandardOpenOption (line 3) | public enum StandardOpenOption implements OpenOption {

FILE: src/peergos/gwt/emu/java/nio/file/attribute/FileAttribute.java
  type FileAttribute (line 3) | public interface FileAttribute<T> {
    method name (line 4) | String name();
    method value (line 5) | T value();

FILE: src/peergos/gwt/emu/java/security/SecureRandom.java
  class SecureRandom (line 3) | public class SecureRandom extends java.util.Random{
    method SecureRandom (line 5) | public SecureRandom()
    method getInstance (line 10) | public static SecureRandom getInstance(String algorithm) {

FILE: src/peergos/gwt/emu/java/time/Clock.java
  class Clock (line 4) | public class Clock {
    method Clock (line 8) | Clock() {
    method getZone (line 10) | public ZoneId getZone() {
    method systemDefaultZone (line 13) | public static Clock systemDefaultZone() {
    method millis (line 16) | public long millis() {
    method instant (line 20) | public Instant instant() {

FILE: src/peergos/gwt/emu/java/time/DateTimeException.java
  class DateTimeException (line 3) | public class DateTimeException extends RuntimeException {
    method DateTimeException (line 5) | public DateTimeException(String message) {
    method DateTimeException (line 9) | public DateTimeException(String message, Throwable cause) {

FILE: src/peergos/gwt/emu/java/time/Instant.java
  class Instant (line 3) | public class Instant {
    method Instant (line 14) | private Instant(long epochSecond, int nanos) {
    method getNano (line 19) | public int getNano() {
    method getEpochSecond (line 22) | public long getEpochSecond() {
    method create (line 26) | private static Instant create(long seconds, int nanoOfSecond) {
    method ofEpochSecond (line 36) | public static Instant ofEpochSecond(long epochSecond) {
    method ofEpochMilli (line 40) | public static Instant ofEpochMilli(long epochMilli) {

FILE: src/peergos/gwt/emu/java/time/LocalDate.java
  class LocalDate (line 11) | @SuppressWarnings("unusable-by-js")
    method LocalDate (line 33) | public LocalDate(int year, int month, int dayOfMonth) {
    method plusDays (line 39) | public LocalDate plusDays(int days) {
    method of (line 43) | public static LocalDate of(int year, int month, int dayOfMonth) {
    method parse (line 47) | public static LocalDate parse(String text) {
    method now (line 67) | public static LocalDate now(Clock clock) {
    method getYear (line 75) | public int getYear() {
    method getMonthValue (line 79) | public int getMonthValue() {
    method ofEpochDay (line 83) | public static LocalDate ofEpochDay(long epochDay) {
    method now (line 114) | public static LocalDate now() {
    method isLeapYear (line 118) | public static boolean isLeapYear(long prolepticYear) {
    method toEpochDay (line 122) | public long toEpochDay() {
    method resolvePreviousValid (line 143) | private static LocalDate resolvePreviousValid(int year, int month, int...
    method plusMonths (line 158) | public LocalDate plusMonths(long monthsToAdd) {
    method isBefore (line 170) | public boolean isBefore(LocalDate other) {
    method isAfter (line 174) | public boolean isAfter(LocalDate other) {
    method plusWeeks (line 178) | public LocalDate plusWeeks(long weeksToAdd) {
    method plusYears (line 182) | public LocalDate plusYears(long yearsToAdd) {
    method compareTo (line 186) | @Override
    method equals (line 198) | @Override
    method hashCode (line 209) | @Override
    method toString (line 217) | @Override

FILE: src/peergos/gwt/emu/java/time/LocalDateTime.java
  class LocalDateTime (line 8) | public class LocalDateTime implements Comparable<LocalDateTime>{
    method LocalDateTime (line 22) | private LocalDateTime(LocalDate date, LocalTime time) {
    method of (line 27) | public static LocalDateTime of(LocalDate date, LocalTime time) {
    method toLocalTime (line 31) | public LocalTime toLocalTime() {
    method toLocalDate (line 34) | public LocalDate toLocalDate() {
    method toEpochSecond (line 38) | @JsMethod
    method ofEpochSecond (line 46) | public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOf...
    method now (line 55) | public static LocalDateTime now(Clock clock) {
    method now (line 61) | public static LocalDateTime now(ZoneId zone) {
    method now (line 65) | public static LocalDateTime now() {
    method getNano (line 69) | public int getNano() {
    method getYear (line 73) | public int getYear() {
    method getMonthValue (line 77) | public int getMonthValue() {
    method plusNanos (line 81) | public LocalDateTime plusNanos(long nanos) {
    method ofInstant (line 85) | public static LocalDateTime ofInstant(Instant instant, ZoneId zone) {
    method of (line 89) | @JsMethod
    method toInstant (line 94) | public Instant toInstant(ZoneOffset offset) {
    method isBefore (line 97) | public boolean isBefore(LocalDateTime other) {
    method compareTo (line 101) | @JsMethod
    method equals (line 111) | @Override
    method hashCode (line 123) | @Override
    method toString (line 128) | @Override

FILE: src/peergos/gwt/emu/java/time/LocalTime.java
  class LocalTime (line 5) | @SuppressWarnings("unusable-by-js")
    method LocalTime (line 40) | public LocalTime(int hour, int minute, int second, int nanoOfSecond) {
    method getNano (line 47) | public int getNano() {
    method getSecond (line 51) | public int getSecond() {
    method getMinute (line 55) | public int getMinute() {
    method getHour (line 59) | public int getHour() {
    method toSecondOfDay (line 63) | public int toSecondOfDay() {
    method toNanoOfDay (line 70) | public long toNanoOfDay() {
    method ofNanoOfDay (line 78) | public static LocalTime ofNanoOfDay(long nanoOfDay) {
    method create (line 88) | private static LocalTime create(int hour, int minute, int second, int ...
    method of (line 95) | public static LocalTime of(int hour, int minute) {
    method of (line 99) | public static LocalTime of(int hour, int minute, int second) {
    method compareTo (line 103) | @Override
    method equals (line 118) | @Override
    method hashCode (line 131) | @Override
    method toString (line 137) | @Override

FILE: src/peergos/gwt/emu/java/time/ZoneId.java
  class ZoneId (line 3) | public class ZoneId {
    method ZoneId (line 7) | public ZoneId()
    method getRules (line 11) | public ZoneRules getRules() {
    method systemDefault (line 15) | public static ZoneId systemDefault() {

FILE: src/peergos/gwt/emu/java/time/ZoneOffset.java
  class ZoneOffset (line 3) | @SuppressWarnings("unusable-by-js")
    method ZoneOffset (line 10) | private ZoneOffset(int totalSeconds) {
    method ofTotalSeconds (line 14) | public static ZoneOffset ofTotalSeconds(int totalSeconds) {
    method getTotalSeconds (line 18) | public int getTotalSeconds() {

FILE: src/peergos/gwt/emu/java/time/ZoneRules.java
  class ZoneRules (line 3) | public class ZoneRules {
    method ZoneRules (line 5) | public ZoneRules()
    method getOffset (line 9) | public ZoneOffset getOffset(Instant instant) {

FILE: src/peergos/gwt/emu/java/time/format/DateTimeParseException.java
  class DateTimeParseException (line 4) | public class DateTimeParseException extends java.time.DateTimeException {
    method DateTimeParseException (line 6) | public DateTimeParseException(String message) {
    method DateTimeParseException (line 10) | public DateTimeParseException(String message, Throwable cause) {

FILE: src/peergos/gwt/emu/java/util/Base64.java
  class Base64 (line 5) | public class Base64 {
    method getDecoder (line 6) | public static Decoder getDecoder() {
    method getEncoder (line 9) | public static Encoder getEncoder() {
    class Decoder (line 12) | public static class Decoder {
      method decode (line 13) | public byte[] decode(String src) {
    class Encoder (line 17) | public static class Encoder {
      method encode (line 18) | public byte[] encode(byte[] src) {
      method encodeToString (line 23) | public String encodeToString(byte[] src) {

FILE: src/peergos/gwt/emu/java/util/Optional.java
  class Optional (line 34) | public final class Optional<T> {
    method empty (line 35) | @SuppressWarnings("unchecked")
    method of (line 40) | @JsMethod
    method ofNullable (line 44) | public static <T> Optional<T> ofNullable(T value) {
    method Optional (line 49) | private Optional(T ref) {
    method isPresent (line 52) | @JsMethod
    method isEmpty (line 56) | @JsMethod
    method get (line 60) | @JsMethod
    method ifPresent (line 65) | public void ifPresent(Consumer<? super T> consumer) {
    method or (line 71) | public Optional<T> or(Supplier<? extends Optional<? extends T>> suppli...
    method stream (line 81) | public Stream<T> stream() {
    method filter (line 85) | public Optional<T> filter(Predicate<? super T> predicate) {
    method map (line 92) | public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {
    method flatMap (line 99) | public <U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
    method orElse (line 106) | public T orElse(T other) {
    method orElseGet (line 109) | public T orElseGet(Supplier<? extends T> other) {
    method orElseThrow (line 112) | public <X extends Throwable> T orElseThrow(Supplier<? extends X> excep...
    method equals (line 118) | @Override
    method hashCode (line 129) | @Override
    method toString (line 133) | @Override

FILE: src/peergos/gwt/emu/java/util/UUID.java
  class UUID (line 3) | public final class UUID {
    method UUID (line 6) | private UUID(String uuid) {
    method randomUUID (line 9) | public static UUID randomUUID() {
    method toString (line 13) | public String toString() {
    method uuid (line 50) | private static String uuid() {

FILE: src/peergos/gwt/emu/java/util/concurrent/CompletableFuture.java
  class CompletableFuture (line 11) | public class CompletableFuture<T> implements Future<T>, CompletionStage<...
    method completedFuture (line 13) | public static <T> CompletableFuture<T> completedFuture(T value) {
    method CompletableFuture (line 30) | private CompletableFuture(T value, Throwable err, boolean isDone) {
    method CompletableFuture (line 36) | public CompletableFuture() {
    method CompletableFuture (line 40) | private CompletableFuture(T value) {
    method CompletableFuture (line 44) | private CompletableFuture(Throwable err) {
    method join (line 48) | public T join() {
    method thenApply (line 52) | @Override
    method thenAccept (line 73) | @Override
    method thenCombine (line 94) | @Override
    method thenCompose (line 99) | @Override
    method complete (line 125) | @JsMethod
    method completeExceptionally (line 182) | @JsMethod
    method isDone (line 232) | @Override
    method isCancelled (line 237) | @Override
    method cancel (line 242) | @Override
    method toCompletableFuture (line 247) | @Override
    method exceptionally (line 252) | @Override
    method supplyAsync (line 276) | public static <U> java.util.concurrent.CompletableFuture<U> supplyAsyn...
    method get (line 280) | @Override
    method get (line 285) | @Override
    method thenApplyAsync (line 290) | public <U> CompletionStage<U> thenApplyAsync(Function<? super T,? exte...
    method thenApplyAsync (line 292) | public <U> CompletionStage<U> thenApplyAsync(Function<? super T,? exte...
    method thenAcceptAsync (line 294) | public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> actio...
    method thenAcceptAsync (line 296) | public CompletionStage<Void> thenAcceptAsync(Consumer<? super T> actio...
    method thenRun (line 298) | public CompletionStage<Void> thenRun(Runnable action) {     throw new ...
    method thenRunAsync (line 300) | public CompletionStage<Void> thenRunAsync(Runnable action) {     throw...
    method thenRunAsync (line 302) | public CompletionStage<Void> thenRunAsync(Runnable action, Executor ex...
    method thenCombineAsync (line 304) | public <U,V> CompletionStage<V> thenCombineAsync(CompletionStage<? ext...
    method thenCombineAsync (line 306) | public <U,V> CompletionStage<V> thenCombineAsync(CompletionStage<? ext...
    method thenAcceptBoth (line 308) | public <U> CompletionStage<Void> thenAcceptBoth(CompletionStage<? exte...
    method thenAcceptBothAsync (line 310) | public <U> CompletionStage<Void> thenAcceptBothAsync(CompletionStage<?...
    method thenAcceptBothAsync (line 312) | public <U> CompletionStage<Void> thenAcceptBothAsync(CompletionStage<?...
    method runAfterBoth (line 314) | public CompletionStage<Void> runAfterBoth(CompletionStage<?> other, Ru...
    method runAfterBothAsync (line 316) | public CompletionStage<Void> runAfterBothAsync(CompletionStage<?> othe...
    method runAfterBothAsync (line 318) | public CompletionStage<Void> runAfterBothAsync(CompletionStage<?> othe...
    method applyToEither (line 320) | public <U> CompletionStage<U> applyToEither(CompletionStage<? extends ...
    method applyToEitherAsync (line 322) | public <U> CompletionStage<U> applyToEitherAsync(CompletionStage<? ext...
    method applyToEitherAsync (line 324) | public <U> CompletionStage<U> applyToEitherAsync(CompletionStage<? ext...
    method acceptEither (line 326) | public CompletionStage<Void> acceptEither(CompletionStage<? extends T>...
    method acceptEitherAsync (line 328) | public CompletionStage<Void> acceptEitherAsync(CompletionStage<? exten...
    method acceptEitherAsync (line 330) | public CompletionStage<Void> acceptEitherAsync(CompletionStage<? exten...
    method runAfterEither (line 332) | public CompletionStage<Void> runAfterEither(CompletionStage<?> other, ...
    method runAfterEitherAsync (line 333) | public CompletionStage<Void> runAfterEitherAsync(CompletionStage<?> ot...
    method runAfterEitherAsync (line 335) | public CompletionStage<Void> runAfterEitherAsync(CompletionStage<?> ot...
    method thenComposeAsync (line 337) | public <U> CompletionStage<U> thenComposeAsync(Function<? super T, ? e...
    method thenComposeAsync (line 339) | public <U> CompletionStage<U> thenComposeAsync(Function<? super T, ? e...
    method whenComplete (line 341) | public CompletionStage<T> whenComplete(BiConsumer<? super T, ? super T...
    method whenCompleteAsync (line 343) | public CompletionStage<T> whenCompleteAsync(BiConsumer<? super T, ? su...
    method whenCompleteAsync (line 345) | public CompletionStage<T> whenCompleteAsync(BiConsumer<? super T, ? su...
    method handle (line 347) | public <U> CompletionStage<U> handle(BiFunction<? super T, Throwable, ...
    method handleAsync (line 349) | public <U> CompletionStage<U> handleAsync(BiFunction<? super T, Throwa...
    method handleAsync (line 351) | public <U> CompletionStage<U> handleAsync(BiFunction<? super T, Throwa...
    method isCompletedExceptionally (line 353) | public boolean isCompletedExceptionally() {

FILE: src/peergos/gwt/emu/java/util/concurrent/CompletionStage.java
  type CompletionStage (line 27) | public interface CompletionStage<T> {
    method applyToEither (line 29) | <U> CompletionStage<U> applyToEither(CompletionStage<? extends T> other,
    method applyToEitherAsync (line 32) | <U> CompletionStage<U> applyToEitherAsync(CompletionStage<? extends T>...
    method applyToEitherAsync (line 35) | <U> CompletionStage<U> applyToEitherAsync(CompletionStage<? extends T>...
    method acceptEither (line 38) | CompletionStage<Void> acceptEither(CompletionStage<? extends T> other,...
    method acceptEitherAsync (line 40) | CompletionStage<Void> acceptEitherAsync(CompletionStage<? extends T> o...
    method acceptEitherAsync (line 43) | CompletionStage<Void> acceptEitherAsync(CompletionStage<? extends T> o...
    method thenAccept (line 46) | CompletionStage<Void> thenAccept(Consumer<? super T> action);
    method thenAcceptAsync (line 48) | CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action);
    method thenAcceptAsync (line 50) | CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action, Exec...
    method thenAcceptBoth (line 52) | <U> CompletionStage<Void> thenAcceptBoth(CompletionStage<? extends U> ...
    method thenAcceptBothAsync (line 55) | <U> CompletionStage<Void> thenAcceptBothAsync(CompletionStage<? extend...
    method thenAcceptBothAsync (line 58) | <U> CompletionStage<Void> thenAcceptBothAsync(CompletionStage<? extend...
    method thenApply (line 61) | <U> CompletionStage<U> thenApply(Function<? super T,? extends U> fn);
    method thenApplyAsync (line 63) | <U> CompletionStage<U> thenApplyAsync(Function<? super T,? extends U> ...
    method thenApplyAsync (line 65) | <U> CompletionStage<U> thenApplyAsync(Function<? super T,? extends U> ...
    method thenCombine (line 67) | <U,V> CompletionStage<V> thenCombine(CompletionStage<? extends U> other,
    method thenCombineAsync (line 70) | <U,V> CompletionStage<V> thenCombineAsync(CompletionStage<? extends U>...
    method thenCombineAsync (line 73) | <U,V> CompletionStage<V> thenCombineAsync(CompletionStage<? extends U>...
    method thenCompose (line 76) | <U> CompletionStage<U> thenCompose(Function<? super T, ? extends Compl...
    method thenComposeAsync (line 78) | <U> CompletionStage<U> thenComposeAsync(Function<? super T, ? extends ...
    method thenComposeAsync (line 80) | <U> CompletionStage<U> thenComposeAsync(Function<? super T, ? extends ...
    method thenRun (line 83) | CompletionStage<Void> thenRun(Runnable action);
    method thenRunAsync (line 85) | CompletionStage<Void> thenRunAsync(Runnable action);
    method thenRunAsync (line 87) | CompletionStage<Void> thenRunAsync(Runnable action, Executor executor);
    method runAfterBoth (line 89) | CompletionStage<Void> runAfterBoth(CompletionStage<?> other, Runnable ...
    method runAfterBothAsync (line 91) | CompletionStage<Void> runAfterBothAsync(CompletionStage<?> other, Runn...
    method runAfterBothAsync (line 93) | CompletionStage<Void> runAfterBothAsync(CompletionStage<?> other, Runn...
    method runAfterEither (line 95) | CompletionStage<Void> runAfterEither(CompletionStage<?> other, Runnabl...
    method runAfterEitherAsync (line 97) | CompletionStage<Void> runAfterEitherAsync(CompletionStage<?> other, Ru...
    method runAfterEitherAsync (line 99) | CompletionStage<Void> runAfterEitherAsync(CompletionStage<?> other, Ru...
    method whenComplete (line 102) | CompletionStage<T> whenComplete(BiConsumer<? super T, ? super Throwabl...
    method whenCompleteAsync (line 104) | CompletionStage<T> whenCompleteAsync(BiConsumer<? super T, ? super Thr...
    method whenCompleteAsync (line 106) | CompletionStage<T> whenCompleteAsync(BiConsumer<? super T, ? super Thr...
    method exceptionally (line 109) | CompletionStage<T> exceptionally(Function<Throwable, ? extends T> fn);
    method handle (line 111) | <U> CompletionStage<U> handle(BiFunction<? super T, Throwable, ? exten...
    method handleAsync (line 113) | <U> CompletionStage<U> handleAsync(BiFunction<? super T, Throwable, ? ...
    method handleAsync (line 115) | <U> CompletionStage<U> handleAsync(BiFunction<? super T, Throwable, ? ...
    method toCompletableFuture (line 118) | CompletableFuture<T> toCompletableFuture();

FILE: src/peergos/gwt/emu/java/util/concurrent/ExecutionException.java
  class ExecutionException (line 3) | public class ExecutionException extends RuntimeException {

FILE: src/peergos/gwt/emu/java/util/concurrent/ExecutorService.java
  type ExecutorService (line 3) | public interface ExecutorService {
    method execute (line 4) | void execute(Runnable var1);

FILE: src/peergos/gwt/emu/java/util/concurrent/ForkJoinPool.java
  class ForkJoinPool (line 5) | public class ForkJoinPool implements ExecutorService {
    method ForkJoinPool (line 10) | public ForkJoinPool(JSForkJoinPool pool) {
    method commonPool (line 14) | public static ForkJoinPool commonPool() {
    method execute (line 18) | public void execute(Runnable task) {
    class JSForkJoinPool (line 22) | @JsType(namespace = "ForkJoinJS", isNative = true)
      method execute (line 24) | public native void execute(Runnable task);

FILE: src/peergos/gwt/emu/java/util/concurrent/ScheduledFuture.java
  type ScheduledFuture (line 3) | public interface ScheduledFuture<V> {

FILE: src/peergos/gwt/emu/java/util/concurrent/ScheduledThreadPoolExecutor.java
  class ScheduledThreadPoolExecutor (line 11) | public class ScheduledThreadPoolExecutor {
    method ScheduledThreadPoolExecutor (line 15) | public ScheduledThreadPoolExecutor(int corePoolSize) {
    method schedule (line 18) | public <V> ScheduledFuture<V> schedule(Callable<V> callable, long dela...
    class CallableWrapper (line 28) | private static class CallableWrapper {
      method CallableWrapper (line 30) | public CallableWrapper(Callable callable) {
      method call (line 33) | @JsMethod
    class NativeJSScheduler (line 38) | @JsType(namespace = "callback", isNative = true)
      method callAfterDelay (line 40) | public native void callAfterDelay(CallableWrapper func, int delayMs);

FILE: src/peergos/gwt/emu/java/util/concurrent/TimeUnit.java
  type TimeUnit (line 22) | public enum TimeUnit {
    method toNanos (line 24) | public long toNanos(long d)   { return d; }
    method toMicros (line 25) | public long toMicros(long d)  { return d / C1_C0; }
    method toMillis (line 26) | public long toMillis(long d)  { return d / C2_C0; }
    method toSeconds (line 27) | public long toSeconds(long d) { return d / C3_C0; }
    method toMinutes (line 28) | public long toMinutes(long d) { return d / C4_C0; }
    method toHours (line 29) | public long toHours(long d)   { return d / C5_C0; }
    method toDays (line 30) | public long toDays(long d)    { return d / C6_C0; }
    method convert (line 31) | public long convert(long d, TimeUnit u) { return u.toNanos(d); }
    method excessNanos (line 32) | int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
    method toNanos (line 35) | public long toNanos(long d)   { return x(d, C1_C0, MAX_C1_C0); }
    method toMicros (line 36) | public long toMicros(long d)  { return d; }
    method toMillis (line 37) | public long toMillis(long d)  { return d / C2_C1; }
    method toSeconds (line 38) | public long toSeconds(long d) { return d / C3_C1; }
    method toMinutes (line 39) | public long toMinutes(long d) { return d / C4_C1; }
    method toHours (line 40) | public long toHours(long d)   { return d / C5_C1; }
    method toDays (line 41) | public long toDays(long d)    { return d / C6_C1; }
    method convert (line 42) | public long convert(long d, TimeUnit u) { return u.toMicros(d); }
    method excessNanos (line 43) | int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
    method toNanos (line 46) | public long toNanos(long d)   { return x(d, C2_C0, MAX_C2_C0); }
    method toMicros (line 47) | public long toMicros(long d)  { return x(d, C2_C1, MAX_C2_C1); }
    method toMillis (line 48) | public long toMillis(long d)  { return d; }
    method toSeconds (line 49) | public long toSeconds(long d) { return d / C3_C2; }
    method toMinutes (line 50) | public long toMinutes(long d) { return d / C4_C2; }
    method toHours (line 51) | public long toHours(long d)   { return d / C5_C2; }
    method toDays (line 52) | public long toDays(long d)    { return d / C6_C2; }
    method convert (line 53) | public long convert(long d, TimeUnit u) { return u.toMillis(d); }
    method excessNanos (line 54) | int excessNanos(long d, long m) { return 0; }
    method toNanos (line 57) | public long toNanos(long d)   { return x(d, C3_C0, MAX_C3_C0); }
    method toMicros (line 58) | public long toMicros(long d)  { return x(d, C3_C1, MAX_C3_C1); }
    method toMillis (line 59) | public long toMillis(long d)  { return x(d, C3_C2, MAX_C3_C2); }
    method toSeconds (line 60) | public long toSeconds(long d) { return d; }
    method toMinutes (line 61) | public long toMinutes(long d) { return d / C4_C3; }
    method toHours (line 62) | public long toHours(long d)   { return d / C5_C3; }
    method toDays (line 63) | public long toDays(long d)    { return d / C6_C3; }
    method convert (line 64) | public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
    method excessNanos (line 65) | int excessNanos(long d, long m) { return 0; }
    method toNanos (line 68) | public long toNanos(long d)   { return x(d, C4_C0, MAX_C4_C0); }
    method toMicros (line 69) | public long toMicros(long d)  { return x(d, C4_C1, MAX_C4_C1); }
    method toMillis (line 70) | public long toMillis(long d)  { return x(d, C4_C2, MAX_C4_C2); }
    method toSeconds (line 71) | public long toSeconds(long d) { return x(d, C4_C3, MAX_C4_C3); }
    method toMinutes (line 72) | public long toMinutes(long d) { return d; }
    method toHours (line 73) | public long toHours(long d)   { return d / C5_C4; }
    method toDays (line 74) | public long toDays(long d)    { return d / C6_C4; }
    method convert (line 75) | public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
    method excessNanos (line 76) | int excessNanos(long d, long m) { return 0; }
    method toNanos (line 79) | public long toNanos(long d)   { return x(d, C5_C0, MAX_C5_C0); }
    method toMicros (line 80) | public long toMicros(long d)  { return x(d, C5_C1, MAX_C5_C1); }
    method toMillis (line 81) | public long toMillis(long d)  { return x(d, C5_C2, MAX_C5_C2); }
    method toSeconds (line 82) | public long toSeconds(long d) { return x(d, C5_C3, MAX_C5_C3); }
    method toMinutes (line 83) | public long toMinutes(long d) { return x(d, C5_C4, MAX_C5_C4); }
    method toHours (line 84) | public long toHours(long d)   { return d; }
    method toDays (line 85) | public long toDays(long d)    { return d / C6_C5; }
    method convert (line 86) | public long convert(long d, TimeUnit u) { return u.toHours(d); }
    method excessNanos (line 87) | int excessNanos(long d, long m) { return 0; }
    method toNanos (line 90) | public long toNanos(long d)   { return x(d, C6_C0, MAX_C6_C0); }
    method toMicros (line 91) | public long toMicros(long d)  { return x(d, C6_C1, MAX_C6_C1); }
    method toMillis (line 92) | public long toMillis(long d)  { return x(d, C6_C2, MAX_C6_C2); }
    method toSeconds (line 93) | public long toSeconds(long d) { return x(d, C6_C3, MAX_C6_C3); }
    method toMinutes (line 94) | public long toMinutes(long d) { return x(d, C6_C4, MAX_C6_C4); }
    method toHours (line 95) | public long toHours(long d)   { return x(d, C6_C5, MAX_C6_C5); }
    method toDays (line 96) | public long toDays(long d)    { return d; }
    method convert (line 97) | public long convert(long d, TimeUnit u) { return u.toDays(d); }
    method excessNanos (line 98) | int excessNanos(long d, long m) { return 0; }
    method x (line 166) | static long x(long d, long m, long over) {
    method convert (line 174) | public long convert(long sourceDuration, TimeUnit sourceUnit) {
    method toNanos (line 178) | public long toNanos(long duration) {
    method toMicros (line 182) | public long toMicros(long duration) {
    method toMillis (line 186) | public long toMillis(long duration) {
    method toSeconds (line 190) | public long toSeconds(long duration) {
    method toMinutes (line 194) | public long toMinutes(long duration) {
    method toHours (line 198) | public long toHours(long duration) {
    method toDays (line 202) | public long toDays(long duration) {
    method excessNanos (line 206) | abstract int excessNanos(long d, long m);

FILE: src/peergos/gwt/emu/java/util/concurrent/TimeoutException.java
  class TimeoutException (line 22) | public class TimeoutException extends Exception {
    method TimeoutException (line 23) | public TimeoutException() {}
    method TimeoutException (line 25) | public TimeoutException(String message) {

FILE: src/peergos/gwt/emu/java/util/function/Consumer.java
  type Consumer (line 6) | @FunctionalInterface
    method accept (line 10) | void accept(T t);
    method andThen (line 12) | default java.util.function.Consumer<T> andThen(java.util.function.Cons...

FILE: src/peergos/gwt/emu/java/util/function/Function.java
  type Function (line 29) | @FunctionalInterface
    method identity (line 33) | @JsOverlay
    method apply (line 38) | R apply(T t);
    method andThen (line 40) | @JsOverlay
    method compose (line 46) | @JsOverlay

FILE: src/peergos/gwt/emu/java/util/zip/Adler32.java
  class Adler32 (line 97) | public class Adler32 implements Checksum
    method Adler32 (line 114) | public Adler32 ()
    method reset (line 122) | public void reset ()
    method update (line 132) | public void update (int bval)
    method update (line 150) | public void update (byte[] buffer)
    method update (line 162) | public void update (byte[] buf, int off, int len)
    method getValue (line 201) | public long getValue()

FILE: src/peergos/gwt/emu/java/util/zip/CRC32.java
  class CRC32 (line 60) | public class CRC32 implements Checksum
    method make_crc_table (line 69) | private static int[] make_crc_table ()
    method getValue (line 90) | public long getValue ()
    method reset (line 98) | public void reset () { crc = 0; }
    method update (line 106) | public void update (int bval)
    method update (line 120) | public void update (byte[] buf, int off, int len)
    method update (line 131) | public void update (byte[] buf) { update(buf, 0, buf.length); }

FILE: src/peergos/gwt/emu/java/util/zip/Checksum.java
  type Checksum (line 59) | public interface Checksum
    method getValue (line 64) | long getValue();
    method reset (line 69) | void reset();
    method update (line 76) | void update (int bval);
    method update (line 85) | void update (byte[] buf, int off, int len);

FILE: src/peergos/gwt/emu/java/util/zip/Deflater.java
  class Deflater (line 51) | public class Deflater
    method Deflater (line 164) | public Deflater()
    method Deflater (line 175) | public Deflater(int lvl)
    method Deflater (line 189) | public Deflater(int lvl, boolean nowrap)
    method reset (line 209) | public void reset()
    method end (line 225) | public void end()
    method getAdler (line 236) | public int getAdler()
    method getTotalIn (line 244) | @Deprecated
    method getBytesRead (line 254) | public long getBytesRead()
    method getTotalOut (line 262) | @Deprecated
    method getBytesWritten (line 272) | public long getBytesWritten()
    method finalize (line 280) | protected void finalize()
    method flush (line 292) | void flush() {
    method finish (line 301) | public void finish() {
    method finished (line 309) | public boolean finished()
    method needsInput (line 321) | public boolean needsInput()
    method setInput (line 337) | public void setInput(byte[] input)
    method setInput (line 353) | public void setInput(byte[] input, int off, int len)
    method setLevel (line 367) | public void setLevel(int lvl)
    method setStrategy (line 389) | public void setStrategy(int stgy)
    method deflate (line 403) | public int deflate(byte[] output)
    method deflate (line 419) | public int deflate(byte[] output, int offset, int length)
    method setDictionary (line 513) | public void setDictionary(byte[] dict)
    method setDictionary (line 531) | public void setDictionary(byte[] dict, int offset, int length)

FILE: src/peergos/gwt/emu/java/util/zip/DeflaterConstants.java
  type DeflaterConstants (line 40) | interface DeflaterConstants

FILE: src/peergos/gwt/emu/java/util/zip/DeflaterEngine.java
  class DeflaterEngine (line 40) | class DeflaterEngine implements DeflaterConstants
    method DeflaterEngine (line 125) | DeflaterEngine(DeflaterPending pending) {
    method reset (line 140) | public void reset()
    method resetAdler (line 155) | public final void resetAdler()
    method getAdler (line 160) | public final int getAdler()
    method getTotalIn (line 166) | public final int getTotalIn()
    method setStrategy (line 171) | public final void setStrategy(int strat)
    method setLevel (line 176) | public void setLevel(int lvl)
    method updateHash (line 224) | private void updateHash() {
    method insertString (line 234) | private int insertString() {
    method slideWindow (line 256) | private void slideWindow()
    method fillWindow (line 288) | private void fillWindow()
    method findLongestMatch (line 328) | private boolean findLongestMatch(int curMatch) {
    method setDictionary (line 402) | void setDictionary(byte[] buffer, int offset, int length) {
    method deflateStored (line 426) | private boolean deflateStored(boolean flush, boolean finish)
    method deflateFast (line 459) | private boolean deflateFast(boolean flush, boolean finish)
    method deflateSlow (line 542) | private boolean deflateSlow(boolean flush, boolean finish)
    method deflate (line 643) | public boolean deflate(boolean flush, boolean finish)
    method setInput (line 674) | public void setInput(byte[] buf, int off, int len)
    method needsInput (line 693) | public final boolean needsInput()

FILE: src/peergos/gwt/emu/java/util/zip/DeflaterHuffman.java
  class DeflaterHuffman (line 49) | class DeflaterHuffman
    class Tree (line 65) | class Tree {
      method Tree (line 73) | Tree(int elems, int minCodes, int maxLength) {
      method reset (line 80) | void reset() {
      method writeSymbol (line 87) | final void writeSymbol(int code)
      method checkEmpty (line 97) | final void checkEmpty()
      method setStaticCodes (line 111) | void setStaticCodes(short[] stCodes, byte[] stLength)
      method buildCodes (line 117) | public void buildCodes() {
      method buildLength (line 150) | private void buildLength(int childs[])
      method buildTree (line 253) | void buildTree()
      method getEncodedLength (line 381) | int getEncodedLength()
      method calcBLFreq (line 389) | void calcBLFreq(Tree blTree) {
      method writeTree (line 436) | void writeTree(Tree blTree)
    method bitReverse (line 515) | static short bitReverse(int value) {
    method DeflaterHuffman (line 554) | public DeflaterHuffman(DeflaterPending pending)
    method reset (line 566) | public final void reset() {
    method l_code (line 574) | private int l_code(int len) {
    method d_code (line 587) | private int d_code(int distance) {
    method sendAllTrees (line 597) | public void sendAllTrees(int blTreeCodes) {
    method compressBlock (line 612) | public void compressBlock() {
    method flushStoredBlock (line 658) | public void flushStoredBlock(byte[] stored,
    method flushBlock (line 672) | public void flushBlock(byte[] stored, int stored_offset, int stored_len,
    method isFull (line 737) | public final boolean isFull()
    method tallyLit (line 742) | public final boolean tallyLit(int lit)
    method tallyDist (line 757) | public final boolean tallyDist(int dist, int len)

FILE: src/peergos/gwt/emu/java/util/zip/DeflaterOutputStream.java
  class DeflaterOutputStream (line 62) | public class DeflaterOutputStream extends FilterOutputStream
    method deflate (line 80) | protected void deflate() throws IOException
    method DeflaterOutputStream (line 101) | public DeflaterOutputStream(OutputStream out)
    method DeflaterOutputStream (line 112) | public DeflaterOutputStream(OutputStream out, Deflater defl)
    method DeflaterOutputStream (line 125) | public DeflaterOutputStream(OutputStream out, Deflater defl, int bufsize)
    method flush (line 140) | public void flush() throws IOException
    method finish (line 152) | public void finish() throws IOException
    method close (line 170) | public void close() throws IOException
    method write (line 180) | public void write(int bval) throws IOException
    method write (line 193) | public void write(byte[] buf, int off, int len) throws IOException

FILE: src/peergos/gwt/emu/java/util/zip/DeflaterPending.java
  class DeflaterPending (line 47) | class DeflaterPending extends PendingBuffer
    method DeflaterPending (line 49) | public DeflaterPending()

FILE: src/peergos/gwt/emu/java/util/zip/GZIPInputStream.java
  class GZIPInputStream (line 25) | public class GZIPInputStream extends InflaterInputStream {
    method GZIPInputStream (line 26) | public GZIPInputStream (InputStream in, int size) {
    method GZIPInputStream (line 29) | public GZIPInputStream(InputStream in) throws IOException {

FILE: src/peergos/gwt/emu/java/util/zip/InflaterInputStream.java
  class InflaterInputStream (line 25) | public class InflaterInputStream extends InputStream {
    method InflaterInputStream (line 28) | public InflaterInputStream (InputStream in) {
    method read (line 32) | @Override
    method close (line 37) | @Override

FILE: src/peergos/gwt/emu/java/util/zip/PendingBuffer.java
  class PendingBuffer (line 51) | class PendingBuffer
    method PendingBuffer (line 60) | public PendingBuffer()
    method PendingBuffer (line 65) | public PendingBuffer(int bufsize)
    method reset (line 70) | public final void reset() {
    method writeByte (line 74) | public final void writeByte(int b)
    method writeShort (line 81) | public final void writeShort(int s)
    method writeInt (line 89) | public final void writeInt(int s)
    method writeBlock (line 99) | public final void writeBlock(byte[] block, int offset, int len)
    method getBitCount (line 107) | public final int getBitCount() {
    method alignToByte (line 111) | public final void alignToByte() {
    method writeBits (line 124) | public final void writeBits(int b, int count)
    method writeShortMSB (line 140) | public final void writeShortMSB(int s) {
    method isFlushed (line 147) | public final boolean isFlushed() {
    method flush (line 161) | public final int flush(byte[] output, int offset, int length) {
    method toByteArray (line 189) | public final byte[] toByteArray()

FILE: src/peergos/gwt/emu/javafx/application/Platform.java
  class Platform (line 3) | public final class Platform {
    method runLater (line 5) | public static void runLater(Runnable runnable) {}

FILE: src/peergos/gwt/emu/javafx/embed/swing/JFXPanel.java
  class JFXPanel (line 3) | public final class JFXPanel {
    method JFXPanel (line 4) | public JFXPanel(){

FILE: src/peergos/gwt/emu/javafx/embed/swing/SwingFXUtils.java
  class SwingFXUtils (line 6) | public final class SwingFXUtils {
    method fromFXImage (line 7) | public static BufferedImage fromFXImage(Image img, BufferedImage bimg) {

FILE: src/peergos/gwt/emu/javafx/scene/SnapshotParameters.java
  class SnapshotParameters (line 3) | public final class SnapshotParameters {

FILE: src/peergos/gwt/emu/javafx/scene/image/Image.java
  class Image (line 3) | public class Image{
    method Image (line 5) | public Image() {

FILE: src/peergos/gwt/emu/javafx/scene/image/WritableImage.java
  class WritableImage (line 3) | public final class WritableImage extends Image {
    method WritableImage (line 4) | public WritableImage(int width, int height) {

FILE: src/peergos/gwt/emu/javafx/scene/media/Media.java
  class Media (line 5) | public final class Media {
    method Media (line 6) | public Media(String source){
    method getDuration (line 9) | public final Duration getDuration() {

FILE: src/peergos/gwt/emu/javafx/scene/media/MediaPlayer.java
  class MediaPlayer (line 4) | public final class MediaPlayer{
    method MediaPlayer (line 5) | public MediaPlayer(Media media){
    method seek (line 8) | public void seek(Duration seekTime) {

FILE: src/peergos/gwt/emu/javafx/scene/media/MediaView.java
  class MediaView (line 5) | public final class MediaView{
    method MediaView (line 6) | public MediaView() {
    method setFitWidth (line 9) | public void setFitWidth(int width){
    method setFitHeight (line 12) | public void setFitHeight(int height) {
    method setMediaPlayer (line 15) | public void setMediaPlayer(MediaPlayer mediaPlayer){
    method setPreserveRatio (line 18) | public void setPreserveRatio(boolean preserverRatio) {
    method snapshot (line 21) | public WritableImage snapshot(SnapshotParameters params, WritableImage...

FILE: src/peergos/gwt/emu/javafx/util/Duration.java
  class Duration (line 3) | public final class Duration {
    method seconds (line 5) | public static Duration seconds(double s) {
    method isUnknown (line 9) | public boolean isUnknown() {
    method toSeconds (line 12) | public double toSeconds() {

FILE: src/peergos/gwt/emu/javax/crypto/Mac.java
  class Mac (line 5) | public class Mac {
    method getInstance (line 7) | public static Mac getInstance(String algo)
    method init (line 12) | public void init(SecretKeySpec spec)
    method getMacLength (line 17) | public int getMacLength()
    method update (line 22) | public void update(byte[] b)
    method doFinal (line 27) | public void doFinal(byte[] a, int i)

FILE: src/peergos/gwt/emu/javax/crypto/spec/SecretKeySpec.java
  class SecretKeySpec (line 3) | public class SecretKeySpec {
    method SecretKeySpec (line 7) | public SecretKeySpec(byte[] key, String algorithm)
    method getEncoded (line 13) | public byte[] getEncoded() {

FILE: src/peergos/gwt/emu/javax/imageio/ImageIO.java
  class ImageIO (line 12) | public class ImageIO {
    method read (line 14) | public static BufferedImage read(InputStream input) throws IOException {
    method write (line 18) | public static boolean write(RenderedImage im,

FILE: src/peergos/server/AggregatedMetrics.java
  class AggregatedMetrics (line 14) | public class AggregatedMetrics {
    method build (line 15) | private static Counter build(String name, String help) {
    method startExporter (line 89) | public static synchronized void startExporter(String address, int port...

FILE: src/peergos/server/Builder.java
  class Builder (line 50) | public class Builder {
    method disableLog (line 52) | public static void disableLog() {
    method initNativeCrypto (line 56) | public static Crypto initNativeCrypto(Salsa20Poly1305 symmetric, Ed255...
    method initCrypto (line 61) | public static Crypto initCrypto() {
    method initCrypto (line 65) | public static Crypto initCrypto(Hasher h) {
    method getDBConnector (line 80) | public static Supplier<Connection> getDBConnector(Args a, String dbNam...
    method getPostgresConnector (line 87) | public static Supplier<Connection> getPostgresConnector(Args a, String...
    method getDBConnector (line 114) | public static Supplier<Connection> getDBConnector(Args a, String dbNam...
    method buildEphemeralSqlite (line 133) | public static Supplier<Connection> buildEphemeralSqlite() {
    method buildIpfsApi (line 144) | public static JavaPoster buildIpfsApi(Args a) {
    method buildP2pHttpProxy (line 154) | public static JavaPoster buildP2pHttpProxy(Args a) {
    method bloomfilterSizeBytes (line 171) | public static int bloomfilterSizeBytes(double falsePositivesProbabilit...
    method blockstorePath (line 183) | public static Path blockstorePath(Args args) {
    method buildS3Properties (line 187) | private static BlockStoreProperties buildS3Properties(Args a) {
    method buildBlockMetadata (line 197) | public static BlockMetadataStore buildBlockMetadata(Args a) {
    method buildP2PBlockRetrieverForS3 (line 212) | public static ContentAddressedStorageProxy buildP2PBlockRetrieverForS3...
    method buildLocalStorage (line 227) | public static DeletableContentAddressedStorage buildLocalStorage(Args a,
    method blockAuthoriser (line 321) | public static BlockRequestAuthoriser blockAuthoriser(Args a,
    method getSqlCommands (line 333) | public static SqlSupplier getSqlCommands(Args a) {
    method buildTransactionStore (line 338) | public static TransactionStore buildTransactionStore(Args a, Supplier<...
    method isPaidInstance (line 342) | public static boolean isPaidInstance(Args a) {
    method buildSpaceQuotas (line 346) | public static QuotaAdmin buildSpaceQuotas(Args a,
    method buildPaidQuotas (line 371) | public static QuotaAdmin buildPaidQuotas(Args a) {
    method buildPkiCorenode (line 376) | public static CoreNode buildPkiCorenode(MutablePointers mutable,
    method getPkiServerId (line 410) | public static Multihash getPkiServerId(Args a) {
    method buildCorenode (line 414) | public static CoreNode buildCorenode(Args a,
    method buildRawPointers (line 449) | public static JdbcIpnsAndSocial buildRawPointers(Args a, Supplier<Conn...
    method buildJavaGatewayAccess (line 454) | public static CompletableFuture<NetworkAccess> buildJavaGatewayAccess(...
    method buildJavaNetworkAccess (line 462) | public static CompletableFuture<NetworkAccess> buildJavaNetworkAccess(...
    method buildJavaNetworkAccess (line 469) | public static CompletableFuture<NetworkAccess> buildJavaNetworkAccess(...
    method buildNonCachingJavaNetworkAccess (line 477) | public static CompletableFuture<NetworkAccess> buildNonCachingJavaNetw...
    method buildLocalJavaNetworkAccess (line 489) | public static CompletableFuture<NetworkAccess> buildLocalJavaNetworkAc...

FILE: src/peergos/server/Command.java
  class Command (line 10) | public class Command<V> {
    class Arg (line 11) | public static class Arg {
      method Arg (line 16) | public Arg(String name, String description, boolean isRequired) {
      method Arg (line 23) | public Arg(String name, String description, boolean isRequired, Stri...
    method Command (line 36) | public Command(String name, String description,
    method Command (line 42) | public Command(String name, String description,
    method main (line 53) | public V main(Args args) {
    method ensureArgs (line 78) | private void ensureArgs(Args args) {
    method helpMessage (line 90) | public String helpMessage() {

FILE: src/peergos/server/DesktopApp.java
  class DesktopApp (line 11) | public class DesktopApp {
    method launch (line 13) | public static void launch(Args args, int port, URI api) throws IOExcep...

FILE: src/peergos/server/DirectOnlyStorage.java
  class DirectOnlyStorage (line 9) | public class DirectOnlyStorage extends DelegatingStorage {
    method DirectOnlyStorage (line 12) | public DirectOnlyStorage(ContentAddressedStorage target) {
    method directToOrigin (line 17) | @Override
    method blockStoreProperties (line 22) | @Override

FILE: src/peergos/server/HostDirChooser.java
  type HostDirChooser (line 10) | public interface HostDirChooser {
    method chooseDir (line 11) | CompletableFuture<String> chooseDir();
    class Flatpak (line 13) | class Flatpak implements HostDirChooser {
      method chooseDir (line 14) | @Override
      method persistFlatpakPermission (line 43) | private static void persistFlatpakPermission(String path) throws Exc...
      method getAppId (line 54) | private static String getAppId() {

FILE: src/peergos/server/HostDirEnumerator.java
  type HostDirEnumerator (line 15) | public interface HostDirEnumerator {
    method getHostDirs (line 17) | CompletableFuture<List<String>> getHostDirs(String prefix, int maxDepth);
    class Java (line 19) | class Java implements HostDirEnumerator {
      method getHostDirs (line 20) | @Override
      method recurse (line 49) | private void recurse(File dir, List<String> res, int maxDepth) {

FILE: src/peergos/server/JavaCrypto.java
  class JavaCrypto (line 11) | public class JavaCrypto {
    method init (line 13) | public static Crypto init() {

FILE: src/peergos/server/JdbcAddressLRU.java
  class JdbcAddressLRU (line 28) | public class JdbcAddressLRU implements AddressBook {
    method JdbcAddressLRU (line 42) | public JdbcAddressLRU(int maxSize, Supplier<Connection> conn, SqlSuppl...
    method getConnection (line 48) | private Connection getConnection() {
    method init (line 59) | private synchronized void init(SqlSupplier commands) {
    method addAddrs (line 73) | @NotNull
    method getAddrs (line 86) | @NotNull
    method size (line 109) | public int size() {
    method removeOldest (line 121) | private void removeOldest(int toRemove) {
    method setAddrs (line 132) | @NotNull
    method close (line 155) | public synchronized void close() {
    method buildSqlite (line 162) | public static JdbcAddressLRU buildSqlite(int maxSize, String db) {

FILE: src/peergos/server/JdbcPkiCache.java
  class JdbcPkiCache (line 16) | public class JdbcPkiCache implements PkiCache {
    method JdbcPkiCache (line 27) | public JdbcPkiCache(Supplier<Connection> conn, SqlSupplier commands) {
    method getConnection (line 32) | private Connection getConnection() {
    method init (line 43) | private synchronized void init(SqlSupplier commands) {
    method hasUser (line 56) | private boolean hasUser(String username) {
    method getChain (line 72) | public CompletableFuture<List<UserPublicKeyLink>> getChain(String user...
    method setChain (line 88) | public CompletableFuture<Boolean> setChain(String username, List<UserP...
    method getUsername (line 119) | public CompletableFuture<String> getUsername(PublicKeyHash identity) {
    method close (line 135) | public synchronized void close() {

FILE: src/peergos/server/JdbcRecordLRU.java
  class JdbcRecordLRU (line 26) | public class JdbcRecordLRU implements RecordStore {
    method JdbcRecordLRU (line 44) | public JdbcRecordLRU(int maxSize, Supplier<Connection> conn, SqlSuppli...
    method getConnection (line 50) | private Connection getConnection() {
    method init (line 61) | private synchronized void init(SqlSupplier commands) {
    method hashToKey (line 76) | private String hashToKey(Multihash hash) {
    method put (line 82) | @Override
    method get (line 103) | @Override
    method remove (line 138) | @Override
    method size (line 149) | public int size() {
    method removeOldest (line 161) | private void removeOldest(int toRemove) {
    method close (line 172) | public synchronized void close() {
    method buildSqlite (line 179) | public static JdbcRecordLRU buildSqlite(int maxSize, String db) {

FILE: src/peergos/server/LinkIdentity.java
  class LinkIdentity (line 18) | public class LinkIdentity {
    method link (line 27) | public static void link(Args a, NetworkAccess network, Crypto crypto) {
    method uploadProof (line 62) | private static void uploadProof(IdentityLinkProof proof, UserContext c...
    method verify (line 74) | public static void verify(Args a, NetworkAccess network) {

FILE: src/peergos/server/Login.java
  class Login (line 12) | public class Login {
    method main (line 14) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/LoginUpdate.java
  class LoginUpdate (line 29) | public class LoginUpdate {
    method main (line 31) | public static void main(String[] a) throws Exception {

FILE: src/peergos/server/LookupOwner.java
  class LookupOwner (line 18) | public class LookupOwner {
    method main (line 20) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/Main.java
  class Main (line 67) | public class Main extends Builder {
    method bootstrap (line 188) | private static Args bootstrap(Args args) {
    method poststrap (line 232) | public static final void poststrap(Args args) {
    method isLanIP (line 733) | public static boolean isLanIP(String host) {
    method isLoopbackHost (line 744) | private static boolean isLoopbackHost(String host) {
    method getAppServerUrl (line 752) | private static String getAppServerUrl(Args args) {
    method readSavedServerUrl (line 767) | private static Optional<String> readSavedServerUrl(Path peergosDir) {
    method getPkiKey (line 786) | private static PublicKeyHash getPkiKey(PublicKeyHash pkiOwnerIdentity,
    method startPeergos (line 801) | public static ServerProcesses startPeergos(Args a) {
    method startGateway (line 1127) | public static PublicGateway startGateway(Args a) {
    method startFuse (line 1150) | public static FuseProcess startFuse(Args a) {
    method getMfaResponseCLI (line 1186) | public static CompletableFuture<MultiFactorAuthResponse> getMfaRespons...
    method startIpfs (line 1197) | public static IpfsWrapper startIpfs(Args a) {
    method startShell (line 1206) | public static Boolean startShell(Args args) {
    method migrate (line 1216) | public static boolean migrate(Args a) {
    method getLocalMultiAddress (line 1332) | public static MultiAddress getLocalMultiAddress(int port) {
    method getLocalBootstrapAddress (line 1336) | public static MultiAddress getLocalBootstrapAddress(int port, Multihas...
    method main (line 1340) | public static void main(String[] args) {

FILE: src/peergos/server/Mirror.java
  class Mirror (line 28) | public class Mirror {
    method mirrorNode (line 106) | public static int mirrorNode(Multihash nodeId,
    method mirrorUser (line 187) | public static Map<PublicKeyHash, byte[]> mirrorUser(String username,
    method mirrorMutableSubspace (line 244) | public static Optional<byte[]> mirrorMutableSubspace(String username,
    method mirrorMerkleTree (line 267) | public static void mirrorMerkleTree(String username,

FILE: src/peergos/server/NonWriteThroughNetwork.java
  class NonWriteThroughNetwork (line 19) | public class NonWriteThroughNetwork extends NetworkAccess {
    method NonWriteThroughNetwork (line 21) | protected NonWriteThroughNetwork(CoreNode coreNode,
    method build (line 36) | public static NetworkAccess build(NetworkAccess source) {

FILE: src/peergos/server/Playground.java
  class Playground (line 19) | public class Playground {
    method main (line 22) | public static void main(String[] args) throws Exception {
    method experiment (line 41) | private static void experiment(String username,

FILE: src/peergos/server/PublicGateway.java
  class PublicGateway (line 18) | public class PublicGateway {
    method PublicGateway (line 26) | public PublicGateway(String domainSuffix, Crypto crypto, NetworkAccess...
    method shutdown (line 32) | public void shutdown() {
    method initAndStart (line 36) | public void initAndStart(InetSocketAddress local,

FILE: src/peergos/server/Publisher.java
  class Publisher (line 14) | public class Publisher {
    method main (line 16) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/Renew.java
  class Renew (line 11) | public class Renew {
    method main (line 13) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/RenewUsernameClaim.java
  class RenewUsernameClaim (line 11) | public class RenewUsernameClaim {
    method main (line 13) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/ServerAdmin.java
  class ServerAdmin (line 34) | public class ServerAdmin {
    method deleteOwnedKeys (line 38) | private static void deleteOwnedKeys(PublicKeyHash id,
    method deleteOwnedKeysRecurse (line 47) | private static void deleteOwnedKeysRecurse(PublicKeyHash id,

FILE: src/peergos/server/ServerIdentity.java
  class ServerIdentity (line 25) | public class ServerIdentity extends Builder {
    method generateSignedIpnsRecord (line 85) | public static byte[] generateSignedIpnsRecord(PrivKey peerPrivate, Opt...
    method generateNextIdentity (line 96) | public static PrivKey generateNextIdentity(String password, PeerId cur...

FILE: src/peergos/server/ServerMessages.java
  class ServerMessages (line 27) | public class ServerMessages extends Builder {
    method buildQuotaStore (line 102) | private static QuotaAdmin buildQuotaStore(Args a) {

FILE: src/peergos/server/ServerProcesses.java
  class ServerProcesses (line 5) | public class ServerProcesses {
    method ServerProcesses (line 10) | public ServerProcesses(UserService localApi, UserService p2pApi, IpfsW...

FILE: src/peergos/server/SyncProperties.java
  class SyncProperties (line 9) | public class SyncProperties {
    method SyncProperties (line 16) | public SyncProperties(SyncConfig config, Path peergosDir, SyncRunner s...

FILE: src/peergos/server/UserCleanup.java
  class UserCleanup (line 23) | public class UserCleanup {
    method main (line 25) | public static void main(String[] args) throws Exception {
    method clearUnreachableChampNodes (line 42) | public static void clearUnreachableChampNodes(UserContext c) {
    method checkRawUsage (line 169) | public static void checkRawUsage(UserContext c) {
    method checkRawUsage (line 178) | public static void checkRawUsage(PublicKeyHash owner,
    method getAllBlocksWithSize (line 197) | private static void getAllBlocksWithSize(PublicKeyHash owner,
    type ChunkProcessor (line 220) | interface ChunkProcessor {
      method apply (line 221) | boolean apply(SigningPrivateKeyAndPublicHash signer, AbsoluteCapabil...
    method traverseDescendants (line 224) | private static void traverseDescendants(FileWrapper dir,

FILE: src/peergos/server/UserService.java
  class UserService (line 34) | public class UserService {
    method initTLS (line 40) | private static void initTLS() {
    method printSecurityProperties (line 76) | static void printSecurityProperties() {
    method UserService (line 98) | public UserService(ContentAddressedStorage storage,
    class TlsProperties (line 127) | public static class TlsProperties {
      method TlsProperties (line 130) | public TlsProperties(String hostname, String keyfilePassword) {
    class LocalAppProperties (line 136) | public static class LocalAppProperties {
      method LocalAppProperties (line 140) | public LocalAppProperties(Path peergosDir, String currentServerUrl) {
    method stop (line 146) | public void stop() {
    method initAndStart (line 154) | public boolean initAndStart(InetSocketAddress local,
    method addHandler (line 323) | private static void addHandler(HttpServer localhostServer,
    method getKeyStore (line 353) | public static KeyStore getKeyStore(String filename, char[] password)

FILE: src/peergos/server/UserStats.java
  class UserStats (line 21) | public class UserStats {
    method main (line 23) | public static void main(String[] args) throws Exception {
    method sortAndPrint (line 72) | private static void sortAndPrint(List<Summary> stats,
    class Summary (line 83) | private static class Summary {
      method Summary (line 90) | public Summary(String username, LocalDate expiry, List<Multihash> st...
      method toString (line 99) | public String toString() {

FILE: src/peergos/server/ValidateUser.java
  class ValidateUser (line 20) | public class ValidateUser {
    method main (line 22) | public static void main(String[] args) throws Exception {
    method validateWriter (line 34) | private static void validateWriter(PublicKeyHash owner, PublicKeyHash ...
    method validateBlock (line 44) | private static void validateBlock(PublicKeyHash owner, Multihash targe...

FILE: src/peergos/server/apps/email/EmailBridgeClient.java
  class EmailBridgeClient (line 19) | public class EmailBridgeClient {
    method EmailBridgeClient (line 28) | public EmailBridgeClient(String clientUsername, UserContext clientWrit...
    method pendingFolder (line 36) | private FileWrapper pendingFolder() {
    method listOutbox (line 41) | public List<String> listOutbox() {
    method getPendingEmail (line 50) | public Pair<FileWrapper, EmailMessage> getPendingEmail(String filename) {
    method getOutgoingAttachment (line 57) | public byte[] getOutgoingAttachment(String filename) {
    method encryptAndMoveEmailToSent (line 64) | public void encryptAndMoveEmailToSent(FileWrapper file, EmailMessage e...
    method uploadAttachment (line 98) | public Attachment uploadAttachment(String filename, int size, String t...
    method uploadAttachment (line 108) | private CompletableFuture<String> uploadAttachment(AsyncReader reader,...
    method addToInbox (line 119) | public void addToInbox(EmailMessage m) {
    method encryptEmail (line 131) | private CompletableFuture<SourcedAsymmetricCipherText> encryptEmail(Em...
    method encryptAttachment (line 136) | private CompletableFuture<SourcedAsymmetricCipherText> encryptAttachme...
    method getEncryptionTarget (line 141) | private static PublicBoxingKey getEncryptionTarget(NetworkAccess netwo...
    method build (line 146) | public static EmailBridgeClient build(SecretLink emailConfigFileLink, ...

FILE: src/peergos/server/cli/CLI.java
  class CLI (line 49) | public class CLI implements Runnable {
    method disableLogSpam (line 51) | private static void disableLogSpam() {
    method CLI (line 69) | public CLI(CLIContext cliContext) {
    method resolvedRemotePath (line 91) | public Path resolvedRemotePath(String path) {
    method resolveToPath (line 95) | public Path resolveToPath(String arg, Path pathToResolveTo) {
    method resolveToPath (line 102) | public Path resolveToPath(String arg) {
    method fromLine (line 106) | public static ParsedCommand fromLine(String line) {
    method formatHelp (line 120) | static String formatHelp() {
    method handle (line 136) | private String handle(ParsedCommand parsedCommand, Terminal terminal, ...
    method ls (line 191) | public String ls(ParsedCommand cmd) {
    method lls (line 206) | public String lls(ParsedCommand cmd) {
    method checkPath (line 224) | private Stat checkPath(Path remotePath) {
    method get (line 234) | public String get(ParsedCommand cmd, PrintWriter writerForProgress) th...
    method copyDir (line 275) | private void copyDir(Path remote, Path local, boolean skipExisting, Pr...
    method convert (line 312) | private static List<String> convert(Path p) {
    method reader (line 319) | private static AsyncReader reader(File f) {
    type ProgressCreator (line 323) | public interface ProgressCreator {
      method create (line 324) | ProgressConsumer<Long> create(Path remoteRelativeDir, String filenam...
    method parseLocalFolder (line 327) | public static Stream<FileWrapper.FolderUploadProperties> parseLocalFol...
    method put (line 355) | public String put(ParsedCommand cmd, PrintWriter writerForProgress) th...
    method mkdir (line 386) | public String mkdir(ParsedCommand cmd) throws IOException {
    method rm (line 394) | public String rm(ParsedCommand cmd) {
    method exit (line 418) | public String exit(ParsedCommand cmd) {
    method passwd (line 426) | public String passwd(ParsedCommand cmd, Terminal terminal, LineReader ...
    method space (line 440) | public String space(ParsedCommand cmd) {
    method getFollowRequests (line 447) | public String getFollowRequests(ParsedCommand cmd) {
    method processFollowRequest (line 461) | public String processFollowRequest(ParsedCommand cmd) {
    method shareReadAccess (line 507) | public String shareReadAccess(ParsedCommand cmd) {
    method follow (line 533) | public String follow(ParsedCommand cmd) {
    method cd (line 548) | public String cd(ParsedCommand cmd) {
    method lcd (line 561) | public String lcd(ParsedCommand cmd) {
    method pwd (line 571) | public String pwd(ParsedCommand cmd) {
    method lpwd (line 575) | public String lpwd(ParsedCommand cmd) {
    method help (line 580) | public String help(ParsedCommand cmd) {
    method buildPrompt (line 585) | public String buildPrompt() {
    method localFilesLsFiles (line 597) | private List<String> localFilesLsFiles(String pathArgument, boolean fi...
    method listFollowers (line 621) | private List<String> listFollowers() {
    method listPendingFollowers (line 626) | private List<String> listPendingFollowers() {
    method listAllUsernames (line 634) | private List<String> listAllUsernames() {
    method remoteFilesLsFiles (line 644) | private List<String> remoteFilesLsFiles(String pathArgument, boolean f...
    method getCompleter (line 675) | private Completer getCompleter(Command.Argument arg) {
    method buildCompletionNode (line 698) | private Completer buildCompletionNode(Command cmd) {
    method buildCompleter (line 718) | public Completer buildCompleter() {
    method buildContextFromCLI (line 733) | public static CLIContext buildContextFromCLI(Args args) {
    method mfa (line 799) | private static CompletableFuture<MultiFactorAuthResponse> mfa(MultiFac...
    method buildTerminal (line 811) | public static Terminal buildTerminal() {
    method run (line 822) | @Override
    method buildAndRun (line 872) | public static void buildAndRun(Args args) {

FILE: src/peergos/server/cli/CLIContext.java
  class CLIContext (line 9) | public class CLIContext {
    method CLIContext (line 16) | public CLIContext(Terminal terminal, UserContext userContext, String s...

FILE: src/peergos/server/cli/Command.java
  type Command (line 9) | public enum Command {
    method Command (line 35) | Command(String description, String example, Set<Flag> flags, Argument ...
    method Command (line 49) | Command(String description, String example, Set<Flag> flags, Argument ...
    method Command (line 53) | Command(String description, String example, Argument firstArg, Argumen...
    method Command (line 57) | Command(String description, String example, Set<Flag> flags, Argument ...
    method Command (line 61) | Command(String description, String example, Argument firstArg) {
    method Command (line 65) | Command(String description, String example, Set<Flag> flags) {
    method Command (line 69) | Command(String description, Set<Flag> flags) {
    method Command (line 73) | Command(String description) {
    method maxLength (line 77) | public static int maxLength() {
    method example (line 84) | public String example() {
    method parse (line 88) | public static Command parse(String cmd) {
    type Argument (line 98) | public enum Argument {
    type Flag (line 110) | public enum Flag {
      method Flag (line 116) | Flag(String flag) {
    type ProcessFollowRequestAction (line 121) | public enum ProcessFollowRequestAction  {
      method ProcessFollowRequestAction (line 128) | ProcessFollowRequestAction() {
      method ProcessFollowRequestAction (line 131) | ProcessFollowRequestAction(String alternative) {
      method parse (line 135) | public static ProcessFollowRequestAction parse(String s) {
      method altOrName (line 148) | public String altOrName() {

FILE: src/peergos/server/cli/ListFilesCompleter.java
  class ListFilesCompleter (line 8) | public class ListFilesCompleter implements Completer {
    method ListFilesCompleter (line 17) | public ListFilesCompleter(Function<String, List<String>> lsSupplier) {
    method complete (line 21) | @Override

FILE: src/peergos/server/cli/ParsedCommand.java
  class ParsedCommand (line 8) | public class ParsedCommand {
    method ParsedCommand (line 14) | ParsedCommand(Command cmd, String line, List<String> args) {
    method hasArguments (line 52) | public boolean hasArguments() {
    method hasSecondArgument (line 56) | public boolean hasSecondArgument() {
    method hasThirdArgument (line 60) | public boolean hasThirdArgument() {
    method firstArgument (line 64) | public String firstArgument() {
    method secondArgument (line 70) | public String secondArgument() {
    method thirdArgument (line 76) | public String thirdArgument() {
    method toString (line 82) | @Override

FILE: src/peergos/server/cli/ProgressBar.java
  class ProgressBar (line 8) | public class ProgressBar {
    method ProgressBar (line 19) | public ProgressBar(AtomicLong currentFile, AtomicLong totalFiles, Path...
    method prefix (line 26) | private String prefix() {
    method update (line 30) | public void update(PrintWriter writer, long bytesSoFar, long totalByte...
    method progressBar (line 36) | private String progressBar(long bytes, long  total) {
    method format (line 52) | private String format(long bytes, long total) {
    method updateAndGetAnimation (line 73) | private String updateAndGetAnimation() {
    method main (line 77) | public static void main(String[] args) throws Exception {

FILE: src/peergos/server/cli/SupplierCompleter.java
  class SupplierCompleter (line 14) | public class SupplierCompleter implements Completer {
    method SupplierCompleter (line 17) | public SupplierCompleter(Supplier<List<String>> optionsSuppllier) {
    method complete (line 21) | @Override

FILE: src/peergos/server/corenode/CorenodeEvent.java
  class CorenodeEvent (line 8) | public class CorenodeEvent {
    method CorenodeEvent (line 13) | public CorenodeEvent(String username, PublicKeyHash keyHash) {

FILE: src/peergos/server/corenode/CorenodeEventPropagator.java
  class CorenodeEventPropagator (line 21) | public class CorenodeEventPropagator implements CoreNode {
    method CorenodeEventPropagator (line 26) | public CorenodeEventPropagator(CoreNode target) {
    method addListener (line 30) | public void addListener(Function<? super CorenodeEvent, CompletableFut...
    method signup (line 34) | @Override
    method startPaidSignup (line 49) | @Override
    method completePaidSignup (line 56) | @Override
    method startMirror (line 70) | @Override
    method startPaidMirror (line 75) | @Override
    method completePaidMirror (line 87) | @Override
    method getSnapshots (line 100) | @Override
    method updateChain (line 105) | @Override
    method processEvent (line 119) | private CompletableFuture<Boolean> processEvent(List<UserPublicKeyLink...
    method getUsername (line 129) | @Override
    method getChain (line 134) | @Override
    method getUsernames (line 139) | @Override
    method migrateUser (line 144) | @Override
    method getNextServerId (line 158) | @Override
    method close (line 163) | @Override

FILE: src/peergos/server/corenode/IpfsCoreNode.java
  class IpfsCoreNode (line 28) | public class IpfsCoreNode implements CoreNode {
    method disableLog (line 30) | public static void disableLog() {
    method IpfsCoreNode (line 54) | public IpfsCoreNode(SigningPrivateKeyAndPublicHash pkiSigner,
    method initialize (line 77) | @Override
    method keyHash (line 94) | public static CompletableFuture<byte[]> keyHash(ByteArrayWrapper usern...
    method update (line 102) | private synchronized void update(MaybeMultihash newRoot, Optional<Long...
    method getWriterData (line 109) | public static CompletableFuture<CommittedWriterData> getWriterData(Lis...
    method getTreeRoot (line 124) | public static MaybeMultihash getTreeRoot(List<Multihash> peerIds,
    method applyToDiff (line 137) | public static <V extends Cborable> CompletableFuture<Boolean> applyToD...
    method updateAllMappings (line 241) | public static void updateAllMappings(List<Multihash> peerIds,
    method updateMapping (line 267) | public static void updateMapping(List<Multihash> peerIds,
    method applyOpLog (line 326) | public static void applyOpLog(String username,
    method signup (line 369) | @Override
    method startPaidSignup (line 384) | @Override
    method completePaidSignup (line 400) | @Override
    method startMirror (line 417) | @Override
    method startPaidMirror (line 422) | @Override
    method completePaidMirror (line 427) | @Override
    method getSnapshots (line 432) | @Override
    method enforceRateLimit (line 437) | private Optional<RequiredDifficulty> enforceRateLimit(ProofOfWork proo...
    method updateChain (line 456) | @Override
    method updateChain (line 464) | synchronized CompletableFuture<Optional<RequiredDifficulty>> updateCha...
    method getChain (line 532) | @Override
    method getUsername (line 537) | @Override
    method getUsernames (line 543) | @Override
    method getNextServerId (line 548) | @Override
    method migrateUser (line 554) | @Override
    method close (line 565) | @Override

FILE: src/peergos/server/corenode/JdbcIpnsAndSocial.java
  class JdbcIpnsAndSocial (line 22) | public class JdbcIpnsAndSocial {
    class FollowRequestData (line 38) | private class FollowRequestData {
      method FollowRequestData (line 43) | FollowRequestData(PublicKeyHash owner, byte[] publicKey) {
      method FollowRequestData (line 47) | FollowRequestData(String name, byte[] data) {
      method FollowRequestData (line 51) | FollowRequestData(String name, String d) {
      method FollowRequestData (line 55) | FollowRequestData(String name, byte[] data, String b64string) {
      method insert (line 61) | public boolean insert() {
      method select (line 74) | public FollowRequestData[] select() {
      method delete (line 93) | public boolean delete() {
    method JdbcIpnsAndSocial (line 110) | public JdbcIpnsAndSocial(Supplier<Connection> conn, SqlSupplier comman...
    method getConnection (line 115) | private Connection getConnection() {
    method getConnection (line 119) | private Connection getConnection(boolean autoCommit) {
    method init (line 130) | private synchronized void init(SqlSupplier commands) {
    method addFollowRequest (line 142) | public CompletableFuture<Boolean> addFollowRequest(PublicKeyHash owner...
    method removeFollowRequest (line 154) | public CompletableFuture<Boolean> removeFollowRequest(PublicKeyHash ow...
    method getFollowRequests (line 159) | public CompletableFuture<byte[]> getFollowRequests(PublicKeyHash owner) {
    method getRawFollowRequests (line 172) | public List<byte[]> getRawFollowRequests(PublicKeyHash owner) {
    method getAndParseFollowRequests (line 184) | public List<BlindFollowRequest> getAndParseFollowRequests(PublicKeyHas...
    method removePointer (line 194) | public void removePointer(PublicKeyHash writingKey) {
    method setPointer (line 205) | public CompletableFuture<Boolean> setPointer(PublicKeyHash writingKey,...
    method setPointers (line 235) | public synchronized CompletableFuture<Boolean> setPointers(List<Option...
    method getPointer (line 277) | public CompletableFuture<Optional<byte[]>> getPointer(PublicKeyHash wr...
    method getAllEntries (line 293) | public Map<PublicKeyHash, byte[]> getAllEntries() {
    method close (line 311) | public synchronized void close() {

FILE: src/peergos/server/corenode/MirrorCoreNode.java
  class MirrorCoreNode (line 35) | public class MirrorCoreNode implements CoreNode {
    method MirrorCoreNode (line 66) | public MirrorCoreNode(CoreNode writeTarget,
    method initialize (line 116) | @Override
    method mirrorExternalUsers (line 149) | private void mirrorExternalUsers() {
    class CorenodeRoots (line 198) | private static class CorenodeRoots {
      method CorenodeRoots (line 202) | public CorenodeRoots(PublicKeyHash pkiOwnerIdentity, PublicKeyHash p...
      method equals (line 209) | @Override
      method hashCode (line 217) | @Override
    class CorenodeState (line 223) | private static class CorenodeState implements Cborable {
      method CorenodeState (line 230) | public CorenodeState(CorenodeRoots roots,
      method buildEmpty (line 240) | public static CorenodeState buildEmpty(PublicKeyHash pkiOwnerIdentity,
      method load (line 248) | public void load(CorenodeState other) {
      method toCbor (line 255) | @Override
      method fromCbor (line 288) | public static CorenodeState fromCbor(CborObject cbor) {
    method start (line 309) | public void start() {
    method saveState (line 325) | private synchronized void saveState() {
    method load (line 338) | private static CorenodeState load(Path statePath, PublicKeyHash pkiNod...
    method getPkiState (line 346) | private Pair<CorenodeRoots, byte[]> getPkiState() {
    method update (line 370) | public boolean update() {
    method signup (line 446) | @Override
    method startPaidSignup (line 470) | @Override
    method completePaidSignup (line 479) | @Override
    method startMirror (line 506) | @Override
    method startPaidMirror (line 522) | @Override
    method completePaidMirror (line 530) | @Override
    method getChain (line 541) | @Override
    method updateChain (line 552) | @Override
    method update (line 565) | private UserSnapshot update(UserSnapshot in) {
    method getUserSnapshotRecursive (line 579) | public static CompletableFuture<Map<PublicKeyHash, byte[]>> getUserSna...
    method getUserSnapshot (line 615) | public static CompletableFuture<Map<PublicKeyHash, byte[]>> getUserSna...
    method isHome (line 624) | private boolean isHome(String username, Set<Multihash> ourIds) {
    method getSnapshots (line 632) | @Override
    method migrateUser (line 662) | @Override
    method commitUpdate (line 748) | private void commitUpdate(UserSnapshot res,
    method getUsername (line 782) | @Override
    method getUsernames (line 792) | @Override
    method getStorageProviders (line 801) | @Override
    method getNextServerId (line 816) | @Override
    method close (line 827) | @Override

FILE: src/peergos/server/corenode/NonWriteThroughCoreNode.java
  class NonWriteThroughCoreNode (line 18) | public class NonWriteThroughCoreNode implements CoreNode {
    method NonWriteThroughCoreNode (line 25) | public NonWriteThroughCoreNode(CoreNode source, ContentAddressedStorag...
    method getPublicKeyHash (line 32) | @Override
    method getUsername (line 46) | @Override
    method getChain (line 58) | @Override
    method signup (line 70) | @Override
    method startPaidSignup (line 79) | @Override
    method completePaidSignup (line 84) | @Override
    method startMirror (line 89) | @Override
    method startPaidMirror (line 94) | @Override
    method completePaidMirror (line 99) | @Override
    method getSnapshots (line 104) | @Override
    method updateChain (line 109) | @Override
    method getUsernames (line 128) | @Override
    method migrateUser (line 142) | @Override
    method getNextServerId (line 153) | @Override
    method close (line 158) | @Override

FILE: src/peergos/server/corenode/SignUpFilter.java
  class SignUpFilter (line 23) | public class SignUpFilter implements CoreNode {
    method SignUpFilter (line 36) | public SignUpFilter(CoreNode target,
    method signup (line 54) | @Override
    method startPaidSignup (line 76) | @Override
    method completePaidSignup (line 105) | @Override
    method startMirror (line 140) | @Override
    method startPaidMirror (line 148) | @Override
    method completePaidMirror (line 174) | @Override
    method getSnapshots (line 209) | @Override
    method getChain (line 214) | @Override
    method updateChain (line 219) | @Override
    method forUs (line 227) | private boolean forUs(List<UserPublicKeyLink> chain) {
    method getUsername (line 231) | @Override
    method getUsernames (line 236) | @Override
    method migrateUser (line 241) | @Override
    method getNextServerId (line 263) | @Override
    method close (line 268) | @Override

FILE: src/peergos/server/corenode/UserRepository.java
  class UserRepository (line 22) | public class UserRepository implements SocialNetwork, MutablePointers {
    method UserRepository (line 30) | public UserRepository(DeletableContentAddressedStorage ipfs, JdbcIpnsA...
    method getFollowRequests (line 37) | @Override
    method sendFollowRequest (line 43) | @Override
    method removeFollowRequest (line 48) | @Override
    method getPointer (line 60) | @Override
    method setPointer (line 65) | @Override
    method setPointers (line 101) | @Override
    method validateUpdate (line 111) | private CompletableFuture<Optional<byte[]>> validateUpdate(PublicKeyHa...
    method clearCache (line 141) | @Override
    method build (line 146) | public static UserRepository build(DeletableContentAddressedStorage ip...

FILE: src/peergos/server/corenode/UsernameValidator.java
  class UsernameValidator (line 13) | public final class UsernameValidator {
    method isValidUsername (line 37) | public static boolean isValidUsername(String username) {

FILE: src/peergos/server/crypto/JniTweetNacl.java
  class JniTweetNacl (line 12) | public class JniTweetNacl {
    method JniTweetNacl (line 14) | private JniTweetNacl() {}
    method build (line 16) | public static JniTweetNacl build() {
    method canonicaliseArchitecture (line 20) | private static String canonicaliseArchitecture(String arch) {
    method crypto_box_keypair (line 58) | public static native int crypto_box_keypair(byte[] y, byte[] x);
    method crypto_box_open (line 60) | public static native int crypto_box_open(byte[] m, byte[]c, long d, by...
    method crypto_box (line 62) | public static native int crypto_box(byte[] c, byte[] m, long d, byte[]...
    method crypto_sign_open (line 65) | public static native int crypto_sign_open(byte[] m, long mlen, byte[] ...
    method crypto_sign (line 67) | public static native int crypto_sign(byte[] sm, long smlen, byte[] m, ...
    method crypto_sign_keypair (line 69) | public static native int crypto_sign_keypair(byte[] pk, byte[] sk);
    method crypto_secretbox_open (line 72) | public static native int crypto_secretbox_open(byte[] m, byte[] c, lon...
    method crypto_secretbox (line 74) | public static native int crypto_secretbox(byte[] c, byte[] m, long d, ...
    method crypto_scalarmult_base (line 77) | public static native int crypto_scalarmult_base(byte[] q, byte[] n);
    method ld32 (line 79) | public static native int ld32(byte[] b);
    class Signer (line 81) | public static class Signer implements Ed25519 {
      method Signer (line 85) | public Signer(JniTweetNacl impl) {
      method crypto_sign_open (line 89) | @Override
      method crypto_sign (line 98) | @Override
      method crypto_sign_keypair (line 105) | @Override
    class Symmetric (line 111) | public static class Symmetric implements peergos.shared.crypto.symmetr...
      method Symmetric (line 115) | public Symmetric(JniTweetNacl impl) {
      method secretbox (line 119) | @Override
      method secretbox_open (line 130) | @Override

FILE: src/peergos/server/crypto/TweetNaCl.java
  class TweetNaCl (line 14) | public class TweetNaCl {
    class InvalidSignatureException (line 33) | public static class InvalidSignatureException extends RuntimeException {}
    method crypto_sign_keypair (line 35) | public static void crypto_sign_keypair(byte[] pk, byte[] sk, boolean i...
    method crypto_box_keypair (line 54) | public static int crypto_box_keypair(byte[] y,byte[] x, boolean isSeeded)
    method crypto_scalarmult_base (line 61) | public static int crypto_scalarmult_base(byte[] q,byte[] n)
    method crypto_sign (line 66) | public static byte[] crypto_sign(byte[] message, byte[] secretSigningK...
    method crypto_sign_open (line 72) | public static byte[] crypto_sign_open(byte[] signed, byte[] publicSign...
    method crypto_box (line 80) | public static byte[] crypto_box(byte[] message, byte[] nonce, byte[] t...
    method crypto_box_open (line 90) | public static byte[] crypto_box_open(byte[] cipher, byte[] nonce, byte...
    method secretbox (line 100) | public static byte[] secretbox(byte[] mesage, byte[] nonce, byte[] key) {
    method secretbox_open (line 110) | public static byte[] secretbox_open(byte[] cipher, byte[] nonce, byte[...
    method L32 (line 138) | private static int L32(int x,int c) { return (x << c) | (x >>> (32 - c...
    method ld32 (line 140) | public static int ld32(byte[] x, int off)
    method st32 (line 148) | private static void st32(byte[] x, int off, int u)
    method vn (line 154) | private static int vn(byte[] x, int xOff, byte[] y,int n)
    method crypto_verify_16 (line 161) | private static int crypto_verify_16(byte[] x, int xOff, byte[] y)
    method crypto_verify_32 (line 166) | private static int crypto_verify_32(byte[] x,byte[] y)
    method core (line 171) | private static void core(byte[] out,byte[] in,byte[] k,byte[] c,int h)
    method crypto_core_salsa20 (line 211) | private static int crypto_core_salsa20(byte[] out,byte[] in,byte[] k,b...
    method crypto_core_hsalsa20 (line 217) | private static int crypto_core_hsalsa20(byte[] out,byte[] in,byte[] k,...
    method crypto_stream_salsa20_xor (line 225) | private static int crypto_stream_salsa20_xor(byte[] c,byte[] m,long b,...
    method crypto_stream_salsa20 (line 254) | private static int crypto_stream_salsa20(byte[] c,long d,byte[] n, int...
    method crypto_stream (line 259) | private static int crypto_stream(byte[] c,long d,byte[] n,byte[] k)
    method crypto_stream_xor (line 266) | private static int crypto_stream_xor(byte[] c,byte[] m,long d,byte[] n...
    method add1305 (line 273) | private static void add1305(int[] h,int[] c)
    method crypto_onetimeauth (line 287) | private static int crypto_onetimeauth(byte[] out, int outOff, byte[] m...
    method crypto_onetimeauth_verify (line 348) | private static int crypto_onetimeauth_verify(byte[] h, int hOff, byte[...
    method crypto_secretbox (line 355) | private static int crypto_secretbox(byte[] c,byte[] m,long d,byte[] n,...
    method crypto_secretbox_open (line 365) | private static int crypto_secretbox_open(byte[] m,byte[] c,long d,byte...
    method set25519 (line 377) | private static void set25519(long[] /*gf*/ r, long[] /*gf*/ a)
    method car25519 (line 383) | private static void car25519(long[] /*gf*/ o, int oOff)
    method sel25519 (line 393) | private static void sel25519(long[] /*gf*/ p,long[] /*gf*/ q,int b)
    method pack25519 (line 404) | private static void pack25519(byte[] o,long[] /*gf*/ n, int nOff)
    method neq25519 (line 429) | private static int neq25519(long[] /*gf*/ a, long[] /*gf*/ b)
    method par25519 (line 437) | private static byte par25519(long[] /*gf*/ a)
    method unpack25519 (line 444) | private static void unpack25519(long[] /*gf*/ o, byte[] n)
    method A (line 452) | private static void A(long[] /*gf*/ o,long[] /*gf*/ a,long[] /*gf*/ b)
    method Z (line 458) | private static void Z(long[] /*gf*/ o,long[] /*gf*/ a,long[] /*gf*/ b)
    method M (line 464) | private static void M(long[] /*gf*/ o, int oOff, long[] /*gf*/ a, int ...
    method S (line 475) | private static void S(long[] /*gf*/ o,long[] /*gf*/ a)
    method inv25519 (line 480) | private static void inv25519(long[] /*gf*/ o, int oOff, long[] /*gf*/ ...
    method pow2523 (line 492) | private static void pow2523(long[] /*gf*/ o,long[] /*gf*/ i)
    method crypto_scalarmult (line 504) | private static int crypto_scalarmult(byte[] q,byte[] n,byte[] p)
    method crypto_box_beforenm (line 563) | private static int crypto_box_beforenm(byte[] k,byte[] y,byte[] x)
    method crypto_box_afternm (line 570) | private static int crypto_box_afternm(byte[] c,byte[] m,long d,byte[] ...
    method crypto_box_open_afternm (line 575) | private static int crypto_box_open_afternm(byte[] m,byte[] c,long d,by...
    method crypto_box (line 580) | private static int crypto_box(byte[] c,byte[] m,long d,byte[] nonce, b...
    method crypto_box_open (line 587) | private static int crypto_box_open(byte[] m,byte[] c,long d,byte[] n,b...
    method crypto_hash (line 594) | private static int crypto_hash(byte[] out, byte[] m, int n) {
    method jsts64 (line 633) | private static void jsts64(byte[] x, int i, int h, int l) {
    method crypto_hashblocks_hl (line 687) | private static int crypto_hashblocks_hl(int[] hh, int[] hl, byte[] m, ...
    method add (line 1048) | private static void add(long[][] /*gf*/ p/*[4]*/,long[][] /*gf*/ q/*[4...
    method cswap (line 1075) | private static void cswap(long[][] /*gf*/ p/*[4]*/,long[][] /*gf*/ q/*...
    method pack (line 1082) | private static void pack(byte[] r,long[][] /*gf*/ p/*[4]*/)
    method scalarmult (line 1092) | private static void scalarmult(long[][] /*gf*/ p/*[4]*/,long[][] /*gf*...
    method scalarbase (line 1108) | private static void scalarbase(long[][] /*gf*/ p/*[4]*/,byte[] s,  int...
    method modL (line 1123) | private static void modL(byte[] r, int rOff, long[] x/*[64]*/)
    method reduce (line 1150) | private static void reduce(byte[] r)
    method crypto_sign (line 1158) | private static int crypto_sign(byte[] sm, byte[] m,int n,byte[] sk)
    method unpackneg (line 1189) | private static int unpackneg(long[][] /*gf*/ r/*[4]*/,byte[] p/*[32]*/)
    method crypto_sign_open (line 1226) | private static int crypto_sign_open(byte[] m, byte[] sm, int n, byte[]...
    method getSecureRandom (line 1260) | private static SecureRandom getSecureRandom() {
    method randombytes (line 1264) | private static void randombytes(byte[] b, int len) {
    method randomBytes (line 1270) | public static void randomBytes(byte[] b, int offset, int len) {

FILE: src/peergos/server/crypto/asymmetric/curve25519/Curve25519Java.java
  class Curve25519Java (line 6) | public class Curve25519Java implements Curve25519 {
    method crypto_box_open (line 8) | @Override
    method crypto_box (line 13) | @Override
    method crypto_box_keypair (line 18) | @Override

FILE: src/peergos/server/crypto/asymmetric/curve25519/Ed25519Java.java
  class Ed25519Java (line 9) | public class Ed25519Java implements Ed25519 {
    method crypto_sign_open (line 10) | @Override
    method crypto_sign (line 15) | @Override
    method crypto_sign_keypair (line 20) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/CryptoUtils.java
  class CryptoUtils (line 7) | public class CryptoUtils {
    method pow (line 13) | public static int pow(int base, int exponent) {
    method mod (line 28) | public static int mod(int val, int base) {
    method bytesToLong (line 32) | public static long bytesToLong(ByteOrder order, byte[] bytes, int offs...
    method zero (line 45) | public static void zero(byte[] toZero) {
    method zero (line 49) | public static void zero(int[] toZero) {
    method zero (line 53) | public static void zero(int[][] toZero) {
    method zero (line 59) | public static void zero(int[][][] toZero) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/JavaMlkem.java
  class JavaMlkem (line 22) | public class JavaMlkem implements Mlkem {
    method generateKeyPair (line 26) | @Override
    method encapsulate (line 34) | @Override
    method decapsulate (line 46) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/MlkemSecureRandom.java
  class MlkemSecureRandom (line 10) | public class MlkemSecureRandom {
    method getSecureRandom (line 14) | public static SecureRandom getSecureRandom(int minSecurityStrength) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/Constants.java
  class Constants (line 14) | public class Constants {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/FIPS202.java
  type FIPS202 (line 5) | public interface FIPS202 {
    method keccakPermutation (line 7) | MimicloneKeccak keccakPermutation(MimicloneKeccak.Permutation permutat...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/MimicloneFIPS202.java
  class MimicloneFIPS202 (line 5) | public class MimicloneFIPS202 implements FIPS202 {
    method keccakPermutation (line 7) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/MimicloneKeccak.java
  class MimicloneKeccak (line 20) | public class MimicloneKeccak {
    type Permutation (line 22) | public enum Permutation {
      method Permutation (line 33) | private Permutation() {
    method MimicloneKeccak (line 78) | public MimicloneKeccak(Permutation permutation) {
    method mod (line 82) | int mod(int val, int base) {
    method convert (line 86) | long convert(BitSet bits) {
    method permute (line 94) | public BitSet[][] permute(BitSet[][] a) {
    method printState (line 130) | private void printState(String label, long[][] data) {
    method theta (line 151) | long[][] theta(long[][] state) {
    method rhopi (line 205) | long[][] rhopi(long[][] state) {
    method chi (line 225) | long[][] chi(long[][] state) {
    method round (line 237) | public long[][] round(long[][] a, long rc) {
    method sponge (line 255) | String sponge(String message, long digestLength) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/AbstractKeccakMessageDigest.java
  class AbstractKeccakMessageDigest (line 9) | public abstract class AbstractKeccakMessageDigest extends MessageDigest {
    method AbstractKeccakMessageDigest (line 20) | public AbstractKeccakMessageDigest(XOFParameterSet params)
    method engineDigest (line 29) | @Override
    method engineReset (line 41) | @Override
    method engineUpdateBits (line 46) | public void engineUpdateBits(byte[] bits, long bitOff, long bitLength)
    method engineUpdate (line 51) | @Override
    method engineUpdate (line 56) | @Override
    method getRateBits (line 61) | public byte[] getRateBits(int boff, int len)
    method getRateBits (line 66) | public int getRateBits() {
    method engineGetDigestLength (line 70) | @Override
    method getSponge (line 75) | public KeccakSponge getSponge() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/DuplexRandom.java
  class DuplexRandom (line 16) | public final class DuplexRandom {
    class ForgettingByteArrayOutputStream (line 17) | class ForgettingByteArrayOutputStream extends ByteArrayOutputStream {
      method forget (line 18) | public void forget() {
      method getBuf (line 23) | public byte[] getBuf() {
    method DuplexRandom (line 58) | public DuplexRandom(int capacityInBits) {
    method seed (line 75) | public void seed(byte[] seed, int off, int len) {
    method seed (line 89) | public void seed() {
    method getSeedBytes (line 108) | public static void getSeedBytes(byte[] buf, int off, int len) {
    method getBytes (line 118) | public void getBytes(byte[] buf, int off, int len) {
    method feed (line 145) | private void feed(byte[] buf, int off, int len) {
    method forget (line 167) | public void forget() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/Keccak1600.java
  class Keccak1600 (line 21) | public final class Keccak1600 {
    method Keccak1600 (line 23) | public Keccak1600()
    method Keccak1600 (line 28) | public Keccak1600(int bitCapacity) {
    method Keccak1600 (line 32) | public Keccak1600(int bitCapacity, int rounds) {
    method byteOp (line 41) | byte byteOp(StateOp stateOp, int stateByteOff, byte in)
    method bytesOp (line 46) | void bytesOp(StateOp stateOp, int stateByteOff, byte[] out, int outpos...
    method bitsOp (line 51) | void bitsOp(StateOp stateOp, int stateBitOff, byte[] out, long outpos,...
    method validateBytes (line 56) | public void validateBytes(int stateByteOff, byte[] buf, int bufByteOff...
    method wrapBytes (line 60) | public void wrapBytes(int stateByteOff, byte[] outBuf, int outBufOff, ...
    method unwrapBytes (line 64) | public void unwrapBytes(int stateByteOff, byte[] outBuf, int outBufOff...
    method getBytes (line 68) | public void getBytes(int stateByteOff, byte[] buf, int bufByteOff, int...
    method setXorByte (line 72) | public void setXorByte(int stateByteOff, byte val) {
    method setXorBytes (line 76) | public void setXorBytes(int stateByteOff, byte[] buf, int bufByteOff, ...
    method zeroBytes (line 80) | public void zeroBytes(int stateByteOff, int lenBytes) {
    method getBits (line 84) | public void getBits(int stateBitOff, byte[] buf, long bufBitOff, int l...
    method setXorBits (line 88) | public final void setXorBits(int stateBitOff, byte[] buf, long bufBitO...
    method zeroBits (line 92) | public void zeroBits(int stateBitOff, int lenBits) {
    method validateBits (line 96) | public void validateBits(int stateBitOff, byte[] buf, int bufBitOff, i...
    method wrapBits (line 100) | public void wrapBits(int stateBitOff, byte[] outBuf, int outBufOff, by...
    method unwrapBits (line 104) | public void unwrapBits(int stateBitOff, byte[] outBuf, int outBufOff, ...
    method remainingLongs (line 108) | public int remainingLongs(int longOff) {
    method remainingBytes (line 112) | public int remainingBytes(int byteOff) {
    method remainingBits (line 116) | public int remainingBits(int bitOff) {
    method pad (line 120) | public void pad(byte domainBits, int domainBitLength, int bitPosition)
    method pad (line 162) | public void pad(int padBitPosition)
    method permute (line 183) | public void permute()
    method clear (line 358) | public void clear() {
    method index (line 372) | final static int index(int x, int y)
    method rol64 (line 377) | final static long rol64(long l, int offset) {
    method KeccakF1600_InitializeRoundConstants (line 389) | final static void KeccakF1600_InitializeRoundConstants()
    method LFSR86540 (line 404) | final static boolean LFSR86540(byte[] LFSR)
    method KeccakF1600_InitializeRhoOffsets (line 415) | final static void KeccakF1600_InitializeRhoOffsets()
    method theta (line 431) | final void theta()
    method rho (line 449) | final void rho()
    method pi (line 457) | final void pi()
    method chi (line 468) | final void chi()
    method iota (line 481) | void iota(int indexRound)
    method getRateBits (line 486) | public int getRateBits() {
    method getCapacityBits (line 490) | public int getCapacityBits() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/KeccakSponge.java
  class KeccakSponge (line 22) | public class KeccakSponge {
    class SqueezeStream (line 34) | private final class SqueezeStream extends BitInputStream {
      method SqueezeStream (line 37) | public SqueezeStream() {
      method close (line 41) | @Override
      method open (line 50) | void open() {
      method readBits (line 60) | @Override
      method transformBits (line 88) | @Override
    class AbsorbStream (line 116) | private final class AbsorbStream extends BitOutputStream {
      method close (line 119) | @Override
      method writeBits (line 129) | @Override
      method open (line 153) | public void open() {
    method KeccakSponge (line 167) | public KeccakSponge(XOFParameterSet params) {
    method KeccakSponge (line 173) | public KeccakSponge(int capacityInBits, byte domainPadding, int domain...
    method reset (line 180) | public void reset() {
    method getSqueezeStream (line 186) | public BitInputStream getSqueezeStream() {
    method getAbsorbStream (line 195) | public BitOutputStream getAbsorbStream() {
    method getTransformingSqueezeStream (line 204) | public java.io.FilterOutputStream getTransformingSqueezeStream(final j...
    method getRateBits (line 239) | public byte[] getRateBits(int boff, int len)
    method getRateBits (line 246) | public int getRateBits() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/KeccakStateUtils.java
  class KeccakStateUtils (line 17) | final class KeccakStateUtils {
    type StateOp (line 19) | public enum StateOp {
      method isIn (line 23) | public boolean isIn() {
      method isOut (line 27) | public boolean isOut() {
    method longOp (line 45) | public static long longOp(StateOp stateOp, long[] state, int position,...
    method getMask (line 130) | private static long getMask(int bitOffset, int bitLength) {
    method longOp (line 157) | public static long longOp(StateOp operation, long[] state, int positio...
    method intOp (line 170) | public static int intOp(StateOp operation, long[] state, int position,...
    method shortOp (line 198) | public static short shortOp(StateOp stateOp, long[] state, int pos, sh...
    method byteOp (line 225) | public static byte byteOp(StateOp stateOp, long[] state, int pos, byte...
    method bitOp (line 252) | public static boolean bitOp(StateOp stateOp, long[] state, int pos, bo...
    method longsOp (line 283) | public static void longsOp(StateOp operation, long[] state, int position,
    method intsOp (line 336) | public static void intsOp(StateOp operation, long[] state, int position,
    method shortsOp (line 407) | public static void shortsOp(StateOp stateOp, long[] state, int pos,
    method bytesOp (line 473) | public static void bytesOp(StateOp stateOp, long[] state, int pos,
    method bitsOp (line 542) | public static byte bitsOp(StateOp stateOp, long[] state, int pos, byte...
    method bitsOp (line 583) | public static void bitsOp(StateOp stateOp, long[] state, int pos,
    method setBitsInLong (line 617) | static long setBitsInLong(byte[] src, long srcoff,  long l, int off, i...
    method setBitsFromLong (line 655) | static void setBitsFromLong(byte[] dst, long dstoff,  long l, int off,...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/core/KeccakStateValidationFailedException.java
  class KeccakStateValidationFailedException (line 14) | public class KeccakStateValidationFailedException extends RuntimeExcepti...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/io/BitInputStream.java
  class BitInputStream (line 16) | public abstract class BitInputStream extends InputStream {
    method close (line 17) | @Override
    method read (line 21) | @Override
    method transform (line 36) | public int transform(byte[] input, int inputOff, byte[] output, int ou...
    method read (line 41) | @Override
    method transform (line 54) | public int transform(byte[] input, byte[] output) {
    method read (line 59) | @Override
    method readBits (line 68) | public abstract long readBits(byte[] arg, long bitOff, long bitLen);
    method transformBits (line 80) | public abstract long transformBits(byte[] input, long inputOff, byte[]...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/io/BitOutputStream.java
  class BitOutputStream (line 16) | public abstract class BitOutputStream extends OutputStream {
    method close (line 18) | @Override
    method write (line 21) | @Override
    method write (line 26) | @Override
    method write (line 31) | @Override
    method writeBits (line 36) | public abstract void writeBits(byte[] arg, long bitOff, long bitLen);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/AbstractCipher.java
  class AbstractCipher (line 31) | public abstract class AbstractCipher extends CipherSpi {
    method setKey (line 36) | private void setKey(Key key) throws InvalidKeyException
    method engineInit (line 49) | @Override
    method engineInit (line 64) | @Override
    method reset (line 71) | public void reset() {
    method getKey (line 76) | protected byte[] getKey() {
    method getNonce (line 79) | protected byte[] getNonce() {
    method update (line 83) | public byte[] update(byte[] input) {
    method update (line 87) | public byte[] update(byte[] input, int inputOffset, int inputLen) {
    method update (line 91) | public int update(byte[] input, int inputOffset, int inputLen, byte[] ...
    method update (line 95) | public int update(byte[] input, int inputOffset, int inputLen, byte[] ...
    method engineGetBlockSize (line 99) | @Override
    method engineGetIV (line 104) | @Override
    method engineGetParameters (line 112) | @Override
    method engineDoFinal (line 117) | @Override
    method engineDoFinal (line 125) | @Override
    method engineGetOutputSize (line 139) | @Override
    method engineSetMode (line 144) | @Override
    method engineSetPadding (line 148) | @Override
    method engineUpdate (line 155) | @Override
    method init (line 163) | protected abstract void init() throws InvalidKeyException;
    method unwrap (line 165) | public Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int w...
    method update (line 169) | public int update(ByteBuffer input, ByteBuffer output) throws ShortBuf...
    method updateAAD (line 173) | public void updateAAD(byte[] src) {
    method updateAAD (line 177) | public void updateAAD(byte[] src, int offset, int len) {
    method updateAAD (line 181) | public void updateAAD(ByteBuffer src) {
    method wrap (line 185) | public byte[] wrap(Key key) throws InvalidKeyException, IllegalBlockSi...
    method engineInit (line 189) | @Override
    method init (line 198) | public void init(int opmode, Key key, AlgorithmParameterSpec params) t...
    method doFinal (line 203) | public byte[] doFinal() throws ShortBufferException, IllegalBlockSizeE...
    method doFinal (line 210) | public byte[] doFinal(byte[] input) throws IllegalBlockSizeException, ...
    method doFinal (line 214) | public int doFinal(byte[] output, int outputOffset) throws ShortBuffer...
    method doFinal (line 218) | public byte[] doFinal(byte[] input, int inputOffset, int inputLen) thr...
    method doFinal (line 223) | public int doFinal(byte[] input, int inputOffset, int inputLen, byte[]...
    method doFinal (line 227) | public int doFinal(byte[] input, int inputOffset, int inputLen, byte[]...
    method doFinal (line 231) | public int doFinal(ByteBuffer input, ByteBuffer output) throws ShortBu...
    method getMode (line 235) | protected int getMode() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/AbstractSpongeStreamCipher.java
  class AbstractSpongeStreamCipher (line 19) | public abstract class AbstractSpongeStreamCipher extends AbstractCipher{
    method reset (line 21) | @Override
    method init (line 27) | @Override
    method engineUpdate (line 38) | @Override
    method engineUpdate (line 43) | @Override
    method getSponge (line 51) | abstract KeccakSponge getSponge();

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/KeccakRnd128.java
  class KeccakRnd128 (line 27) | public final class KeccakRnd128 extends SecureRandomSpi {
    method KeccakRnd128 (line 34) | public KeccakRnd128() {
    method engineGenerateSeed (line 38) | @Override
    method engineNextBytes (line 48) | @Override
    method engineSetSeed (line 59) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/KeccakRnd256.java
  class KeccakRnd256 (line 25) | public final class KeccakRnd256 extends SecureRandomSpi {
    method engineGenerateSeed (line 28) | @Override
    method engineNextBytes (line 38) | @Override
    method engineSetSeed (line 44) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/RawKey.java
  class RawKey (line 18) | public abstract class RawKey implements SecretKey {
    method RawKey (line 22) | public RawKey() {
    method RawKey (line 26) | public RawKey(byte[] rawKey) throws InvalidKeyException {
    method getEncoded (line 30) | @Override
    method setRaw (line 36) | public void setRaw(byte[] rawKey) throws InvalidKeyException {
    method getFormat (line 42) | @Override
    method getMinKeyLength (line 47) | public int getMinKeyLength() {
    method getMaxKeyLength (line 51) | public int getMaxKeyLength() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/Shake128Key.java
  class Shake128Key (line 16) | public class Shake128Key extends RawKey {
    method getAlgorithm (line 18) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/Shake128StreamCipher.java
  class Shake128StreamCipher (line 17) | public final class Shake128StreamCipher extends AbstractSpongeStreamCiph...
    method getSponge (line 20) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/Shake256Key.java
  class Shake256Key (line 16) | public class Shake256Key extends RawKey {
    method getAlgorithm (line 18) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/spi/Shake256StreamCipher.java
  class Shake256StreamCipher (line 17) | public class Shake256StreamCipher extends AbstractSpongeStreamCipher {
    method getSponge (line 21) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips202/keccak/sponge/MimicloneKeccakSponge.java
  class MimicloneKeccakSponge (line 10) | public class MimicloneKeccakSponge {
    method MimicloneKeccakSponge (line 22) | private MimicloneKeccakSponge(int bitLength) {
    method create (line 35) | public static MimicloneKeccakSponge create(int bitLength) {
    method pad (line 41) | byte[] pad(int messageLengthInBytes) {
    method absorb (line 102) | void absorb(byte[] data, int offset, int length) {
    method padAndSwitchToSqueezingPhase (line 154) | void padAndSwitchToSqueezingPhase() {
    method squeeze (line 181) | void squeeze(byte[] output, int offset, long outputBitLength) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/FIPS203.java
  type FIPS203 (line 10) | public interface FIPS203 {
    method getParameterSet (line 15) | ParameterSet getParameterSet();
    method generateKeyPair (line 20) | KeyPair generateKeyPair() throws KeyPairGenerationException;
    method keyPairCheck (line 22) | void keyPairCheck(KeyPair keyPair) throws KeyPairCheckException;
    method encapsulate (line 28) | Encapsulation encapsulate(EncapsulationKey key);
    method decapsulate (line 34) | SharedSecretKey decapsulate(DecapsulationKey key, CipherText cipherText);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/FIPS203Exception.java
  class FIPS203Exception (line 3) | public class FIPS203Exception extends RuntimeException {
    method FIPS203Exception (line 4) | public FIPS203Exception(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/MimicloneFIPS203.java
  class MimicloneFIPS203 (line 23) | public class MimicloneFIPS203 implements FIPS203 {
    method create (line 25) | public static FIPS203 create(ParameterSet params) {
    method MimicloneFIPS203 (line 38) | private MimicloneFIPS203(ParameterSet parameterSet) {
    method getParameterSet (line 56) | @Override
    method generateKeyPair (line 66) | @Override
    method keyPairCheck (line 102) | @Override
    method encapsulate (line 116) | @Override
    method decapsulate (line 144) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/ParameterSet.java
  type ParameterSet (line 3) | public enum ParameterSet {
    method ParameterSet (line 123) | ParameterSet(String name, int k, int eta1, int eta2, int du, int dv, i...
    method getName (line 137) | public String getName() {
    method getK (line 141) | public int getK() {
    method getMinSecurityStrength (line 145) | public int getMinSecurityStrength() {
    method getQ (line 149) | public int getQ() {
    method getN (line 153) | public int getN() {
    method getEta1 (line 157) | public int getEta1() {
    method getEta2 (line 161) | public int getEta2() {
    method getDu (line 165) | public int getDu() {
    method getDv (line 169) | public int getDv() {
    method getSharedSecretKeyLength (line 173) | public int getSharedSecretKeyLength() {
    method getCiphertextLength (line 177) | public int getCiphertextLength() {
    method getDecapsulationKeyLength (line 181) | public int getDecapsulationKeyLength() {
    method getEncapsulationKeyLength (line 185) | public int getEncapsulationKeyLength() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/codec/Codec.java
  type Codec (line 3) | public interface Codec {
    method byteEncode (line 5) | byte[] byteEncode(int d, int[] f);
    method compress (line 7) | int[] compress(int d, int[] x);
    method byteDecode (line 9) | int[] byteDecode(int d, byte[] f);
    method decompress (line 11) | int[] decompress(int d, int[] y);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/codec/MLKEMCodec.java
  class MLKEMCodec (line 11) | public class MLKEMCodec implements Codec {
    method MLKEMCodec (line 15) | public MLKEMCodec(ParameterSet parameterSet) {
    method create (line 19) | public static MLKEMCodec create(ParameterSet parameterSet) {
    method byteEncode (line 34) | @Override
    method compress (line 71) | @Override
    method byteDecode (line 85) | @Override
    method decompress (line 104) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decaps/DecapsulationException.java
  class DecapsulationException (line 3) | public class DecapsulationException extends RuntimeException {
    method DecapsulationException (line 4) | public DecapsulationException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decaps/Decapsulator.java
  type Decapsulator (line 7) | public interface Decapsulator {
    method decapsulate (line 9) | SharedSecretKey decapsulate(DecapsulationKey key, CipherText cipherTex...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decaps/mlkem/MLKEMDecapsulator.java
  class MLKEMDecapsulator (line 19) | public class MLKEMDecapsulator implements peergos.server.crypto.asymmetr...
    method MLKEMDecapsulator (line 27) | private MLKEMDecapsulator(ParameterSet parameterSet, Hash hash, Encryp...
    method create (line 34) | public static MLKEMDecapsulator create(ParameterSet parameterSet) {
    method decapsulate (line 43) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decaps/provider/MLKEMDecapsulatorProvider.java
  class MLKEMDecapsulatorProvider (line 13) | public class MLKEMDecapsulatorProvider implements KEMSpi.DecapsulatorSpi {
    method MLKEMDecapsulatorProvider (line 17) | public MLKEMDecapsulatorProvider(Decapsulator decapsulator) {
    method getInstance (line 21) | public static MLKEMDecapsulatorProvider getInstance(PrivateKey private...
    method engineDecapsulate (line 25) | @Override
    method engineSecretSize (line 32) | @Override
    method engineEncapsulationSize (line 37) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decrypt/DecryptionException.java
  class DecryptionException (line 3) | public class DecryptionException extends RuntimeException {
    method DecryptionException (line 4) | public DecryptionException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decrypt/Decryptor.java
  type Decryptor (line 3) | public interface Decryptor {
    method decrypt (line 5) | byte[] decrypt(byte[] dkPKE, byte[] cipherText);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/decrypt/kpke/KPKEDecryptor.java
  class KPKEDecryptor (line 12) | public class KPKEDecryptor implements Decryptor {
    method KPKEDecryptor (line 18) | private KPKEDecryptor(ParameterSet parameterSet, Codec codec, Transfor...
    method create (line 24) | public static KPKEDecryptor create(ParameterSet parameterSet) {
    method decrypt (line 32) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/Encapsulation.java
  type Encapsulation (line 6) | public interface Encapsulation {
    method getSharedSecretKey (line 8) | SharedSecretKey getSharedSecretKey();
    method getCipherText (line 10) | CipherText getCipherText();

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/EncapsulationException.java
  class EncapsulationException (line 3) | public class EncapsulationException extends RuntimeException {
    method EncapsulationException (line 4) | public EncapsulationException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/Encapsulator.java
  type Encapsulator (line 6) | public interface Encapsulator {
    method encapsulate (line 8) | Encapsulation encapsulate(EncapsulationKey ek, byte[] entropy) throws ...

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/mlkem/MLKEMEncapsulation.java
  class MLKEMEncapsulation (line 9) | public class MLKEMEncapsulation implements Encapsulation {
    method MLKEMEncapsulation (line 14) | public MLKEMEncapsulation(SharedSecretKey sharedSecretKey, CipherText ...
    method build (line 19) | static MLKEMEncapsulation build(byte[] sharedSecretKeyBytes, byte[] ci...
    method getSharedSecretKey (line 25) | @Override
    method getCipherText (line 30) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/mlkem/MLKEMEncapsulator.java
  class MLKEMEncapsulator (line 14) | public class MLKEMEncapsulator implements peergos.server.crypto.asymmetr...
    method MLKEMEncapsulator (line 20) | public MLKEMEncapsulator(ParameterSet parameterSet, Hash hash, Encrypt...
    method create (line 26) | public static MLKEMEncapsulator create(ParameterSet parameterSet) {
    method encapsulate (line 41) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encaps/provider/MLKEMEncapsulationProvider.java
  class MLKEMEncapsulationProvider (line 6) | public class MLKEMEncapsulationProvider implements KEMSpi.EncapsulatorSpi {
    method engineEncapsulate (line 8) | @Override
    method engineSecretSize (line 13) | @Override
    method engineEncapsulationSize (line 18) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encrypt/EncryptionException.java
  class EncryptionException (line 3) | public class EncryptionException extends RuntimeException {
    method EncryptionException (line 4) | public EncryptionException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encrypt/Encryptor.java
  type Encryptor (line 3) | public interface Encryptor {
    method encrypt (line 5) | byte[] encrypt(byte[] ekPKE, byte[] message, byte[] random);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/encrypt/kpke/KPKEEncryptor.java
  class KPKEEncryptor (line 16) | public class KPKEEncryptor implements Encryptor {
    method KPKEEncryptor (line 24) | public KPKEEncryptor(ParameterSet parameterSet, Codec codec, Hash hash...
    method create (line 32) | public static KPKEEncryptor create(ParameterSet parameterSet) {
    method encrypt (line 49) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/hash/Hash.java
  type Hash (line 3) | public interface Hash {
    method prfEta1 (line 5) | byte[] prfEta1(byte[] s, byte b);
    method prfEta2 (line 7) | byte[] prfEta2(byte[] s, byte b);
    method gHash (line 9) | byte[] gHash(byte[] c);
    method hHash (line 11) | byte[] hHash(byte[] s);
    method jHash (line 13) | byte[] jHash(byte[] s);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/hash/MLKEMHash.java
  class MLKEMHash (line 13) | public class MLKEMHash implements Hash {
    method MLKEMHash (line 25) | public MLKEMHash(ParameterSet parameterSet, MessageDigest sha3Hash256,...
    method create (line 33) | public static MLKEMHash create(ParameterSet parameterSet) {
    method prfEta1 (line 63) | @Override
    method prfEta2 (line 86) | @Override
    method gHash (line 109) | @Override
    method hHash (line 116) | @Override
    method jHash (line 123) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/hash/XOFParameterSet.java
  type XOFParameterSet (line 3) | public enum XOFParameterSet {
    method XOFParameterSet (line 47) | XOFParameterSet(String algorithm, int capacityInBits, int digestLength...
    method getAlgorithm (line 55) | public String getAlgorithm() {
    method getCapacityInBits (line 59) | public int getCapacityInBits() {
    method getDigestLength (line 63) | public int getDigestLength() {
    method getDomainPadding (line 67) | public byte getDomainPadding() {
    method getDomainPaddingBitLength (line 71) | public int getDomainPaddingBitLength() {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/DecapsulationKey.java
  type DecapsulationKey (line 3) | public interface DecapsulationKey extends Key {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/EncapsulationKey.java
  type EncapsulationKey (line 3) | public interface EncapsulationKey extends Key {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/Key.java
  type Key (line 3) | public interface Key {
    method getBytes (line 5) | byte[] getBytes();
    method destroy (line 10) | void destroy();

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/KeyPair.java
  type KeyPair (line 3) | public interface KeyPair {
    method getEncapsulationKey (line 5) | EncapsulationKey getEncapsulationKey();
    method getDecapsulationKey (line 7) | DecapsulationKey getDecapsulationKey();

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/KeyPairException.java
  class KeyPairException (line 3) | public class KeyPairException extends RuntimeException {
    method KeyPairException (line 4) | public KeyPairException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/SharedSecretKey.java
  type SharedSecretKey (line 3) | public interface SharedSecretKey extends Key {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/check/KeyPairCheckException.java
  class KeyPairCheckException (line 5) | public class KeyPairCheckException extends KeyPairException {
    method KeyPairCheckException (line 6) | public KeyPairCheckException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/gen/KeyPairGeneration.java
  type KeyPairGeneration (line 5) | public interface KeyPairGeneration {
    method generateKeyPair (line 7) | KeyPair generateKeyPair(byte[] d, byte[] z);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/gen/KeyPairGenerationException.java
  class KeyPairGenerationException (line 5) | public class KeyPairGenerationException extends KeyPairException {
    method KeyPairGenerationException (line 6) | public KeyPairGenerationException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/gen/mlkem/MLKEMKeyPairGenerator.java
  class MLKEMKeyPairGenerator (line 21) | public final class MLKEMKeyPairGenerator implements KeyPairGeneration {
    method MLKEMKeyPairGenerator (line 33) | private MLKEMKeyPairGenerator(ParameterSet parameterSet, Codec codec, ...
    method create (line 41) | public static MLKEMKeyPairGenerator create(ParameterSet parameterSet) {
    method generateKeyPair (line 59) | @Override
    method generateKPKE (line 134) | KeyPair generateKPKE(byte[] d) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/gen/provider/MLKEMKeyGenerationProvider.java
  class MLKEMKeyGenerationProvider (line 9) | public class MLKEMKeyGenerationProvider extends KeyPairGeneratorSpi {
    method MLKEMKeyGenerationProvider (line 13) | public MLKEMKeyGenerationProvider(ParameterSet params) {
    method getMLKEM512Provider (line 17) | public static MLKEMKeyGenerationProvider getMLKEM512Provider() {
    method getMLKEM768Provider (line 21) | public static MLKEMKeyGenerationProvider getMLKEM768Provider() {
    method getMLKEM1024Provider (line 25) | public static MLKEMKeyGenerationProvider getMLKEM1024Provider() {
    method initialize (line 29) | @Override
    method generateKeyPair (line 34) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/mlkem/MLKEMDecapsulationKey.java
  class MLKEMDecapsulationKey (line 7) | public class MLKEMDecapsulationKey implements DecapsulationKey {
    method MLKEMDecapsulationKey (line 11) | private MLKEMDecapsulationKey(byte[] keyBytes) {
    method create (line 15) | public static MLKEMDecapsulationKey create(byte[] keyBytes) {
    method getBytes (line 19) | @Override
    method destroy (line 24) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/mlkem/MLKEMEncapsulationKey.java
  class MLKEMEncapsulationKey (line 7) | public class MLKEMEncapsulationKey implements EncapsulationKey {
    method MLKEMEncapsulationKey (line 11) | private MLKEMEncapsulationKey(byte[] keyBytes) {
    method create (line 15) | public static MLKEMEncapsulationKey create(byte[] keyBytes) {
    method getBytes (line 19) | @Override
    method destroy (line 24) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/mlkem/MLKEMKeyPair.java
  class MLKEMKeyPair (line 9) | public class MLKEMKeyPair implements KeyPair {
    method MLKEMKeyPair (line 13) | public MLKEMKeyPair(EncapsulationKey getEncapsulationKey, Decapsulatio...
    method fromBytes (line 18) | public static KeyPair fromBytes(byte[] ek, byte[] dk) {
    method getEncapsulationKey (line 22) | @Override
    method getDecapsulationKey (line 27) | @Override
    method equals (line 32) | @Override
    method hashCode (line 40) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/key/mlkem/MLKEMSharedSecretKey.java
  class MLKEMSharedSecretKey (line 7) | public class MLKEMSharedSecretKey implements SharedSecretKey {
    method MLKEMSharedSecretKey (line 11) | public MLKEMSharedSecretKey(byte[] sharedSecret) {
    method create (line 15) | public static MLKEMSharedSecretKey create(byte[] sharedSecret) {
    method getBytes (line 19) | @Override
    method destroy (line 24) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/message/CipherText.java
  type CipherText (line 3) | public interface CipherText {
    method getBytes (line 5) | byte[] getBytes();

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/message/MLKEMCipherText.java
  class MLKEMCipherText (line 3) | public class MLKEMCipherText implements CipherText {
    method MLKEMCipherText (line 7) | public MLKEMCipherText(byte[] cipherText) {
    method create (line 11) | public static MLKEMCipherText create(byte[] cipherText) {
    method getBytes (line 15) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/provider/MLKEMProvider.java
  class MLKEMProvider (line 10) | public class MLKEMProvider implements KEMSpi {
    method MLKEMProvider (line 14) | public MLKEMProvider(ParameterSet params) {
    method getMLKEM512Provider (line 18) | public static MLKEMProvider getMLKEM512Provider() {
    method getMLKEM768Provider (line 22) | public static MLKEMProvider getMLKEM768Provider() {
    method getMLKEM1024Provider (line 26) | public static MLKEMProvider getMLKEM1024Provider() {
    method engineNewEncapsulator (line 30) | @Override
    method engineNewDecapsulator (line 35) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/provider/MimicloneSecurityProvider.java
  class MimicloneSecurityProvider (line 10) | public class MimicloneSecurityProvider extends Provider implements javax...
    class ProviderService (line 17) | private static final class ProviderService extends Provider.Service {
      method ProviderService (line 18) | ProviderService(Provider p, String type, String algo, String cn) {
      method newInstance (line 22) | @Override
    method MimicloneSecurityProvider (line 55) | public MimicloneSecurityProvider() {
    method install (line 85) | public void install() {
    method engineNewEncapsulator (line 89) | @Override
    method engineNewDecapsulator (line 94) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/reduce/Reducer.java
  type Reducer (line 3) | public interface Reducer {
    method reduce (line 5) | int reduce(int a) throws ReductionException;

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/reduce/ReductionException.java
  class ReductionException (line 3) | public class ReductionException extends RuntimeException {
    method ReductionException (line 4) | public ReductionException(String message) {

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/reduce/barrett/BarrettReducer.java
  class BarrettReducer (line 7) | public final class BarrettReducer implements Reducer {
    method BarrettReducer (line 14) | public BarrettReducer(ParameterSet parameterSet, int modulus, int mult...
    method calculateMultiplier (line 20) | private static int calculateMultiplier(int modulus) {
    method create (line 24) | public static BarrettReducer create(ParameterSet parameterSet) {
    method create (line 32) | public static BarrettReducer create(ParameterSet parameterSet, int mod...
    method reduce (line 40) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/sample/MLKEMSampler.java
  class MLKEMSampler (line 14) | public class MLKEMSampler implements Sampler {
    method MLKEMSampler (line 18) | public MLKEMSampler(ParameterSet parameterSet) {
    method create (line 22) | public static MLKEMSampler create(ParameterSet parameterSet) {
    method sampleNTT (line 26) | @Override
    method samplePolyCBD (line 74) | private int[] samplePolyCBD(int eta, byte[] input) {
    method samplePolyCBDEta1 (line 106) | @Override
    method samplePolyCBDEta2 (line 113) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/sample/Sampler.java
  type Sampler (line 3) | public interface Sampler {
    method sampleNTT (line 5) | int[] sampleNTT(byte[] seed, byte a, byte b);
    method samplePolyCBDEta1 (line 7) | int[] samplePolyCBDEta1(byte[] input);
    method samplePolyCBDEta2 (line 9) | int[] samplePolyCBDEta2(byte[] input);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/transform/MLKEMTransformer.java
  class MLKEMTransformer (line 11) | public class MLKEMTransformer implements Transformer {
    method MLKEMTransformer (line 94) | public MLKEMTransformer(ParameterSet parameterSet, Reducer reducer) {
    method create (line 99) | public static MLKEMTransformer create(ParameterSet parameterSet) {
    method validateInput (line 106) | private void validateInput(int[] input) {
    method transform (line 125) | @Override
    method inverse (line 159) | @Override
    method matrixMultiply (line 202) | @Override
    method matrixAdd (line 221) | @Override
    method matrixTranspose (line 240) | @Override
    method multiplyNTTs (line 257) | @Override
    method baseCaseMultiply (line 287) | @Override
    method vectorTransposeMultiply (line 306) | @Override
    method arrayAdd (line 318) | @Override
    method arraySubtract (line 327) | @Override

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/transform/Transformer.java
  type Transformer (line 3) | public interface Transformer {
    method transform (line 12) | int[] transform(int[] input);
    method inverse (line 21) | int[] inverse(int[] input);
    method matrixMultiply (line 23) | int[][] matrixMultiply(int[][][] a, int[][] b);
    method matrixAdd (line 25) | int[][] matrixAdd(int[][] a, int[][] b);
    method matrixTranspose (line 27) | int[][][] matrixTranspose(int[][][] a);
    method multiplyNTTs (line 29) | int[] multiplyNTTs(int[] fHat, int[] gHat);
    method baseCaseMultiply (line 31) | int[] baseCaseMultiply(int a0, int a1, int b0, int b1, int gamma);
    method vectorTransposeMultiply (line 33) | int[] vectorTransposeMultiply(int[][] a, int[][] b);
    method arrayAdd (line 35) | int[] arrayAdd(int[] a, int[] b);
    method arraySubtract (line 37) | int[] arraySubtract(int[] a, int[] b);

FILE: src/peergos/server/crypto/asymmetric/mlkem/fips203/transform/TransformerException.java
  class TransformerException (line 3) | public class TransformerException extends RuntimeException {
    method TransformerException (line 4) | public TransformerException(String message) {

FILE: src/peergos/server/crypto/hash/Blake3.java
  class Blake3 (line 76) | public final class Blake3 {
    class ChunkState (line 78) | private static final class ChunkState {
      method ChunkState (line 88) | private ChunkState(final int[] key, final long chunkCounter, final i...
      method length (line 94) | private int length() {
      method output (line 98) | private Output output() {
      method startFlag (line 104) | private int startFlag() {
      method update (line 108) | private void update(final byte[] input, int offset, int length) {
    class EngineState (line 131) | private static final class EngineState {
      method EngineState (line 142) | private EngineState(final int[] key, final int flags) {
      method addChunkCV (line 149) | private void addChunkCV(final int[] firstCV, final long totalChunks) {
      method inputData (line 166) | private void inputData(final byte[] in, int offset, int length) {
      method outputHash (line 186) | private void outputHash(final byte[] out, final int offset, final in...
      method popCV (line 199) | private int[] popCV() {
      method pushCV (line 203) | private void pushCV(final int[] cv) {
      method reset (line 207) | private void reset() {
    class Output (line 218) | private static final class Output {
      method Output (line 226) | private Output(final int[] inputChainingValue, final int[] blockWord...
      method chainingValue (line 234) | private int[] chainingValue() {
      method rootOutputBytes (line 238) | private void rootOutputBytes(final byte[] out, int offset, int lengt...
    method checkBufferArgs (line 292) | private static void checkBufferArgs(final byte[] buffer, final int off...
    method compress (line 306) | private static int[] compress(final int[] chainingValue, final int[] b...
    method g (line 327) | private static void g(final int[] state, final int a, final int b, fin...
    method hash (line 345) | public static byte[] hash(final byte[] data) {
    method initHash (line 354) | public static Blake3 initHash() {
    method initKeyDerivationFunction (line 367) | public static Blake3 initKeyDerivationFunction(final byte[] kdfContext) {
    method initKeyedHash (line 385) | public static Blake3 initKeyedHash(final byte[] key) {
    method keyedHash (line 401) | public static byte[] keyedHash(final byte[] key, final byte[] data) {
    method packInt (line 405) | private static void packInt(final int value, final byte[] dst, final i...
    method parentChainingValue (line 411) | private static int[] parentChainingValue(final int[] leftChildCV, fina...
    method parentOutput (line 415) | private static Output parentOutput(final int[] leftChildCV, final int[...
    method round (line 421) | private static void round(final int[] state, final int[] msg, final by...
    method unpackInt (line 435) | private static int unpackInt(final byte[] buf, final int off) {
    method unpackInts (line 439) | private static int[] unpackInts(final byte[] buf, final int nrInts) {
    method Blake3 (line 449) | private Blake3(final int[] key, final int flags) {
    method doFinalize (line 461) | public Blake3 doFinalize(final byte[] out) {
    method doFinalize (line 477) | public Blake3 doFinalize(final byte[] out, final int offset, final int...
    method doFinalize (line 490) | public byte[] doFinalize(final int nrBytes) {
    method reset (line 503) | public Blake3 reset() {
    method update (line 515) | public Blake3 update(final byte[] in) {
    method update (line 530) | public Blake3 update(final byte[] in, final int offset, final int leng...

FILE: src/peergos/server/crypto/hash/ScryptJava.java
  class ScryptJava (line 26) | public class ScryptJava implements Hasher {
    method disableLog (line 28) | public static void disableLog() {
    method hashToKeyBytes (line 33) | @Override
    method generateProofOfWork (line 59) | @Override
    method sha256 (line 82) | @Override
    method hmacSha256 (line 87) | @Override
    method blake2b (line 100) | @Override
    method hashFromStream (line 105) | @Override
    method hashChunks (line 111) | public static List<byte[]> hashChunks(InputStream fin, long size) {
    method parallelHashChunks (line 141) | public static List<byte[]> parallelHashChunks(Supplier<InputStream> fi...
    method hashFile (line 170) | public static HashTree hashFile(Path p, Hasher hasher) {

FILE: src/peergos/server/crypto/hash/lambdaworks/codec/Base64.java
  class Base64 (line 18) | public class Base64 {
    method decode (line 38) | public static byte[] decode(char[] chars) {
    method encode (line 49) | public static char[] encode(byte[] bytes) {
    method encode (line 61) | public static char[] encode(byte[] bytes, boolean padded) {
    method decode (line 75) | public static byte[] decode(char[] src, int[] table, char pad) {
    method encode (line 120) | public static char[] encode(byte[] src, char[] table, char pad) {

FILE: src/peergos/server/crypto/hash/lambdaworks/crypto/PBKDF.java
  class PBKDF (line 16) | public class PBKDF {
    method pbkdf2 (line 30) | public static byte[] pbkdf2(String alg, byte[] P, byte[] S, int c, int...
    method pbkdf2 (line 49) | public static void pbkdf2(Mac mac, byte[] S, int c, byte[] DK, int dkL...

FILE: src/peergos/server/crypto/hash/lambdaworks/crypto/SCrypt.java
  class SCrypt (line 23) | public class SCrypt {
    method scrypt (line 47) | public static byte[] scrypt(byte[] passwd, byte[] salt, int N, int r, ...
    method scryptN (line 64) | public static native byte[] scryptN(byte[] passwd, byte[] salt, int N,...
    method scryptJ (line 80) | public static byte[] scryptJ(byte[] passwd, byte[] salt, int N, int r,...
    method smix (line 107) | public static void smix(byte[] B, int Bi, int r, int N, byte[] V, byte...
    method blockmix_salsa8 (line 128) | public static void blockmix_salsa8(byte[] BY, int Bi, int Yi, int r) {
    method R (line 149) | public static int R(int a, int b) {
    method salsa20_8 (line 153) | public static void salsa20_8(byte[] B) {
    method blockxor (line 196) | public static void blockxor(byte[] S, int Si, byte[] D, int Di, int le...
    method integerify (line 202) | public static int integerify(byte[] B, int Bi, int r) {

FILE: src/peergos/server/crypto/hash/lambdaworks/crypto/SCryptUtil.java
  class SCryptUtil (line 30) | public class SCryptUtil {
    method scrypt (line 42) | public static String scrypt(String passwd, int N, int r, int p) {
    method check (line 72) | public static boolean check(String passwd, String hashed) {
    method log2 (line 104) | private static int log2(int n) {

FILE: src/peergos/server/crypto/hash/lambdaworks/jni/LibraryLoader.java
  type LibraryLoader (line 11) | public interface LibraryLoader {
    method load (line 20) | boolean load(String name, boolean verify);

FILE: src/peergos/server/crypto/hash/lambdaworks/jni/LibraryLoaders.java
  class LibraryLoaders (line 15) | public class LibraryLoaders {
    method loader (line 21) | public static LibraryLoader loader() {

FILE: src/peergos/server/crypto/hash/lambdaworks/jni/NilLibraryLoader.java
  class NilLibraryLoader (line 10) | public class NilLibraryLoader implements LibraryLoader {
    method load (line 19) | public boolean load(String name, boolean verify) {

FILE: src/peergos/server/crypto/random/SafeRandomJava.java
  class SafeRandomJava (line 6) | public class SafeRandomJava implements SafeRandom {
    method randombytes (line 8) | @Override

FILE: src/peergos/server/crypto/symmetric/Salsa20Poly1305Java.java
  class Salsa20Poly1305Java (line 6) | public class Salsa20Poly1305Java implements Salsa20Poly1305 {
    method secretbox (line 8) | @Override
    method secretbox_open (line 13) | @Override

FILE: src/peergos/server/fuse/CachingPeergosFS.java
  class CachingPeergosFS (line 22) | public class CachingPeergosFS extends PeergosFS {
    method CachingPeergosFS (line 33) | public CachingPeergosFS(UserContext userContext) {
    method CachingPeergosFS (line 37) | public CachingPeergosFS(UserContext userContext, int chunkCacheSize, i...
    method read (line 45) | @Override
    method read (line 55) | public int read(String s, Pointer pointer, int pointerOffset, @size_t ...
    method write (line 78) | @Override
    method write (line 88) | public int write(String s, Pointer pointer, int pointerOffset, @size_t...
    method lock (line 111) | @Override
    method flush (line 126) | @Override
    method annotateAttributes (line 142) | @Override
    method containedInOneChunk (line 163) | private boolean containedInOneChunk(long start, long end) {
    method alignToChunkSize (line 167) | private long alignToChunkSize(long pos) {
    method intraChunkOffset (line 170) | private int intraChunkOffset(long  pos) {
    class CacheEntryHolder (line 174) | private class CacheEntryHolder {
      method CacheEntryHolder (line 177) | public CacheEntryHolder(CacheEntry entry) {
      method apply (line 181) | public synchronized <A> A apply(Predicate<CacheEntry> correctChunk, ...
      method applyIfPresent (line 192) | public synchronized <A> Optional<A> applyIfPresent(Function<CacheEnt...
      method setEntry (line 199) | public synchronized void setEntry(CacheEntry entry) {
      method sync (line 203) | public synchronized void sync() {
      method syncAndClear (line 211) | public synchronized void syncAndClear() {
    class CacheEntry (line 221) | private class CacheEntry {
      method CacheEntry (line 227) | public CacheEntry(String path, long offset) {
      method ensureInBounds (line 240) | private void ensureInBounds(int offset, int length) {
      method read (line 245) | public int read(Pointer pointer, int pointerOffset, int chunkOffset,...
      method write (line 251) | public int write(Pointer pointer, int pointerOffset, int chunkOffset...
      method sync (line 258) | public void sync() {
      method equals (line 269) | @Override
      method hashCode (line 280) | @Override
    method close (line 286) | @Override

FILE: src/peergos/server/fuse/FuseProcess.java
  class FuseProcess (line 7) | public class FuseProcess implements Runnable, AutoCloseable {
    method FuseProcess (line 16) | public FuseProcess(PeergosFS peergosFS, Path mountPoint) {
    method run (line 21) | @Override
    method start (line 33) | public void start() {
    method close (line 47) | public void close() {
    method ensureNotFinished (line 65) | private void ensureNotFinished() {

FILE: src/peergos/server/fuse/PeergosFS.java
  class PeergosFS (line 30) | public class PeergosFS extends FuseStubFS implements AutoCloseable {
    class PeergosStat (line 33) | protected static class PeergosStat {
      method PeergosStat (line 37) | public PeergosStat(FileWrapper treeNode, FileProperties properties) {
    method PeergosFS (line 47) | public PeergosFS(UserContext context) {
    method close (line 51) | @Override
    method ensureNotClosed (line 57) | private void ensureNotClosed() {
    method annotateAttributes (line 62) | protected int annotateAttributes(String fullPath, PeergosStat peergosS...
    method getattr (line 90) | @Override
    method readlink (line 98) | @Override
    method mknod (line 103) | @Override
    method mkdir (line 108) | private Optional<FileWrapper> mkdir(String name, FileWrapper node)  {
    method mkdir (line 117) | @Override
    method unlink (line 137) | @Override
    method rmdir (line 158) | @Override
    method symlink (line 165) | @Override
    method rename (line 170) | private int rename(PeergosStat source, PeergosStat sourceParent, Strin...
    method rename (line 197) | @Override
    method link (line 204) | @Override
    method chmod (line 209) | @Override
    method chown (line 214) | @Override
    method truncate (line 219) | @Override
    method open (line 226) | @Override
    method read (line 233) | @Override
    method write (line 240) | @Override
    method statfs (line 250) | @Override
    method flush (line 270) | @Override
    method removexattr (line 301) | @Override
    method opendir (line 306) | @Override
    method readdir (line 312) | @Override
    method releasedir (line 318) | @Override
    method fsyncdir (line 324) | @Override
    method init (line 330) | @Override
    method destroy (line 336) | @Override
    method access (line 341) | @Override
    method create (line 348) | @Override
    method ftruncate (line 360) | @Override
    method fgetattr (line 368) | @Override
    method lock (line 374) | @Override
    method utimens (line 382) | public int utimens(String s, Timespec[] timespecs) {
    method bmap (line 419) | @Override
    method ioctl (line 424) | @Override
    method poll (line 429) | @Override
    method flock (line 445) | @Override
    method fallocate (line 450) | @Override
    method unimp (line 455) | private int unimp() {
    method getByPath (line 461) | protected Optional<PeergosStat> getByPath(String path) {
    method getParentByPath (line 476) | private Optional<PeergosStat> getParentByPath(String  path) {
    method applyIf (line 481) | protected int applyIf(String path, boolean isPresent, Function<Peergos...
    method applyIfPresent (line 488) | protected int applyIfPresent(String path, Function<PeergosStat,  Integ...
    method applyIfPresent (line 493) | protected int applyIfPresent(String path, Function<PeergosStat,  Integ...
    method applyIfBothPresent (line 498) | private int applyIfBothPresent(String parentPath, String filePath, BiF...
    method rmdir (line 503) | private int rmdir(PeergosStat stat, Path dir, PeergosStat parentStat) {
    method readdir (line 514) | private int readdir(PeergosStat stat, FuseFillDir fuseFillDir, Pointer...
    method read (line 527) | protected Optional<byte[]> read(PeergosStat stat, long requestedSize, ...
    method read (line 558) | public int read(PeergosStat stat, Pointer pointer, long requestedSize,...
    method getData (line 571) | private byte[] getData(Pointer pointer, int size) {
    method truncate (line 581) | public int truncate(PeergosStat parent, PeergosStat file, long size) {
    method write (line 610) | public int write(PeergosStat parent, String name, byte[] toWrite, long...
    method write (line 630) | public int write(PeergosStat parent, String name, Pointer pointer, lon...
    method debug (line 638) | private void debug(String template, Object... obj) {

FILE: src/peergos/server/login/AccountWithStorage.java
  class AccountWithStorage (line 16) | public class AccountWithStorage implements Account {
    method AccountWithStorage (line 22) | public AccountWithStorage(ContentAddressedStorage storage, MutablePoin...
    method setLoginData (line 28) | @Override
    method getLoginData (line 42) | @Override
    method getSecondAuthMethods (line 53) | @Override
    method enableTotpFactor (line 58) | @Override
    method registerSecurityKeyStart (line 63) | @Override
    method registerSecurityKeyComplete (line 68) | @Override
    method deleteSecondFactor (line 74) | @Override
    method addTotpFactor (line 79) | @Override

FILE: src/peergos/server/login/JdbcAccount.java
  class JdbcAccount (line 25) | public class JdbcAccount implements LoginCache {
    method JdbcAccount (line 53) | public JdbcAccount(Supplier<Connection> conn, SqlSupplier commands, Or...
    method getConnection (line 60) | private Connection getConnection() {
    method init (line 71) | private synchronized void init(SqlSupplier commands) {
    method hasEntry (line 84) | private boolean hasEntry(String username) {
    method setLoginData (line 100) | public CompletableFuture<Boolean> setLoginData(LoginData login) {
    method removeLoginData (line 130) | @Override
    method getType (line 143) | private MultiFactorAuthMethod.Type getType(String username, byte[] cre...
    method getEntryData (line 159) | public CompletableFuture<Either<UserStaticData, MultiFactorAuthRequest...
    method getEntryData (line 192) | public CompletableFuture<UserStaticData> getEntryData(String username,...
    method getLoginData (line 209) | public Optional<LoginData> getLoginData(String username) {
    method getSecondAuthMethods (line 227) | public CompletableFuture<List<MultiFactorAuthMethod>> getSecondAuthMet...
    method updateMFA (line 253) | public void updateMFA(String username, byte[] credentialId, byte[] val...
    method addTotpFactor (line 266) | public CompletableFuture<TotpKey> addTotpFactor(String username) {
    method getMfa (line 288) | private byte[] getMfa(String username, byte[] credentialId) {
    method validateTotpCode (line 304) | private void validateTotpCode(String username, byte[] credentialId, St...
    method enableTotpFactor (line 323) | public CompletableFuture<Boolean> enableTotpFactor(String username, by...
    method registerSecurityKeyStart (line 346) | public byte[] registerSecurityKeyStart(String username) {
    method createChallenge (line 353) | private byte[] createChallenge(String username) {
    method hasChallenge (line 369) | private boolean hasChallenge(String username) {
    method getChallenge (line 385) | private byte[] getChallenge(String username) {
    method registerSecurityKeyComplete (line 401) | public void registerSecurityKeyComplete(String username, String keyNam...
    method deleteMfa (line 427) | public CompletableFuture<Boolean> deleteMfa(String username, byte[] cr...
    method close (line 441) | public synchronized void close() {

FILE: src/peergos/server/login/LocalOnlyAccount.java
  class LocalOnlyAccount (line 25) | public class LocalOnlyAccount implements Account {
    method LocalOnlyAccount (line 31) | public LocalOnlyAccount(Account target, QuotaAdmin quotas, boolean all...
    method setLoginData (line 37) | @Override
    method hasQuota (line 42) | private boolean hasQuota(String username) {
    method getLoginData (line 50) | @Override
    method getSecondAuthMethods (line 66) | @Override
    method addTotpFactor (line 71) | @Override
    method enableTotpFactor (line 76) | @Override
    method registerSecurityKeyStart (line 81) | @Override
    method registerSecurityKeyComplete (line 86) | @Override
    method deleteSecondFactor (line 91) | @Override

FILE: src/peergos/server/login/NonWriteThroughAccount.java
  class NonWriteThroughAccount (line 11) | public class NonWriteThroughAccount implements Account {
    method NonWriteThroughAccount (line 16) | public NonWriteThroughAccount(Account source) {
    method setLoginData (line 21) | @Override
    method getLoginData (line 27) | @Override
    method getSecondAuthMethods (line 41) | @Override
    method enableTotpFactor (line 46) | @Override
    method registerSecurityKeyStart (line 51) | @Override
    method registerSecurityKeyComplete (line 56) | @Override
    method deleteSecondFactor (line 61) | @Override
    method addTotpFactor (line 66) | @Override

FILE: src/peergos/server/login/VerifyingAccount.java
  class VerifyingAccount (line 15) | public class VerifyingAccount implements Account {
    method VerifyingAccount (line 21) | public VerifyingAccount(Account target, CoreNode core, ContentAddresse...
    method setLoginData (line 27) | @Override
    method getLoginData (line 35) | @Override
    method getSecondAuthMethods (line 49) | @Override
    method addTotpFactor (line 56) | @Override
    method enableTotpFactor (line 63) | @Override
    method registerSecurityKeyStart (line 70) | @Override
    method registerSecurityKeyComplete (line 77) | @Override
    method deleteSecondFactor (line 84) | @Override

FILE: src/peergos/server/login/Webauthn.java
  class Webauthn (line 21) | public class Webauthn {
    class Verifier (line 23) | public static class Verifier implements Authenticator, Cborable {
      method Verifier (line 29) | public Verifier(AttestedCredentialData credData, AttestationStatemen...
      method getAttestedCredentialData (line 37) | @Override
      method getCounter (line 42) | @Override
      method setCounter (line 47) | @Override
      method toCbor (line 52) | @Override
      method fromCbor (line 62) | public static Verifier fromCbor(Cborable cbor) {
      method fromLegacyCbor (line 84) | public static Verifier fromLegacyCbor(Cborable cbor) {
    method validateRegistration (line 117) | public static Verifier validateRegistration(WebAuthnManager webAuthnMa...
    method validateLogin (line 156) | public static long validateLogin(WebAuthnManager webAuthnManager,

FILE: src/peergos/server/messages/ServerMessageStore.java
  class ServerMessageStore (line 21) | public class ServerMessageStore implements ServerMessager {
    method ServerMessageStore (line 38) | public ServerMessageStore(Supplier<Connection> conn, SqlSupplier comma...
    method getConnection (line 46) | private Connection getConnection() {
    method init (line 57) | private synchronized void init(SqlSupplier commands) {
    method getMessages (line 68) | @Override
    method sendMessage (line 80) | @Override
    method getMessagesAfter (line 107) | public List<Pair<String, ServerMessage>> getMessagesAfter(LocalDateTim...
    method getMessages (line 129) | public List<ServerMessage> getMessages(String username) {
    method recentMessages (line 150) | public long recentMessages(String username) {
    method addMessage (line 165) | public void addMessage(String username, ServerMessage message) {
    method dismissMessage (line 181) | public void dismissMessage(String username, ServerMessage message) {
    method close (line 194) | public synchronized void close() {

FILE: src/peergos/server/mutable/BlockingMutablePointers.java
  class BlockingMutablePointers (line 10) | public class BlockingMutablePointers implements MutablePointers {
    method BlockingMutablePointers (line 14) | public BlockingMutablePointers(MutablePointers source, PublicKeyBlackL...
    method setPointer (line 19) | @Override
    method setPointers (line 28) | @Override
    method getPointer (line 40) | @Override
    method clearCache (line 49) | @Override

FILE: src/peergos/server/mutable/JdbcPointerCache.java
  class JdbcPointerCache (line 12) | public class JdbcPointerCache implements PointerCache {
    method JdbcPointerCache (line 17) | public JdbcPointerCache(JdbcIpnsAndSocial store, ContentAddressedStora...
    method put (line 22) | @Override
    method get (line 34) | @Override

FILE: src/peergos/server/mutable/MutableEvent.java
  class MutableEvent (line 8) | public class MutableEvent {
    method MutableEvent (line 14) | public MutableEvent(PublicKeyHash owner, PublicKeyHash writer, byte[] ...

FILE: src/peergos/server/mutable/MutableEventPropagator.java
  class MutableEventPropagator (line 10) | public class MutableEventPropagator implements MutablePointers {
    method MutableEventPropagator (line 15) | public MutableEventPropagator(MutablePointers target) {
    method addListener (line 19) | public void addListener(Consumer<? super MutableEvent> listener) {
    method setPointer (line 23) | @Override
    method setPointers (line 37) | @Override
    method getPointer (line 53) | @Override
    method clearCache (line 58) | @Override

FILE: src/peergos/server/mutable/NonWriteThroughMutablePointers.java
  class NonWriteThroughMutablePointers (line 13) | public class NonWriteThroughMutablePointers implements MutablePointers {
    method NonWriteThroughMutablePointers (line 19) | public NonWriteThroughMutablePointers(MutablePointers source, ContentA...
    method setPointer (line 25) | @Override
    method getPointer (line 45) | @Override
    method setPointers (line 56) | @Override
    method clearCache (line 77) | @Override

FILE: src/peergos/server/mutable/PublicKeyBlackList.java
  type PublicKeyBlackList (line 5) | public interface PublicKeyBlackList {
    method isAllowed (line 7) | boolean isAllowed(PublicKeyHash keyHash);

FILE: src/peergos/server/mutable/UserBasedBlacklist.java
  class UserBasedBlacklist (line 20) | public class UserBasedBlacklist implements PublicKeyBlackList {
    method UserBasedBlacklist (line 34) | public UserBasedBlacklist(Path source,
    method updateBlackList (line 58) | private void updateBlackList() {
    method readUsernamesFromFile (line 76) | private Set<String> readUsernamesFromFile() {
    method buildBlackList (line 89) | private Set<PublicKeyHash> buildBlackList(Set<String> usernames) {
    method isAllowed (line 100) | @Override

FILE: src/peergos/server/net/AccountHandler.java
  class AccountHandler (line 21) | public class AccountHandler implements HttpHandler {
    method AccountHandler (line 26) | public AccountHandler(Account account, boolean isPublicServer) {
    method handle (line 31) | public void handle(HttpExchange exchange) throws IOException {

FILE: src/peergos/server/net/AndroidFileReflector.java
  class AndroidFileReflector (line 33) | public class AndroidFileReflector implements HttpHandler {
    method AndroidFileReflector (line 43) | public AndroidFileReflector(Crypto crypto, CoreNode core, MutablePoint...
    method handle (line 50) | @Override
    method writeDirToZip (line 126) | private void writeDirToZip(FileWrapper dir, ZipOutputStream zout, Netw...
    method writeFileToZip (line 142) | private void writeFileToZip(FileWrapper f, Path ourZipPath, ZipOutputS...

FILE: src/peergos/server/net/BasicAuthHandler.java
  class BasicAuthHandler (line 8) | public class BasicAuthHandler implements HttpHandler
    method BasicAuthHandler (line 13) | public BasicAuthHandler(String auth, HttpHandler delegate) {
    method isAuthenticated (line 20) | private boolean isAuthenticated(HttpExchange exchange) {
    method handle (line 28) | @Override

FILE: src/peergos/server/net/BatCaveHandler.java
  class BatCaveHandler (line 20) | public class BatCaveHandler implements HttpHandler {
    method BatCaveHandler (line 27) | public BatCaveHandler(BatCave bats, CoreNode pki, ContentAddressedStor...
    method handle (line 34) | public void handle(HttpExchange exchange) throws IOException {

FILE: src/peergos/server/net/ConfigHandler.java
  class ConfigHandler (line 28) | public class ConfigHandler implements HttpHandler {
    method ConfigHandler (line 37) | public ConfigHandler(BlockCache cache, Optional<UserService.LocalAppPr...
    method isLoopbackHost (line 42) | private static boolean isLoopbackHost(String host) {
    method validateServerUrl (line 50) | private static String validateServerUrl(String serverUrl) {
    method readConfig (line 71) | private synchronized Map<String, String> readConfig(Path configFile) t...
    method writeConfig (line 93) | private synchronized void writeConfig(Path configFile, Map<String, Str...
    method getConfiguredServerUrl (line 102) | private synchronized Optional<String> getConfiguredServerUrl(Path conf...
    method saveServerUrl (line 109) | private synchronized void saveServerUrl(Path configFile, String server...
    method replyJson (line 121) | private static void replyJson(HttpExchange exchange, Object payload) t...
    method handle (line 130) | @Override

FILE: src/peergos/server/net/CoreNodeHandler.java
  class CoreNodeHandler (line 25) | public class CoreNodeHandler implements HttpHandler
    method CoreNodeHandler (line 32) | public CoreNodeHandler(CoreNode coreNode, boolean isPublicServer) {
    method handle (line 37) | public void handle(HttpExchange exchange)
    method getChain (line 132) | void getChain(DataInputStream din, DataOutputStream dout) throws Excep...
    method signup (line 140) | void signup(DataInputStream din, DataOutputStream dout) throws Exception
    method startPaidSignup (line 154) | void startPaidSignup(DataInputStream din, DataOutputStream dout, HttpE...
    method completePaidSignup (line 167) | void completePaidSignup(DataInputStream din, DataOutputStream dout) th...
    method mirror (line 179) | void mirror(DataInputStream din, DataOutputStream dout) throws Exception
    method startPaidMirror (line 190) | void startPaidMirror(DataInputStream din, DataOutputStream dout, HttpE...
    method completePaidMirror (line 203) | void completePaidMirror(DataInputStream din, DataOutputStream dout) th...
    method getUserSnapshots (line 214) | void getUserSnapshots(DataInputStream din, DataOutputStream dout) thro...
    method updateChain (line 224) | void updateChain(DataInputStream din, DataOutputStream dout) throws Ex...
    method migrateUser (line 237) | void migrateUser(DataInputStream din, DataOutputStream dout) throws Ex...
    method getPublicKey (line 254) | void getPublicKey(DataInputStream din, DataOutputStream dout) throws E...
    method getUsername (line 266) | void getUsername(DataInputStream din, DataOutputStream dout) throws Ex...
    method getAllUsernamesGzip (line 276) | void getAllUs
Condensed preview — 1087 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,377K chars).
[
  {
    "path": ".gitattributes",
    "chars": 213,
    "preview": "ui/doppio/** linguist-vendored\nui/javapoly/** linguist-vendored\nui/browserfs/** linguist-vendored\nui/scripts/jquery*.js "
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 637,
    "preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
  },
  {
    "path": ".github/workflows/ant.yml",
    "chars": 769,
    "preview": "name: Java CI\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matr"
  },
  {
    "path": ".gitignore",
    "chars": 208,
    "preview": "build/*\nlog/*\ndist/*\nout/*\nlog/*\n.idea/*\ngwt-unitCache/*\nwar/*\n*.iml\n*.hprof\n*hs_err_pid*\n*~\npeergos/crypto/RootCertific"
  },
  {
    "path": ".travis.yml",
    "chars": 523,
    "preview": "language: java\njdk:\n  - oraclejdk8\n\nafter_failure:\n  - cat TEST-*.txt\n\nnotifications:\n  email:\n    - christoph.boddy@gma"
  },
  {
    "path": "Licence.txt",
    "chars": 34520,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "PrintTestErrors.java",
    "chars": 1321,
    "preview": "import java.io.*;\nimport java.nio.file.*;\nimport java.util.*;\nimport java.util.stream.*;\n\n/** Parse junit log files and "
  },
  {
    "path": "README.md",
    "chars": 24510,
    "preview": "<img src=\"https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:OpenSourceProjects_Peergos_Build)/statusIcon\"></a"
  },
  {
    "path": "ReproducibleJar.java",
    "chars": 1765,
    "preview": "import java.io.*;\nimport java.net.*;\nimport java.nio.file.*;\nimport java.nio.file.attribute.*;\nimport java.util.*;\nimpor"
  },
  {
    "path": "RoadMap.md",
    "chars": 2322,
    "preview": "![Peergos Logo](https://peergos.org/theme/img/peergos/logo-main.svg)\n\nPeergos Road Map\n========\n\n\nCentralized Alpha\n----"
  },
  {
    "path": "build.xml",
    "chars": 8892,
    "preview": "<project name=\"Peergos\" default=\"dist\" basedir=\".\">\n  <description>\n    Building Peergos\n  </description>\n\n  <!-- Need t"
  },
  {
    "path": "feedback/notes.md",
    "chars": 2545,
    "preview": "# Design patterns for the Dweb\n\nUser testing 2019-06-29\n\n## Who was there?\n\n* Ramine Daribiha (shokunin)\n* Victor Rortve"
  },
  {
    "path": "gwt/BUILD-GWT.txt",
    "chars": 234,
    "preview": "Built using the instructions on: http://www.gwtproject.org/makinggwtbetter.html#compiling\nbuilt from githash c5fd90c6d 6"
  },
  {
    "path": "gwt/gwt-2.8.3/COPYING",
    "chars": 12371,
    "preview": "           GWT LICENSE INFORMATION\n\nMarch 3, 2008\n\nThe GWT software and sample code developed by the GWT authors is\nlice"
  },
  {
    "path": "gwt/gwt-2.8.3/COPYING.html",
    "chars": 15678,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
  },
  {
    "path": "gwt/gwt-2.8.3/about.html",
    "chars": 3332,
    "preview": "<html>\n\n   <head>\n      <title>Google Web Toolkit 2.8.3</title>\n      <style>\n         body {\n            background-col"
  },
  {
    "path": "gwt/gwt-2.8.3/about.txt",
    "chars": 1132,
    "preview": "GWT 2.8.3\n(git revision 0d0b5d352)\nCopyright (c) Google, Inc. 2009.  All rights reserved.\nVisit http://www.gwtproject.or"
  },
  {
    "path": "gwt/gwt-2.8.3/gwt-module.dtd",
    "chars": 7293,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--                                                                        -->\n<"
  },
  {
    "path": "gwt/gwt-2.8.3/i18nCreator",
    "chars": 128,
    "preview": "#!/bin/sh\nHOMEDIR=`dirname $0`;\njava -cp $HOMEDIR/gwt-user.jar:$HOMEDIR/gwt-dev.jar com.google.gwt.i18n.tools.I18NCreato"
  },
  {
    "path": "gwt/gwt-2.8.3/i18nCreator.cmd",
    "chars": 90,
    "preview": "@java -cp \"%~dp0\\gwt-user.jar;%~dp0\\gwt-dev.jar\" com.google.gwt.i18n.tools.I18NCreator %*\n"
  },
  {
    "path": "gwt/gwt-2.8.3/release_notes.html",
    "chars": 858,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmln"
  },
  {
    "path": "gwt/gwt-2.8.3/webAppCreator",
    "chars": 130,
    "preview": "#!/bin/sh\nHOMEDIR=`dirname $0`;\njava -cp $HOMEDIR/gwt-user.jar:$HOMEDIR/gwt-dev.jar com.google.gwt.user.tools.WebAppCrea"
  },
  {
    "path": "gwt/gwt-2.8.3/webAppCreator.cmd",
    "chars": 92,
    "preview": "@java -cp \"%~dp0\\gwt-user.jar;%~dp0\\gwt-dev.jar\" com.google.gwt.user.tools.WebAppCreator %*\n"
  },
  {
    "path": "reproducible-test.sh",
    "chars": 154,
    "preview": "#!/bin/bash\n\nant dist\nhash1=`sha256sum Peergos.jar`\nant dist\nhash2=`sha256sum Peergos.jar`\nif [[ $hash1 == $hash2 ]];\nth"
  },
  {
    "path": "scripts/ensure-compile.sh",
    "chars": 384,
    "preview": "#!/bin/bash\n\n##\n## To set this as the pre-commit hook do:\n##\n## ln -s $(git rev-parse --show-toplevel)/scripts/ensure-co"
  },
  {
    "path": "src/peergos/Peergos.gwt.xml",
    "chars": 420,
    "preview": "<module rename-to='peergoslib'>\n\n  <set-property name=\"compiler.useSourceMaps\" value=\"false\"/>\n  <set-property name=\"use"
  },
  {
    "path": "src/peergos/client/ConsolePrintStream.java",
    "chars": 1646,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/client/JsUtil.java",
    "chars": 2074,
    "preview": "package peergos.client;\n\nimport jsinterop.annotations.*;\nimport peergos.shared.cbor.CborObject;\nimport peergos.shared.lo"
  },
  {
    "path": "src/peergos/client/PathUtils.java",
    "chars": 1811,
    "preview": "package peergos.client;\n\nimport jsinterop.annotations.JsMethod;\n\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n"
  },
  {
    "path": "src/peergos/client/Start.java",
    "chars": 236,
    "preview": "package peergos.client;\n\nimport com.google.gwt.core.client.EntryPoint;\n\npublic class Start implements EntryPoint {\n\tpubl"
  },
  {
    "path": "src/peergos/gwt/emu/avian/Utf8.java",
    "chars": 3120,
    "preview": "/* Copyright (c) 2010, Avian Contributors\r\n\r\n   Permission to use, copy, modify, and/or distribute this software\r\n   for"
  },
  {
    "path": "src/peergos/gwt/emu/com/badlogic/gdx/utils/Base64Coder.java",
    "chars": 12315,
    "preview": "//Copyright 2003-2010 Christian d'Heureuse, Inventec Informatik AG, Zurich, Switzerland\r\n// www.source-code.biz, www.inv"
  },
  {
    "path": "src/peergos/gwt/emu/com/badlogic/gdx/utils/Utf8Decoder.java",
    "chars": 5656,
    "preview": "/*******************************************************************************\n * Copyright 2015 See AUTHORS file.\n * "
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/AlphaComposite.java",
    "chars": 235,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class AlphaComposite extends Object implements "
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/Composite.java",
    "chars": 97,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic interface Composite {\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/Graphics2D.java",
    "chars": 452,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class Graphics2D {\n\n    public void setComposit"
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/Image.java",
    "chars": 206,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class Image {\n    public static final int TYPE_"
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/ImageObserver.java",
    "chars": 97,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class ImageObserver {\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/RenderingHints.java",
    "chars": 469,
    "preview": "package java.awt;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class RenderingHints {\n    public static class "
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/image/BufferedImage.java",
    "chars": 580,
    "preview": "package java.awt.image;\n\nimport java.awt.*;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic class BufferedImage e"
  },
  {
    "path": "src/peergos/gwt/emu/java/awt/image/RenderedImage.java",
    "chars": 107,
    "preview": "package java.awt.image;\n\n/*\n*  Dummy implementation - does nothing\n* */\npublic interface RenderedImage {\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/BufferedReader.java",
    "chars": 2396,
    "preview": "/* Copyright (c) 2008, Avian Contributors\r\n\r\n   Permission to use, copy, modify, and/or distribute this software\r\n   for"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/ByteArrayInputStream.java",
    "chars": 2423,
    "preview": "/*******************************************************************************\n * Copyright 2011 See AUTHORS file.\n * "
  },
  {
    "path": "src/peergos/gwt/emu/java/io/ByteArrayOutputStream.java",
    "chars": 2387,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/Closeable.java",
    "chars": 1446,
    "preview": "/** Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTI"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/DataInput.java",
    "chars": 735,
    "preview": "package java.io;\n\npublic interface DataInput {\n\n    void readFully(byte b[]) throws IOException;\n\n    void readFully(byt"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/DataInputStream.java",
    "chars": 3594,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/DataOutput.java",
    "chars": 1416,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/DataOutputStream.java",
    "chars": 2491,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/EOFException.java",
    "chars": 664,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/File.java",
    "chars": 6014,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/FileInputStream.java",
    "chars": 878,
    "preview": "package java.io;\n\npublic class FileInputStream extends InputStream{\n\tprotected InputStream in;\n\n\tpublic FileInputStream "
  },
  {
    "path": "src/peergos/gwt/emu/java/io/FileNotFoundException.java",
    "chars": 781,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/FilenameFilter.java",
    "chars": 692,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/Flushable.java",
    "chars": 1220,
    "preview": "/** Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTIC"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/InputStreamReader.java",
    "chars": 1193,
    "preview": "/* Copyright (c) 2008-2010, Avian Contributors\n\n   Permission to use, copy, modify, and/or distribute this software\n   f"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/OutputStreamWriter.java",
    "chars": 910,
    "preview": "/* Copyright (c) 2008-2010, Avian Contributors\r\n\r\n   Permission to use, copy, modify, and/or distribute this software\r\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/io/PrintWriter.java",
    "chars": 474,
    "preview": "package java.io;\n\npublic class PrintWriter extends Writer{\n\n\tpublic PrintWriter() {\n\t}\n\t\n\tpublic PrintWriter(int initial"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/PushbackInputStream.java",
    "chars": 11871,
    "preview": "package java.io;\n\n/* PushbackInputStream.java -- An input stream that can unread bytes\n    Copyright (C) 1998, 1999, 200"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/RandomAccessFile.java",
    "chars": 1479,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/Reader.java",
    "chars": 2937,
    "preview": "/*\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/UTFDataFormatException.java",
    "chars": 788,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/UnsupportedEncodingException.java",
    "chars": 801,
    "preview": "/*\n * Copyright 2010 Google Inc.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * u"
  },
  {
    "path": "src/peergos/gwt/emu/java/io/Writer.java",
    "chars": 7636,
    "preview": "/**\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the "
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/AutoCloseable.java",
    "chars": 87,
    "preview": "package java.lang;\n\npublic interface AutoCloseable {\n\tvoid close() throws Exception;\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/ClassLoader.java",
    "chars": 304,
    "preview": "package java.lang;\n\nimport java.io.InputStream;\nimport java.net.URL;\n\npublic class ClassLoader {\n\n\tpublic static ClassLo"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/ClassNotFoundException.java",
    "chars": 3332,
    "preview": "/*\r\n * @(#)ClassNotFoundException.java\t1.20 04/02/19\r\n *\r\n * Copyright 2004 Sun Microsystems, Inc. All rights reserved.\r"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/Exception.java",
    "chars": 1354,
    "preview": "/*\n * Copyright 2007 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/InternalError.java",
    "chars": 1938,
    "preview": "/*\n    * Copyright (c) 1994, 2008, Oracle and/or its affiliates. All rights reserved.\n    * DO NOT ALTER OR REMOVE COPYR"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/InterruptedException.java",
    "chars": 751,
    "preview": "/* Copyright (c) 2008, Avian Contributors\r\n\r\n   Permission to use, copy, modify, and/or distribute this software\r\n   for"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/OutOfMemoryError.java",
    "chars": 157,
    "preview": "package java.lang;\n\npublic class OutOfMemoryError extends Error {\n\n\tpublic OutOfMemoryError() {}\n\n\tpublic OutOfMemoryErr"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/Readable.java",
    "chars": 935,
    "preview": "/*******************************************************************************\r\n * Copyright 2011 See AUTHORS file.\r\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/Runnable.java",
    "chars": 134,
    "preview": "package java.lang;\n\nimport jsinterop.annotations.*;\n\n@FunctionalInterface\npublic interface Runnable {\n\n    @JsMethod\n   "
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/RuntimeException.java",
    "chars": 1417,
    "preview": "/*\n * Copyright 2007 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/SecurityException.java",
    "chars": 743,
    "preview": "/* Copyright (c) 2008, Avian Contributors\r\n\r\n   Permission to use, copy, modify, and/or distribute this software\r\n   for"
  },
  {
    "path": "src/peergos/gwt/emu/java/lang/Thread.java",
    "chars": 1774,
    "preview": "/*******************************************************************************\r\n * Copyright 2011 See AUTHORS file.\r\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/net/ConnectException.java",
    "chars": 255,
    "preview": "package java.net;\n\nimport jsinterop.annotations.*;\n\npublic class ConnectException extends SocketException {\n\n    public "
  },
  {
    "path": "src/peergos/gwt/emu/java/net/HttpURLConnection.java",
    "chars": 768,
    "preview": "package java.net;\n\npublic class HttpURLConnection extends URLConnection{\n\n\tpublic static final int HTTP_OK = 200;\n\tpubli"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/Inet4Address.java",
    "chars": 69,
    "preview": "package java.net;\n\npublic class Inet4Address extends InetAddress{\n\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/Inet6Address.java",
    "chars": 69,
    "preview": "package java.net;\n\npublic class Inet6Address extends InetAddress{\n\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/InetAddress.java",
    "chars": 442,
    "preview": "package java.net;\n\npublic class InetAddress {\n\n\tpublic static InetAddress getByName(String host)\n\t        throws Unknown"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/MalformedURLException.java",
    "chars": 225,
    "preview": "package java.net;\n\nimport java.io.IOException;\n\npublic class MalformedURLException extends IOException {\n\n    public Mal"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/ProtocolException.java",
    "chars": 211,
    "preview": "package java.net;\n\nimport java.io.IOException;\n\npublic class ProtocolException extends IOException{\n    public ProtocolE"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/Proxy.java",
    "chars": 136,
    "preview": "package java.net;\n\npublic class Proxy {\n    public enum Type {DIRECT, HTTP, SOCKS}\n\n    public Proxy(Type type, SocketAd"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/SocketAddress.java",
    "chars": 52,
    "preview": "package java.net;\n\npublic class SocketAddress {\n\t\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/SocketException.java",
    "chars": 207,
    "preview": "package java.net;\n\nimport java.io.IOException;\n\npublic class SocketException extends IOException{\n\t\n    public SocketExc"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/SocketTimeoutException.java",
    "chars": 99,
    "preview": "package java.net;\n\nimport java.io.*;\n\npublic class SocketTimeoutException extends IOException {\n\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/URL.java",
    "chars": 678,
    "preview": "package java.net;\n\nimport java.io.InputStream;\n\n\npublic class URL {\n\n\tpublic URL(String protocol, String host, int port,"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/URLConnection.java",
    "chars": 668,
    "preview": "package java.net;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/URLEncoder.java",
    "chars": 4962,
    "preview": "/*\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the N"
  },
  {
    "path": "src/peergos/gwt/emu/java/net/UnknownHostException.java",
    "chars": 221,
    "preview": "package java.net;\n\nimport java.io.IOException;\n\npublic class UnknownHostException extends IOException{\n\n    public Unkno"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/Buffer.java",
    "chars": 7808,
    "preview": "/* Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/BufferOverflowException.java",
    "chars": 1274,
    "preview": "/* Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/CharBuffer.java",
    "chars": 3800,
    "preview": "/*\n *  Licensed to the Apache Software Foundation (ASF) under one or more\n *  contributor license agreements.  See the N"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/InvalidMarkException.java",
    "chars": 1243,
    "preview": "/* Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/Files.java",
    "chars": 355,
    "preview": "package java.nio.file;\n\nimport java.io.IOException;\nimport java.nio.file.attribute.FileAttribute;\nimport java.util.strea"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/OpenOption.java",
    "chars": 56,
    "preview": "package java.nio.file;\n\npublic interface OpenOption {\n\n}"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/Path.java",
    "chars": 3915,
    "preview": "package java.nio.file;\n\nimport java.io.File;\nimport java.util.*;\nimport java.util.stream.*;\n\npublic class Path {\n\n    pr"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/Paths.java",
    "chars": 837,
    "preview": "package java.nio.file;\n\n\nimport jsinterop.annotations.*;\n\nimport java.util.*;\nimport java.util.stream.*;\n\npublic class P"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/StandardOpenOption.java",
    "chars": 190,
    "preview": "package java.nio.file;\n\npublic enum StandardOpenOption implements OpenOption {\n    READ, WRITE, APPEND,\n    TRUNCATE_EXI"
  },
  {
    "path": "src/peergos/gwt/emu/java/nio/file/attribute/FileAttribute.java",
    "chars": 105,
    "preview": "package java.nio.file.attribute;\n\npublic interface FileAttribute<T> {\n    String name();\n    T value();\n}"
  },
  {
    "path": "src/peergos/gwt/emu/java/security/SecureRandom.java",
    "chars": 203,
    "preview": "package java.security;\n\npublic class SecureRandom extends java.util.Random{\n\n\tpublic SecureRandom()\n\t{\n\t\t\n\t}\n\t\n    publi"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/Clock.java",
    "chars": 405,
    "preview": "package java.time;\n\n\npublic class Clock {\n\n\tprivate final ZoneId zone = new ZoneId();\n\t\n    Clock() {\n    }\n    public Z"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/DateTimeException.java",
    "chars": 260,
    "preview": "package java.time;\n\npublic class DateTimeException extends RuntimeException {\n\n    public DateTimeException(String messa"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/Instant.java",
    "chars": 1263,
    "preview": "package java.time;\n\npublic class Instant {\n\n    public static final Instant EPOCH = new Instant(0, 0);\n\n    private stat"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/LocalDate.java",
    "chars": 7843,
    "preview": "package java.time;\n\nimport jsinterop.annotations.JsType;\n\nimport java.time.chrono.ChronoLocalDate;\nimport java.time.chro"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/LocalDateTime.java",
    "chars": 3899,
    "preview": "package java.time;\n\nimport jsinterop.annotations.*;\n\nimport java.time.chrono.ChronoLocalDateTime;\nimport java.time.forma"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/LocalTime.java",
    "chars": 4409,
    "preview": "package java.time;\n\nimport jsinterop.annotations.JsType;\n\n@SuppressWarnings(\"unusable-by-js\")\npublic class LocalTime imp"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/ZoneId.java",
    "chars": 252,
    "preview": "package java.time;\n\npublic class ZoneId {\n\n\tprivate final ZoneRules zoneRules= new ZoneRules();\n\t\n\tpublic ZoneId()\n\t{\n\t\t"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/ZoneOffset.java",
    "chars": 470,
    "preview": "package java.time;\n\n@SuppressWarnings(\"unusable-by-js\")\npublic class ZoneOffset extends ZoneId{\n\n\tpublic static final Zo"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/ZoneRules.java",
    "chars": 162,
    "preview": "package java.time;\n\npublic class ZoneRules {\n\n\tpublic ZoneRules()\n\t{\n\t\t\n\t}\n\tpublic ZoneOffset getOffset(Instant instant)"
  },
  {
    "path": "src/peergos/gwt/emu/java/time/format/DateTimeParseException.java",
    "chars": 294,
    "preview": "package java.time.format;\n\n\npublic class DateTimeParseException extends java.time.DateTimeException {\n\n    public DateTi"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/Base64.java",
    "chars": 634,
    "preview": "package java.util;\n\nimport com.badlogic.gdx.utils.Base64Coder;\n\npublic class Base64 {\n\tpublic static Decoder getDecoder("
  },
  {
    "path": "src/peergos/gwt/emu/java/util/Optional.java",
    "chars": 4188,
    "preview": "/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/UUID.java",
    "chars": 3371,
    "preview": "package java.util;\n\npublic final class UUID {\n\n    private final String uuid;\n    private UUID(String uuid) {\n        th"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/CompletableFuture.java",
    "chars": 15301,
    "preview": "package java.util.concurrent;\n\nimport jsinterop.annotations.*;\n\nimport java.util.*;\nimport java.util.function.*;\n\n/** Em"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/CompletionStage.java",
    "chars": 4627,
    "preview": "/*\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/ExecutionException.java",
    "chars": 92,
    "preview": "package java.util.concurrent;\n\npublic class ExecutionException extends RuntimeException {\n}\n"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/ExecutorService.java",
    "chars": 100,
    "preview": "package java.util.concurrent;\n\npublic interface ExecutorService {\n    void execute(Runnable var1);\n}"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/ForkJoinPool.java",
    "chars": 638,
    "preview": "package java.util.concurrent;\n\nimport jsinterop.annotations.*;\n\npublic class ForkJoinPool implements ExecutorService {\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/ScheduledFuture.java",
    "chars": 71,
    "preview": "package java.util.concurrent;\n\npublic interface ScheduledFuture<V> {\n\n}"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/ScheduledThreadPoolExecutor.java",
    "chars": 1347,
    "preview": "package java.util.concurrent;\n\nimport jsinterop.annotations.*;\nimport java.util.function.Supplier;\n\nimport java.util.con"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/TimeUnit.java",
    "chars": 7703,
    "preview": "/*\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/concurrent/TimeoutException.java",
    "chars": 819,
    "preview": "/*\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/function/Consumer.java",
    "chars": 379,
    "preview": "package java.util.function;\nimport jsinterop.annotations.JsType;\n\nimport java.util.Objects;\n\n@FunctionalInterface\n@JsTyp"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/function/Function.java",
    "chars": 1498,
    "preview": "/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * us"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/Adler32.java",
    "chars": 7119,
    "preview": " /* Adler32.java - Computes Adler32 data checksum of a data stream\n    Copyright (C) 1999, 2000, 2001 Free Software Foun"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/CRC32.java",
    "chars": 4401,
    "preview": " /* CRC32.java - Computes CRC32 data checksum of a data stream\n    Copyright (C) 1999. 2000, 2001 Free Software Foundati"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/Checksum.java",
    "chars": 3206,
    "preview": " /* Checksum.java - Interface to compute a data checksum\n    Copyright (C) 1999, 2000, 2001 Free Software Foundation, In"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/Deflater.java",
    "chars": 18802,
    "preview": " /* Deflater.java - Compress a data stream\n    Copyright (C) 1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc."
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/DeflaterConstants.java",
    "chars": 3034,
    "preview": "   /* java.util.zip.DeflaterConstants\n      Copyright (C) 2001 Free Software Foundation, Inc.\n   \n   This file is part o"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/DeflaterEngine.java",
    "chars": 23443,
    "preview": "   /* DeflaterEngine.java --\n      Copyright (C) 2001, 2004  Free Software Foundation, Inc.\n   \n   This file is part of "
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/DeflaterHuffman.java",
    "chars": 26319,
    "preview": "/* DeflaterHuffman.java --\n      Copyright (C) 2001, 2004, 2005  Free Software Foundation, Inc.\n   \n   This file is part"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/DeflaterOutputStream.java",
    "chars": 6552,
    "preview": " /* DeflaterOutputStream.java - Output filter for compressing.\n    Copyright (C) 1999, 2000, 2001, 2004, 2005 Free Softw"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/DeflaterPending.java",
    "chars": 2131,
    "preview": "/* java.util.zip.DeflaterPending\n   Copyright (C) 2001 Free Software Foundation, Inc.\n   \n   This file is part of GNU Cl"
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/GZIPInputStream.java",
    "chars": 1151,
    "preview": "/*******************************************************************************\r\n * Copyright 2011 See AUTHORS file.\r\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/InflaterInputStream.java",
    "chars": 1323,
    "preview": "/*******************************************************************************\r\n * Copyright 2011 See AUTHORS file.\r\n "
  },
  {
    "path": "src/peergos/gwt/emu/java/util/zip/PendingBuffer.java",
    "chars": 5983,
    "preview": "/* java.util.zip.PendingBuffer\n      Copyright (C) 2001 Free Software Foundation, Inc.\n   \n   This file is part of GNU C"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/application/Platform.java",
    "chars": 117,
    "preview": "package javafx.application;\n\npublic final class Platform {\n\n    public static void runLater(Runnable runnable) {};\n\n}"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/embed/swing/JFXPanel.java",
    "chars": 90,
    "preview": "package javafx.embed.swing;\n\npublic final class JFXPanel {\n    public JFXPanel(){\n\n    }\n}"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/embed/swing/SwingFXUtils.java",
    "chars": 239,
    "preview": "package javafx.embed.swing;\n\nimport java.awt.image.BufferedImage;\nimport javafx.scene.image.Image;\n\npublic final class S"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/SnapshotParameters.java",
    "chars": 65,
    "preview": "package javafx.scene;\n\npublic final class SnapshotParameters {\n\n}"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/image/Image.java",
    "chars": 79,
    "preview": "package javafx.scene.image;\n\npublic class Image{\n\n    public Image() {\n\n    }\n}"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/image/WritableImage.java",
    "chars": 152,
    "preview": "package javafx.scene.image;\n\npublic final class WritableImage extends Image {\n    public WritableImage(int width, int he"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/media/Media.java",
    "chars": 196,
    "preview": "package javafx.scene.media;\n\nimport javafx.util.Duration;\n\npublic final class Media {\n    public Media(String source){\n\n"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/media/MediaPlayer.java",
    "chars": 184,
    "preview": "package javafx.scene.media;\nimport javafx.util.Duration;\n\npublic final class MediaPlayer{\n    public MediaPlayer(Media m"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/scene/media/MediaView.java",
    "chars": 510,
    "preview": "package javafx.scene.media;\nimport javafx.scene.image.WritableImage;\nimport javafx.scene.SnapshotParameters;\n\npublic fin"
  },
  {
    "path": "src/peergos/gwt/emu/javafx/util/Duration.java",
    "chars": 247,
    "preview": "package javafx.util;\n\npublic final class Duration {\n\n    public static Duration seconds(double s) {\n        return null;"
  },
  {
    "path": "src/peergos/gwt/emu/javax/crypto/Mac.java",
    "chars": 338,
    "preview": "package javax.crypto;\n\nimport javax.crypto.spec.SecretKeySpec;\n\npublic class Mac {\n\n\tpublic static Mac getInstance(Strin"
  },
  {
    "path": "src/peergos/gwt/emu/javax/crypto/spec/SecretKeySpec.java",
    "chars": 279,
    "preview": "package javax.crypto.spec;\n\npublic class SecretKeySpec {\n\n\tprivate final byte[] key;\n\tprivate final String algorithm;\n\tp"
  },
  {
    "path": "src/peergos/gwt/emu/javax/imageio/ImageIO.java",
    "chars": 565,
    "preview": "package javax.imageio;\n\nimport java.awt.image.BufferedImage;\nimport java.awt.image.RenderedImage;\nimport java.io.InputSt"
  },
  {
    "path": "src/peergos/server/AggregatedMetrics.java",
    "chars": 7009,
    "preview": "package peergos.server;\n\nimport io.prometheus.client.Counter;\nimport io.prometheus.client.Histogram;\nimport io.prometheu"
  },
  {
    "path": "src/peergos/server/Builder.java",
    "chars": 26733,
    "preview": "package peergos.server;\n\nimport com.zaxxer.hikari.*;\nimport io.libp2p.core.*;\nimport peergos.server.corenode.*;\nimport p"
  },
  {
    "path": "src/peergos/server/Command.java",
    "chars": 3740,
    "preview": "package peergos.server;\n\nimport peergos.server.util.Args;\nimport peergos.server.util.Logging;\n\nimport java.util.*;\nimpor"
  },
  {
    "path": "src/peergos/server/DesktopApp.java",
    "chars": 3575,
    "preview": "package peergos.server;\n\nimport peergos.server.util.Args;\n\nimport java.awt.*;\nimport java.io.File;\nimport java.io.IOExce"
  },
  {
    "path": "src/peergos/server/DirectOnlyStorage.java",
    "chars": 720,
    "preview": "package peergos.server;\n\nimport peergos.shared.storage.*;\nimport peergos.shared.util.*;\n\nimport java.util.*;\nimport java"
  },
  {
    "path": "src/peergos/server/HostDirChooser.java",
    "chars": 2638,
    "preview": "package peergos.server;\n\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.nio.file.Files;\nim"
  },
  {
    "path": "src/peergos/server/HostDirEnumerator.java",
    "chars": 2419,
    "preview": "package peergos.server;\n\nimport peergos.shared.util.Futures;\n\nimport java.io.File;\nimport java.nio.file.Paths;\nimport ja"
  },
  {
    "path": "src/peergos/server/JavaCrypto.java",
    "chars": 793,
    "preview": "package peergos.server;\n\nimport peergos.server.crypto.asymmetric.curve25519.*;\nimport peergos.server.crypto.asymmetric.m"
  },
  {
    "path": "src/peergos/server/JdbcAddressLRU.java",
    "chars": 6749,
    "preview": "package peergos.server;\n\nimport io.libp2p.core.AddressBook;\nimport io.libp2p.core.PeerId;\nimport io.libp2p.core.multifor"
  },
  {
    "path": "src/peergos/server/JdbcPkiCache.java",
    "chars": 5664,
    "preview": "package peergos.server;\n\nimport peergos.server.sql.*;\nimport peergos.server.util.Logging;\nimport peergos.shared.cbor.*;\n"
  },
  {
    "path": "src/peergos/server/JdbcRecordLRU.java",
    "chars": 7810,
    "preview": "package peergos.server;\n\nimport io.ipfs.multibase.binary.Base32;\nimport io.ipfs.multihash.Multihash;\nimport org.peergos."
  },
  {
    "path": "src/peergos/server/LinkIdentity.java",
    "chars": 4710,
    "preview": "package peergos.server;\n\nimport peergos.server.util.*;\nimport peergos.shared.*;\nimport peergos.shared.crypto.asymmetric."
  },
  {
    "path": "src/peergos/server/Login.java",
    "chars": 932,
    "preview": "package peergos.server;\n\nimport peergos.shared.*;\nimport peergos.shared.crypto.hash.PublicKeyHash;\nimport peergos.shared"
  },
  {
    "path": "src/peergos/server/LoginUpdate.java",
    "chars": 5499,
    "preview": "package peergos.server;\n\nimport peergos.server.util.Args;\nimport peergos.shared.Crypto;\nimport peergos.shared.MaybeMulti"
  },
  {
    "path": "src/peergos/server/LookupOwner.java",
    "chars": 997,
    "preview": "package peergos.server;\n\nimport peergos.server.storage.DelegatingDeletableStorage;\nimport peergos.server.storage.Deletab"
  },
  {
    "path": "src/peergos/server/Main.java",
    "chars": 84878,
    "preview": "package peergos.server;\n\nimport com.luciad.imageio.webp.WebPDecoderOptions;\nimport com.webauthn4j.data.client.*;\nimport "
  },
  {
    "path": "src/peergos/server/Mirror.java",
    "chars": 16052,
    "preview": "package peergos.server;\n\nimport peergos.server.corenode.*;\nimport peergos.server.login.*;\nimport peergos.server.space.Us"
  },
  {
    "path": "src/peergos/server/NonWriteThroughNetwork.java",
    "chars": 2719,
    "preview": "package peergos.server;\n\nimport peergos.server.corenode.*;\nimport peergos.server.login.*;\nimport peergos.server.mutable."
  },
  {
    "path": "src/peergos/server/Playground.java",
    "chars": 2577,
    "preview": "package peergos.server;\nimport java.util.logging.*;\n\nimport peergos.server.storage.*;\nimport peergos.server.util.Logging"
  },
  {
    "path": "src/peergos/server/PublicGateway.java",
    "chars": 1687,
    "preview": "package peergos.server;\n\nimport com.sun.net.httpserver.*;\nimport peergos.server.net.*;\nimport peergos.server.util.*;\nimp"
  },
  {
    "path": "src/peergos/server/Publisher.java",
    "chars": 1043,
    "preview": "package peergos.server;\n\nimport peergos.shared.*;\nimport peergos.shared.user.*;\nimport peergos.shared.user.fs.*;\n\nimport"
  },
  {
    "path": "src/peergos/server/Renew.java",
    "chars": 917,
    "preview": "package peergos.server;\n\nimport peergos.shared.*;\nimport peergos.shared.user.*;\n\nimport java.io.*;\nimport java.net.*;\nim"
  },
  {
    "path": "src/peergos/server/RenewUsernameClaim.java",
    "chars": 1024,
    "preview": "package peergos.server;\n\nimport peergos.shared.*;\nimport peergos.shared.user.*;\n\nimport java.io.*;\nimport java.net.*;\nim"
  },
  {
    "path": "src/peergos/server/ServerAdmin.java",
    "chars": 13962,
    "preview": "package peergos.server;\n\nimport com.webauthn4j.data.client.Origin;\nimport peergos.server.corenode.IpfsCoreNode;\nimport p"
  },
  {
    "path": "src/peergos/server/ServerIdentity.java",
    "chars": 10123,
    "preview": "package peergos.server;\n\nimport com.google.protobuf.InvalidProtocolBufferException;\nimport io.libp2p.core.*;\nimport io.l"
  },
  {
    "path": "src/peergos/server/ServerMessages.java",
    "chars": 12580,
    "preview": "package peergos.server;\n\nimport peergos.server.corenode.*;\nimport peergos.server.login.*;\nimport peergos.server.messages"
  },
  {
    "path": "src/peergos/server/ServerProcesses.java",
    "chars": 361,
    "preview": "package peergos.server;\n\nimport peergos.server.storage.*;\n\npublic class ServerProcesses {\n\n    public final UserService "
  },
  {
    "path": "src/peergos/server/SyncProperties.java",
    "chars": 649,
    "preview": "package peergos.server;\n\nimport peergos.server.sync.SyncConfig;\nimport peergos.server.sync.SyncRunner;\nimport peergos.sh"
  },
  {
    "path": "src/peergos/server/UserCleanup.java",
    "chars": 12592,
    "preview": "package peergos.server;\n\nimport peergos.server.storage.*;\nimport peergos.server.util.Args;\nimport peergos.shared.*;\nimpo"
  },
  {
    "path": "src/peergos/server/UserService.java",
    "chars": 17512,
    "preview": "package peergos.server;\nimport java.util.*;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Exe"
  },
  {
    "path": "src/peergos/server/UserStats.java",
    "chars": 5033,
    "preview": "package peergos.server;\n\nimport peergos.server.storage.*;\nimport peergos.shared.*;\nimport peergos.shared.corenode.*;\nimp"
  },
  {
    "path": "src/peergos/server/ValidateUser.java",
    "chars": 2424,
    "preview": "package peergos.server;\n\nimport peergos.server.storage.*;\nimport peergos.server.util.*;\nimport peergos.shared.*;\nimport "
  },
  {
    "path": "src/peergos/server/apps/email/EmailBridgeClient.java",
    "chars": 9176,
    "preview": "package peergos.server.apps.email;\n\nimport peergos.shared.Crypto;\nimport peergos.shared.NetworkAccess;\nimport peergos.sh"
  },
  {
    "path": "src/peergos/server/cli/CLI.java",
    "chars": 37291,
    "preview": "package peergos.server.cli;\n\nimport org.jline.builtins.*;\nimport org.jline.reader.*;\nimport org.jline.reader.impl.*;\nimp"
  },
  {
    "path": "src/peergos/server/cli/CLIContext.java",
    "chars": 777,
    "preview": "package peergos.server.cli;\n\nimport org.jline.terminal.Terminal;\nimport peergos.shared.user.UserContext;\nimport peergos."
  },
  {
    "path": "src/peergos/server/cli/Command.java",
    "chars": 5543,
    "preview": "package peergos.server.cli;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collections;\nimport j"
  },
  {
    "path": "src/peergos/server/cli/ListFilesCompleter.java",
    "chars": 935,
    "preview": "package peergos.server.cli;\n\nimport org.jline.reader.*;\nimport java.util.List;\nimport java.util.function.Function;\n\n\npub"
  },
  {
    "path": "src/peergos/server/cli/ParsedCommand.java",
    "chars": 2804,
    "preview": "package peergos.server.cli;\n\nimport java.util.ArrayList;\nimport java.util.HashSet;\nimport java.util.List;\nimport java.ut"
  },
  {
    "path": "src/peergos/server/cli/ProgressBar.java",
    "chars": 2844,
    "preview": "package peergos.server.cli;\n\nimport java.io.PrintWriter;\nimport java.nio.file.*;\nimport java.util.concurrent.atomic.*;\ni"
  },
  {
    "path": "src/peergos/server/cli/SupplierCompleter.java",
    "chars": 771,
    "preview": "package peergos.server.cli;\n\nimport org.jline.reader.Candidate;\nimport org.jline.reader.Completer;\nimport org.jline.read"
  },
  {
    "path": "src/peergos/server/corenode/CorenodeEvent.java",
    "chars": 427,
    "preview": "package peergos.server.corenode;\n\nimport peergos.shared.crypto.hash.*;\n\n/** This propagates a user changing their root p"
  },
  {
    "path": "src/peergos/server/corenode/CorenodeEventPropagator.java",
    "chars": 7147,
    "preview": "package peergos.server.corenode;\n\nimport peergos.shared.corenode.*;\nimport peergos.shared.crypto.*;\nimport peergos.share"
  },
  {
    "path": "src/peergos/server/corenode/IpfsCoreNode.java",
    "chars": 32566,
    "preview": "package peergos.server.corenode;\nimport java.time.*;\nimport java.util.logging.*;\n\nimport peergos.server.storage.*;\nimpor"
  },
  {
    "path": "src/peergos/server/corenode/JdbcIpnsAndSocial.java",
    "chars": 13845,
    "preview": "package peergos.server.corenode;\nimport java.util.function.*;\nimport java.util.logging.*;\n\nimport peergos.server.sql.*;\n"
  },
  {
    "path": "src/peergos/server/corenode/MirrorCoreNode.java",
    "chars": 43430,
    "preview": "package peergos.server.corenode;\n\nimport peergos.server.*;\nimport peergos.server.login.*;\nimport peergos.server.space.*;"
  },
  {
    "path": "src/peergos/server/corenode/NonWriteThroughCoreNode.java",
    "chars": 6789,
    "preview": "package peergos.server.corenode;\n\nimport peergos.shared.corenode.*;\nimport peergos.shared.crypto.*;\nimport peergos.share"
  },
  {
    "path": "src/peergos/server/corenode/SignUpFilter.java",
    "chars": 13537,
    "preview": "package peergos.server.corenode;\n\nimport peergos.server.*;\nimport peergos.server.storage.admin.*;\nimport peergos.server."
  },
  {
    "path": "src/peergos/server/corenode/UserRepository.java",
    "chars": 7972,
    "preview": "package peergos.server.corenode;\n\nimport peergos.server.crypto.*;\nimport peergos.server.storage.*;\nimport peergos.server"
  },
  {
    "path": "src/peergos/server/corenode/UsernameValidator.java",
    "chars": 5318,
    "preview": "package peergos.server.corenode;\n\nimport peergos.shared.corenode.*;\n\nimport java.util.*;\nimport java.util.regex.Pattern;"
  }
]

// ... and 887 more files (download for full content)

About this extraction

This page contains the full source code of the ianopolous/Peergos GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1087 files (132.4 MB), approximately 2.3M tokens, and a symbol index with 10466 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!