private void fillExternalChangeSymbolSets(SymbolTable symbolTable, long[] symbolIDs,
			HashSet<Long> externalRemoveSet, HashSet<Long> externalModifySet) {

		for (long symbolID : symbolIDs) {
			Symbol symbol = symbolTable.getSymbol(symbolID);
			if (symbol == null) {
				Symbol originalSymbol = symbolTables[ORIGINAL].getSymbol(symbolID);
				if (originalSymbol == null) {
					continue;
				}
				SymbolType symbolType = originalSymbol.getSymbolType();
				if (originalSymbol.isExternal() &&
					(symbolType == SymbolType.FUNCTION || symbolType == SymbolType.LABEL)) {
					externalRemoveSet.add(symbolID);
				}
				continue;
			}
			SymbolType symbolType = symbol.getSymbolType();
			if (symbol.isExternal() &&
				(symbolType == SymbolType.FUNCTION || symbolType == SymbolType.LABEL)) {
				externalModifySet.add(symbolID);
			}
		}
	}
Determine the type of changes to the symbols in the LATEST and MY (CheckedOut) program.
Changes can be symbol removed, added, changed, renamed, and set to primary.
@param monitor task monitor for displaying progress to the user
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalFunctionMerger.java