public Program getProgram(String name, Object consumer, Tool tool, boolean upgradeIfNeeded)
			throws VersionException, IOException, CancelledException {
		ProgramFileValue programFileValue = getValue(name, ProgramFileValue.class, "Program");
		return programFileValue.openProgram(consumer, tool, upgradeIfNeeded, monitor);
	}
Gets (opens) the {@link Program} value for the given name. If the program is already open,
then the consumer will be added to the program. The caller of this method is responsible
for calling {@link Program#release(Object)} with the same consumer when it is done using this
program. Program are only closed after all consumers are released. If multiple calls
are made to this method, then the consumer will be added multiple times and must be released
multiple times.
<P>
The consumer can be any object, but since the consumer's purpose is to keep the program open 
while some object is using it, the object itself is typically passed in as
the consumer. For example, when used in a script, passing in the java keyword "this" as the
consumer will make the script itself the consumer.

@param name the name of a previously defined program value
@param consumer the consumer to be used to open the program
@param tool if non-null, the program will also be opened in the given tool. Note: the
program will only be added to the tool once even if this method is called multiple times.
@param upgradeIfNeeded if true, program will be upgraded if needed and possible. If false,
the program will only be upgraded after first prompting the user. In headless mode, it will
attempt to upgrade only if the parameter is true.
@return an opened program with the given consumer for the selected domain file or null if
no program was selected.
@throws VersionException if the Program is out-of-date from the version of GHIDRA and an 
upgrade was not been performed. In non-headless mode, the user will have already been
notified via a popup dialog.
current Ghidra Program version.
@throws IOException if there is an error accessing the Program's DomainObject
@throws CancelledException if the operation is cancelled
@throws IllegalArgumentException if the name hasn't been defined as a project folder type
Ghidra/Features/Base/src/main/java/ghidra/features/base/values/GhidraValuesMap.java