private void autoMergeNamedExternalProgram(IDGroup idGroup, int progress) {

		long resultID = idGroup.getResultID();
		String resultName = idGroup.getResultName();
		String originalName = idGroup.getOriginalName();
		String latestName = idGroup.getLatestName();
		String myName = idGroup.getMyName();
		String name = (resultName != null) ? resultName
				: (originalName != null) ? originalName
						: (latestName != null) ? latestName : (myName != null) ? myName : "unknown";

		mergeManager.updateProgress(progress,
			"Merging external program information for " + name + "...");

		String originalPath =
			(originalName != null) ? originalExtMgr.getExternalLibraryPath(originalName) : null;
		String latestPath =
			(latestName != null) ? latestExtMgr.getExternalLibraryPath(latestName) : null;
		String myPath = (myName != null) ? myExtMgr.getExternalLibraryPath(myName) : null;
		if (same(latestName, myName) && same(latestPath, myPath)) {
			return;
		}
		boolean changedLatestName = !same(originalName, latestName);
		boolean changedMyName = !same(originalName, myName);
		boolean changedLatestPath = !same(originalPath, latestPath);
		boolean changedMyPath = !same(originalPath, myPath);
		boolean changedLatest = changedLatestName || changedLatestPath;
		boolean changedMy = changedMyName || changedMyPath;
		if (changedLatest) {
			if (changedMy) {
				// conflict: Ask to keep latest or my
				extPgms.add(idGroup);
			}
			else {
				// Keep latest
				// AutoMerge latest
				if (resultID != -1 && resultName == null) {
					resultName = latestName; // Need to create Library symbol in Result program.
				}
				autoMergeWhenOnlyLatestChanged(resultName, latestName, latestPath);
			}
		}
		else {
			if (changedMy) {
				// AutoMerge my
				if (resultID != -1 && resultName == null) {
					resultName = myName; // Need to create Library symbol in Result program.
					// See if there is another symbol in conflict with this name already.
					SymbolTable resultSymbolTable = resultPgm.getSymbolTable();
					Symbol symbol = resultSymbolTable.getSymbol(resultName, Address.NO_ADDRESS,
						resultPgm.getGlobalNamespace());
					if (symbol != null && symbol.getSymbolType() != SymbolType.LIBRARY) {
						resultName = ProgramMerge.getUniqueName(resultSymbolTable, resultName,
							Address.NO_ADDRESS, resultPgm.getGlobalNamespace(),
							symbol.getSymbolType());
					}
				}
				autoMergeWhenOnlyMyChanged(resultName, myName, myPath);
			}
		}
	}
Gets symbol ID groups for each Library symbol that is new in the My program
(symbol wasn't in the Original program).
<br> Note: This method excludes any new Library symbols in Original whose matching Result ID
has already been placed in the resultIDsInAGroup set. Otherwise, each ID group that has a
Result ID will add it to the resultIDsInAGroup set.
@return the ID groups for new Library symbols in the My program.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalProgramMerger.java