protected boolean fillOutPairs(NeighborhoodPair pair, int maxCompares) {
		ArrayList<FunctionNode> unmatchedSource = new ArrayList<FunctionNode>();
		ArrayList<FunctionNode> unmatchedDest = null;

		for (FunctionNode src : pair.srcNeighbors) {
			if (src.isAcceptedMatch()) {
				continue;
			}
			if (src.getVector() == null) {
				continue;
			}
			unmatchedSource.add(src);
		}

		if (unmatchedSource.isEmpty()) {
			return false;
		}
		if (unmatchedSource.size() > maxCompares) {
			return false;
		}
		unmatchedDest = new ArrayList<FunctionNode>();

		for (FunctionNode dst : pair.destNeighbors) {
			if (dst.isAcceptedMatch()) {
				continue;
			}
			if (dst.getVector() == null) {
				continue;
			}
			unmatchedDest.add(dst);
		}
		if (unmatchedDest.isEmpty()) {
			return false;
		}
		if (unmatchedSource.size() * unmatchedDest.size() > maxCompares) {
			return false;
		}

		searchForNewMatches(unmatchedSource, unmatchedDest);
		return true;
	}
If nodes haven't been compared before, compare them and add an associate if it passes threshold
@param pair is the two sets of nodes that we are comparing between
@param maxCompares is the maximum number of comparisons to perform
@return true is comparisons were actually performed
Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/NeighborGenerator.java