oStep = new Integer( iStep );
	final boolean zoomOut( )	{		if ( bStepFixed )			return false;		if ( ( iType & NUMERICAL ) == NUMERICAL )		{			if ( ( iType & LOGARITHMIC ) == LOGARITHMIC )			{				final double dStep = asDouble( oStep ).doubleValue( );				if ( ( Math.log( dStep ) / LOG_10 ) >= 1 )				{					oStep = new Double( dStep * 10 );				}				else				{					final int n = iaLogarithmicDeltas.length;					for ( int i = 0; i < n; i++ )					{						if ( (int) dStep == iaLogarithmicDeltas[i] )						{							oStep = new Double( iaLogarithmicDeltas[i + 1] );							return true;						}					}					return false;				}			}			else if ( ( iType & LINEAR ) == LINEAR )			{				double dStep = asDouble( oStep ).doubleValue( );				if ( bIntegralZoom )				{					double dPower = ( Math.log( dStep ) / LOG_10 );					if ( dPower < 0 )					{						dPower = Math.floor( dPower );					}					dPower = Math.pow( 10, dPower );					dStep /= dPower;					dStep = Math.round( dStep );					int n = iaLinearDeltas.length;					int i = 0;					for ( ; i < n; i++ )					{						if ( (double) dStep == iaLinearDeltas[i] )						{							if ( i < n - 1 )							{								dStep = iaLinearDeltas[i + 1] * dPower;								if ( dStep > 1 )									dStep = Math.round( dStep );							}							else							{								dPower *= 10;								dStep = iaLinearDeltas[0] * dPower;								if ( dStep > 1 )									dStep = Math.round( dStep );							}							break;						}					}					if ( i == n )					{						throw new RuntimeException( new ChartException( ChartEnginePlugin.ID,								ChartException.COMPUTATION,								"exception.step.zoom.out", //$NON-NLS-1$								new Object[]{									new Double( dStep )								},								ResourceBundle.getBundle( Messages.ENGINE,										rtc.getLocale( ) ) ) );					}					oStep = new Double( dStep );				}				else				{					dStep *= 2;					oStep = new Double( dStep );				}			}		}		else if ( ( iType & DATE_TIME ) == DATE_TIME )		{			int[] ia = null;			int iStep = asInteger( oStep );			int iUnit = asInteger( oUnit );			for ( int icu = 0; icu < iaCalendarUnits.length; icu++ )			{				if ( iUnit == iaCalendarUnits[icu] )				{					ia = iaCalendarDeltas[icu];					if ( ia == null ) // HANDLE YEARS SEPARATELY					{						iStep++; // NO UPPER LIMIT FOR YEARS					}					else					// HANDLE SECONDS, MINUTES, HOURS, DAYS, MONTHS					{						int i = 0, n = ia.length;						for ( ; i < n; i++ )						{							if ( ia[i] == iStep )							{								break;							}						}						if ( i == n - 1 ) // WE'RE AT THE LAST ELEMENT IN THE						// DELTAS ARRAY						{							ia = iaCalendarDeltas[icu + 1]; // UPGRADE UNIT TO							// NEXT DELTAS ARRAY							oUnit = new Integer( iaCalendarUnits[icu + 1] );							if ( ia == null ) // HANDLE YEARS							{								oStep = new Integer( 1 );								return false; // DO NO PROCEED FOR YEARS							}							i = -1; // MANIPULATE OFFSET TO START-1						}						oStep = new Integer( ia[i + 1] ); // RETURN NEXT STEP						// IN						// DELTAS ARRAY						break;					}				}			}		}		return true;	}