protected TraceObjectValue tryRegister(TraceObject container, PathFilter filter, String name) {
		final PathFilter applied;
		if (filter.isNone()) {
			applied = PathMatcher.any(
				new PathPattern(KeyPath.ROOT.key(name)),
				new PathPattern(KeyPath.ROOT.key(name.toLowerCase())),
				new PathPattern(KeyPath.ROOT.key(name.toUpperCase())),
				new PathPattern(KeyPath.ROOT.index(name)),
				new PathPattern(KeyPath.ROOT.index(name.toLowerCase())),
				new PathPattern(KeyPath.ROOT.index(name.toUpperCase())));
		}
		else {
			applied = PathMatcher.any(
				filter.applyKeys(Align.RIGHT, name),
				filter.applyKeys(Align.RIGHT, name.toLowerCase()),
				filter.applyKeys(Align.RIGHT, name.toUpperCase()));
		}
		TraceObjectValPath regValPath =
			container.getSuccessors(Lifespan.at(getSnap()), applied).findFirst().orElse(null);

		if (regValPath == null) {
			Msg.error(this, "Cannot find register object/value for " + name + " in " + container);
			return null;
		}
		return regValPath.getLastEntry();
	}
NOTE: Don't read in parallel, lest we overload the connection. This does queue them all
up in a CF chain, though. Still, a request doesn't go out until the preceding one
completes.
Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java