private void mergeConflicts(ListingMerger[] mergers, TaskMonitor monitor)
			throws MemoryAccessException, CancelledException {
		int originalConflictOption = conflictOption;
		AddressSet listingConflictSet = getListingConflicts(mergers);
		long totalAddresses = listingConflictSet.getNumAddresses();
		AddressIterator iter = listingConflictSet.getAddresses(true);
		for (long addressNum = 1; iter.hasNext(); addressNum++) {
			Address addr = iter.next();
			conflictNum = 1;
			totalConflictsInPhase = getTotalNumConflicts(mergers, addr);
			if (mergePanel != null) {
				conflictInfoPanel.setAddressInfo(addr, addressNum, totalAddresses);
				conflictInfoPanel.setConflictInfo(conflictNum, totalConflictsInPhase);
			}
			for (ListingMerger merger : mergers) {
				currentMerger = merger;
				conflictInfoPanel.setConflictType(currentMerger.getConflictType());
				currentMerger.mergeConflicts(this.mergePanel, addr, originalConflictOption,
					monitor);
			}
		}
	}
Performs a manual merge of the Listing conflicts for all the mergers
specified. The addresses with conflicts will be resolved in order
from minimum address to maximum address.
At each address all conflicts are resolved before moving to the next address.
<br>Note: Call the autoMerge() method before this method in order to
determine the conflicts.
@param mergers the listing mergers whose conflicts are to be merged.
@param monitor indicates progress to user and allows cancel.
@throws MemoryAccessException if bytes can't be merged.
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ListingMergeManager.java