public static List<ByteSequenceRowObject> getRowObjectsFromInstructionSequences(
			List<FunctionBitPatternInfo> unfilteredInfo, InstructionSequenceTreePathFilter pathFilter,
			ContextRegisterFilter contextRegisterFilter) {

		int numBytes = pathFilter.getTotalLength();
		Map<BytesAndDisassembly, Integer> bytesAndDisCount = new HashMap<>();
		int numTotalSeqs = 0;

		for (FunctionBitPatternInfo fInfo : unfilteredInfo) {
			if (failsFilter(fInfo, contextRegisterFilter)) {
				continue;
			}

			List<InstructionSequence> instSeqs = getInstructionSequences(pathFilter, fInfo);

			for (int i = 0, numSeqs = instSeqs.size(); i < numSeqs; i++) {
				InstructionSequence currentSeq = instSeqs.get(i);
				if (!pathFilter.allows(currentSeq)) {
					continue;
				}
				numTotalSeqs++;
				String totalBytes = null;
				int totalBytesLen = 0;
				String bytes = null;
				String disassembly = null;
				switch (pathFilter.getInstructionType()) {
					case FIRST:
						if (fInfo.getFirstBytes() == null) {
							break;
						}
						totalBytes = fInfo.getFirstBytes();
						bytes = totalBytes.substring(0, HEX_DIGITS_PER_BYTE * numBytes);
						disassembly = getDisassemblyForTreePath(currentSeq, pathFilter);
						break;
					case PRE:
						if (fInfo.getPreBytes() == null) {
							break;
						}
						totalBytes = fInfo.getPreBytes();
						totalBytesLen = totalBytes.length();
						bytes = totalBytes.substring(totalBytesLen - HEX_DIGITS_PER_BYTE * numBytes,
							totalBytesLen);
						disassembly = getDisassemblyForTreePath(currentSeq, pathFilter);
						break;
					case RETURN:
						if (fInfo.getReturnBytes() == null || fInfo.getReturnBytes().size() <= i) {
							break;
						}
						totalBytes = fInfo.getReturnBytes().get(i);
						totalBytesLen = totalBytes.length();
						bytes = totalBytes.substring(totalBytesLen - HEX_DIGITS_PER_BYTE * numBytes,
							totalBytesLen);
						disassembly = getDisassemblyForTreePath(currentSeq, pathFilter);
						break;
					default:
						throw new IllegalArgumentException(
							"unsupported type: " + pathFilter.getInstructionType().name());
				}
				incrementCountMap(bytesAndDisCount, bytes, disassembly);
			}
		}
		return getRowObjectsForPathFilteredSeqs(bytesAndDisCount, numTotalSeqs);
	}
Get the byte sequences whose corresponding instruction sequences pass
{@code pathFilter}
@param unfilteredInfo data source
@param pathFilter path filter
@param contextRegisterFilter context register filter
@param type pattern type
@return byte sequences
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/ByteSequenceRowObject.java