protected void doSortWorker(ActorManager manager, int nest, List<Comparable> values, String id, PendingMerge pm) {
		sleep(1000);
		if (values.size() <= 1) {
			DefaultMessage dm = new DefaultMessage("sortComplete", new Object[] { nest, values, id });
			logger.info("send size complete %s(%d): %s", id, nest, values);
			recordSend(id, manager.send(dm, this, getCategoryName()));
		} else {
			pm = new PendingMerge();
			Comparable pivot = values.remove(0);
			pm.pivot = pivot;
			for (Comparable c : values) {
				if (c.compareTo(pivot) <= 0) {
					pm.less.add(c);
				} else {
					pm.more.add(c);
				}
			}
			if (pm.less.size() > 0) {
				pm.lessNeeded = true;
				pm.count++;
			}
			if (pm.more.size() > 0) {
				pm.moreNeeded = true;
				pm.count++;
			}
			logger.info("send pm sort %s(%d): count=%d, %s<%s>%s", id, nest, pm.count, pm.less, pm.pivot, pm.more);
			if (pm.count > 0) {
				if (pm.lessNeeded) {
					DefaultMessage lm = new DefaultMessage("sort", new Object[] { nest + 1, null, pm.id, pm });
					logger.info("send sort less %s: %s", pm.id, pm.less);
					recordSend(id, manager.send(lm, this, getCategoryName()));
				}
				if (pm.moreNeeded) {
					DefaultMessage mm = new DefaultMessage("sort", new Object[] { nest + 1, null, pm.id, pm });
					logger.info("send sort more %s: %s", pm.id, pm.more);
					recordSend(id, manager.send(mm, this, getCategoryName()));
				}
			}
		}
	}