private ByteProvider getPayload(TaskMonitor monitor, FSRL payloadFSRL)
			throws CancelledException, IOException {
		return fsService.getDerivedByteProviderPush(provider.getFSRL(), payloadFSRL, NAME, -1,
			os -> {
				BinaryReader reader = new BinaryReader(provider, true);//always LE
				int magic = reader.readNextInt();
				if (magic != ARCHIVE_MAGIC) {
					throw new IOException("LZ4 archive: invalid magic");
				}

				UnknownProgressWrappingTaskMonitor upwtm =
					new UnknownProgressWrappingTaskMonitor(monitor, provider.length());
				upwtm.setMessage("Decompressing LZ4 archive...");
				upwtm.setProgress(0);

				while (reader.hasNext()) {
					monitor.checkCancelled();

					int compressedChunkSize = reader.readNextInt();
					byte[] compressedChunk = reader.readNextByteArray(compressedChunkSize);
					try (InputStream compressedStream =
						new BlockLZ4CompressorInputStream(
							new ByteArrayInputStream(compressedChunk))) {
						long bytesCopied =
							FSUtilities.streamCopy(compressedStream, os, TaskMonitor.DUMMY);
						upwtm.incrementProgress(bytesCopied);
					}
				}
			}, monitor);
	}
Note: Uncompressed chunk size is used in the compressor side
(userspace side for compression).
It is hardcoded because there is not proper way to extract it
from the binary stream which is generated by the preliminary
version of LZ4 tool so far.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/lz4/LZ4ArchiveFileSystem.java