protected synchronized int expertise(MOB mob, int code)
	{
		if((mob!=null)&&(this.isNowAnAutoEffect()||(this.canBeUninvoked())||this.isAutoInvoked()))
		{
			final int[][] usageCache=mob.getAbilityUsageCache(ID());
			if(usageCache[Ability.CACHEINDEX_EXPERTISE]!=null)
				return usageCache[Ability.CACHEINDEX_EXPERTISE][code];
			final int[] xFlagCache=new int[ExpertiseLibrary.NUM_XFLAGS];
			for(int x=0;x<ExpertiseLibrary.NUM_XFLAGS;x++)
				xFlagCache[x]=CMLib.expertises().getApplicableExpertiseLevel(ID(),x,mob);
				usageCache[Ability.CACHEINDEX_EXPERTISE]=xFlagCache;
			return xFlagCache[code];
		}
		return 0;
	}