String getDuplicateSymbolsInfo() {
		StringBuffer buf = new StringBuffer();
		SymbolTable origSymTab = originProgram.getSymbolTable();
		SymbolTable resultSymTab = resultProgram.getSymbolTable();
		long[] fromSymbolIDs = conflictSymbolIDMap.getKeys();
		for (long fromSymbolID : fromSymbolIDs) {
			try {
				long toSymbolID = conflictSymbolIDMap.get(fromSymbolID);
				Symbol fromSymbol = origSymTab.getSymbol(fromSymbolID);
				Symbol toSymbol = resultSymTab.getSymbol(toSymbolID);
				String msg = "Symbol '" + fromSymbol.getName(true) + "' renamed to '" +
					toSymbol.getName(true) + "' due to a merge conflict.\n";
				buf.append(msg);
			}
			catch (NoValueException e) {
				Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
				errorMsg.append(
					"NoValueException getting duplicate symbol info: " + e.getMessage() + "\n");
			}
		}
//		Enumeration keys = dupSyms.keys();
//		while (keys.hasMoreElements()) {
//			Symbol sym = (Symbol) keys.nextElement();
//			String desiredName = (String)dupSyms.get(sym);
//			String msg = "Symbol '"+desiredName+"' with '"+sym.getParentNamespace().getName()
//						+"' scope renamed to '"+sym.getName()+"' due to merge conflict.\n";
//			buf.append(msg);
//		}
		return buf.toString();
	}
<CODE>replaceLabels</CODE> replaces all symbols and aliases
in the specified address set from the second program.

@param originAddressSet the addresses to be replaced
The addresses in this address set should be derived from program1.
@param replaceFunction true indicates the function symbol should be replaced
@param monitor the task monitor for notifying the user of this merge's progress
@throws CancelledException if user cancels via the monitor.
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java