rem: if (strlen(argv[1]) > 2 && argv[1][0] == '0' && argv[1][1] == 'x') { num = strtoul(argv[1], NULL, 16); if (num > vm_get_kernel_aspace()->virtual_map.base) {  _dump_team_info((struct team *)num); return 0; } else { id = num; }
add: id = strtoul(argv[1], NULL, 0); if (IS_KERNEL_ADDRESS(id)) {  _dump_team_info((struct team *)id); return 0;
context: dump_team_info(int argc, char **argv){	struct team *team;	team_id id = -1;	unsigned long num;	struct hash_iterator i;	if (argc < 2) {		// just list the existing teams		hash_open(team_hash, &i);		while ((team = hash_next(team_hash, &i)) != NULL) {			dprintf("%p %5lx %s\n", team, team->id, team->name);		}		hash_close(team_hash, &i, false);		return 0;	}	// if the argument looks like a hex number, treat it as such	if (strlen(argv[1]) > 2 && argv[1][0] == '0' && argv[1][1] == 'x') {		num = strtoul(argv[1], NULL, 16);		if (num > vm_get_kernel_aspace()->virtual_map.base) {			// XXX semi-hack			_dump_team_info((struct team *)num);			return 0;		} else {			id = num;		}	}	// walk through the thread list, trying to match name or id	hash_open(team_hash, &i);	while ((team = hash_next(team_hash, &i)) != NULL) {		if ((team->name && strcmp(argv[1], team->name) == 0) || team->id == id) {			_dump_team_info(team);			break;		}	}	hash_close(team_hash, &i, false);	return 0;}