private static DemanglerResults getOwnerAndUsersDtp(CategoryPath categoryPath,
			String mangledString) {
		MDParsableItem parsableItem = doDemangle(mangledString);

		if (!(parsableItem instanceof MDObjectCPP cppItem)) {
			return null;
		}
		MDTypeInfo typeInfo = cppItem.getTypeInfo();
		if (!(typeInfo instanceof MDVxTable vxTable)) {
			return null;
		}

		SymbolPath ownerSp = getOwnerSymbolPath(cppItem.getQualification());
		List<SymbolPath> parentageSps = getParentageSymbolPaths(vxTable.getNestedQualifications());

		List<ClassID> parentage = new ArrayList<>();
		ClassID owner = new ClassID(categoryPath, ownerSp);
		for (SymbolPath sp : parentageSps) {
			ClassID user = new ClassID(categoryPath, sp);
			parentage.add(user); // owner is the parentage if parentageSps was empty
		}

		OwnerAndParentage ownerAndParentage = new OwnerAndParentage(owner, parentage);

		return switch (typeInfo) {
			case MDVFTable f -> new DemanglerResults(VtType.VFT, ownerAndParentage);
			case MDVBTable b -> new DemanglerResults(VtType.VBT, ownerAndParentage);
			default -> null;
		};
	}
Gets the owner and users of the VxT from the mangled name
@param categoryPath the base CategoryPath for types tree being used
@param mangledString the mangled string to be decoded
@return the associated complex type or null if the string couldn't be demangled
Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/MsVxtManager.java