private boolean createImpliedMatches(boolean applyGoodMatches, int minVotes, int maxConflicts,
			TaskMonitor monitor)
			throws CancelledException {

		Set<VTAssociation> processedSrcDestPairs = new HashSet<>();
		List<VTMatchSet> matchSets = session.getMatchSets();

		monitor.setMessage("Creating Implied Matches...");
		monitor.initialize(matchSets.size());

		// create implied matches for the existing matchSets (ie sets of results from various 
		// correlators
		for (VTMatchSet matchSet : matchSets) {
			monitor.checkCancelled();

			Collection<VTMatch> matches = matchSet.getMatches();
			createImpliedMatches(monitor, processedSrcDestPairs, matches);
			monitor.incrementProgress();
		}

		// if user chose not to apply good implied matches then don't continue
		if (!applyGoodMatches) {
			return false;
		}

		// otherwise, try to find and apply good implied matches until no more to be found
		boolean hasApplyErrors = false;

		VTMatchSet impliedMatchSet = session.getImpliedMatchSet();

		Set<VTMatch> goodImpliedMatches =
			findGoodImpliedMatches(impliedMatchSet.getMatches(), minVotes,
				maxConflicts, monitor);

		while (goodImpliedMatches.size() > 0) {

			monitor.checkCancelled();

			// apply the "good" implied matches
			hasApplyErrors |= applyMatches(goodImpliedMatches, monitor);

			// possibly create more implied matches from the newly applied matches
			createImpliedMatches(monitor, processedSrcDestPairs, goodImpliedMatches);

			// possibly find more "good" implied matches from any new implied matches found
			impliedMatchSet = session.getImpliedMatchSet();
			goodImpliedMatches = findGoodImpliedMatches(impliedMatchSet.getMatches(),
				minVotes, maxConflicts, monitor);
		}

		return hasApplyErrors;

	}
Method to create implied matches for the existing applied matches in the current session
@param applyGoodMatches if true, create applied matches for "good" implied matches based on
votes/conflict information. For all the applied implied matches, rerun the creation of 
applied matches until no new ones found.
@param applyGoodMatches if true, apply matches if minVotes met and maxConflicts not exceeded 
for particular match, if false, don't apply any matches
@param minVotes minimum votes needed to apply a match
@param maxConflicts maximum conflicts allowed to apply a match
@param monitor the task monitor
@return true if there are any apply errors, false otherwise
@throws CancelledException if cancelled
Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/AutoVersionTrackingTask.java