// returns (timer owner, timer, estimated firing time) or null static T3 nextFiringTimerInVM_withOwner() { long time = now(); Lowest> best = new Lowest; for (Class c : allMainClassesAndJavaX()) for (O timer : unnull(_registeredTimersOf(c))) pcall { long t = timer_nextFireTime(timer, time); if (t != 0) best.put(pair((O) c, timer), t); } ret best.has() ? t3(best->a, best->b, toLong(best.bestScore())) : null; }