[ http://issues.apache.org/jira/browse/XALANJ-997?page=history ]
Brian Minchau resolved XALANJ-997:
----------------------------------
Assign To: (was: Xalan Developers Mailing List)
Resolution: Cannot Reproduce
> java.lang.OutOfMemoryError when processing large CALS tables - memory leak?
> ---------------------------------------------------------------------------
>
> Key: XALANJ-997
> URL: http://issues.apache.org/jira/browse/XALANJ-997
> Project: XalanJ2
> Type: Bug
> Components: transformation, Xalan-interpretive
> Versions: 2.3
> Environment: Operating System: Windows 9x
> Platform: PC
> Reporter: Peter
> Priority: Critical
>
> Our application is an SGML to HTML rendering tool. We validate the SGML,
> convert to XML and transform to XML using XSLT.
> A significant portion of the data is CALS tables and we have borrowed from
> Norm
> Walsh's DocBook code to perform these conversions.
> When processing large tables, Xalan crashes with a java.lang.OutOfMemoryError
> and no further information.
> When I isolated which tables were causing the crash, I processed them
> individually. By removing some rows and entries I finally got the table to
> render but as soon as I add one entry back in, the crash will reoccur.
> This data is rendered successfully and properly using other XSLT processors
> such as Saxon. In a comparison (admittedly not complete) of Saxon and Xalan,
> both seemed to be returning exactly the same values and iterating the same
> number of times right up to the point where Xalan crashed.
> Our client is already using Xalan for other purposes and wishes to remain
> consistent in their toolset but will be unable to unless this problem is
> remedied. They don't seem to receptive to the 'If tables crash it, don't use
> tables!' solution. :P
> Below is the xslt code for processing the tables followed by the XML to be
> processed. Simply using the XML as your input with this xslt code will
> reproduce our error.
> Thanks
> ---------------------- cals_table.xsl
> <?xml version='1.0'?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version='1.0'>
> <xsl:param name="default.table.width" select="'80%'"/>
> <!-- ************************************************* -->
> <!-- ************************************************* -->
> <!-- Most of the following code was borrowed from Norm Walsh -->
> <xsl:template name="OUTPUT-ENTRY-ATTRIBUTES"/>
> <xsl:template match="table">
> <xsl:apply-templates/>
> </xsl:template>
> <xsl:template match="tgroup">
> <table>
> <xsl:if test="../@pgwide=1">
> <xsl:attribute name="width">100%</xsl:attribute>
> </xsl:if>
> <xsl:attribute name="cellpadding">6</xsl:attribute>
> <xsl:choose>
> <xsl:when test="../@frame='all'">
> <xsl:attribute name="border">1</xsl:attribute>
> </xsl:when>
> <xsl:when test="../@frame='none'">
> <xsl:attribute name="border">0</xsl:attribute>
> </xsl:when>
> <xsl:when test="../@frame='bottom'">
> <xsl:attribute name="border">1</xsl:attribute>
> </xsl:when>
> <xsl:when test="../@frame='top'">
> <xsl:attribute name="border">1</xsl:attribute>
> </xsl:when>
> <xsl:when test="../@frame='sides'">
> <xsl:attribute name="border">border</xsl:attribute>
> </xsl:when>
> <xsl:when test="../@frame='topbot'">
> <xsl:attribute name="border">1</xsl:attribute>
> </xsl:when>
> <xsl:otherwise>
> <xsl:attribute name="border">1</xsl:attribute>
> </xsl:otherwise>
> </xsl:choose>
> <xsl:variable name="colgroup">
> <colgroup>
> <xsl:call-template name="generate.colgroup">
> <xsl:with-param name="cols" select="@cols"/>
> </xsl:call-template>
> </colgroup>
> </xsl:variable>
> <xsl:variable name="table.width">
> <xsl:choose>
> <xsl:when test="$default.table.width = ''">
> <xsl:text>100%</xsl:text>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$default.table.width"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> <xsl:attribute name="width">
> <xsl:value-of select="$table.width"/>
> </xsl:attribute>
> <xsl:copy-of select="$colgroup"/>
> <xsl:apply-templates/>
> </table>
> <xsl:text disable-output-escaping="yes"><br/></xsl:text>
> <xsl:text disable-output-escaping="yes"><br/></xsl:text>
> </xsl:template>
> <xsl:template match="colspec"></xsl:template>
> <xsl:template match="spanspec"></xsl:template>
> <xsl:template match="thead|tfoot">
> <xsl:element name="{name(.)}">
> <xsl:if test="@align">
> <xsl:attribute name="align">
> <xsl:value-of select="@align"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@char">
> <xsl:attribute name="char">
> <xsl:value-of select="@char"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@charoff">
> <xsl:attribute name="charoff">
> <xsl:value-of select="@charoff"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@valign">
> <xsl:attribute name="valign">
> <xsl:value-of select="@valign"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:apply-templates/>
> </xsl:element>
> </xsl:template>
> <xsl:template match="tbody">
> <tbody>
> <xsl:if test="@align">
> <xsl:attribute name="align">
> <xsl:value-of select="@align"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@char">
> <xsl:attribute name="char">
> <xsl:value-of select="@char"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@charoff">
> <xsl:attribute name="charoff">
> <xsl:value-of select="@charoff"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@valign">
> <xsl:attribute name="valign">
> <xsl:value-of select="@valign"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:apply-templates/>
> </tbody>
> </xsl:template>
> <xsl:template match="row">
> <tr>
> <xsl:if test="@align">
> <xsl:attribute name="align">
> <xsl:value-of select="@align"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@char">
> <xsl:attribute name="char">
> <xsl:value-of select="@char"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@charoff">
> <xsl:attribute name="charoff">
> <xsl:value-of select="@charoff"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@valign">
> <xsl:attribute name="valign">
> <xsl:value-of select="@valign"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:apply-templates/>
> </tr>
> </xsl:template>
> <xsl:template match="thead/row/entry">
> <xsl:call-template name="process.cell">
> <xsl:with-param name="cellgi">th</xsl:with-param>
> </xsl:call-template>
> </xsl:template>
> <xsl:template match="tbody/row/entry">
> <xsl:call-template name="process.cell">
> <xsl:with-param name="cellgi">td</xsl:with-param>
> </xsl:call-template>
> </xsl:template>
> <xsl:template match="tfoot/row/entry">
> <xsl:call-template name="process.cell">
> <xsl:with-param name="cellgi">th</xsl:with-param>
> </xsl:call-template>
> </xsl:template>
> <xsl:template name="process.cell">
> <xsl:param name="cellgi">td</xsl:param>
> <xsl:variable name="empty.cell" select="count(node()) = 0"/>
> <xsl:variable name="entry.colnum">
> <xsl:call-template name="entry.colnum"/>
> </xsl:variable>
> <xsl:if test="$entry.colnum != ''">
> <xsl:variable name="prev.entry" select="preceding-sibling::*[1]"/>
> <xsl:variable name="prev.ending.colnum">
> <xsl:choose>
> <xsl:when test="$prev.entry">
> <xsl:call-template name="entry.ending.colnum">
> <xsl:with-param name="entry" select="$prev.entry"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>0</xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
>
> <xsl:call-template name="add-empty-entries">
> <xsl:with-param name="number">
> <xsl:choose>
> <xsl:when test="$prev.ending.colnum = ''">0</xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$entry.colnum - $prev.ending.colnum - 1"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:with-param>
> </xsl:call-template>
> </xsl:if>
> <xsl:element name="{$cellgi}">
> <xsl:if test="@spanname">
> <xsl:variable name="namest"
> select="ancestor::tgroup/[EMAIL PROTECTED]/@spanname]/@namest"/>
> <xsl:variable name="nameend"
> select="ancestor::tgroup/[EMAIL PROTECTED]/@spanname]/@nameend"/>
> <xsl:variable name="colst"
> select="ancestor::*[colspec/@colname=$namest]/colspec
> [EMAIL PROTECTED]/@colnum"/>
> <xsl:variable name="colend"
> select="ancestor::*[colspec/@colname=$nameend]/colspec
> [EMAIL PROTECTED]/@colnum"/>
> <xsl:attribute name="colspan"><xsl:value-of select="number($colend) -
> number($colst) + 1"/></xsl:attribute>
> </xsl:if>
> <xsl:if test="@morerows">
> <xsl:attribute name="rowspan">
> <xsl:value-of select="@morerows+1"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@namest">
> <xsl:attribute name="colspan">
> <xsl:call-template name="calculate.colspan"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@align">
> <xsl:attribute name="align">
> <xsl:value-of select="@align"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@char">
> <xsl:attribute name="char">
> <xsl:value-of select="@char"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@charoff">
> <xsl:attribute name="charoff">
> <xsl:value-of select="@charoff"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@valign">
> <xsl:attribute name="valign">
> <xsl:value-of select="@valign"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="@rowsep='1'">
> <xsl:attribute name="style">border-bottom:thin solid
> black</xsl:attribute>
> </xsl:if>
> <xsl:if test="not(preceding-sibling::*)
> and ancestor::row/@id">
> <a name="{ancestor::row/@id}"/>
> </xsl:if>
> <xsl:if test="@id">
> <a name="[EMAIL PROTECTED]"/>
> </xsl:if>
> <xsl:choose>
> <xsl:when test="$empty.cell">
> <xsl:text> </xsl:text>
> </xsl:when>
> <xsl:otherwise>
> <xsl:apply-templates/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:element>
> </xsl:template>
> <xsl:template name="add-empty-entries">
> <xsl:param name="number" select="'0'"/>
> <xsl:choose>
> <xsl:when test="$number <= 0"></xsl:when>
> <xsl:otherwise>
> <td> </td>
> <xsl:call-template name="add-empty-entries">
> <xsl:with-param name="number" select="$number - 1"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="entry.colnum">
> <xsl:param name="entry" select="."/>
> <xsl:choose>
> <xsl:when test="$entry/@colname">
> <xsl:variable name="colname" select="$entry/@colname"/>
> <xsl:variable name="colspec"
> select="$entry/ancestor::tgroup/[EMAIL PROTECTED]"/>
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$colspec"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:when test="$entry/@namest">
> <xsl:variable name="namest" select="$entry/@namest"/>
> <xsl:variable name="colspec"
> select="$entry/ancestor::tgroup/[EMAIL PROTECTED]"/>
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$colspec"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:when test="count($entry/preceding-sibling::*) = 0">1</xsl:when>
> <xsl:otherwise>
> <xsl:variable name="pcol">
> <xsl:call-template name="entry.ending.colnum">
> <xsl:with-param name="entry"
> select="$entry/preceding-sibling::*[1]"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:value-of select="$pcol + 1"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="entry.ending.colnum">
> <xsl:param name="entry" select="."/>
> <xsl:choose>
> <xsl:when test="$entry/@colname">
> <xsl:variable name="colname" select="$entry/@colname"/>
> <xsl:variable name="colspec" select="$entry/ancestor::tgroup/colspec
> [EMAIL PROTECTED]"/>
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$colspec"/>
> </xsl:call-template>
> </xsl:when>
>
> <xsl:when test="$entry/@nameend">
> <xsl:variable name="nameend" select="$entry/@nameend"/>
> <xsl:variable name="colspec" select="$entry/ancestor::tgroup/colspec
> [EMAIL PROTECTED]"/>
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$colspec"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:when test="count($entry/preceding-sibling::*) = 0">1</xsl:when>
>
> <xsl:otherwise>
> <xsl:variable name="pcol">
> <xsl:call-template name="entry.ending.colnum">
> <xsl:with-param name="entry"
> select="$entry/preceding-sibling::*[1]"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:value-of select="$pcol + 1"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="colspec.colnum">
> <xsl:param name="colspec" select="."/>
> <xsl:choose>
> <xsl:when test="$colspec/@colnum">
> <xsl:value-of select="$colspec/@colnum"/>
> </xsl:when>
> <xsl:when test="$colspec/preceding-sibling::colspec">
> <!--
> <xsl:variable name="prec.colspec.colnum">
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$colspec/preceding-
> sibling::colspec[1]"/>
> </xsl:call-template>
> </xsl:variable>
> -->
>
> <xsl:value-of select="count($colspec/preceding-sibling::colspec) + 1"/>
> </xsl:when>
> <xsl:otherwise>1</xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="generate.colgroup">
> <xsl:param name="cols" select="1"/>
> <xsl:param name="count" select="1"/>
> <xsl:choose>
> <xsl:when test="$count>$cols"></xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="generate.col">
> <xsl:with-param name="countcol" select="$count"/>
> </xsl:call-template>
> <xsl:call-template name="generate.colgroup">
> <xsl:with-param name="cols" select="$cols"/>
> <xsl:with-param name="count" select="$count+1"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="generate.col">
> <xsl:param name="countcol">1</xsl:param>
> <xsl:param name="colspecs" select="./colspec"/>
> <xsl:param name="count">1</xsl:param>
> <xsl:param name="colnum">1</xsl:param>
> <xsl:choose>
> <xsl:when test="$count>count($colspecs)">
> <xsl:text disable-output-escaping="yes"><col/></xsl:text>
> </xsl:when>
> <xsl:otherwise>
> <xsl:variable name="colspec" select="$colspecs[$count=position()]"/>
> <xsl:variable name="colspec.colnum">
> <xsl:choose>
> <xsl:when test="$colspec/@colnum">
> <xsl:value-of select="$colspec/@colnum"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$colnum"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:variable>
> <xsl:choose>
> <xsl:when test="$colspec.colnum=$countcol">
> <col>
> <xsl:if test="$colspec/@align">
> <xsl:attribute name="align">
> <xsl:value-of select="$colspec/@align"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="$colspec/@char">
> <xsl:attribute name="char">
> <xsl:value-of select="$colspec/@char"/>
> </xsl:attribute>
> </xsl:if>
> <xsl:if test="$colspec/@charoff">
> <xsl:attribute name="charoff">
> <xsl:value-of select="$colspec/@charoff"/>
> </xsl:attribute>
> </xsl:if>
> </col>
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="generate.col">
> <xsl:with-param name="countcol" select="$countcol"/>
> <xsl:with-param name="colspecs" select="$colspecs"/>
> <xsl:with-param name="count" select="$count+1"/>
> <xsl:with-param name="colnum">
> <xsl:choose>
> <xsl:when test="$colspec/@colnum">
> <xsl:value-of select="$colspec/@colnum + 1"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="$colnum + 1"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:with-param>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="colspec.colwidth">
> <!-- when this macro is called, the current context must be an entry -->
> <xsl:param name="colname"></xsl:param>
> <!-- .. = row, ../.. = thead|tbody, ../../.. = tgroup -->
> <xsl:param name="colspecs" select="../../../../tgroup/colspec"/>
> <xsl:param name="count">1</xsl:param>
> <xsl:choose>
> <xsl:when test="$count>count($colspecs)"></xsl:when>
> <xsl:otherwise>
> <xsl:variable name="colspec" select="$colspecs[$count=position()]"/>
> <xsl:choose>
> <xsl:when test="$colspec/@colname=$colname">
> <xsl:value-of select="$colspec/@colwidth"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="colspec.colwidth">
> <xsl:with-param name="colname" select="$colname"/>
> <xsl:with-param name="colspecs" select="$colspecs"/>
> <xsl:with-param name="count" select="$count+1"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> <xsl:template name="calculate.colspan">
> <xsl:param name="entry" select="."/>
> <xsl:variable name="namest" select="$entry/@namest"/>
> <xsl:variable name="nameend" select="$entry/@nameend"/>
> <xsl:variable name="scol">
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$entry/ancestor::tgroup/colspec
> [EMAIL PROTECTED]"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:variable name="ecol">
> <xsl:call-template name="colspec.colnum">
> <xsl:with-param name="colspec" select="$entry/ancestor::tgroup/colspec
> [EMAIL PROTECTED]"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:value-of select="$ecol - $scol + 1"/>
> </xsl:template>
> </xsl:stylesheet>
> ----------------------- table1.xml
> <?xml version="1.0"?>
> <!DOCTYPE erf[
> ]>
> <table
> frame="none"
> tabstyle="squeeze5"
> ><tgroup
> cols="19"
> rowsep="0"
> align="left"
> colsep="0"
> ><colspec
> colname="1"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="2"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="3"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="4"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="5"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="6"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="7"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="8"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="9"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="10"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="11"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="12"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="13"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="14"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="15"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="16"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="17"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="18"
> colwidth="50pt"
> align="left"
> ></colspec><colspec
> colname="19"
> colwidth="79pt"
> align="left"
> ></colspec><tbody
> valign="top"
> ><row
> ><entry
> align="right"
> ></entry><entry
> align="right"
> >1989</entry><entry
> align="right"
> >1990</entry><entry
> align="right"
> >1991</entry><entry
> align="right"
> >1992</entry><entry
> align="right"
> >1993</entry><entry
> align="right"
> >1994</entry><entry
> align="right"
> >1995</entry><entry
> align="right"
> >1996</entry><entry
> align="right"
> >1997</entry><entry
> align="right"
> >1998</entry><entry
> align="right"
> >1999</entry><entry
> align="right"
> >2000</entry><entry
> align="right"
> >2001</entry><entry
> align="right"
> >2002</entry><entry
> align="right"
> >2003</entry><entry
> align="right"
> >2004</entry><entry
> align="right"
> >2005</entry><entry
> align="right"
> >Total</entry></row><row
> ><entry
> align="justify"
> >January</entry><entry
> align="right"
> >532</entry><entry
> align="right"
> >35345</entry><entry
> align="right"
> >3454</entry><entry
> align="right"
> >6436</entry><entry
> align="right"
> >153</entry><entry
> align="right"
> >63474</entry><entry
> align="right"
> >23423</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >3573</entry><entry
> align="right"
> >534</entry><entry
> align="right"
> >886</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >899567</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >1139055</entry></row><row
> ><entry
> align="justify"
> >February</entry><entry
> align="right"
> >54245</entry><entry
> align="right"
> >3453</entry><entry
> align="right"
> >345</entry><entry
> align="right"
> >670</entry><entry
> align="right"
> >14452</entry><entry
> align="right"
> >57</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >625</entry><entry
> align="right"
> >864</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >557775</entry></row><row
> ><entry
> align="justify"
> >March</entry><entry
> align="right"
> >45224</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >34543</entry><entry
> align="right"
> >470</entry><entry
> align="right"
> >15232</entry><entry
> align="right"
> >575</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >3534</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >121330</entry></row><row
> ><entry
> align="justify"
> >April</entry><entry
> align="right"
> >245</entry><entry
> align="right"
> >770</entry><entry
> align="right"
> >7652</entry><entry
> align="right"
> >886</entry><entry
> align="right"
> >1400</entry><entry
> align="right"
> >7565</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >435</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >34202</entry></row><row
> ><entry
> align="justify"
> >May</entry><entry
> align="right"
> >534</entry><entry
> align="right"
> >64564</entry><entry
> align="right"
> >175</entry><entry
> align="right"
> >864</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >5645</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >99567</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >276673</entry></row><row
> ><entry
> align="justify"
> >June</entry><entry
> align="right"
> >5498</entry><entry
> align="right"
> >987</entry><entry
> align="right"
> >1457</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >576</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >34635</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >301565</entry></row><row
> ><entry
> align="justify"
> >July</entry><entry
> align="right"
> >885</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >6473</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >232</entry><entry
> align="right"
> >3456</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >3535</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >278289</entry></row><row
> ><entry
> align="justify"
> >August</entry><entry
> align="right"
> >4543</entry><entry
> align="right"
> >6546</entry><entry
> align="right"
> >273</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >3535</entry><entry
> align="right"
> >5399</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >34635</entry><entry
> align="right"
> >475277</entry></row><row
> ><entry
> align="justify"
> >September</entry><entry
> align="right"
> >7454</entry><entry
> align="right"
> >6346</entry><entry
> align="right"
> >27438</entry><entry
> align="right"
> >34563</entry><entry
> align="right"
> >3532</entry><entry
> align="right"
> >3534</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >232</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >34635</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >34635</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >181956</entry></row><row
> ><entry
> align="justify"
> >October</entry><entry
> align="right"
> >858</entry><entry
> align="right"
> >3453</entry><entry
> align="right"
> >366</entry><entry
> align="right"
> >345</entry><entry
> align="right"
> >23411</entry><entry
> align="right"
> >3454</entry><entry
> align="right"
> >435</entry><entry
> align="right"
> >3543</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >23446</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >2465</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >533573</entry></row><row
> ><entry
> align="justify"
> >November</entry><entry
> align="right"
> >9058</entry><entry
> align="right"
> >432</entry><entry
> align="right"
> >46452</entry><entry
> align="right"
> >367</entry><entry
> align="right"
> >1352</entry><entry
> align="right"
> >2432</entry><entry
> align="right"
> >6442</entry><entry
> align="right"
> >357</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >776453</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >243</entry><entry
> align="right"
> >234</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >1234</entry><entry
> align="right"
> >1020435</entry></row><row
> ><entry
> align="justify"
> >December</entry><entry
> align="right"
> >9585</entry><entry
> align="right"
> >543</entry><entry
> align="right"
> >235</entry><entry
> align="right"
> >867</entry><entry
> align="right"
> >32444</entry><entry
> align="right"
> >23423</entry><entry
> align="right"
> >234634</entry><entry
> align="right"
> >453</entry><entry
> align="right"
> >3452</entry><entry
> align="right"
> >54646</entry><entry
> align="right"
> >353</entry><entry
> align="right"
> >84564</entry><entry
> align="right"
> >4564</entry><entry
> align="right"
> >99576</entry><entry
> align="right"
> >34635</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >1452</entry><entry
> align="right"
> >586878</entry></row><row
> ><entry
> align="justify"
> >Total</entry><entry
> align="right"
> >140650</entry><entry
> align="right"
> >125335</entry><entry
> align="right"
> >130854</entry><entry
> align="right"
> >51813</entry><entry
> align="right"
> >100422</entry><entry
> align="right"
> >121584</entry><entry
> align="right"
> >366295</entry><entry
> align="right"
> >340140</entry><entry
> align="right"
> >189210</entry><entry
> align="right"
> >988808</entry><entry
> align="right"
> >23850</entry><entry
> align="right"
> >201274</entry><entry
> align="right"
> >375353</entry><entry
> align="right"
> >1135533</entry><entry
> align="right"
> >375355</entry><entry
> align="right"
> >499124</entry><entry
> align="right"
> >375357</entry><entry
> align="right"
> >5507008</entry></row></tbody></tgroup></table>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]