def growTracked(mesh, growSet, allSet):
	""" Grow a set of verts along edges and faces

	This function takes a set of vertices and returns two
	dicts. One that is vert:(edgeAdjVerts..), and another
	that is vert:(faceAdjVerts..)

	While I'm growing a vert, if all vertices adjacent to
	that vert are matched, then I no longer need to grow
	from there.

	Args:
		growSet: A set of Vertex objects to grow. This set
			will have all useless verts removed and will be
			changed in-place.
		allSet: A set of Vertex objects to exclude from
			the growth

	Returns:
		edgeDict: A dictionary with verts as keys and all
			edge adjacent vertices as the value
		faceDict: A dictionary with verts as keys and all
			face adjacent vertices as the value
		newGrowSet: The original growSet with all used-up
			vertices removed
	"""
	edgeDict = {}
	faceDict = {}
	# Verts that are grown, but have no adjacent verts
	# that aren't in the allSet
	rem = []
	for vert in growSet:
		edgeFound = False
		faceFound = False
		for eadj in mesh.adjacentVertsByEdge(vert):
			if eadj not in allSet:
				edgeFound = True
				edgeDict.setdefault(eadj, []).append(vert)

		for fadj in mesh.adjacentVertsByFace(vert):
			if fadj not in allSet:
				faceFound = True
				faceDict.setdefault(fadj, []).append(vert)

		if not edgeFound and not faceFound:
			rem.append(vert)

	newGrowSet = growSet - set(rem)
	return edgeDict, faceDict, newGrowSet