+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2002 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache POI" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache POI", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
package org.apache.poi.hssf.record;
+import org.apache.poi.util.BinaryTree;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.util.BinaryTree;
-import org.apache.poi.util.HexDump;
-
-import java.io.IOException;
+/**
+ * Handles the task of deserializing a SST string. The two main entry points are
+ *
+ * @author Glen Stampoultzis (glens at apache.org)
+ */
class SSTDeserializer
{
private int continuationExpectedChars;
/** this is the string we were working on before hitting the end of the current record. This string is NOT finished. */
private String unfinishedString;
- /** this is the total length of the current string being handled */
- private int totalLengthBytes;
- /** this is the offset into a string field of the actual string data */
- private int stringDataOffset;
/** this is true if the string uses wide characters */
private boolean wideChar;
-
-
- public SSTDeserializer(BinaryTree strings)
+ /** this is true if the string is a rich text string */
+ private boolean richText;
+ /** this is true if the string is a far east string or some other wierd string */
+ private boolean extendedText;
+ /** Number of formatting runs in this rich text field */
+ private short runCount;
+ /** Number of characters in current string */
+ private int charCount;
+ private int extensionLength;
+
+
+ public SSTDeserializer( BinaryTree strings )
{
this.strings = strings;
- setExpectedChars( 0 );
+ initVars();
+ }
+
+ private void initVars()
+ {
+ runCount = 0;
+ continuationExpectedChars = 0;
unfinishedString = "";
- totalLengthBytes = 0;
- stringDataOffset = 0;
+// bytesInCurrentSegment = 0;
+// stringDataOffset = 0;
wideChar = false;
+ richText = false;
+ extendedText = false;
}
/**
* strings may span across multiple continuations. Read the SST record
* carefully before beginning to hack.
*/
- public void manufactureStrings( final byte[] data, final int index,
- short size )
+ public void manufactureStrings( final byte[] data, final int initialOffset, short dataSize )
{
- int offset = index;
+ initVars();
- while ( offset < size )
+ int offset = initialOffset;
+ while ( ( offset - initialOffset ) < dataSize )
{
- int remaining = size - offset;
+ int remaining = dataSize - offset + initialOffset;
if ( ( remaining > 0 ) && ( remaining < LittleEndianConsts.SHORT_SIZE ) )
{
}
if ( remaining == LittleEndianConsts.SHORT_SIZE )
{
- setExpectedChars( LittleEndian.getUShort( data, offset ) );
+ setContinuationExpectedChars( LittleEndian.getUShort( data, offset ) );
unfinishedString = "";
break;
}
- short charCount = LittleEndian.getShort( data, offset );
-
- setupStringParameters( data, offset, charCount );
- if ( remaining < totalLengthBytes )
+ charCount = LittleEndian.getUShort( data, offset );
+ readStringHeader( data, offset );
+ boolean stringContinuesOverContinuation = remaining < totalStringSize();
+ if ( stringContinuesOverContinuation )
{
- setExpectedChars( calculateCharCount( totalLengthBytes - remaining ) );
- charCount -= getExpectedChars();
- totalLengthBytes = remaining;
+ int remainingBytes = ( initialOffset + dataSize ) - offset - stringHeaderOverhead();
+ setContinuationExpectedChars( charCount - calculateCharCount( remainingBytes ) );
+ charCount -= getContinuationExpectedChars();
}
else
{
- setExpectedChars( 0 );
+ setContinuationExpectedChars( 0 );
}
processString( data, offset, charCount );
- offset += totalLengthBytes;
- if ( getExpectedChars() != 0 )
+ offset += totalStringSize();
+ if ( getContinuationExpectedChars() != 0 )
{
break;
}
}
}
+// private void dump( final byte[] data, int offset, int length )
+// {
+// try
+// {
+// System.out.println( "------------------- SST DUMP -------------------------" );
+// HexDump.dump( (byte[]) data, offset, System.out, offset, length );
+// }
+// catch ( IOException e )
+// {
+// }
+// catch ( ArrayIndexOutOfBoundsException e )
+// {
+// }
+// catch ( IllegalArgumentException e )
+// {
+// }
+// }
/**
* Detemines the option types for the string (ie, compressed or uncompressed unicode, rich text string or
* plain string etc) and calculates the length and offset for the string.
*
- * @param data
- * @param index
- * @param char_count
*/
- private void setupStringParameters( final byte[] data, final int index,
- final int char_count )
+ private void readStringHeader( final byte[] data, final int index )
{
+
byte optionFlag = data[index + LittleEndianConsts.SHORT_SIZE];
wideChar = ( optionFlag & 1 ) == 1;
- boolean farEast = ( optionFlag & 4 ) == 4;
- boolean richText = ( optionFlag & 8 ) == 8;
-
- totalLengthBytes = SSTRecord.STRING_MINIMAL_OVERHEAD + calculateByteCount( char_count );
- stringDataOffset = SSTRecord.STRING_MINIMAL_OVERHEAD;
+ extendedText = ( optionFlag & 4 ) == 4;
+ richText = ( optionFlag & 8 ) == 8;
+ runCount = 0;
if ( richText )
{
- short run_count = LittleEndian.getShort( data, index + stringDataOffset );
-
- stringDataOffset += LittleEndianConsts.SHORT_SIZE;
- totalLengthBytes += LittleEndianConsts.SHORT_SIZE + ( LittleEndianConsts.INT_SIZE * run_count );
+ runCount = LittleEndian.getShort( data, index + SSTRecord.STRING_MINIMAL_OVERHEAD );
}
- if ( farEast )
+ extensionLength = 0;
+ if ( extendedText )
{
- int extension_length = LittleEndian.getInt( data, index + stringDataOffset );
-
- stringDataOffset += LittleEndianConsts.INT_SIZE;
- totalLengthBytes += LittleEndianConsts.INT_SIZE + extension_length;
+ extensionLength = LittleEndian.getInt( data, index + SSTRecord.STRING_MINIMAL_OVERHEAD );
}
+
}
- private void processString( final byte[] data, final int index,
- final short char_count )
+ /**
+ * Reads a string or the first part of a string.
+ *
+ * @param characters the number of characters to write.
+ *
+ * @return the number of bytes written.
+ */
+ private int processString( final byte[] data, final int dataIndex, final int characters )
{
- byte[] stringDataBuffer = new byte[totalLengthBytes];
- int length = SSTRecord.STRING_MINIMAL_OVERHEAD + calculateByteCount( char_count );
- byte[] bstring = new byte[length];
- System.arraycopy( data, index, stringDataBuffer, 0, stringDataBuffer.length );
+ // length is the length we store it as. not the length that is read.
+ int length = SSTRecord.STRING_MINIMAL_OVERHEAD + calculateByteCount( characters );
+ byte[] unicodeStringBuffer = new byte[length];
+
int offset = 0;
- LittleEndian.putShort( bstring, offset, char_count );
+ // Set the length in characters
+ LittleEndian.putUShort( unicodeStringBuffer, offset, characters );
offset += LittleEndianConsts.SHORT_SIZE;
- bstring[offset] = stringDataBuffer[offset];
-
-// System.out.println( "offset = " + stringDataOffset );
-// System.out.println( "length = " + (bstring.length - STRING_MINIMAL_OVERHEAD) );
-// System.out.println( "src.length = " + str_data.length );
-// try
-// {
-// System.out.println( "----------------------- DUMP -------------------------" );
-// HexDump.dump( stringDataBuffer, (long)stringDataOffset, System.out, 1);
-// }
-// catch ( IOException e )
-// {
-// }
-// catch ( ArrayIndexOutOfBoundsException e )
-// {
-// }
-// catch ( IllegalArgumentException e )
-// {
-// }
- System.arraycopy( stringDataBuffer, stringDataOffset, bstring,
- SSTRecord.STRING_MINIMAL_OVERHEAD,
- bstring.length - SSTRecord.STRING_MINIMAL_OVERHEAD );
+ // Set the option flags
+ unicodeStringBuffer[offset] = data[dataIndex + offset];
+ // Copy in the string data
+ int bytesRead = unicodeStringBuffer.length - SSTRecord.STRING_MINIMAL_OVERHEAD;
+ arraycopy( data, dataIndex + stringHeaderOverhead(), unicodeStringBuffer, SSTRecord.STRING_MINIMAL_OVERHEAD, bytesRead );
+ // Create the unicode string
UnicodeString string = new UnicodeString( UnicodeString.sid,
- (short) bstring.length,
- bstring );
+ (short) unicodeStringBuffer.length,
+ unicodeStringBuffer );
- if ( getExpectedChars() != 0 )
+ if ( isStringFinished() )
{
- unfinishedString = string.getString();
+ Integer integer = new Integer( strings.size() );
+ addToStringTable( strings, integer, string );
}
else
{
- Integer integer = new Integer( strings.size() );
- addToStringTable( strings, integer, string );
+ unfinishedString = string.getString();
}
+
+ return bytesRead;
+ }
+
+ private boolean isStringFinished()
+ {
+ return getContinuationExpectedChars() == 0;
}
/**
* Okay, we are doing some major cheating here. Because we can't handle rich text strings properly
- * we end up getting duplicate strings. To get around this I'm doing do things: 1. Converting rich
+ * we end up getting duplicate strings. To get around this I'm doing two things: 1. Converting rich
* text to normal text and 2. If there's a duplicate I'm adding a space onto the end. Sneaky perhaps
* but it gets the job done until we can handle this a little better.
*/
static public void addToStringTable( BinaryTree strings, Integer integer, UnicodeString string )
{
- if (string.isRichText())
- string.setOptionFlags( (byte)(string.getOptionFlags() & (~8) ) );
+
+ if ( string.isRichText() )
+ string.setOptionFlags( (byte) ( string.getOptionFlags() & ( ~8 ) ) );
+ if ( string.isExtendedText() )
+ string.setOptionFlags( (byte) ( string.getOptionFlags() & ( ~4 ) ) );
boolean added = false;
- while (added == false)
+ while ( added == false )
{
try
{
strings.put( integer, string );
added = true;
}
- catch( Exception ignore )
+ catch ( Exception ignore )
{
string.setString( string.getString() + " " );
}
}
- }
+ }
private int calculateCharCount( final int byte_count )
{
- return byte_count / ( wideChar ? LittleEndianConsts.SHORT_SIZE
- : LittleEndianConsts.BYTE_SIZE );
+ return byte_count / ( wideChar ? LittleEndianConsts.SHORT_SIZE : LittleEndianConsts.BYTE_SIZE );
}
/**
*
* @param record the Continue record's byte data
*/
-
public void processContinueRecord( final byte[] record )
{
- if ( getExpectedChars() == 0 )
+ if ( isStringFinished() )
{
- unfinishedString = "";
- totalLengthBytes = 0;
- stringDataOffset = 0;
- wideChar = false;
+ initVars();
manufactureStrings( record, 0, (short) record.length );
}
else
{
- int data_length = record.length - LittleEndianConsts.BYTE_SIZE;
+ // reset the wide bit because that can change across a continuation. the fact that it's
+ // actually rich text doesn't change across continuations even though the rich text
+ // may on longer be set in the "new" option flag. confusing huh?
+ wideChar = ( record[0] & 1 ) == 1;
- if ( calculateByteCount( getExpectedChars() ) > data_length )
+ if ( stringSpansContinuation( record.length - LittleEndianConsts.BYTE_SIZE ) )
{
-
- // create artificial data to create a UnicodeString
- byte[] input =
- new byte[record.length + LittleEndianConsts.SHORT_SIZE];
- short size = (short) ( ( ( record[0] & 1 ) == 1 )
- ? ( data_length / LittleEndianConsts.SHORT_SIZE )
- : ( data_length / LittleEndianConsts.BYTE_SIZE ) );
-
- LittleEndian.putShort( input, (byte) 0, size );
- System.arraycopy( record, 0, input, LittleEndianConsts.SHORT_SIZE, record.length );
- UnicodeString ucs = new UnicodeString( UnicodeString.sid, (short) input.length, input );
-
- unfinishedString = unfinishedString + ucs.getString();
- setExpectedChars( getExpectedChars() - size );
+ processEntireContinuation( record );
}
else
{
- setupStringParameters( record, -LittleEndianConsts.SHORT_SIZE,
- getExpectedChars() );
- byte[] str_data = new byte[totalLengthBytes];
- int length = SSTRecord.STRING_MINIMAL_OVERHEAD
- + ( calculateByteCount( getExpectedChars() ) );
- byte[] bstring = new byte[length];
-
- // Copy data from the record into the string
- // buffer. Copy skips the length of a short in the
- // string buffer, to leave room for the string length.
- System.arraycopy( record, 0, str_data,
- LittleEndianConsts.SHORT_SIZE,
- str_data.length
- - LittleEndianConsts.SHORT_SIZE );
-
- // write the string length
- LittleEndian.putShort( bstring, 0,
- (short) getExpectedChars() );
-
- // write the options flag
- bstring[LittleEndianConsts.SHORT_SIZE] =
- str_data[LittleEndianConsts.SHORT_SIZE];
-
- // copy the bytes/words making up the string; skipping
- // past all the overhead of the str_data array
- System.arraycopy( str_data, stringDataOffset, bstring,
- SSTRecord.STRING_MINIMAL_OVERHEAD,
- bstring.length - SSTRecord.STRING_MINIMAL_OVERHEAD );
-
- // use special constructor to create the final string
- UnicodeString string =
- new UnicodeString( UnicodeString.sid,
- (short) bstring.length, bstring,
- unfinishedString );
- Integer integer = new Integer( strings.size() );
-
-// field_3_strings.put( integer, string );
- addToStringTable( strings, integer, string );
- manufactureStrings( record, totalLengthBytes - LittleEndianConsts.SHORT_SIZE, (short) record.length );
+ readStringRemainder( record );
}
}
+
}
/**
- * @return the number of characters we expect in the first
- * sub-record in a subsequent continuation record
+ * Reads the remainder string and any subsequent strings from the continuation record.
+ *
+ * @param record The entire continuation record data.
+ */
+ private void readStringRemainder( final byte[] record )
+ {
+ int stringRemainderSizeInBytes = calculateByteCount( getContinuationExpectedChars() );
+// stringDataOffset = LittleEndianConsts.BYTE_SIZE;
+ byte[] unicodeStringData = new byte[SSTRecord.STRING_MINIMAL_OVERHEAD
+ + calculateByteCount( getContinuationExpectedChars() )];
+
+ // write the string length
+ LittleEndian.putShort( unicodeStringData, 0, (short) getContinuationExpectedChars() );
+
+ // write the options flag
+ unicodeStringData[LittleEndianConsts.SHORT_SIZE] = createOptionByte( wideChar, richText, extendedText );
+
+ // copy the bytes/words making up the string; skipping
+ // past all the overhead of the str_data array
+ arraycopy( record, LittleEndianConsts.BYTE_SIZE, unicodeStringData,
+ SSTRecord.STRING_MINIMAL_OVERHEAD,
+ unicodeStringData.length - SSTRecord.STRING_MINIMAL_OVERHEAD );
+
+ // use special constructor to create the final string
+ UnicodeString string = new UnicodeString( UnicodeString.sid,
+ (short) unicodeStringData.length, unicodeStringData,
+ unfinishedString );
+ Integer integer = new Integer( strings.size() );
+
+ addToStringTable( strings, integer, string );
+
+ int newOffset = offsetForContinuedRecord( stringRemainderSizeInBytes );
+ manufactureStrings( record, newOffset, (short) ( record.length - newOffset ) );
+ }
+
+ /**
+ * Calculates the size of the string in bytes based on the character width
*/
+ private int stringSizeInBytes()
+ {
+ return calculateByteCount( charCount );
+ }
- int getExpectedChars()
+ /**
+ * Calculates the size of the string in byes. This figure includes all the over
+ * heads for the string.
+ */
+ private int totalStringSize()
{
- return continuationExpectedChars;
+ return stringSizeInBytes()
+ + stringHeaderOverhead()
+ + LittleEndianConsts.INT_SIZE * runCount
+ + extensionLength;
}
- private void setExpectedChars( final int count )
+ private int stringHeaderOverhead()
{
- continuationExpectedChars = count;
+ return SSTRecord.STRING_MINIMAL_OVERHEAD
+ + ( richText ? LittleEndianConsts.SHORT_SIZE : 0 )
+ + ( extendedText ? LittleEndianConsts.INT_SIZE : 0 );
}
- private int calculateByteCount( final int character_count )
+ private int offsetForContinuedRecord( int stringRemainderSizeInBytes )
{
- return character_count * ( wideChar ? LittleEndianConsts.SHORT_SIZE : LittleEndianConsts.BYTE_SIZE );
+ return stringRemainderSizeInBytes + LittleEndianConsts.BYTE_SIZE
+ + runCount * LittleEndianConsts.INT_SIZE + extensionLength;
}
+ private byte createOptionByte( boolean wideChar, boolean richText, boolean farEast )
+ {
+ return (byte) ( ( wideChar ? 1 : 0 ) + ( farEast ? 4 : 0 ) + ( richText ? 8 : 0 ) );
+ }
/**
- * @return the unfinished string
+ * If the continued record is so long is spans into the next continue then
+ * simply suck the remaining string data into the existing <code>unfinishedString</code>.
+ *
+ * @param record The data from the continuation record.
*/
+ private void processEntireContinuation( final byte[] record )
+ {
+ // create artificial data to create a UnicodeString
+ int dataLengthInBytes = record.length - LittleEndianConsts.BYTE_SIZE;
+ byte[] unicodeStringData = new byte[record.length + LittleEndianConsts.SHORT_SIZE];
- String getUnfinishedString()
+ LittleEndian.putShort( unicodeStringData, (byte) 0, (short) calculateCharCount( dataLengthInBytes ) );
+ arraycopy( record, 0, unicodeStringData, LittleEndianConsts.SHORT_SIZE, record.length );
+ UnicodeString ucs = new UnicodeString( UnicodeString.sid, (short) unicodeStringData.length, unicodeStringData );
+
+ unfinishedString = unfinishedString + ucs.getString();
+ setContinuationExpectedChars( getContinuationExpectedChars() - calculateCharCount( dataLengthInBytes ) );
+ }
+
+ private boolean stringSpansContinuation( int continuationSizeInBytes )
{
- return unfinishedString;
+ return calculateByteCount( getContinuationExpectedChars() ) > continuationSizeInBytes;
}
/**
- * @return the total length of the current string
+ * @return the number of characters we expect in the first
+ * sub-record in a subsequent continuation record
*/
- int getTotalLength()
+ int getContinuationExpectedChars()
+ {
+ return continuationExpectedChars;
+ }
+
+ private void setContinuationExpectedChars( final int count )
+ {
+ continuationExpectedChars = count;
+ }
+
+ private int calculateByteCount( final int character_count )
{
- return totalLengthBytes;
+ return character_count * ( wideChar ? LittleEndianConsts.SHORT_SIZE : LittleEndianConsts.BYTE_SIZE );
}
+
/**
- * @return offset into current string data
+ * Copies an array from the specified source array, beginning at the
+ * specified position, to the specified position of the destination array.
+ * A subsequence of array components are copied from the source
+ * array referenced by <code>src</code> to the destination array
+ * referenced by <code>dst</code>. The number of components copied is
+ * equal to the <code>length</code> argument. The components at
+ * positions <code>srcOffset</code> through
+ * <code>srcOffset+length-1</code> in the source array are copied into
+ * positions <code>dstOffset</code> through
+ * <code>dstOffset+length-1</code>, respectively, of the destination
+ * array.
+ * <p>
+ * If the <code>src</code> and <code>dst</code> arguments refer to the
+ * same array object, then the copying is performed as if the
+ * components at positions <code>srcOffset</code> through
+ * <code>srcOffset+length-1</code> were first copied to a temporary
+ * array with <code>length</code> components and then the contents of
+ * the temporary array were copied into positions
+ * <code>dstOffset</code> through <code>dstOffset+length-1</code> of the
+ * destination array.
+ * <p>
+ * If <code>dst</code> is <code>null</code>, then a
+ * <code>NullPointerException</code> is thrown.
+ * <p>
+ * If <code>src</code> is <code>null</code>, then a
+ * <code>NullPointerException</code> is thrown and the destination
+ * array is not modified.
+ * <p>
+ * Otherwise, if any of the following is true, an
+ * <code>ArrayStoreException</code> is thrown and the destination is
+ * not modified:
+ * <ul>
+ * <li>The <code>src</code> argument refers to an object that is not an
+ * array.
+ * <li>The <code>dst</code> argument refers to an object that is not an
+ * array.
+ * <li>The <code>src</code> argument and <code>dst</code> argument refer to
+ * arrays whose component types are different primitive types.
+ * <li>The <code>src</code> argument refers to an array with a primitive
+ * component type and the <code>dst</code> argument refers to an array
+ * with a reference component type.
+ * <li>The <code>src</code> argument refers to an array with a reference
+ * component type and the <code>dst</code> argument refers to an array
+ * with a primitive component type.
+ * </ul>
+ * <p>
+ * Otherwise, if any of the following is true, an
+ * <code>IndexOutOfBoundsException</code> is
+ * thrown and the destination is not modified:
+ * <ul>
+ * <li>The <code>srcOffset</code> argument is negative.
+ * <li>The <code>dstOffset</code> argument is negative.
+ * <li>The <code>length</code> argument is negative.
+ * <li><code>srcOffset+length</code> is greater than
+ * <code>src.length</code>, the length of the source array.
+ * <li><code>dstOffset+length</code> is greater than
+ * <code>dst.length</code>, the length of the destination array.
+ * </ul>
+ * <p>
+ * Otherwise, if any actual component of the source array from
+ * position <code>srcOffset</code> through
+ * <code>srcOffset+length-1</code> cannot be converted to the component
+ * type of the destination array by assignment conversion, an
+ * <code>ArrayStoreException</code> is thrown. In this case, let
+ * <b><i>k</i></b> be the smallest nonnegative integer less than
+ * length such that <code>src[srcOffset+</code><i>k</i><code>]</code>
+ * cannot be converted to the component type of the destination
+ * array; when the exception is thrown, source array components from
+ * positions <code>srcOffset</code> through
+ * <code>srcOffset+</code><i>k</i><code>-1</code>
+ * will already have been copied to destination array positions
+ * <code>dstOffset</code> through
+ * <code>dstOffset+</code><i>k</I><code>-1</code> and no other
+ * positions of the destination array will have been modified.
+ * (Because of the restrictions already itemized, this
+ * paragraph effectively applies only to the situation where both
+ * arrays have component types that are reference types.)
+ *
+ * @param src the source array.
+ * @param src_position start position in the source array.
+ * @param dst the destination array.
+ * @param dst_position pos start position in the destination data.
+ * @param length the number of array elements to be copied.
+ * @exception IndexOutOfBoundsException if copying would cause
+ * access of data outside array bounds.
+ * @exception ArrayStoreException if an element in the <code>src</code>
+ * array could not be stored into the <code>dest</code> array
+ * because of a type mismatch.
+ * @exception NullPointerException if either <code>src</code> or
+ * <code>dst</code> is <code>null</code>.
*/
+ private void arraycopy( byte[] src, int src_position,
+ byte[] dst, int dst_position,
+ int length )
+ {
+ System.arraycopy( src, src_position, dst, dst_position, length );
+ }
- int getStringDataOffset()
+ /**
+ * @return the unfinished string
+ */
+ String getUnfinishedString()
{
- return stringDataOffset;
+ return unfinishedString;
}
/**
* @return true if current string uses wide characters
*/
-
boolean isWideChar()
{
return wideChar;
-FC 00 20
-20 B8 05 00 00 B0 02 00 00 0C 00 00 4D 61 6E 75
-66 61 63 74 75 72 65 72 0B 00 00 50 61 72 74 20
-4E 75 6D 62 65 72 05 00 00 53 63 61 6C 65 04 00
-00 54 79 70 65 04 00 00 4E 61 6D 65 08 00 00 43
-6F 6D 6D 65 6E 74 73 08 00 00 41 4D 54 2D 45 52
-54 4C 07 00 00 48 6F 74 20 52 6F 64 10 00 00 33
-32 20 46 6F 72 64 20 52 6F 61 64 73 74 65 72 08
-00 00 4D 6F 6E 6F 67 72 61 6D 08 00 00 53 68 6F
-77 20 52 6F 64 07 00 00 48 61 6E 67 6D 61 6E 11
-00 00 50 65 74 65 72 62 69 6C 74 20 57 72 65 63
-6B 65 72 15 00 00 45 61 73 74 65 72 6E 20 41 69
-72 6C 69 6E 65 73 20 44 43 2D 33 11 00 00 4D 61
-73 65 72 61 74 69 20 4D 65 72 61 6B 20 53 53 1A
-00 00 44 6F 75 67 6C 61 73 20 50 2D 37 30 20 4E
-69 67 68 74 20 46 69 67 68 74 65 72 17 00 00 35
-35 20 43 68 65 76 79 20 53 74 72 65 65 74 20 4D
-61 63 68 69 6E 65 0C 00 00 54 77 65 65 64 79 20
-50 69 65 20 32 13 00 00 48 75 65 79 20 52 65 73
-63 75 65 20 43 68 6F 70 70 65 72 10 00 00 4D 61
-7A 64 61 20 4D 58 2D 35 20 4D 69 61 74 61 0A 00
-00 53 70 6F 72 74 73 20 43 61 72 05 00 00 54 72
-75 63 6B 06 00 00 52 6F 63 6B 65 74 09 00 00 50
-61 72 74 73 20 4B 69 74 0E 00 00 43 69 76 69 6C
-69 61 6E 20 50 6C 61 6E 65 0E 00 00 4D 69 6C 69
-74 61 72 79 20 50 6C 61 6E 65 0F 00 00 53 63 69
-65 6E 63 65 20 46 69 63 74 69 6F 6E 1A 00 00 44
-6F 6E 20 47 61 72 6C 69 74 73 20 57 79 6E 6E 27
-73 20 43 68 61 72 67 65 72 19 00 00 44 6F 6E 20
-47 61 72 6C 69 74 73 20 57 79 6E 6E 27 73 20 4A
-61 6D 6D 65 72 1A 00 00 50 61 63 6B 61 72 64 20
-42 6F 61 74 74 61 69 6C 20 53 70 65 65 64 73 74
-65 72 0E 00 00 52 65 76 65 6C 6C 20 47 65 72 6D
-61 6E 79 05 00 00 30 34 31 34 36 04 00 00 31 2F
-32 34 04 00 00 31 2F 37 32 0E 00 00 4D 65 20 32
-36 32 20 41 2D 31 61 2F 55 33 09 00 00 53 54 43
-20 53 74 61 72 74 04 00 00 34 63 2D 39 05 00 00
-31 2F 32 38 38 0C 00 00 50 72 6F 74 6F 6E 2D 4B
-20 4D 69 72 04 00 00 34 63 2D 37 0E 00 00 50 72
-6F 74 6F 6E 2D 4B 20 41 73 74 72 61 05 00 00 34
-63 2D 31 37 0E 00 00 50 72 6F 74 6F 6E 2D 4B 20
-5A 61 72 79 61 13 00 00 41 63 63 75 72 61 74 65
-20 4D 69 6E 69 61 74 75 72 65 73 04 00 00 33 34
-32 30 04 00 00 31 2F 34 38 0F 00 00 53 42 44 2D
-31 20 44 61 75 6E 74 6C 65 73 73 1B 00 00 77 2F
-56 65 72 6C 69 6E 64 65 6E 20 31 33 37 38 20 44
-65 74 61 69 6C 20 53 65 74 04 00 00 38 32 38 33
-0C 00 00 54 72 6F 75 62 6C 65 6D 61 6B 65 72 04
-00 00 32 37 33 37 0E 00 00 44 61 79 74 6F 6E 61
-20 53 70 69 64 65 72 04 00 00 38 31 32 36 04 00
-00 31 2F 32 35 06 00 00 48 65 6C 6C 65 72 05 00
-00 38 30 34 34 33 05 00 00 31 2F 31 34 34 12 00
-00 42 72 65 69 74 6C 69 6E 20 4F 72 62 69 74 65
-72 20 33 0F 00 00 53 68 61 6E 67 68 61 69 20 44
-72 61 67 6F 6E 04 00 00 31 39 39 38 04 00 00 31
-2F 39 36 0F 00 00 41 72 69 61 6E 65 20 35 20 52
-6F 63 6B 65 74 0F 00 00 52 65 76 65 6C 6C 2D 4D
-6F 6E 6F 67 72 61 6D 07 00 00 38 35 2D 35 39 33
-34 0F 00 00 50 42 59 2D 35 41 20 43 61 74 61 6C
-69 6E 61 0A 00 00 50 72 6F 4D 6F 64 65 6C 65 72
-07 00 00 47 6C 65 6E 63 6F 65 05 00 00 30 35 32
-30 32 04 00 00 31 2F 33 35 16 00 00 50 69 61 73
-65 63 6B 69 20 5A 56 2D 38 50 20 41 69 72 67 65
-65 70 08 00 00 48 61 73 65 67 61 77 61 05 00 00
-30 39 31 36 39 20 00 00 53 42 44 2D 33 20 44 61
-75 6E 74 6C 65 73 73 20 27 55 53 53 20 45 6E 74
-65 72 70 72 69 73 65 27 0C 00 00 53 69 6C 76 65
-72 20 43 6C 6F 75 64 06 00 00 53 43 34 38 30 31
-19 00 00 53 75 70 65 72 6D 61 72 69 6E 65 20 53
-70 69 74 65 66 75 6C 20 46 2E 31 34 06 00 00 52
-65 76 65 6C 6C 07 00 00 38 35 2D 31 36 35 34 0D
-00 00 50 2D 35 31 42 20 4D 75 73 74 61 6E 67 09
-00 00 50 72 6F 46 69 6E 69 73 68 06 00 00 44 72
-61 67 6F 6E 04 00 00 35 39 30 31 0B 00 00 46 6F
-6B 6B 65 72 20 44 72 2E 31 07 00 00 49 74 61 6C
-65 72 69 03 00 00 38 34 36 25 00 00 43 2D 31 33
-30 4A 20 48 65 72 63 75 6C 65 73 20 48 65 61 76
-79 20 54 72 61 6E 73 70 6F 72 74 20 50 6C 61 6E
-65 04 00 00 37 36 31 30 15 00 00 46 65 72 72 61
-72 69 20 46 35 30 20 42 61 72 63 68 65 74 74 61
-03 00 00 41 4D 54 08 00 00 54 33 37 34 2D 32 32
-35 0D 00 00 43 6F 72 76 61 69 72 20 4D 6F 6E 7A
-61 04 00 00 35 30 30 33 0B 00 00 4D 63 4C 61 72
-65 6E 20 4D 38 42 0D 00 00 52 65 76 65 6C 6C 20
-4C 6F 64 65 6C 61 05 00 00 48 2D 32 36 33 03 00
-00 75 6E 6B 23 00 00 42 6F 65 69 6E 67 20 53 53
-54 20 50 61 6E 41 6D 20 43 6C 69 70 70 65 72 20
-53 75 70 65 72 73 6F 6E 69 63 05 00 00 30 35 39
-30 39 05 00 00 31 2F 33 30 30 1D 00 00 4E 75 63
-6C 65 61 72 20 50 6F 77 65 72 65 64 20 53 70 61
-63 65 20 53 74 61 74 69 6F 6E 04 00 00 38 37 36
-34 06 00 00 31 2F 32 35 30 30 19 00 00 53 74 61
-72 20 54 72 65 6B 20 44 65 65 70 20 53 70 61 63
-65 20 4E 69 6E 65 23 00 00 46 69 62 65 72 2D 6F
-70 74 69 63 20 4C 69 67 68 74 69 6E 67 2C 20 73
-6B 69 6C 6C 20 6C 65 76 65 6C 20 33 0D 00 00 53
-6B 69 6C 6C 20 6C 65 76 65 6C 20 33 04 00 00 38
-31 35 38 16 00 00 42 6C 75 65 70 72 69 6E 74 65
-72 20 50 61 72 74 73 20 50 61 63 6B 13 00 00 45
-6E 67 69 6E 65 73 20 61 6E 64 20 67 72 69 6C 6C
-65 73 05 00 00 33 30 30 33 37 05 00 00 31 2F 32
-30 30 1E 00 00 4D 61 6E 20 49 6E 20 53 70 61 63
-65 20 52 6F 63 6B 65 74 20 43 6F 6C 6C 65 63 74
-69 6F 6E 53 00 00 4D 65 72 63 75 72 79 20 41 74
-6C 61 73 2C 20 4D 65 72 63 75 72 79 20 52 65 64
-73 74 6F 6E 65 2C 20 47 65 6D 69 6E 69 20 54 69
-74 61 6E 20 49 49 2C 20 53 61 74 75 72 6E 20 31
-42 20 41 70 6F 6C 6C 6F 2C 20 53 61 74 75 72 6E
-20 56 20 41 70 6F 6C 6C 6F 04 00 00 35 30 38 33
-04 00 00 31 2F 33 32 11 00 00 41 70 6F 6C 6C 6F
-20 53 70 61 63 65 63 72 61 66 74 09 00 00 4D 69
-6E 69 63 72 61 66 74 05 00 00 31 31 32 32 30 04
-00 00 31 2F 31 36 24 00 00 31 39 35 35 20 4D 65
-72 63 65 64 65 73 20 33 30 30 53 4C 20 22 47 75
-6C 6C 77 69 6E 67 22 20 43 6F 75 70 65 07 00 00
-38 35 2D 36 38 35 39 24 00 00 4D 75 73 74 61 6E
-67 20 4D 75 73 63 6C 65 20 54 72 69 6F 20 27 36
-30 73 2C 20 27 37 30 73 2C 20 27 38 30 73 35 00
-00 31 39 36 34 20 31 2F 32 20 43 6F 6E 76 65 72
-74 69 62 6C 65 2C 20 31 39 37 30 20 42 6F 73 73
-20 33 30 32 2C 20 31 39 38 39 20 43 6F 6E 76 65
-72 74 69 62 6C 65 06 00 00 54 61 6D 69 79 61 05
-00 00 32 34 31 37 30 0A 00 00 4D 6F 72 67 61 6E
-20 34 2F 34 07 00 00 38 35 2D 32 34 39 31 11 00
-00 36 37 20 43 6F 72 76 65 74 74 65 20 43 6F 75
-70 65 07 00 00 38 35 2D 32 35 33 34 0F 00 00 53
-68 65 6C 62 79 20 53 65 72 69 65 73 20 31 03 00
-00 35 36 32 11 00 00 41 73 74 6F 6E 20 4D 61 72
-74 69 6E 20 44 42 20 34 05 00 00 30 37 33 32 30
-13 00 00 50 6F 72 73 63 68 65 20 39 31 31 20 43
-61 72 72 65 72 61 07 00 00 54 65 73 74 6F 72 73
-03 00 00 33 38 36 04 00 00 32 39 37 32 16 00 00
-4D 65 72 63 65 64 65 73 20 33 30 30 20 53 4C 52
-20 22 37 32 32 22 08 00 00 4C 69 6E 64 62 65 72
-67 05 00 00 37 30 39 35 36 19 00 00 48 65 6C 6C
-63 61 74 73 20 76 73 2E 20 42 65 74 74 79 20 42
-6F 6D 62 65 72 0C 00 00 48 65 6C 6C 63 61 74 20
-6F 6E 6C 79 05 00 00 30 34 36 30 39 18 00 00 45
-6B 72 61 6E 6F 70 6C 61 6E 20 41 2D 39 30 20 4F
-72 6C 6A 6F 6E 6F 6B 05 00 00 31 31 36 32 36 18
-00 00 47 72 75 6D 6D 61 6E 20 58 46 35 46 2D 31
-20 53 6B 79 72 6F 63 6B 65 74 04 00 00 35 34 32
-30 0E 00 00 48 61 77 6B 65 72 20 48 61 72 72 69
-65 72 05 00 00 41 56 2D 38 41 06 00 00 65 64 75
-61 72 64 04 00 00 38 30 36 31 0F 00 00 50 2D 34
-30 30 20 41 69 72 61 63 6F 62 72 61 0B 00 00 43
-7A 65 63 68 20 4D 6F 64 65 6C 04 00 00 34 38 30
-36 16 00 00 43 75 72 74 69 73 73 20 58 50 2D 35
-35 20 41 73 63 65 6E 64 65 72 05 00 00 36 31 30
-37 34 14 00 00 44 6F 72 6E 69 65 72 20 44 6F 33
-33 35 41 20 50 66 69 65 6C 13 00 00 4B 79 75 73
-68 75 20 4A 37 57 31 20 53 68 69 6E 64 65 6E 0D
-00 00 50 6C 61 6E 65 74 20 4D 6F 64 65 6C 73 03
-00 00 30 34 33 0F 00 00 48 65 6E 73 63 68 65 6C
-20 48 73 20 50 38 37 05 00 00 52 65 73 69 6E 0D
-00 00 53 70 65 63 69 61 6C 20 48 6F 62 62 79 08
-00 00 53 48 20 34 38 30 30 33 16 00 00 4D 63 44
-6F 6E 6E 65 6C 6C 20 58 46 2D 38 35 20 47 6F 62
-6C 69 6E 2A 00 00 4D 65 73 73 65 72 73 63 68 6D
-69 74 74 20 42 66 31 30 39 45 20 27 42 75 6C 67
-61 72 69 61 6E 20 41 69 72 20 46 6F 72 63 65 27
-05 00 00 30 34 32 30 36 2D 00 00 41 69 72 62 75
-73 20 53 75 70 65 72 20 54 72 61 6E 73 70 6F 72
-74 65 72 20 41 33 30 30 2D 36 30 30 20 53 54 20
-22 42 65 6C 75 67 61 22 05 00 00 33 30 30 38 37
-0C 00 00 33 39 20 57 61 67 6F 6E 20 52 6F 64 04
-00 00 37 31 32 31 1A 00 00 31 39 33 32 20 46 6F
-72 64 20 48 69 67 68 62 6F 79 20 52 6F 61 64 73
-74 65 72 2E 00 00 4C 69 6E 63 6F 6C 6E 20 4D 69
-6E 74 20 55 6C 74 72 61 20 4D 65 74 61 6C 20 53
-65 72 69 65 73 2C 20 53 6B 69 6C 6C 20 6C 65 76
-65 6C 20 33 0C 00 00 50 6F 6C 61 72 20 4C 69 67
-68 74 73 04 00 00 35 30 31 34 21 00 00 43 61 72
-6C 20 43 61 73 70 65 72 27 73 20 55 6E 64 65 72
-74 61 6B 65 72 20 44 72 61 67 73 74 65 72 07 00
-00 38 35 2D 32 35 39 32 20 00 00 33 39 20 43 68
-65 76 79 20 53 65 64 61 6E 20 44 65 6C 69 76 65
-72 79 20 4C 6F 77 72 69 64 65 72 07 00 00 38 35
-2D 35 39 30 34 12 00 00 4E 41 53 41 20 53 70 61
-63 65 20 53 68 75 74 74 6C 65 04 00 00 32 34 30
-30 1C 00 00 31 39 32 36 20 4D 61 63 6B 20 42 75
-6C 6C 64 6F 67 20 44 75 6D 70 20 54 72 75 63 6B
-05 00 00 43 31 31 32 38 13 00 00 32 33 20 54 20
-52 6F 61 64 73 74 65 72 20 46 72 61 6D 65 05 00
-00 33 31 32 31 36 11 00 00 44 6F 64 67 65 20 56
-69 70 65 72 20 52 54 2D 31 30 07 00 00 50 72 6F
-53 68 6F 70 04 00 00 32 33 30 31 05 00 00 31 31
-32 31 32 26 00 00 31 39 33 35 20 4D 6F 72 67 61
-6E 20 53 75 70 65 72 20 53 70 6F 72 74 73 20 54
-68 72 65 65 20 57 68 65 65 6C 65 72 0C 00 00 47
-75 6E 7A 65 20 53 61 6E 67 79 6F 13 00 00 54 72
-69 75 6D 70 68 20 54 52 32 20 4C 65 20 4D 61 6E
-73 07 00 00 38 35 2D 31 39 31 31 0F 00 00 33 34
-20 46 6F 72 64 20 48 69 67 68 62 6F 79 17 00 00
-57 68 65 65 6C 73 20 6F 66 20 46 69 72 65 20 53
-6E 61 70 54 69 74 65 06 00 00 4A 6F 2D 48 61 6E
-06 00 00 47 43 2D 33 30 30 20 00 00 43 68 72 79
-73 6C 65 72 20 43 6F 72 70 6F 72 61 74 69 6F 6E
-20 54 75 72 62 69 6E 65 20 43 61 72 09 00 00 48
-31 32 38 35 3A 31 39 38 2B 00 00 54 6F 6D 6D 79
-20 49 76 6F 27 73 20 46 6F 75 72 20 45 6E 67 69
-6E 65 20 44 72 61 67 73 74 65 72 20 22 53 68 6F
-77 62 6F 61 74 22 09 00 00 48 31 32 32 34 3A 32
-30 30 17 00 00 32 32 20 4A 52 20 52 6F 61 64 73
-74 65 72 20 44 72 61 67 73 74 65 72 0F 00 00 32
-20 63 6F 6D 70 6C 65 74 65 20 63 61 72 73 04 00
-00 36 34 33 35 04 00 00 36 34 33 38 07 00 00 38
-35 2D 37 36 36 38 0F 00 00 34 31 20 43 68 65 76
-79 20 50 69 63 6B 75 70 04 00 00 36 35 38 35 17
-00 00 42 61 62 79 6C 6F 6E 20 35 20 53 74 61 72
-66 75 72 79 20 4D 6B 2E 31 1C 00 00 4D 65 73 73
-65 72 73 63 68 6D 69 74 74 20 42 66 31 30 39 45
-20 47 61 6C 6C 61 6E 64 05 00 00 36 31 30 36 37
-1B 00 00 42 72 69 73 74 6F 6C 20 42 65 61 75 66
-69 67 68 74 65 72 20 54 46 2E 4D 6B 2E 58 12 00
-00 48 65 6E 73 63 68 65 6C 20 48 73 20 31 32 39
-42 2D 32 04 00 00 33 34 31 39 0D 00 00 50 2D 35
-31 43 20 4D 75 73 74 61 6E 67 07 00 00 38 35 2D
-35 35 30 39 1B 00 00 48 65 69 6E 6B 65 6C 20 48
-65 31 31 31 20 47 65 72 6D 61 6E 20 42 6F 6D 62
-65 72 11 00 00 41 63 61 64 65 6D 79 20 4D 69 6E
-69 63 72 61 66 74 04 00 00 32 31 34 35 1E 00 00
-4C 6F 63 6B 68 65 65 64 20 50 2D 33 38 4D 20 4E
-69 67 68 74 20 4C 69 67 68 74 6E 69 6E 67 07 00
-00 38 35 2D 30 31 33 35 11 00 00 4F 53 32 55 2D
-33 20 4B 69 6E 67 66 69 73 68 65 72 3B 00 00 41
-69 63 68 69 20 42 37 41 32 20 41 74 74 61 63 6B
-20 42 6F 6D 62 65 72 20 20 52 79 75 73 65 69 20
-4B 61 69 20 28 47 72 61 63 65 29 20 27 46 6F 6C
-64 69 6E 67 20 57 69 6E 67 27 15 00 00 58 46 35
-55 2D 31 20 46 6C 79 69 6E 67 20 50 61 6E 63 61
-6B 65 04 00 00 36 37 35 37 07 00 00 49 63 65 20
-27 54 27 07 00 00 38 35 2D 35 31 30 32 04 00 00
-53 68 69 70 15 00 00 55 2E 53 2E 53 2E 20 4E 6F
-72 74 68 20 43 61 72 6F 6C 69 6E 61 0E 00 00 50
-61 72 74 73 20 62 79 20 50 61 72 6B 73 04 00 00
-31 30 30 34 0F 00 00 44 69 73 74 72 69 62 75 74
-6F 72 20 4B 69 74 12 00 00 50 53 46 20 4D 6F 64
-65 6C 20 53 75 70 70 6C 69 65 73 07 00 00 45 4B
-44 31 30 30 30 1B 00 00 4D 6F 64 65 6C 20 43 61
-72 20 45 6E 67 69 6E 65 20 44 65 74 61 69 6C 20
-4B 69 74 04 00 00 38 34 33 35 1F 00 00 43 75 73
-74 6F 6D 20 26 20 43 6F 6D 70 65 74 69 74 69 6F
-6E 20 50 61 72 74 73 20 50 61 63 6B 04 00 00 54
-36 34 32 27 00 00 22 57 69 6E 6E 69 65 20 4D 61
-65 22 20 57 69 6C 65 79 20 50 6F 73 74 27 73 20
-4C 6F 63 6B 68 65 65 64 20 56 65 67 61 06 00 00
-41 69 72 66 69 78 05 00 00 30 34 31 37 36 0C 00
-00 44 48 20 43 6F 6D 65 74 20 34 20 42 07 00 00
-38 35 2D 34 31 36 32 1B 00 00 4F 72 61 6E 67 65
-20 43 72 61 74 65 20 27 33 32 20 46 6F 72 64 20
-53 65 64 61 6E 06 00 00 38 36 30 35 50 4F 14 00
-00 46 69 61 74 20 44 6F 75 62 6C 65 20 44 72 61
-67 73 74 65 72 0B 00 00 42 6C 75 65 70 72 69 6E
-74 65 72 06 00 00 48 2D 31 33 32 31 0C 00 00 47
-72 61 6E 20 54 75 72 69 73 6D 6F 07 00 00 38 35
-2D 37 36 33 37 15 00 00 33 31 20 46 6F 72 64 20
-4D 6F 64 65 6C 20 41 20 57 6F 6F 64 79 03 00 00
-4D 50 43 07 00 00 32 30 30 2D 32 30 30 16 00 00
-47 61 6E 67 62 75 73 74 65 72 73 20 32 38 20 4C
-69 6E 63 6F 6C 6E 07 00 00 38 35 2D 32 35 36 39
-19 00 00 43 68 65 76 79 20 53 2D 31 30 20 4C 6F
-77 72 69 64 65 72 20 33 27 6E 20 31 04 00 00 32
-32 31 31 04 00 00 35 35 30 35 1C 00 00 48 6F 72
-74 65 6E 20 48 6F 20 32 32 39 41 2D 31 20 46 6C
-79 69 6E 67 20 57 69 6E 67 05 00 00 30 35 32 30
-31 1C 00 00 4D 63 44 6F 6E 6E 65 6C 6C 20 58 56
-2D 31 20 43 6F 6E 76 65 72 74 69 70 6C 61 6E 65
-07 00 00 38 35 2D 35 38 31 30 0F 00 00 53 52 2D
-37 31 20 42 6C 61 63 6B 62 69 72 64 04 00 00 34
-35 32 32 19 00 00 4D 65 73 73 65 72 73 63 68 6D
-69 74 74 20 42 66 2D 31 30 39 20 47 2D 31 30 16
-00 00 50 72 65 6D 69 75 6D 2C 20 73 6B 69 6C 6C
-20 6C 65 76 65 6C 20 34 04 00 00 38 36 34 36 0B
-00 00 48 6F 62 62 79 20 43 72 61 66 74 06 00 00
-48 43 31 35 34 39 16 00 00 56 61 6D 70 69 72 65
-20 46 33 20 4A 65 74 20 46 69 67 68 74 65 72 04
-00 00 33 34 30 31 0B 00 00 41 2D 33 36 20 41 70
-61 63 68 65 05 00 00 30 34 33 33 35 15 00 00 42
-6C 6F 68 6D 20 26 20 56 6F 73 73 20 42 56 20 50
-2D 31 39 34 09 00 00 30 31 33 30 4D 30 31 30 30
-34 00 00 43 6F 72 64 20 50 68 61 65 74 6F 6E 20
-53 65 64 61 6E 20 31 39 33 37 20 38 31 32 20 53
-75 70 65 72 63 68 61 72 67 65 64 20 43 6F 6E 76
-65 72 74 69 62 6C 65 07 00 00 38 35 2D 32 35 37
-39 15 00 00 56 57 20 42 65 65 74 6C 65 20 43 6F
-6E 76 65 72 74 69 62 6C 65 04 00 00 37 34 33 38
-10 00 00 42 4D 57 20 5A 2D 31 20 52 6F 61 64 73
-74 65 72 04 00 00 36 31 34 38 0B 00 00 44 69 61
-62 6C 6F 20 41 65 72 6F 0B 00 00 55 6E 69 6F 6E
-20 4D 6F 64 65 6C 2B 00 00 50 65 74 65 20 42 72
-6F 63 6B 27 73 20 53 43 43 41 20 43 68 61 6D 70
-69 6F 6E 20 42 52 45 2F 44 61 74 73 75 6E 20 32
-34 30 2D 5A 05 00 00 32 34 31 32 39 0D 00 00 4A
-61 67 75 61 72 20 58 4A 20 32 32 30 05 00 00 30
-33 31 30 31 13 00 00 53 70 69 72 69 74 20 6F 66
-20 53 74 2E 20 4C 6F 75 69 73 05 00 00 30 36 31
-37 31 15 00 00 4F 72 69 6F 6E 20 32 30 30 31 20
-53 70 61 63 65 63 72 61 66 74 04 00 00 38 37 36
-36 05 00 00 31 2F 36 35 30 18 00 00 53 74 61 72
-20 54 72 65 6B 20 55 2E 53 2E 53 2E 20 52 65 6C
-69 61 6E 74 07 00 00 38 35 2D 31 38 33 35 15 00
-00 4E 41 53 41 2F 4D 63 44 6F 6E 6E 65 6C 6C 20
-47 65 6D 69 6E 69 04 00 00 31 39 39 37 24 00 00
-43 68 61 6E 67 20 5A 68 65 6E 67 20 32 20 28 43
-5A 2D 32 45 29 20 4C 61 75 6E 63 68 20 56 65 68
-69 63 6C 65 05 00 00 31 31 32 31 30 04 00 00 31
-2F 32 30 13 00 00 4D 61 6B 6F 20 53 68 61 72 6B
-20 53 68 6F 77 20 43 61 72 08 00 00 44 72 61 67
-73 74 65 72 08 00 00 4C 6F 77 72 69 64 65 72 04
-00 00 36 30 36 36 2F 00 00 57 69 6C 64 20 57 69
-6C 6C 69 65 20 42 6F 72 73 63 68 20 22 57 69 6E
-67 65 64 20 45 78 70 72 65 73 73 22 20 41 6C 74
-65 72 65 64 20 52 6F 64 04 00 00 36 31 38 32 0F
-00 00 31 39 33 33 20 57 69 6C 6C 79 73 20 56 61
-6E 07 00 00 38 35 2D 30 35 34 30 34 00 00 49 6E
-61 75 67 75 72 61 6C 20 4D 41 54 43 4F 20 54 6F
-6F 6C 73 20 53 75 70 65 72 6E 61 74 69 6F 6E 61
-6C 73 20 4E 69 74 72 6F 20 46 75 6E 6E 79 20 43
-61 72 04 00 00 36 33 35 35 1E 00 00 31 39 35 37
-20 43 68 65 76 72 6F 6C 65 74 20 43 6F 72 76 65
-74 74 65 20 47 61 73 73 65 72 07 00 00 38 35 2D
-37 36 37 35 04 00 00 50 43 36 31 2A 00 00 47 72
-65 65 6E 20 48 6F 72 6E 65 74 20 46 6F 72 64 20
-22 54 22 20 53 68 6F 77 20 61 6E 64 20 47 6F 20
-52 6F 61 64 73 74 65 72 04 00 00 38 32 31 35 18
-00 00 31 39 34 30 20 46 6F 72 64 20 53 65 64 61
-6E 20 44 65 6C 69 76 65 72 79 07 00 00 38 35 2D
-37 36 32 38 16 00 00 33 37 20 46 6F 72 64 20 50
-61 6E 65 6C 20 44 65 6C 69 76 65 72 79 04 00 00
-31 32 39 34 10 00 00 47 79 70 73 79 20 44 75 6E
-65 20 42 75 67 67 79 06 00 00 48 2D 31 32 33 31
-23 00 00 43 68 72 79 73 6C 65 72 20 4E 65 77 20
-59 6F 72 6B 65 72 20 43 75 73 74 6F 6D 69 7A 69
-6E 67 20 4B 69 74 05 00 00 33 30 30 38 31 0E 00
-00 36 32 20 54 68 75 6E 64 65 72 62 69 72 64 04
-00 00 36 38 39 39 11 00 00 31 39 33 32 20 46 6F
-72 64 20 50 68 61 65 74 6F 6E 05 00 00 33 30 32
-37 30 0D 00 00 31 39 36 38 20 50 6C 79 6D 6F 75
-74 68 04 00 00 38 38 34 32 17 00 00 47 72 75 6D
-6D 61 6E 20 46 37 46 2D 33 4E 20 54 69 67 65 72
-63 61 74 04 00 00 48 32 34 34 14 00 00 4D 61 72
-74 69 6E 20 50 36 4D 20 53 65 61 6D 61 73 74 65
-72 04 00 00 35 35 30 30 0E 00 00 42 2D 32 35 48
-20 4D 69 74 63 68 65 6C 6C 04 00 00 33 34 30 32
-0D 00 00 50 2D 35 31 41 20 4D 75 73 74 61 6E 67
-04 00 00 36 34 32 31 3E 00 00 44 61 6D 62 75 73
-74 65 72 20 47 72 61 6E 64 20 53 6C 61 6D 20 42
-6F 6D 62 65 72 20 4C 61 6E 63 61 73 74 65 72 20
-42 49 20 53 70 65 63 69 61 6C 20 32 32 30 30 30
-6C 62 2E 20 42 6F 6D 62 05 00 00 31 34 34 34 33
-1E 00 00 4C 6F 63 6B 68 65 65 64 20 53 75 70 65
-72 2D 47 20 43 6F 6E 73 74 65 6C 6C 61 74 69 6F
-6E 04 00 00 35 36 31 30 13 00 00 57 69 6C 6C 69
-61 6D 73 20 42 72 6F 73 2E 20 49 6E 63 2E 07 00
-00 34 38 2D 33 31 39 31 10 00 00 43 6F 72 62 65
-6E 20 53 75 70 65 72 2D 41 63 65 05 00 00 30 35
-30 30 32 10 00 00 52 65 74 72 69 65 76 65 72 20
-52 6F 63 6B 65 74 03 00 00 43 61 72 04 00 00 38
-35 38 38 1D 00 00 50 6C 79 6D 6F 75 74 68 20 50
-72 6F 77 6C 65 72 20 77 69 74 68 20 54 72 61 69
-6C 65 72 04 00 00 35 30 30 31 14 00 00 43 6F 72
-76 65 74 74 65 20 47 72 61 6E 64 20 53 70 6F 72
-74 04 00 00 37 31 30 38 1D 00 00 43 6F 72 76 65
-74 74 65 20 49 6E 64 79 20 22 44 72 65 61 6D 20
-4D 61 63 68 69 6E 65 22 04 00 00 38 30 35 39 0C
-00 00 54 68 65 20 4D 75 6E 73 74 65 72 73 20 00
-00 42 6C 75 65 70 72 69 6E 74 65 72 3B 20 4D 75
-6E 73 74 65 72 73 20 4B 6F 61 63 68 20 6F 6E 6C
-79 07 00 00 38 35 2D 34 31 36 36 05 00 00 43 6F
-75 6E 74 3C 00 00 77 2F 43 75 74 74 69 6E 67 20
-45 64 67 65 20 43 45 43 34 38 30 38 36 20 48 65
-31 31 31 5A 20 22 5A 77 69 6C 6C 69 6E 67 22 20
-6B 69 74 2C 20 73 6B 69 6C 6C 20 6C 65 76 65 6C
-20 33 07 00 00 38 35 2D 37 36 36 36 23 00 00 43
-75 73 74 6F 6D 20 53 69 6C 76 65 72 61 64 6F 20
-61 6E 64 20 57 61 76 65 72 69 64 65 72 20 42 6F
-61 74 07 00 00 38 35 2D 36 38 35 38 16 00 00 53
-6E 61 6B 65 20 26 20 4D 6F 6E 67 6F 6F 73 65 20
-43 6F 6D 62 6F 07 00 00 38 35 2D 34 31 35 39 24
-00 00 4A 6F 65 20 41 6D 61 74 6F 20 53 75 70 65
-72 6D 61 6E 20 54 6F 70 20 46 75 65 6C 20 44 72
-61 67 73 74 65 72 04 00 00 37 35 34 31 0D 00 00
-53 6B 69 6C 6C 20 6C 65 76 65 6C 20 35 09 00 00
-48 38 32 35 2D 31 30 44 30 28 00 00 43 6F 63 61
-20 43 6F 6C 61 20 46 6F 72 64 20 4C 6F 75 69 73
-76 69 6C 6C 65 20 44 65 6C 69 76 65 72 79 20 54
-72 75 63 6B 07 00 00 38 35 2D 32 31 35 36 04 00
-00 32 39 35 34 0B 00 00 50 6F 72 73 63 68 65 20
-39 30 34 04 00 00 32 39 33 35 25 00 00 4C 61 6D
-62 6F 72 67 68 69 6E 69 20 43 6F 75 6E 74 61 63
-68 20 32 35 74 68 20 41 6E 6E 69 76 65 72 73 61
-72 79 07 00 00 38 35 2D 37 36 31 36 1F 00 00 41
-6D 65 72 69 63 61 6E 20 49 6E 74 65 72 6E 61 74
-69 6F 6E 61 6C 20 44 72 61 67 73 74 65 72 07 00
-00 38 35 2D 35 32 34 31 0D 00 00 50 2D 35 31 44
-20 4D 75 73 74 61 6E 67 07 00 00 38 35 2D 35 37
-31 30 11 00 00 52 42 2D 33 36 48 20 50 65 61 63
-65 6D 61 6B 65 72 05 00 00 30 35 31 30 34 14 00
-00 52 65 70 75 62 6C 69 63 20 52 43 2E 33 20 53
-65 61 62 65 65 05 00 00 50 41 31 35 32 05 00 00
-36 31 30 36 36 25 00 00 44 65 48 61 76 69 6C 6C
-61 6E 64 20 4D 6F 73 71 75 69 74 6F 20 42 20 4D
-6B 2E 49 56 2F 50 52 20 4D 6B 2E 49 56 07 00 00
-38 35 2D 37 35 34 36 10 00 00 50 2D 36 31 20 42
-6C 61 63 6B 20 57 69 64 6F 77 07 00 00 38 35 2D
-36 36 35 32 25 00 00 42 2D 31 37 46 20 46 6C 79
-69 6E 67 20 46 6F 72 74 72 65 73 73 20 22 4D 65
-6D 70 68 69 73 20 42 65 6C 6C 65 22 04 00 00 37
-35 30 30 0D 00 00 47 61 74 65 73 20 4C 65 61 72
-6A 65 74 03 00 00 35 31 39 15 00 00 47 72 75 6D
-6D 61 6E 20 46 38 46 2D 32 20 42 65 61 72 63 61
-74 04 00 00 37 35 32 33 12 00 00 46 2D 31 30 34
-43 20 53 74 61 72 66 69 67 68 74 65 72 05 00 00
-36 31 30 37 30 15 00 00 56 6F 75 67 68 74 20 46
-34 55 2D 31 41 20 43 6F 72 73 61 69 72 07 00 00
-38 35 2D 37 36 36 34 19 00 00 42 61 6C 64 77 69
-6E 2D 4D 6F 74 69 6F 6E 20 44 72 61 67 20 43 6F
-62 72 61 04 00 00 38 34 35 35 14 00 00 35 37 20
-43 68 65 76 72 6F 6C 65 74 20 42 65 6C 20 41 69
-72 16 00 00 50 72 6F 53 68 6F 70 2C 20 73 6B 69
-6C 6C 20 6C 65 76 65 6C 20 33 05 00 00 33 30 30
-35 32 0D 00 00 34 31 20 46 6F 72 64 20 57 6F 6F
-64 79 07 00 00 38 35 2D 32 35 35 37 19 00 00 36
-30 20 43 68 65 76 79 20 48 61 72 64 74 6F 70 20
-4C 6F 77 72 69 64 65 72 07 00 00 38 35 2D 37 36
-33 38 09 00 00 41 65 72 6F 76 65 74 74 65 07 00
-00 38 35 2D 30 30 39 34 1B 00 00 4C 69 27 6C 20
-43 6F 66 66 69 6E 20 43 75 73 74 6F 6D 20 53 68
-6F 77 20 52 6F 64 04 00 00 38 32 39 30 0A 00 00
-53 27 43 6F 6F 6C 20 42 75 73 07 00 00 38 35 2D
-32 35 39 37 12 00 00 53 74 72 65 65 74 20 46 69
-67 68 74 65 72 20 54 77 6F 04 00 00 37 36 30 39
-12 00 00 54 68 61 6D 65 73 20 50 61 6E 65 6C 20
-54 72 75 63 6B 07 00 00 38 35 2D 37 36 30 36 15
-00 00 44 61 6E 20 46 69 6E 6B 27 73 20 53 70 65
-65 64 77 61 67 6F 6E 05 00 00 30 35 35 30 35 1A
-00 00 4D 61 72 74 69 6E 20 4D 2D 31 33 30 20 43
-68 69 6E 61 20 43 6C 69 70 70 65 72 07 00 00 38
-35 2D 30 30 31 35 0E 00 00 46 6F 72 64 20 54 72
-69 2D 4D 6F 74 6F 72 04 00 00 50 41 33 30 1A 00
-00 57 72 69 67 68 74 20 42 72 6F 74 68 65 72 73
-20 4B 69 74 74 79 20 48 61 77 6B 07 00 00 38 35
-2D 35 30 38 31 13 00 00 46 69 72 73 74 20 4C 75
-6E 61 72 20 4C 61 6E 64 69 6E 67 07 00 00 38 35
-2D 35 38 33 39 18 00 00 4D 65 73 73 65 72 73 63
-68 6D 69 74 74 20 42 66 20 31 31 30 20 47 2D 32
-04 00 00 43 48 34 31 04 00 00 4A 30 30 34 05 00
-00 4A 54 31 32 33 04 00 00 4A 54 32 32 04 00 00
-4A 54 37 31 04 00 00 53 50 36 33 04 00 00 42 54
-31 36 0C 00 00 4F 56 2D 31 42 20 4D 6F 68 61 77
-6B 03 00 00 30 36 38 0B 00 00 56 2D 32 32 20 4F
-73 70 72 65 79 04 00 00 38 36 31 35 13 00 00 58
-2F 59 42 2D 33 35 20 46 6C 79 69 6E 67 20 57 69
-6E 67 05 00 00 31 31 32 30 38 1B 00 00 31 39 33
-33 20 43 61 64 69 6C 6C 61 63 20 56 2D 31 36 20
-54 6F 77 6E 20 43 61 72 04 00 00 36 36 31 38 27
-00 00 53 74 61 72 20 54 72 65 6B 20 33 20 50 69
-65 63 65 20 55 2E 53 2E 53 2E 20 45 6E 74 65 72
-70 72 69 73 65 20 53 65 74 12 00 00 4D 69 73 73
-69 6E 67 20 54 56 20 76 65 72 73 69 6F 6E 04 00
-00 38 39 31 35 0E 00 00 53 74 61 72 20 44 65 73
-74 72 6F 79 65 72 04 00 00 38 31 39 33 0A 00 00
-44 65 61 74 68 20 53 74 61 72 08 00 00 53 6E 61
-70 54 69 74 65 07 00 00 38 35 2D 33 36 32 31 07
-00 00 38 35 2D 33 36 32 32 17 00 00 42 61 62 79
-6C 6F 6E 20 35 20 53 70 61 63 65 20 53 74 61 74
-69 6F 6E 04 00 00 36 38 35 38 1F 00 00 53 74 61
-72 20 54 72 65 6B 20 33 20 50 69 65 63 65 20 41
-64 76 65 72 73 61 72 79 20 53 65 74 04 00 00 38
-37 36 32 06 00 00 31 2F 31 30 30 30 29 00 00 53
-74 61 72 20 54 72 65 6B 20 47 65 6E 65 72 61 74
-69 6F 6E 73 20 55 2E 53 2E 53 2E 20 45 6E 74 65
-72 70 72 69 73 65 20 42 04 00 00 38 38 38 33 03
-00 00 31 2F 34 05 00 00 4F 74 68 65 72 12 00 00
-56 69 73 69 62 6C 65 20 56 2D 38 20 45 6E 67 69
-6E 65 04 00 00 37 31 32 30 1C 00 00 31 39 36 39
-20 50 6F 6E 74 69 61 63 20 47 54 4F 20 22 54 68
-65 20 4A 75 64 67 65 22 09 00 00 31 2F 32 34 2D
-31 2F 32 35 05 00 00 31 2F 31 33 30 05 00 00 31
-2F 35 37 30 05 00 00 54 6F 20 64 6F 33 00 00 47
-75 73 20 47 72 69 73 73 6F 6D 20 4D 65 6D 6F 72
-69 61 6C 20 43 6F 6D 62 6F 20 77 2F 54 77 6F 20
-43 6F 6C 6C 65 63 74 6F 72 73 20 50 61 74 63 68
-65 73 09 00 00 46 69 72 65 20 49 72 6F 6E 0C 00
-00 77 2F 64 65 74 61 69 6C 20 73 65 74 2C 00 00
-77 2F 64 65 74 61 69 6C 20 73 65 74 20 61 6E 64
-20 69 6E 74 65 72 69 6F 72 20 73 65 74 2C 20 72
-65 73 69 6E 20 65 6E 67 69 6E 65 73 03 00 00 49
-43 4D 0E 00 00 53 70 69 74 66 69 72 65 20 4D 6B
-2E 49 58 1A 00 00 4D 65 73 73 65 72 73 63 68 6D
-69 74 74 20 4D 65 20 34 31 30 42 2D 32 2F 55 34
-0A 00 00 4D 6F 64 65 6C 63 72 61 66 74 12 00 00
-46 2D 38 32 42 20 54 77 69 6E 20 4D 75 73 74 61
-6E 67 1F 00 00 31 39 35 33 20 53 74 75 64 65 62
-61 6B 65 72 20 53 74 61 72 6C 69 6E 65 72 20 43
-6F 75 70 65 04 00 00 32 34 33 36 0E 00 00 42 75
-67 61 74 74 69 20 45 42 20 31 31 30 2D 00 00 53
-74 61 72 20 54 72 65 6B 20 4B 6C 69 6E 67 6F 6E
-20 42 69 72 64 20 6F 66 20 50 72 65 79 20 46 6C
-69 67 68 74 20 44 69 73 70 6C 61 79 16 00 00 50
-6F 72 73 63 68 65 20 39 31 31 20 53 6C 61 6E 74
-20 4E 6F 73 65 05 00 00 36 31 30 37 33 25 00 00
-44 6F 75 67 6C 61 73 20 41 2D 31 4A 20 53 6B 79
-72 61 69 64 65 72 20 55 2E 53 2E 20 41 69 72 20
-46 6F 72 63 65 04 00 00 36 33 33 39 04 00 00 36
-39 35 35 04 00 00 37 35 33 30 06 00 00 34 38 2D
-30 32 30 05 00 00 31 2F 34 35 30 0F 00 00 55 2E
-53 2E 53 2E 20 4D 69 73 73 6F 75 72 69 05 00 00
-36 31 30 35 37 15 00 00 48 65 69 6E 6B 65 6C 20
-48 65 32 31 39 20 41 2D 37 20 55 48 55 05 00 00
-36 31 30 34 31 05 00 00 31 31 36 32 34 32 00 00
-43 6F 6E 73 6F 6C 69 64 61 74 65 64 20 42 2D 32
-34 4A 20 4C 69 62 65 72 61 74 6F 72 20 54 68 65
-20 44 72 61 67 6F 6E 20 26 20 48 69 73 20 54 61
-69
+FC 00 20\r
+20 B8 05 00 00 B0 02 00 00 0C 00 00 4D 61 6E 75\r
+66 61 63 74 75 72 65 72 0B 00 00 50 61 72 74 20\r
+4E 75 6D 62 65 72 05 00 00 53 63 61 6C 65 04 00\r
+00 54 79 70 65 04 00 00 4E 61 6D 65 08 00 00 43\r
+6F 6D 6D 65 6E 74 73 08 00 00 41 4D 54 2D 45 52\r
+54 4C 07 00 00 48 6F 74 20 52 6F 64 10 00 00 33\r
+32 20 46 6F 72 64 20 52 6F 61 64 73 74 65 72 08\r
+00 00 4D 6F 6E 6F 67 72 61 6D 08 00 00 53 68 6F\r
+77 20 52 6F 64 07 00 00 48 61 6E 67 6D 61 6E 11\r
+00 00 50 65 74 65 72 62 69 6C 74 20 57 72 65 63\r
+6B 65 72 15 00 00 45 61 73 74 65 72 6E 20 41 69\r
+72 6C 69 6E 65 73 20 44 43 2D 33 11 00 00 4D 61\r
+73 65 72 61 74 69 20 4D 65 72 61 6B 20 53 53 1A\r
+00 00 44 6F 75 67 6C 61 73 20 50 2D 37 30 20 4E\r
+69 67 68 74 20 46 69 67 68 74 65 72 17 00 00 35\r
+35 20 43 68 65 76 79 20 53 74 72 65 65 74 20 4D\r
+61 63 68 69 6E 65 0C 00 00 54 77 65 65 64 79 20\r
+50 69 65 20 32 13 00 00 48 75 65 79 20 52 65 73\r
+63 75 65 20 43 68 6F 70 70 65 72 10 00 00 4D 61\r
+7A 64 61 20 4D 58 2D 35 20 4D 69 61 74 61 0A 00\r
+00 53 70 6F 72 74 73 20 43 61 72 05 00 00 54 72\r
+75 63 6B 06 00 00 52 6F 63 6B 65 74 09 00 00 50\r
+61 72 74 73 20 4B 69 74 0E 00 00 43 69 76 69 6C\r
+69 61 6E 20 50 6C 61 6E 65 0E 00 00 4D 69 6C 69\r
+74 61 72 79 20 50 6C 61 6E 65 0F 00 00 53 63 69\r
+65 6E 63 65 20 46 69 63 74 69 6F 6E 1A 00 00 44\r
+6F 6E 20 47 61 72 6C 69 74 73 20 57 79 6E 6E 27\r
+73 20 43 68 61 72 67 65 72 19 00 00 44 6F 6E 20\r
+47 61 72 6C 69 74 73 20 57 79 6E 6E 27 73 20 4A\r
+61 6D 6D 65 72 1A 00 00 50 61 63 6B 61 72 64 20\r
+42 6F 61 74 74 61 69 6C 20 53 70 65 65 64 73 74\r
+65 72 0E 00 00 52 65 76 65 6C 6C 20 47 65 72 6D\r
+61 6E 79 05 00 00 30 34 31 34 36 04 00 00 31 2F\r
+32 34 04 00 00 31 2F 37 32 0E 00 00 4D 65 20 32\r
+36 32 20 41 2D 31 61 2F 55 33 09 00 00 53 54 43\r
+20 53 74 61 72 74 04 00 00 34 63 2D 39 05 00 00\r
+31 2F 32 38 38 0C 00 00 50 72 6F 74 6F 6E 2D 4B\r
+20 4D 69 72 04 00 00 34 63 2D 37 0E 00 00 50 72\r
+6F 74 6F 6E 2D 4B 20 41 73 74 72 61 05 00 00 34\r
+63 2D 31 37 0E 00 00 50 72 6F 74 6F 6E 2D 4B 20\r
+5A 61 72 79 61 13 00 00 41 63 63 75 72 61 74 65\r
+20 4D 69 6E 69 61 74 75 72 65 73 04 00 00 33 34\r
+32 30 04 00 00 31 2F 34 38 0F 00 00 53 42 44 2D\r
+31 20 44 61 75 6E 74 6C 65 73 73 1B 00 00 77 2F\r
+56 65 72 6C 69 6E 64 65 6E 20 31 33 37 38 20 44\r
+65 74 61 69 6C 20 53 65 74 04 00 00 38 32 38 33\r
+0C 00 00 54 72 6F 75 62 6C 65 6D 61 6B 65 72 04\r
+00 00 32 37 33 37 0E 00 00 44 61 79 74 6F 6E 61\r
+20 53 70 69 64 65 72 04 00 00 38 31 32 36 04 00\r
+00 31 2F 32 35 06 00 00 48 65 6C 6C 65 72 05 00\r
+00 38 30 34 34 33 05 00 00 31 2F 31 34 34 12 00\r
+00 42 72 65 69 74 6C 69 6E 20 4F 72 62 69 74 65\r
+72 20 33 0F 00 00 53 68 61 6E 67 68 61 69 20 44\r
+72 61 67 6F 6E 04 00 00 31 39 39 38 04 00 00 31\r
+2F 39 36 0F 00 00 41 72 69 61 6E 65 20 35 20 52\r
+6F 63 6B 65 74 0F 00 00 52 65 76 65 6C 6C 2D 4D\r
+6F 6E 6F 67 72 61 6D 07 00 00 38 35 2D 35 39 33\r
+34 0F 00 00 50 42 59 2D 35 41 20 43 61 74 61 6C\r
+69 6E 61 0A 00 00 50 72 6F 4D 6F 64 65 6C 65 72\r
+07 00 00 47 6C 65 6E 63 6F 65 05 00 00 30 35 32\r
+30 32 04 00 00 31 2F 33 35 16 00 00 50 69 61 73\r
+65 63 6B 69 20 5A 56 2D 38 50 20 41 69 72 67 65\r
+65 70 08 00 00 48 61 73 65 67 61 77 61 05 00 00\r
+30 39 31 36 39 20 00 00 53 42 44 2D 33 20 44 61\r
+75 6E 74 6C 65 73 73 20 27 55 53 53 20 45 6E 74\r
+65 72 70 72 69 73 65 27 0C 00 00 53 69 6C 76 65\r
+72 20 43 6C 6F 75 64 06 00 00 53 43 34 38 30 31\r
+19 00 00 53 75 70 65 72 6D 61 72 69 6E 65 20 53\r
+70 69 74 65 66 75 6C 20 46 2E 31 34 06 00 00 52\r
+65 76 65 6C 6C 07 00 00 38 35 2D 31 36 35 34 0D\r
+00 00 50 2D 35 31 42 20 4D 75 73 74 61 6E 67 09\r
+00 00 50 72 6F 46 69 6E 69 73 68 06 00 00 44 72\r
+61 67 6F 6E 04 00 00 35 39 30 31 0B 00 00 46 6F\r
+6B 6B 65 72 20 44 72 2E 31 07 00 00 49 74 61 6C\r
+65 72 69 03 00 00 38 34 36 25 00 00 43 2D 31 33\r
+30 4A 20 48 65 72 63 75 6C 65 73 20 48 65 61 76\r
+79 20 54 72 61 6E 73 70 6F 72 74 20 50 6C 61 6E\r
+65 04 00 00 37 36 31 30 15 00 00 46 65 72 72 61\r
+72 69 20 46 35 30 20 42 61 72 63 68 65 74 74 61\r
+03 00 00 41 4D 54 08 00 00 54 33 37 34 2D 32 32\r
+35 0D 00 00 43 6F 72 76 61 69 72 20 4D 6F 6E 7A\r
+61 04 00 00 35 30 30 33 0B 00 00 4D 63 4C 61 72\r
+65 6E 20 4D 38 42 0D 00 00 52 65 76 65 6C 6C 20\r
+4C 6F 64 65 6C 61 05 00 00 48 2D 32 36 33 03 00\r
+00 75 6E 6B 23 00 00 42 6F 65 69 6E 67 20 53 53\r
+54 20 50 61 6E 41 6D 20 43 6C 69 70 70 65 72 20\r
+53 75 70 65 72 73 6F 6E 69 63 05 00 00 30 35 39\r
+30 39 05 00 00 31 2F 33 30 30 1D 00 00 4E 75 63\r
+6C 65 61 72 20 50 6F 77 65 72 65 64 20 53 70 61\r
+63 65 20 53 74 61 74 69 6F 6E 04 00 00 38 37 36\r
+34 06 00 00 31 2F 32 35 30 30 19 00 00 53 74 61\r
+72 20 54 72 65 6B 20 44 65 65 70 20 53 70 61 63\r
+65 20 4E 69 6E 65 23 00 00 46 69 62 65 72 2D 6F\r
+70 74 69 63 20 4C 69 67 68 74 69 6E 67 2C 20 73\r
+6B 69 6C 6C 20 6C 65 76 65 6C 20 33 0D 00 00 53\r
+6B 69 6C 6C 20 6C 65 76 65 6C 20 33 04 00 00 38\r
+31 35 38 16 00 00 42 6C 75 65 70 72 69 6E 74 65\r
+72 20 50 61 72 74 73 20 50 61 63 6B 13 00 00 45\r
+6E 67 69 6E 65 73 20 61 6E 64 20 67 72 69 6C 6C\r
+65 73 05 00 00 33 30 30 33 37 05 00 00 31 2F 32\r
+30 30 1E 00 00 4D 61 6E 20 49 6E 20 53 70 61 63\r
+65 20 52 6F 63 6B 65 74 20 43 6F 6C 6C 65 63 74\r
+69 6F 6E 53 00 00 4D 65 72 63 75 72 79 20 41 74\r
+6C 61 73 2C 20 4D 65 72 63 75 72 79 20 52 65 64\r
+73 74 6F 6E 65 2C 20 47 65 6D 69 6E 69 20 54 69\r
+74 61 6E 20 49 49 2C 20 53 61 74 75 72 6E 20 31\r
+42 20 41 70 6F 6C 6C 6F 2C 20 53 61 74 75 72 6E\r
+20 56 20 41 70 6F 6C 6C 6F 04 00 00 35 30 38 33\r
+04 00 00 31 2F 33 32 11 00 00 41 70 6F 6C 6C 6F\r
+20 53 70 61 63 65 63 72 61 66 74 09 00 00 4D 69\r
+6E 69 63 72 61 66 74 05 00 00 31 31 32 32 30 04\r
+00 00 31 2F 31 36 24 00 00 31 39 35 35 20 4D 65\r
+72 63 65 64 65 73 20 33 30 30 53 4C 20 22 47 75\r
+6C 6C 77 69 6E 67 22 20 43 6F 75 70 65 07 00 00\r
+38 35 2D 36 38 35 39 24 00 00 4D 75 73 74 61 6E\r
+67 20 4D 75 73 63 6C 65 20 54 72 69 6F 20 27 36\r
+30 73 2C 20 27 37 30 73 2C 20 27 38 30 73 35 00\r
+00 31 39 36 34 20 31 2F 32 20 43 6F 6E 76 65 72\r
+74 69 62 6C 65 2C 20 31 39 37 30 20 42 6F 73 73\r
+20 33 30 32 2C 20 31 39 38 39 20 43 6F 6E 76 65\r
+72 74 69 62 6C 65 06 00 00 54 61 6D 69 79 61 05\r
+00 00 32 34 31 37 30 0A 00 00 4D 6F 72 67 61 6E\r
+20 34 2F 34 07 00 00 38 35 2D 32 34 39 31 11 00\r
+00 36 37 20 43 6F 72 76 65 74 74 65 20 43 6F 75\r
+70 65 07 00 00 38 35 2D 32 35 33 34 0F 00 00 53\r
+68 65 6C 62 79 20 53 65 72 69 65 73 20 31 03 00\r
+00 35 36 32 11 00 00 41 73 74 6F 6E 20 4D 61 72\r
+74 69 6E 20 44 42 20 34 05 00 00 30 37 33 32 30\r
+13 00 00 50 6F 72 73 63 68 65 20 39 31 31 20 43\r
+61 72 72 65 72 61 07 00 00 54 65 73 74 6F 72 73\r
+03 00 00 33 38 36 04 00 00 32 39 37 32 16 00 00\r
+4D 65 72 63 65 64 65 73 20 33 30 30 20 53 4C 52\r
+20 22 37 32 32 22 08 00 00 4C 69 6E 64 62 65 72\r
+67 05 00 00 37 30 39 35 36 19 00 00 48 65 6C 6C\r
+63 61 74 73 20 76 73 2E 20 42 65 74 74 79 20 42\r
+6F 6D 62 65 72 0C 00 00 48 65 6C 6C 63 61 74 20\r
+6F 6E 6C 79 05 00 00 30 34 36 30 39 18 00 00 45\r
+6B 72 61 6E 6F 70 6C 61 6E 20 41 2D 39 30 20 4F\r
+72 6C 6A 6F 6E 6F 6B 05 00 00 31 31 36 32 36 18\r
+00 00 47 72 75 6D 6D 61 6E 20 58 46 35 46 2D 31\r
+20 53 6B 79 72 6F 63 6B 65 74 04 00 00 35 34 32\r
+30 0E 00 00 48 61 77 6B 65 72 20 48 61 72 72 69\r
+65 72 05 00 00 41 56 2D 38 41 06 00 00 65 64 75\r
+61 72 64 04 00 00 38 30 36 31 0F 00 00 50 2D 34\r
+30 30 20 41 69 72 61 63 6F 62 72 61 0B 00 00 43\r
+7A 65 63 68 20 4D 6F 64 65 6C 04 00 00 34 38 30\r
+36 16 00 00 43 75 72 74 69 73 73 20 58 50 2D 35\r
+35 20 41 73 63 65 6E 64 65 72 05 00 00 36 31 30\r
+37 34 14 00 00 44 6F 72 6E 69 65 72 20 44 6F 33\r
+33 35 41 20 50 66 69 65 6C 13 00 00 4B 79 75 73\r
+68 75 20 4A 37 57 31 20 53 68 69 6E 64 65 6E 0D\r
+00 00 50 6C 61 6E 65 74 20 4D 6F 64 65 6C 73 03\r
+00 00 30 34 33 0F 00 00 48 65 6E 73 63 68 65 6C\r
+20 48 73 20 50 38 37 05 00 00 52 65 73 69 6E 0D\r
+00 00 53 70 65 63 69 61 6C 20 48 6F 62 62 79 08\r
+00 00 53 48 20 34 38 30 30 33 16 00 00 4D 63 44\r
+6F 6E 6E 65 6C 6C 20 58 46 2D 38 35 20 47 6F 62\r
+6C 69 6E 2A 00 00 4D 65 73 73 65 72 73 63 68 6D\r
+69 74 74 20 42 66 31 30 39 45 20 27 42 75 6C 67\r
+61 72 69 61 6E 20 41 69 72 20 46 6F 72 63 65 27\r
+05 00 00 30 34 32 30 36 2D 00 00 41 69 72 62 75\r
+73 20 53 75 70 65 72 20 54 72 61 6E 73 70 6F 72\r
+74 65 72 20 41 33 30 30 2D 36 30 30 20 53 54 20\r
+22 42 65 6C 75 67 61 22 05 00 00 33 30 30 38 37\r
+0C 00 00 33 39 20 57 61 67 6F 6E 20 52 6F 64 04\r
+00 00 37 31 32 31 1A 00 00 31 39 33 32 20 46 6F\r
+72 64 20 48 69 67 68 62 6F 79 20 52 6F 61 64 73\r
+74 65 72 2E 00 00 4C 69 6E 63 6F 6C 6E 20 4D 69\r
+6E 74 20 55 6C 74 72 61 20 4D 65 74 61 6C 20 53\r
+65 72 69 65 73 2C 20 53 6B 69 6C 6C 20 6C 65 76\r
+65 6C 20 33 0C 00 00 50 6F 6C 61 72 20 4C 69 67\r
+68 74 73 04 00 00 35 30 31 34 21 00 00 43 61 72\r
+6C 20 43 61 73 70 65 72 27 73 20 55 6E 64 65 72\r
+74 61 6B 65 72 20 44 72 61 67 73 74 65 72 07 00\r
+00 38 35 2D 32 35 39 32 20 00 00 33 39 20 43 68\r
+65 76 79 20 53 65 64 61 6E 20 44 65 6C 69 76 65\r
+72 79 20 4C 6F 77 72 69 64 65 72 07 00 00 38 35\r
+2D 35 39 30 34 12 00 00 4E 41 53 41 20 53 70 61\r
+63 65 20 53 68 75 74 74 6C 65 04 00 00 32 34 30\r
+30 1C 00 00 31 39 32 36 20 4D 61 63 6B 20 42 75\r
+6C 6C 64 6F 67 20 44 75 6D 70 20 54 72 75 63 6B\r
+05 00 00 43 31 31 32 38 13 00 00 32 33 20 54 20\r
+52 6F 61 64 73 74 65 72 20 46 72 61 6D 65 05 00\r
+00 33 31 32 31 36 11 00 00 44 6F 64 67 65 20 56\r
+69 70 65 72 20 52 54 2D 31 30 07 00 00 50 72 6F\r
+53 68 6F 70 04 00 00 32 33 30 31 05 00 00 31 31\r
+32 31 32 26 00 00 31 39 33 35 20 4D 6F 72 67 61\r
+6E 20 53 75 70 65 72 20 53 70 6F 72 74 73 20 54\r
+68 72 65 65 20 57 68 65 65 6C 65 72 0C 00 00 47\r
+75 6E 7A 65 20 53 61 6E 67 79 6F 13 00 00 54 72\r
+69 75 6D 70 68 20 54 52 32 20 4C 65 20 4D 61 6E\r
+73 07 00 00 38 35 2D 31 39 31 31 0F 00 00 33 34\r
+20 46 6F 72 64 20 48 69 67 68 62 6F 79 17 00 00\r
+57 68 65 65 6C 73 20 6F 66 20 46 69 72 65 20 53\r
+6E 61 70 54 69 74 65 06 00 00 4A 6F 2D 48 61 6E\r
+06 00 00 47 43 2D 33 30 30 20 00 00 43 68 72 79\r
+73 6C 65 72 20 43 6F 72 70 6F 72 61 74 69 6F 6E\r
+20 54 75 72 62 69 6E 65 20 43 61 72 09 00 00 48\r
+31 32 38 35 3A 31 39 38 2B 00 00 54 6F 6D 6D 79\r
+20 49 76 6F 27 73 20 46 6F 75 72 20 45 6E 67 69\r
+6E 65 20 44 72 61 67 73 74 65 72 20 22 53 68 6F\r
+77 62 6F 61 74 22 09 00 00 48 31 32 32 34 3A 32\r
+30 30 17 00 00 32 32 20 4A 52 20 52 6F 61 64 73\r
+74 65 72 20 44 72 61 67 73 74 65 72 0F 00 00 32\r
+20 63 6F 6D 70 6C 65 74 65 20 63 61 72 73 04 00\r
+00 36 34 33 35 04 00 00 36 34 33 38 07 00 00 38\r
+35 2D 37 36 36 38 0F 00 00 34 31 20 43 68 65 76\r
+79 20 50 69 63 6B 75 70 04 00 00 36 35 38 35 17\r
+00 00 42 61 62 79 6C 6F 6E 20 35 20 53 74 61 72\r
+66 75 72 79 20 4D 6B 2E 31 1C 00 00 4D 65 73 73\r
+65 72 73 63 68 6D 69 74 74 20 42 66 31 30 39 45\r
+20 47 61 6C 6C 61 6E 64 05 00 00 36 31 30 36 37\r
+1B 00 00 42 72 69 73 74 6F 6C 20 42 65 61 75 66\r
+69 67 68 74 65 72 20 54 46 2E 4D 6B 2E 58 12 00\r
+00 48 65 6E 73 63 68 65 6C 20 48 73 20 31 32 39\r
+42 2D 32 04 00 00 33 34 31 39 0D 00 00 50 2D 35\r
+31 43 20 4D 75 73 74 61 6E 67 07 00 00 38 35 2D\r
+35 35 30 39 1B 00 00 48 65 69 6E 6B 65 6C 20 48\r
+65 31 31 31 20 47 65 72 6D 61 6E 20 42 6F 6D 62\r
+65 72 11 00 00 41 63 61 64 65 6D 79 20 4D 69 6E\r
+69 63 72 61 66 74 04 00 00 32 31 34 35 1E 00 00\r
+4C 6F 63 6B 68 65 65 64 20 50 2D 33 38 4D 20 4E\r
+69 67 68 74 20 4C 69 67 68 74 6E 69 6E 67 07 00\r
+00 38 35 2D 30 31 33 35 11 00 00 4F 53 32 55 2D\r
+33 20 4B 69 6E 67 66 69 73 68 65 72 3B 00 00 41\r
+69 63 68 69 20 42 37 41 32 20 41 74 74 61 63 6B\r
+20 42 6F 6D 62 65 72 20 20 52 79 75 73 65 69 20\r
+4B 61 69 20 28 47 72 61 63 65 29 20 27 46 6F 6C\r
+64 69 6E 67 20 57 69 6E 67 27 15 00 00 58 46 35\r
+55 2D 31 20 46 6C 79 69 6E 67 20 50 61 6E 63 61\r
+6B 65 04 00 00 36 37 35 37 07 00 00 49 63 65 20\r
+27 54 27 07 00 00 38 35 2D 35 31 30 32 04 00 00\r
+53 68 69 70 15 00 00 55 2E 53 2E 53 2E 20 4E 6F\r
+72 74 68 20 43 61 72 6F 6C 69 6E 61 0E 00 00 50\r
+61 72 74 73 20 62 79 20 50 61 72 6B 73 04 00 00\r
+31 30 30 34 0F 00 00 44 69 73 74 72 69 62 75 74\r
+6F 72 20 4B 69 74 12 00 00 50 53 46 20 4D 6F 64\r
+65 6C 20 53 75 70 70 6C 69 65 73 07 00 00 45 4B\r
+44 31 30 30 30 1B 00 00 4D 6F 64 65 6C 20 43 61\r
+72 20 45 6E 67 69 6E 65 20 44 65 74 61 69 6C 20\r
+4B 69 74 04 00 00 38 34 33 35 1F 00 00 43 75 73\r
+74 6F 6D 20 26 20 43 6F 6D 70 65 74 69 74 69 6F\r
+6E 20 50 61 72 74 73 20 50 61 63 6B 04 00 00 54\r
+36 34 32 27 00 00 22 57 69 6E 6E 69 65 20 4D 61\r
+65 22 20 57 69 6C 65 79 20 50 6F 73 74 27 73 20\r
+4C 6F 63 6B 68 65 65 64 20 56 65 67 61 06 00 00\r
+41 69 72 66 69 78 05 00 00 30 34 31 37 36 0C 00\r
+00 44 48 20 43 6F 6D 65 74 20 34 20 42 07 00 00\r
+38 35 2D 34 31 36 32 1B 00 00 4F 72 61 6E 67 65\r
+20 43 72 61 74 65 20 27 33 32 20 46 6F 72 64 20\r
+53 65 64 61 6E 06 00 00 38 36 30 35 50 4F 14 00\r
+00 46 69 61 74 20 44 6F 75 62 6C 65 20 44 72 61\r
+67 73 74 65 72 0B 00 00 42 6C 75 65 70 72 69 6E\r
+74 65 72 06 00 00 48 2D 31 33 32 31 0C 00 00 47\r
+72 61 6E 20 54 75 72 69 73 6D 6F 07 00 00 38 35\r
+2D 37 36 33 37 15 00 00 33 31 20 46 6F 72 64 20\r
+4D 6F 64 65 6C 20 41 20 57 6F 6F 64 79 03 00 00\r
+4D 50 43 07 00 00 32 30 30 2D 32 30 30 16 00 00\r
+47 61 6E 67 62 75 73 74 65 72 73 20 32 38 20 4C\r
+69 6E 63 6F 6C 6E 07 00 00 38 35 2D 32 35 36 39\r
+19 00 00 43 68 65 76 79 20 53 2D 31 30 20 4C 6F\r
+77 72 69 64 65 72 20 33 27 6E 20 31 04 00 00 32\r
+32 31 31 04 00 00 35 35 30 35 1C 00 00 48 6F 72\r
+74 65 6E 20 48 6F 20 32 32 39 41 2D 31 20 46 6C\r
+79 69 6E 67 20 57 69 6E 67 05 00 00 30 35 32 30\r
+31 1C 00 00 4D 63 44 6F 6E 6E 65 6C 6C 20 58 56\r
+2D 31 20 43 6F 6E 76 65 72 74 69 70 6C 61 6E 65\r
+07 00 00 38 35 2D 35 38 31 30 0F 00 00 53 52 2D\r
+37 31 20 42 6C 61 63 6B 62 69 72 64 04 00 00 34\r
+35 32 32 19 00 00 4D 65 73 73 65 72 73 63 68 6D\r
+69 74 74 20 42 66 2D 31 30 39 20 47 2D 31 30 16\r
+00 00 50 72 65 6D 69 75 6D 2C 20 73 6B 69 6C 6C\r
+20 6C 65 76 65 6C 20 34 04 00 00 38 36 34 36 0B\r
+00 00 48 6F 62 62 79 20 43 72 61 66 74 06 00 00\r
+48 43 31 35 34 39 16 00 00 56 61 6D 70 69 72 65\r
+20 46 33 20 4A 65 74 20 46 69 67 68 74 65 72 04\r
+00 00 33 34 30 31 0B 00 00 41 2D 33 36 20 41 70\r
+61 63 68 65 05 00 00 30 34 33 33 35 15 00 00 42\r
+6C 6F 68 6D 20 26 20 56 6F 73 73 20 42 56 20 50\r
+2D 31 39 34 09 00 00 30 31 33 30 4D 30 31 30 30\r
+34 00 00 43 6F 72 64 20 50 68 61 65 74 6F 6E 20\r
+53 65 64 61 6E 20 31 39 33 37 20 38 31 32 20 53\r
+75 70 65 72 63 68 61 72 67 65 64 20 43 6F 6E 76\r
+65 72 74 69 62 6C 65 07 00 00 38 35 2D 32 35 37\r
+39 15 00 00 56 57 20 42 65 65 74 6C 65 20 43 6F\r
+6E 76 65 72 74 69 62 6C 65 04 00 00 37 34 33 38\r
+10 00 00 42 4D 57 20 5A 2D 31 20 52 6F 61 64 73\r
+74 65 72 04 00 00 36 31 34 38 0B 00 00 44 69 61\r
+62 6C 6F 20 41 65 72 6F 0B 00 00 55 6E 69 6F 6E\r
+20 4D 6F 64 65 6C 2B 00 00 50 65 74 65 20 42 72\r
+6F 63 6B 27 73 20 53 43 43 41 20 43 68 61 6D 70\r
+69 6F 6E 20 42 52 45 2F 44 61 74 73 75 6E 20 32\r
+34 30 2D 5A 05 00 00 32 34 31 32 39 0D 00 00 4A\r
+61 67 75 61 72 20 58 4A 20 32 32 30 05 00 00 30\r
+33 31 30 31 13 00 00 53 70 69 72 69 74 20 6F 66\r
+20 53 74 2E 20 4C 6F 75 69 73 05 00 00 30 36 31\r
+37 31 15 00 00 4F 72 69 6F 6E 20 32 30 30 31 20\r
+53 70 61 63 65 63 72 61 66 74 04 00 00 38 37 36\r
+36 05 00 00 31 2F 36 35 30 18 00 00 53 74 61 72\r
+20 54 72 65 6B 20 55 2E 53 2E 53 2E 20 52 65 6C\r
+69 61 6E 74 07 00 00 38 35 2D 31 38 33 35 15 00\r
+00 4E 41 53 41 2F 4D 63 44 6F 6E 6E 65 6C 6C 20\r
+47 65 6D 69 6E 69 04 00 00 31 39 39 37 24 00 00\r
+43 68 61 6E 67 20 5A 68 65 6E 67 20 32 20 28 43\r
+5A 2D 32 45 29 20 4C 61 75 6E 63 68 20 56 65 68\r
+69 63 6C 65 05 00 00 31 31 32 31 30 04 00 00 31\r
+2F 32 30 13 00 00 4D 61 6B 6F 20 53 68 61 72 6B\r
+20 53 68 6F 77 20 43 61 72 08 00 00 44 72 61 67\r
+73 74 65 72 08 00 00 4C 6F 77 72 69 64 65 72 04\r
+00 00 36 30 36 36 2F 00 00 57 69 6C 64 20 57 69\r
+6C 6C 69 65 20 42 6F 72 73 63 68 20 22 57 69 6E\r
+67 65 64 20 45 78 70 72 65 73 73 22 20 41 6C 74\r
+65 72 65 64 20 52 6F 64 04 00 00 36 31 38 32 0F\r
+00 00 31 39 33 33 20 57 69 6C 6C 79 73 20 56 61\r
+6E 07 00 00 38 35 2D 30 35 34 30 34 00 00 49 6E\r
+61 75 67 75 72 61 6C 20 4D 41 54 43 4F 20 54 6F\r
+6F 6C 73 20 53 75 70 65 72 6E 61 74 69 6F 6E 61\r
+6C 73 20 4E 69 74 72 6F 20 46 75 6E 6E 79 20 43\r
+61 72 04 00 00 36 33 35 35 1E 00 00 31 39 35 37\r
+20 43 68 65 76 72 6F 6C 65 74 20 43 6F 72 76 65\r
+74 74 65 20 47 61 73 73 65 72 07 00 00 38 35 2D\r
+37 36 37 35 04 00 00 50 43 36 31 2A 00 00 47 72\r
+65 65 6E 20 48 6F 72 6E 65 74 20 46 6F 72 64 20\r
+22 54 22 20 53 68 6F 77 20 61 6E 64 20 47 6F 20\r
+52 6F 61 64 73 74 65 72 04 00 00 38 32 31 35 18\r
+00 00 31 39 34 30 20 46 6F 72 64 20 53 65 64 61\r
+6E 20 44 65 6C 69 76 65 72 79 07 00 00 38 35 2D\r
+37 36 32 38 16 00 00 33 37 20 46 6F 72 64 20 50\r
+61 6E 65 6C 20 44 65 6C 69 76 65 72 79 04 00 00\r
+31 32 39 34 10 00 00 47 79 70 73 79 20 44 75 6E\r
+65 20 42 75 67 67 79 06 00 00 48 2D 31 32 33 31\r
+23 00 00 43 68 72 79 73 6C 65 72 20 4E 65 77 20\r
+59 6F 72 6B 65 72 20 43 75 73 74 6F 6D 69 7A 69\r
+6E 67 20 4B 69 74 05 00 00 33 30 30 38 31 0E 00\r
+00 36 32 20 54 68 75 6E 64 65 72 62 69 72 64 04\r
+00 00 36 38 39 39 11 00 00 31 39 33 32 20 46 6F\r
+72 64 20 50 68 61 65 74 6F 6E 05 00 00 33 30 32\r
+37 30 0D 00 00 31 39 36 38 20 50 6C 79 6D 6F 75\r
+74 68 04 00 00 38 38 34 32 17 00 00 47 72 75 6D\r
+6D 61 6E 20 46 37 46 2D 33 4E 20 54 69 67 65 72\r
+63 61 74 04 00 00 48 32 34 34 14 00 00 4D 61 72\r
+74 69 6E 20 50 36 4D 20 53 65 61 6D 61 73 74 65\r
+72 04 00 00 35 35 30 30 0E 00 00 42 2D 32 35 48\r
+20 4D 69 74 63 68 65 6C 6C 04 00 00 33 34 30 32\r
+0D 00 00 50 2D 35 31 41 20 4D 75 73 74 61 6E 67\r
+04 00 00 36 34 32 31 3E 00 00 44 61 6D 62 75 73\r
+74 65 72 20 47 72 61 6E 64 20 53 6C 61 6D 20 42\r
+6F 6D 62 65 72 20 4C 61 6E 63 61 73 74 65 72 20\r
+42 49 20 53 70 65 63 69 61 6C 20 32 32 30 30 30\r
+6C 62 2E 20 42 6F 6D 62 05 00 00 31 34 34 34 33\r
+1E 00 00 4C 6F 63 6B 68 65 65 64 20 53 75 70 65\r
+72 2D 47 20 43 6F 6E 73 74 65 6C 6C 61 74 69 6F\r
+6E 04 00 00 35 36 31 30 13 00 00 57 69 6C 6C 69\r
+61 6D 73 20 42 72 6F 73 2E 20 49 6E 63 2E 07 00\r
+00 34 38 2D 33 31 39 31 10 00 00 43 6F 72 62 65\r
+6E 20 53 75 70 65 72 2D 41 63 65 05 00 00 30 35\r
+30 30 32 10 00 00 52 65 74 72 69 65 76 65 72 20\r
+52 6F 63 6B 65 74 03 00 00 43 61 72 04 00 00 38\r
+35 38 38 1D 00 00 50 6C 79 6D 6F 75 74 68 20 50\r
+72 6F 77 6C 65 72 20 77 69 74 68 20 54 72 61 69\r
+6C 65 72 04 00 00 35 30 30 31 14 00 00 43 6F 72\r
+76 65 74 74 65 20 47 72 61 6E 64 20 53 70 6F 72\r
+74 04 00 00 37 31 30 38 1D 00 00 43 6F 72 76 65\r
+74 74 65 20 49 6E 64 79 20 22 44 72 65 61 6D 20\r
+4D 61 63 68 69 6E 65 22 04 00 00 38 30 35 39 0C\r
+00 00 54 68 65 20 4D 75 6E 73 74 65 72 73 20 00\r
+00 42 6C 75 65 70 72 69 6E 74 65 72 3B 20 4D 75\r
+6E 73 74 65 72 73 20 4B 6F 61 63 68 20 6F 6E 6C\r
+79 07 00 00 38 35 2D 34 31 36 36 05 00 00 43 6F\r
+75 6E 74 3C 00 00 77 2F 43 75 74 74 69 6E 67 20\r
+45 64 67 65 20 43 45 43 34 38 30 38 36 20 48 65\r
+31 31 31 5A 20 22 5A 77 69 6C 6C 69 6E 67 22 20\r
+6B 69 74 2C 20 73 6B 69 6C 6C 20 6C 65 76 65 6C\r
+20 33 07 00 00 38 35 2D 37 36 36 36 23 00 00 43\r
+75 73 74 6F 6D 20 53 69 6C 76 65 72 61 64 6F 20\r
+61 6E 64 20 57 61 76 65 72 69 64 65 72 20 42 6F\r
+61 74 07 00 00 38 35 2D 36 38 35 38 16 00 00 53\r
+6E 61 6B 65 20 26 20 4D 6F 6E 67 6F 6F 73 65 20\r
+43 6F 6D 62 6F 07 00 00 38 35 2D 34 31 35 39 24\r
+00 00 4A 6F 65 20 41 6D 61 74 6F 20 53 75 70 65\r
+72 6D 61 6E 20 54 6F 70 20 46 75 65 6C 20 44 72\r
+61 67 73 74 65 72 04 00 00 37 35 34 31 0D 00 00\r
+53 6B 69 6C 6C 20 6C 65 76 65 6C 20 35 09 00 00\r
+48 38 32 35 2D 31 30 44 30 28 00 00 43 6F 63 61\r
+20 43 6F 6C 61 20 46 6F 72 64 20 4C 6F 75 69 73\r
+76 69 6C 6C 65 20 44 65 6C 69 76 65 72 79 20 54\r
+72 75 63 6B 07 00 00 38 35 2D 32 31 35 36 04 00\r
+00 32 39 35 34 0B 00 00 50 6F 72 73 63 68 65 20\r
+39 30 34 04 00 00 32 39 33 35 25 00 00 4C 61 6D\r
+62 6F 72 67 68 69 6E 69 20 43 6F 75 6E 74 61 63\r
+68 20 32 35 74 68 20 41 6E 6E 69 76 65 72 73 61\r
+72 79 07 00 00 38 35 2D 37 36 31 36 1F 00 00 41\r
+6D 65 72 69 63 61 6E 20 49 6E 74 65 72 6E 61 74\r
+69 6F 6E 61 6C 20 44 72 61 67 73 74 65 72 07 00\r
+00 38 35 2D 35 32 34 31 0D 00 00 50 2D 35 31 44\r
+20 4D 75 73 74 61 6E 67 07 00 00 38 35 2D 35 37\r
+31 30 11 00 00 52 42 2D 33 36 48 20 50 65 61 63\r
+65 6D 61 6B 65 72 05 00 00 30 35 31 30 34 14 00\r
+00 52 65 70 75 62 6C 69 63 20 52 43 2E 33 20 53\r
+65 61 62 65 65 05 00 00 50 41 31 35 32 05 00 00\r
+36 31 30 36 36 25 00 00 44 65 48 61 76 69 6C 6C\r
+61 6E 64 20 4D 6F 73 71 75 69 74 6F 20 42 20 4D\r
+6B 2E 49 56 2F 50 52 20 4D 6B 2E 49 56 07 00 00\r
+38 35 2D 37 35 34 36 10 00 00 50 2D 36 31 20 42\r
+6C 61 63 6B 20 57 69 64 6F 77 07 00 00 38 35 2D\r
+36 36 35 32 25 00 00 42 2D 31 37 46 20 46 6C 79\r
+69 6E 67 20 46 6F 72 74 72 65 73 73 20 22 4D 65\r
+6D 70 68 69 73 20 42 65 6C 6C 65 22 04 00 00 37\r
+35 30 30 0D 00 00 47 61 74 65 73 20 4C 65 61 72\r
+6A 65 74 03 00 00 35 31 39 15 00 00 47 72 75 6D\r
+6D 61 6E 20 46 38 46 2D 32 20 42 65 61 72 63 61\r
+74 04 00 00 37 35 32 33 12 00 00 46 2D 31 30 34\r
+43 20 53 74 61 72 66 69 67 68 74 65 72 05 00 00\r
+36 31 30 37 30 15 00 00 56 6F 75 67 68 74 20 46\r
+34 55 2D 31 41 20 43 6F 72 73 61 69 72 07 00 00\r
+38 35 2D 37 36 36 34 19 00 00 42 61 6C 64 77 69\r
+6E 2D 4D 6F 74 69 6F 6E 20 44 72 61 67 20 43 6F\r
+62 72 61 04 00 00 38 34 35 35 14 00 00 35 37 20\r
+43 68 65 76 72 6F 6C 65 74 20 42 65 6C 20 41 69\r
+72 16 00 00 50 72 6F 53 68 6F 70 2C 20 73 6B 69\r
+6C 6C 20 6C 65 76 65 6C 20 33 05 00 00 33 30 30\r
+35 32 0D 00 00 34 31 20 46 6F 72 64 20 57 6F 6F\r
+64 79 07 00 00 38 35 2D 32 35 35 37 19 00 00 36\r
+30 20 43 68 65 76 79 20 48 61 72 64 74 6F 70 20\r
+4C 6F 77 72 69 64 65 72 07 00 00 38 35 2D 37 36\r
+33 38 09 00 00 41 65 72 6F 76 65 74 74 65 07 00\r
+00 38 35 2D 30 30 39 34 1B 00 00 4C 69 27 6C 20\r
+43 6F 66 66 69 6E 20 43 75 73 74 6F 6D 20 53 68\r
+6F 77 20 52 6F 64 04 00 00 38 32 39 30 0A 00 00\r
+53 27 43 6F 6F 6C 20 42 75 73 07 00 00 38 35 2D\r
+32 35 39 37 12 00 00 53 74 72 65 65 74 20 46 69\r
+67 68 74 65 72 20 54 77 6F 04 00 00 37 36 30 39\r
+12 00 00 54 68 61 6D 65 73 20 50 61 6E 65 6C 20\r
+54 72 75 63 6B 07 00 00 38 35 2D 37 36 30 36 15\r
+00 00 44 61 6E 20 46 69 6E 6B 27 73 20 53 70 65\r
+65 64 77 61 67 6F 6E 05 00 00 30 35 35 30 35 1A\r
+00 00 4D 61 72 74 69 6E 20 4D 2D 31 33 30 20 43\r
+68 69 6E 61 20 43 6C 69 70 70 65 72 07 00 00 38\r
+35 2D 30 30 31 35 0E 00 00 46 6F 72 64 20 54 72\r
+69 2D 4D 6F 74 6F 72 04 00 00 50 41 33 30 1A 00\r
+00 57 72 69 67 68 74 20 42 72 6F 74 68 65 72 73\r
+20 4B 69 74 74 79 20 48 61 77 6B 07 00 00 38 35\r
+2D 35 30 38 31 13 00 00 46 69 72 73 74 20 4C 75\r
+6E 61 72 20 4C 61 6E 64 69 6E 67 07 00 00 38 35\r
+2D 35 38 33 39 18 00 00 4D 65 73 73 65 72 73 63\r
+68 6D 69 74 74 20 42 66 20 31 31 30 20 47 2D 32\r
+04 00 00 43 48 34 31 04 00 00 4A 30 30 34 05 00\r
+00 4A 54 31 32 33 04 00 00 4A 54 32 32 04 00 00\r
+4A 54 37 31 04 00 00 53 50 36 33 04 00 00 42 54\r
+31 36 0C 00 00 4F 56 2D 31 42 20 4D 6F 68 61 77\r
+6B 03 00 00 30 36 38 0B 00 00 56 2D 32 32 20 4F\r
+73 70 72 65 79 04 00 00 38 36 31 35 13 00 00 58\r
+2F 59 42 2D 33 35 20 46 6C 79 69 6E 67 20 57 69\r
+6E 67 05 00 00 31 31 32 30 38 1B 00 00 31 39 33\r
+33 20 43 61 64 69 6C 6C 61 63 20 56 2D 31 36 20\r
+54 6F 77 6E 20 43 61 72 04 00 00 36 36 31 38 27\r
+00 00 53 74 61 72 20 54 72 65 6B 20 33 20 50 69\r
+65 63 65 20 55 2E 53 2E 53 2E 20 45 6E 74 65 72\r
+70 72 69 73 65 20 53 65 74 12 00 00 4D 69 73 73\r
+69 6E 67 20 54 56 20 76 65 72 73 69 6F 6E 04 00\r
+00 38 39 31 35 0E 00 00 53 74 61 72 20 44 65 73\r
+74 72 6F 79 65 72 04 00 00 38 31 39 33 0A 00 00\r
+44 65 61 74 68 20 53 74 61 72 08 00 00 53 6E 61\r
+70 54 69 74 65 07 00 00 38 35 2D 33 36 32 31 07\r
+00 00 38 35 2D 33 36 32 32 17 00 00 42 61 62 79\r
+6C 6F 6E 20 35 20 53 70 61 63 65 20 53 74 61 74\r
+69 6F 6E 04 00 00 36 38 35 38 1F 00 00 53 74 61\r
+72 20 54 72 65 6B 20 33 20 50 69 65 63 65 20 41\r
+64 76 65 72 73 61 72 79 20 53 65 74 04 00 00 38\r
+37 36 32 06 00 00 31 2F 31 30 30 30 29 00 00 53\r
+74 61 72 20 54 72 65 6B 20 47 65 6E 65 72 61 74\r
+69 6F 6E 73 20 55 2E 53 2E 53 2E 20 45 6E 74 65\r
+72 70 72 69 73 65 20 42 04 00 00 38 38 38 33 03\r
+00 00 31 2F 34 05 00 00 4F 74 68 65 72 12 00 00\r
+56 69 73 69 62 6C 65 20 56 2D 38 20 45 6E 67 69\r
+6E 65 04 00 00 37 31 32 30 1C 00 00 31 39 36 39\r
+20 50 6F 6E 74 69 61 63 20 47 54 4F 20 22 54 68\r
+65 20 4A 75 64 67 65 22 09 00 00 31 2F 32 34 2D\r
+31 2F 32 35 05 00 00 31 2F 31 33 30 05 00 00 31\r
+2F 35 37 30 05 00 00 54 6F 20 64 6F 33 00 00 47\r
+75 73 20 47 72 69 73 73 6F 6D 20 4D 65 6D 6F 72\r
+69 61 6C 20 43 6F 6D 62 6F 20 77 2F 54 77 6F 20\r
+43 6F 6C 6C 65 63 74 6F 72 73 20 50 61 74 63 68\r
+65 73 09 00 00 46 69 72 65 20 49 72 6F 6E 0C 00\r
+00 77 2F 64 65 74 61 69 6C 20 73 65 74 2C 00 00\r
+77 2F 64 65 74 61 69 6C 20 73 65 74 20 61 6E 64\r
+20 69 6E 74 65 72 69 6F 72 20 73 65 74 2C 20 72\r
+65 73 69 6E 20 65 6E 67 69 6E 65 73 03 00 00 49\r
+43 4D 0E 00 00 53 70 69 74 66 69 72 65 20 4D 6B\r
+2E 49 58 1A 00 00 4D 65 73 73 65 72 73 63 68 6D\r
+69 74 74 20 4D 65 20 34 31 30 42 2D 32 2F 55 34\r
+0A 00 00 4D 6F 64 65 6C 63 72 61 66 74 12 00 00\r
+46 2D 38 32 42 20 54 77 69 6E 20 4D 75 73 74 61\r
+6E 67 1F 00 00 31 39 35 33 20 53 74 75 64 65 62\r
+61 6B 65 72 20 53 74 61 72 6C 69 6E 65 72 20 43\r
+6F 75 70 65 04 00 00 32 34 33 36 0E 00 00 42 75\r
+67 61 74 74 69 20 45 42 20 31 31 30 2D 00 00 53\r
+74 61 72 20 54 72 65 6B 20 4B 6C 69 6E 67 6F 6E\r
+20 42 69 72 64 20 6F 66 20 50 72 65 79 20 46 6C\r
+69 67 68 74 20 44 69 73 70 6C 61 79 16 00 00 50\r
+6F 72 73 63 68 65 20 39 31 31 20 53 6C 61 6E 74\r
+20 4E 6F 73 65 05 00 00 36 31 30 37 33 25 00 00\r
+44 6F 75 67 6C 61 73 20 41 2D 31 4A 20 53 6B 79\r
+72 61 69 64 65 72 20 55 2E 53 2E 20 41 69 72 20\r
+46 6F 72 63 65 04 00 00 36 33 33 39 04 00 00 36\r
+39 35 35 04 00 00 37 35 33 30 06 00 00 34 38 2D\r
+30 32 30 05 00 00 31 2F 34 35 30 0F 00 00 55 2E\r
+53 2E 53 2E 20 4D 69 73 73 6F 75 72 69 05 00 00\r
+36 31 30 35 37 15 00 00 48 65 69 6E 6B 65 6C 20\r
+48 65 32 31 39 20 41 2D 37 20 55 48 55 05 00 00\r
+36 31 30 34 31 05 00 00 31 31 36 32 34 32 00 00\r
+43 6F 6E 73 6F 6C 69 64 61 74 65 64 20 42 2D 32\r
+34 4A 20 4C 69 62 65 72 61 74 6F 72 20 54 68 65\r
+20 44 72 61 67 6F 6E 20 26 20 48 69 73 20 54 61\r
+69\r
package org.apache.poi.hssf.record;
import junit.framework.TestCase;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.util.BinaryTree;
+import org.apache.poi.util.HexRead;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndianConsts;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.*;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
-import java.util.List;
/**
* @author Marc Johnson (mjohnson at apache dot org)
+ * @author Glen Stampoultzis (glens at apache.org)
*/
public class TestSSTRecord
public void testProcessContinueRecord()
throws IOException
{
- byte[] testdata = readTestData( "BigSSTRecord" );
+ byte[] testdata = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord" );
byte[] input = new byte[testdata.length - 4];
System.arraycopy( testdata, 4, input, 0, input.length );
SSTRecord record =
new SSTRecord( LittleEndian.getShort( testdata, 0 ),
LittleEndian.getShort( testdata, 2 ), input );
- byte[] continueRecord = readTestData( "BigSSTRecordCR" );
+ byte[] continueRecord = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecordCR" );
input = new byte[continueRecord.length - 4];
System.arraycopy( continueRecord, 4, input, 0, input.length );
assertEquals( record, testRecord );
// testing based on new bug report
- testdata = readTestData( "BigSSTRecord2" );
+ testdata = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2" );
input = new byte[testdata.length - 4];
System.arraycopy( testdata, 4, input, 0, input.length );
record = new SSTRecord( LittleEndian.getShort( testdata, 0 ),
LittleEndian.getShort( testdata, 2 ), input );
- byte[] continueRecord1 = readTestData( "BigSSTRecord2CR1" );
+ byte[] continueRecord1 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR1" );
input = new byte[continueRecord1.length - 4];
System.arraycopy( continueRecord1, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord2 = readTestData( "BigSSTRecord2CR2" );
+ byte[] continueRecord2 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR2" );
input = new byte[continueRecord2.length - 4];
System.arraycopy( continueRecord2, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord3 = readTestData( "BigSSTRecord2CR3" );
+ byte[] continueRecord3 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR3" );
input = new byte[continueRecord3.length - 4];
System.arraycopy( continueRecord3, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord4 = readTestData( "BigSSTRecord2CR4" );
+ byte[] continueRecord4 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR4" );
input = new byte[continueRecord4.length - 4];
System.arraycopy( continueRecord4, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord5 = readTestData( "BigSSTRecord2CR5" );
+ byte[] continueRecord5 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR5" );
input = new byte[continueRecord5.length - 4];
System.arraycopy( continueRecord5, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord6 = readTestData( "BigSSTRecord2CR6" );
+ byte[] continueRecord6 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR6" );
input = new byte[continueRecord6.length - 4];
System.arraycopy( continueRecord6, 4, input, 0, input.length );
record.processContinueRecord( input );
- byte[] continueRecord7 = readTestData( "BigSSTRecord2CR7" );
+ byte[] continueRecord7 = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord2CR7" );
input = new byte[continueRecord7.length - 4];
System.arraycopy( continueRecord7, 4, input, 0, input.length );
}
assertEquals( offset, ser_output.length );
assertEquals( record, testRecord );
+ assertEquals( record.countStrings(), testRecord.countStrings() );
}
/**
*
* @exception IOException
*/
-
public void testSSTRecordBug()
throws IOException
{
/**
* test simple addString
*/
-
public void testSimpleAddString()
{
SSTRecord record = new SSTRecord();
public void testReaderConstructor()
throws IOException
{
- byte[] testdata = readTestData( "BigSSTRecord" );
+ byte[] testdata = HexRead.readTestData( _test_file_path + File.separator + "BigSSTRecord" );
byte[] input = new byte[testdata.length - 4];
System.arraycopy( testdata, 4, input, 0, input.length );
assertEquals( 1464, record.getNumStrings() );
assertEquals( 688, record.getNumUniqueStrings() );
assertEquals( 492, record.countStrings() );
- assertEquals( 1, record.getDeserializer().getExpectedChars() );
+ assertEquals( 1, record.getDeserializer().getContinuationExpectedChars() );
assertEquals( "Consolidated B-24J Liberator The Dragon & His Tai",
record.getDeserializer().getUnfinishedString() );
- assertEquals( 52, record.getDeserializer().getTotalLength() );
- assertEquals( 3, record.getDeserializer().getStringDataOffset() );
+// assertEquals( 52, record.getDeserializer().getTotalLength() );
+// assertEquals( 3, record.getDeserializer().getStringDataOffset() );
assertTrue( !record.getDeserializer().isWideChar() );
}
assertEquals( 0, record.getNumStrings() );
assertEquals( 0, record.getNumUniqueStrings() );
assertEquals( 0, record.countStrings() );
- assertEquals( 0, record.getDeserializer().getExpectedChars() );
+ assertEquals( 0, record.getDeserializer().getContinuationExpectedChars() );
assertEquals( "", record.getDeserializer().getUnfinishedString() );
- assertEquals( 0, record.getDeserializer().getTotalLength() );
- assertEquals( 0, record.getDeserializer().getStringDataOffset() );
+// assertEquals( 0, record.getDeserializer().getTotalLength() );
+// assertEquals( 0, record.getDeserializer().getStringDataOffset() );
assertTrue( !record.getDeserializer().isWideChar() );
byte[] output = record.serialize();
byte[] expected =
junit.textui.TestRunner.run( TestSSTRecord.class );
}
- private byte[] readTestData( String filename )
- throws IOException
- {
- File file = new File( _test_file_path
- + File.separator
- + filename );
- FileInputStream stream = new FileInputStream( file );
- int characterCount = 0;
- byte b = (byte) 0;
- List bytes = new ArrayList();
- boolean done = false;
-
- while ( !done )
- {
- int count = stream.read();
-
- switch ( count )
- {
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- b <<= 4;
- b += (byte) ( count - '0' );
- characterCount++;
- if ( characterCount == 2 )
- {
- bytes.add( new Byte( b ) );
- characterCount = 0;
- b = (byte) 0;
- }
- break;
-
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- b <<= 4;
- b += (byte) ( count + 10 - 'A' );
- characterCount++;
- if ( characterCount == 2 )
- {
- bytes.add( new Byte( b ) );
- characterCount = 0;
- b = (byte) 0;
- }
- break;
-
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- b <<= 4;
- b += (byte) ( count + 10 - 'a' );
- characterCount++;
- if ( characterCount == 2 )
- {
- bytes.add( new Byte( b ) );
- characterCount = 0;
- b = (byte) 0;
- }
- break;
-
- case -1:
- done = true;
- break;
-
- default :
- break;
- }
- }
- stream.close();
- Byte[] polished = (Byte[]) bytes.toArray( new Byte[0] );
- byte[] rval = new byte[polished.length];
-
- for ( int j = 0; j < polished.length; j++ )
- {
- rval[j] = polished[j].byteValue();
- }
- return rval;
- }
-
/**
* Tests that workbooks with rich text that duplicates a non rich text cell can be read and written.
*/
throws Exception
{
File file = new File( _test_file_path + File.separator + "duprich1.xls" );
- InputStream stream = new FileInputStream(file);
- HSSFWorkbook wb = new HSSFWorkbook(stream);
+ InputStream stream = new FileInputStream( file );
+ HSSFWorkbook wb = new HSSFWorkbook( stream );
stream.close();
- HSSFSheet sheet = wb.getSheetAt(1);
- assertEquals("01/05 (Wed) ", sheet.getRow(0).getCell((short)8).getStringCellValue());
- assertEquals("01/05 (Wed)", sheet.getRow(1).getCell((short)8).getStringCellValue());
+ HSSFSheet sheet = wb.getSheetAt( 1 );
+ assertEquals( "01/05 (Wed) ", sheet.getRow( 0 ).getCell( (short) 8 ).getStringCellValue() );
+ assertEquals( "01/05 (Wed)", sheet.getRow( 1 ).getCell( (short) 8 ).getStringCellValue() );
- file = File.createTempFile("testout", "xls");
- FileOutputStream outStream = new FileOutputStream(file);
- wb.write(outStream);
+ file = File.createTempFile( "testout", "xls" );
+ FileOutputStream outStream = new FileOutputStream( file );
+ wb.write( outStream );
outStream.close();
file.delete();
// test the second file.
file = new File( _test_file_path + File.separator + "duprich2.xls" );
- stream = new FileInputStream(file);
- wb = new HSSFWorkbook(stream);
+ stream = new FileInputStream( file );
+ wb = new HSSFWorkbook( stream );
stream.close();
- sheet = wb.getSheetAt(0);
+ sheet = wb.getSheetAt( 0 );
int row = 0;
- assertEquals("Testing ", sheet.getRow(row++).getCell((short)0).getStringCellValue());
- assertEquals("rich", sheet.getRow(row++).getCell((short)0).getStringCellValue());
- assertEquals("text", sheet.getRow(row++).getCell((short)0).getStringCellValue());
- assertEquals("strings", sheet.getRow(row++).getCell((short)0).getStringCellValue());
- assertEquals("Testing ", sheet.getRow(row++).getCell((short)0).getStringCellValue());
- assertEquals("Testing", sheet.getRow(row++).getCell((short)0).getStringCellValue());
+ assertEquals( "Testing ", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
+ assertEquals( "rich", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
+ assertEquals( "text", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
+ assertEquals( "strings", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
+ assertEquals( "Testing ", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
+ assertEquals( "Testing", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );
// file = new File("/tryme.xls");
- file = File.createTempFile("testout", ".xls");
- outStream = new FileOutputStream(file);
- wb.write(outStream);
+ file = File.createTempFile( "testout", ".xls" );
+ outStream = new FileOutputStream( file );
+ wb.write( outStream );
outStream.close();
file.delete();
}
+
+ public void testSpanRichTextToPlainText()
+ throws Exception
+ {
+ byte[] bytes = HexRead.readTestData( _test_file_path + File.separator + "richtextdata.txt" );
+ BinaryTree strings = new BinaryTree();
+ SSTDeserializer deserializer = new SSTDeserializer( strings );
+ deserializer.manufactureStrings( bytes, 0, (short) 45 );
+ byte[] continueBytes = new byte[bytes.length - 45];
+ System.arraycopy( bytes, 45, continueBytes, 0, bytes.length - 45 );
+ deserializer.processContinueRecord( continueBytes );
+// System.out.println( "strings.getKeyForValue(new Integer(0)) = " + strings.get( new Integer( 0 ) ) );
+
+ assertEquals( "At a dinner party orAt At At ", strings.get( new Integer( 0 ) ) + "" );
+ }
+
+ public void testContinuationWithNoOverlap()
+ throws Exception
+ {
+ byte[] bytes = HexRead.readTestData( _test_file_path + File.separator + "evencontinuation.txt" );
+ BinaryTree strings = new BinaryTree();
+ SSTDeserializer deserializer = new SSTDeserializer( strings );
+ deserializer.manufactureStrings( bytes, 0, (short) 43 );
+ byte[] continueBytes = new byte[bytes.length - 43];
+ System.arraycopy( bytes, 43, continueBytes, 0, bytes.length - 43 );
+ deserializer.processContinueRecord( continueBytes );
+
+ assertEquals( "At a dinner party or", strings.get( new Integer( 0 ) ) + "" );
+ assertEquals( "At a dinner party", strings.get( new Integer( 1 ) ) + "" );
+
+ }
+
+ public void testStringAcross2Continuations()
+ throws Exception
+ {
+ byte[] bytes = HexRead.readTestData( _test_file_path + File.separator + "stringacross2continuations.txt" );
+ BinaryTree strings = new BinaryTree();
+ SSTDeserializer deserializer = new SSTDeserializer( strings );
+ deserializer.manufactureStrings( bytes, 0, (short) 43 );
+ bytes = HexRead.readTestData( _test_file_path + File.separator + "stringacross2continuationsCR1.txt" );
+ deserializer.processContinueRecord( bytes );
+ bytes = HexRead.readTestData( _test_file_path + File.separator + "stringacross2continuationsCR2.txt" );
+ deserializer.processContinueRecord( bytes );
+
+ assertEquals( "At a dinner party or", strings.get( new Integer( 0 ) ) + "" );
+ assertEquals( "At a dinner partyAt a dinner party", strings.get( new Integer( 1 ) ) + "" );
+
+ }
}