protected Program getLibraryProgram(String libPath) throws CancelledException {
		Program result = loadedPrograms.get(libPath);
		if (result == null && projectData != null && !problemLibraries.containsKey(libPath)) {
			result = openLibraryFile(projectData.getFile(libPath), libPath);

			if (result != null) {
				loadedPrograms.put(libPath, result);
			}
		}
		return result;
	}
Fetches a program from a cache of Program instances.  If the requested program
isn't currently in the cache, it will be opened (if possible).
<p>
This cache of programs are pinned by registering a consumer on the program, and will be
released during {@link #close()} of this ExternalSymbolServer instance.
<p>
This cache is shared between all ProgramSymbolResolver instances (that were created
by calling {@link #addProgramToFixup(String, Program)}).

@param libPath project path to a library program
@return {@link Program}, or null if not found or other error during opening
@throws CancelledException if cancelled
Ghidra/Features/Base/src/main/java/ghidra/program/util/ExternalSymbolResolver.java