private void doPinning(int nGramDepth, boolean breakSym, TaskMonitor monitor)
			throws CancelledException {
		pass = 0;
		pinMain(2, false, monitor);				// First pass, using weight threshold of 2
		cgraphLeft.addEdgeColor();				// Try to distinguish control-flow nodes further
		cgraphRight.addEdgeColor();
		boolean checkForTies = true;
		while (checkForTies) {				// Continue until no further pairs are found
			pass += 1;
			int lastPinSize = pinMap.size();
			updateCtrlHashes(nGramDepth);
			pinMain(0, false, monitor);
			checkForTies = (lastPinSize != pinMap.size());
		}
		if (breakSym) {
			checkForTies = true;
			while (checkForTies) {
				pass += 1;
				int lastPinSize = pinMap.size();
				pinMain(0, true, monitor);		// Use block and operand order to break ties
				checkForTies = (lastPinSize != pinMap.size());
			}
		}
		pinAssociates();					// Try to pair nodes in the original graph that were collapsed out
	}
Run the full pinning algorithm.  Continue doing passes over the n-gram list until no
further pairs are found.
@param nGramDepth is the maximum depth of n-gram to use
@param breakSym is true if a symmetry breaking pass should be performed at the end
@param monitor is the TaskMonitor
@throws CancelledException if the user cancels the task
Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java