DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8879>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8879 java.lang.OutOfMemoryError when processing large CALS tables - memory leak? Summary: java.lang.OutOfMemoryError when processing large CALS tables - memory leak? Product: XalanJ2 Version: 2.3 Platform: PC OS/Version: Windows 9x Status: NEW Severity: Critical Priority: Other Component: org.apache.xalan AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] 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/spanspec[@spanname=./@spanname]/@namest"/> <xsl:variable name="nameend" select="ancestor::tgroup/spanspec[@spanname=./@spanname]/@nameend"/> <xsl:variable name="colst" select="ancestor::*[colspec/@colname=$namest]/colspec [@colname=$namest]/@colnum"/> <xsl:variable name="colend" select="ancestor::*[colspec/@colname=$nameend]/colspec [@colname=$nameend]/@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="{@id}"/> </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/colspec[@colname=$colname]"/> <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/colspec[@colname=$namest]"/> <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 [@colname=$colname]"/> <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 [@colname=$nameend]"/> <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 [@colname=$namest]"/> </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 [@colname=$nameend]"/> </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>
