protected FSRL resolveLibraryFile(GFileSystem fs, String library) throws IOException {
		Comparator<String> baseNameComp = getLibraryNameComparator();
		Comparator<String> nameComp = isOptionalLibraryFilenameExtensions() &&
			FilenameUtils.getExtension(library).isEmpty()
					? (s1, s2) -> baseNameComp.compare(FilenameUtils.getBaseName(s1),
						FilenameUtils.getBaseName(s2))
					: baseNameComp;

		GFile foundFile = fs.lookup(library, nameComp);
		return foundFile != null && !foundFile.isDirectory() ? foundFile.getFSRL() : null;
	}
Resolves the given library path to an existing {@link FSRL}.  Some {@link Loader}s
have relaxed requirements on what counts as a valid library filename match.  For example, 
case-insensitive lookup may be allowed, and filename extensions may be optional.

@param fs The {@link GFileSystem file system} to resolve in
@param library The library. This will be either an absolute path, a relative path, or just a 
  filename.
@return The library resolved to an existing {@link FSRL}, or null if it did not resolve
@throws IOException If an IO-related problem occurred
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractLibrarySupportLoader.java