void mergeBytes(AddressSetView p1MergeSet, ProgramMergeFilter filter, TaskMonitor monitor)
			throws MemoryAccessException, CancelledException {
		int setting = filter.getFilter(ProgramMergeFilter.BYTES);
		if (setting == ProgramMergeFilter.IGNORE) {
			return;
		}

		ProgramDiffFilter byteDiffFilter = new ProgramDiffFilter(ProgramDiffFilter.BYTE_DIFFS);
		AddressSet diffAddrSet =
			p1MergeSet.intersect(programDiff.getDifferences(byteDiffFilter, monitor));
		AddressSet diffAddrSet2 = DiffUtility.getCompatibleAddressSet(diffAddrSet, program2);
		if (diffAddrSet2.isEmpty()) {
			return;
		}
		merger.mergeBytes(diffAddrSet2,
			filter.getFilter(ProgramMergeFilter.INSTRUCTIONS) != ProgramMergeFilter.REPLACE,
			monitor);
	}
<CODE>mergeBytes</CODE> merges byte differences within the specified
 address set. The program number indicates whether to get the bytes from
 program1 or program2 of the merge.

@param p1MergeSet the addresses to be merged.
The addresses in this set should be derived from program1.
@param filter the current merge filter settings indicating what types
of differences should be merged.
@param monitor the task monitor for notifying the user of this merge's
progress.

@throws MemoryAccessException if bytes can't be merged.
@throws CancelledException if user cancels via the monitor.
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMergeManager.java