private boolean findAll(Accumulator<MemoryMatch> accumulator, AddressRange range,
			TaskMonitor monitor) {
		AddressableByteSequence searchBytes = bytes1;
		AddressableByteSequence extra = bytes2;

		AddressRangeIterator it = new AddressRangeSplitter(range, chunkSize, true);
		AddressRange first = it.next();

		searchBytes.setRange(first);
		while (it.hasNext()) {
			AddressRange next = it.next();
			extra.setRange(next);
			if (!findAll(accumulator, searchBytes, extra, monitor)) {
				return false;
			}
			searchBytes = extra;
			extra = searchBytes == bytes1 ? bytes2 : bytes1;
		}
		extra.clear();
		return findAll(accumulator, searchBytes, extra, monitor);
	}
Searches backwards starting at the given address until a match is found or
the beginning of the address set is reached. It does not currently wrap the search.
@param start the address to start searching
@param monitor the task monitor
@return the first match found or null if no match found.
Ghidra/Features/Base/src/main/java/ghidra/features/base/memsearch/searcher/MemorySearcher.java