author | ecalot
<ecalot> 2008-01-01 14:25:41 UTC |
committer | ecalot
<ecalot> 2008-01-01 14:25:41 UTC |
parent | 04bea5236b8c6f3fb74a676cae8fef8064bf6afb |
FP/doc/FormatSpecifications.tex | +681 | -611 |
FP/doc/lzg.eps | +2085 | -0 |
FP/doc/lzg.svg | +178 | -0 |
diff --git a/FP/doc/FormatSpecifications.tex b/FP/doc/FormatSpecifications.tex index 08419f9..2a0afe3 100644 --- a/FP/doc/FormatSpecifications.tex +++ b/FP/doc/FormatSpecifications.tex @@ -1,63 +1,23 @@ - - Prince of Persia - File Formats - Specifications - -Table of Contents -~~~~~ ~~ ~~~~~~~~ -1. Preamble ............................................................ 50 -2. Introduction ........................................................ 59 -3. DAT v1.0 Format Specifications ...................................... 93 -3.1. General file specs, index and checksums ........................... 96 -3.2. Images ........................................................... 188 -3.2.1 Headers ......................................................... 192 -3.2.2 Algorithms ...................................................... 217 -3.2.2.1 Run length encoding (RLE) ..................................... 234 -3.2.2.2 LZ variant (LZG) .............................................. 246 -3.3. Palettes ......................................................... 306 -3.4. Levels ........................................................... 389 -3.4.1 Unknown blocks .................................................. 420 -3.4.2 Room mapping .................................................... 438 -3.4.2.1 Wall drawing algorithm ........................................ 574 -3.4.3 Room linking .................................................... 642 -3.4.4 Guard handling .................................................. 658 -3.4.5 Starting Position ............................................... 706 -3.4.6 Door events ..................................................... 720 -3.5. Digital Waves .................................................... 764 -3.6. Midi music ....................................................... 781 -3.7. Internal PC Speaker .............................................. 786 -3.8. Binary files ..................................................... 799 -3.9. Levels in POP1 for Mac ........................................... 805 -4. DAT v2.0 Format Specifications ..................................... 840 -4.1. General file specs, index and checksums .......................... 843 -4.1.1 The master index ................................................ 870 -4.1.2 The slave indexes ............................................... 919 -4.2. Levels ........................................................... 953 -4.2.1 Room mapping .................................................... 975 -4.2.2 Door events .................................................... 1068 -4.2.3 Guard handling ................................................. 1089 -4.2.3.1 Static guards ................................................ 1102 -4.2.3.2 Dynamic guards ............................................... 1149 -5. PLV v1.0 Format Specifications .................................... 1182 -5.1. User data ....................................................... 1209 -5.2. Allowed Date format ............................................. 1239 -6. The SAV v1.0 format ............................................... 1253 -7. The HOF v1.0 format ............................................... 1299 -8. Credits ........................................................... 1322 -9. License ........................................................... 1346 - - -1. Preamble - ~~~~~~~~ +\documentclass{article} +\usepackage[dvips]{graphicx} +\usepackage{makeidx} +\makeindex +\author{Princed Development Team} +\title{Prince~of~Persia\\ Specifications of\\ File Formats} +\begin{document} +\maketitle +\tableofcontents +\newpage + +\section{Preamble} This file was written thanks to the hard work on reverse engineering made by several people, see the credits section. In case you find any mistake in the text please report it. A copy of this document should be available - in our official site at http://www.princed.org. + in our official site at {\it http://www.princed.org}. -2. Introduction - ~~~~~~~~~~~~ +\section{Introduction} There are two versions of the DAT file format: DAT v1.0 used in POP 1.x and DAT v2.0 used in POP 2. In this document we will specify DAT v1.0. @@ -84,71 +44,77 @@ Table of Contents program works like an archive manager (i.e. pkzip) and extracts the files in known formats that may be handled by other programs. For more information about PR check the Princed home page at - http://www.princed.org + {\it http://www.princed.org}. In this document you will also find the SAV and HOF format specifications and the algorithm used by POP1 to draw the dungeon walls. -3. DAT v1.0 Format Specifications - ~~~ ~~~~ ~~~~~~ ~~~~~~~~~~~~~~ +\section{DAT v1.0 Format Specifications} + +\subsection{General file specifications} +\subsubsection{Some definitions} -3.1. General file specs, index and checksums All DAT files have an index, this index has a number of items count and a list of items. + The index is stored at the very end of the file. + The first 6 bytes are reserved to locate the index and know the file size. Let's define the numbers as: - SC - Signed char: 8 bits, the first bit is for the sign and the 7 last +\begin{description} +\item[SC]{ Signed char: 8 bits, the first bit is for the sign and the 7 last for the number. If the first bit is a 0, then the number is positive, if not the number is negative, in that case invert all - bits and add 1 to get the positive number. - i.e. -1 is FF (1111 1111), 1 is 01 (0000 0001) - Range: -128 to 127 - 1 byte - UC - Unsigned char: 8 bits that represent the number. - i.e. 32 is 20 (0010 0000) - Range: 0 to 255 - 1 byte - US - Unsigned Short: Little endian, 16 bits, storing two groups of 8 bits + bits and add 1 to get the positive number.\\ + i.e. -1 is FF (1111 1111), 1 is 01 (0000 0001)\\ + Range: -128 to 127\\ + 1 byte} +\item[UC]{Unsigned char: 8 bits that represent the number.\\ + i.e. 32 is 20 (0010 0000)\\ + Range: 0 to 255\\ + 1 byte} +\item[US]{Unsigned Short: Little endian, 16 bits, storing two groups of 8 bits ordered from the less representative to the most representative - without sign. - i.e. 65534 is FFFE in hex and is stored FE FF (1111 1110 1111 1111) - Range: 0 to 65535 - 2 bytes - SS - Signed Short: Little endian, 16 bits, storing two groups of 8 bits + without sign.\\ + i.e. 65534 is FFFE in hex and is stored FE FF (1111 1110 1111 1111)\\ + Range: 0 to 65535\\ + 2 bytes} +\item[SS]{Signed Short: Little endian, 16 bits, storing two groups of 8 bits ordered from the less representative to the most representative with sign. If the first byte is 0 then the number is positive, if not the number is negative, in that case invert all bits and add 1 to get - the positive number. - i.e. -2 is FFFE in hex and is stored FE FF (1111 1110 1111 1111) - Range: -32768 to 32767 - 2 bytes - UL - Unsigned long: Little endian, 32 bits, storing four groups of 8 bits + the positive number.\\ + i.e. -2 is FFFE in hex and is stored FE FF (1111 1110 1111 1111)\\ + Range: -32768 to 32767\\ + 2 bytes} +\item[UL]{Unsigned long: Little endian, 32 bits, storing four groups of 8 bits each ordered from the less representative to the most representative - without sign. - i.e. 65538 is 00010002 in hex and is stored 02 00 01 00 - (0000 0010 0000 0000 0000 0001 0000 0000) - Range: 0 to 2^32-1 - 4 bytes + without sign.\\ + i.e. 65538 is 00010002 in hex and is stored 02 00 01 00\\ + (0000 0010 0000 0000 0000 0001 0000 0000)\\ + Range: $0$ to $2^{32}-1$\\ + 4 bytes} + +\end{description} - Note: Sizes are always in bytes unless another unit is specified. + Note: Sizes are always in bytes unless another unit is specified.\\ - Index structures: +\subsubsection{Index structures} The DAT header: Size = 6 bytes - Offset 0, size 4, type UL: IndexOffset (the location where the index begins) - Offset 4, size 2, type US: IndexSize (the number of bytes the index has) - Note that IndexSize is 8*numberOfItems+2 - Note that IndexOffset+IndexSize=file size + Note that $IndexSize$ is $8*numberOfItems+2$ + Note that $IndexOffset+IndexSize=file size$ The DAT index: Size = IndexSize bytes - - Offset IndexOffset, size 2, type US: NumberOfItems + - Offset $IndexOffset$, size 2, type US: NumberOfItems (resources count) - - Offset IndexOffset+2, size NumberOfItems*8: The index + - Offset $IndexOffset+2$, size $NumberOfItems*8$: The index (a list of NumberOfItems blocks of 8-bytes-length index record) The 8-bytes-length index record (one per item): Size = 8 bytes @@ -160,14 +126,15 @@ Table of Contents Note: POP1 doesn't validate a DAT file checking: - IndexOffset+IndexSize=FileSize + $IndexOffset+IndexSize=FileSize$ this means you can append data at the end of the file. - PR validates that IndexOffset+IndexSize<=FileSize. - It also compares IndexSize with 8*numberOfItems+2 to determine if a file + PR validates that $IndexOffset+IndexSize \le FileSize$. + It also compares IndexSize with $8*numberOfItems+2$ to determine if a file is a valid POP1 DAT file. - Checksum byte: +\subsubsection{Checksums byte} + There is a checksum byte for each item (resource), this is the first byte of the item, the rest of the bytes are the item data. The item type is not stored and may only be determined by reading the data and applying some @@ -185,11 +152,11 @@ Table of Contents From now on the specification are special for each data type (that means we won't include the checksum byte anymore). -3.2. Images +\subsection{Images} Images are stored compressed and have a header and a compressed data area. Each image only one header with 6 bytes in it as follows -3.2.1 Headers +\subsubsection{Headers} %3.2.1 The 6-bytes-image header: 6 bytes Relative offset 0, size 2, type US: Height Relative offset 2, size 2, type UL: Width @@ -201,37 +168,45 @@ Table of Contents if it is 1011 (B in hex) then the image has 16 colours if it is 0000 (0 in hex) then the image has 2 colours so to calculate the bits per pixel there are in the image, just take the - last 2 bits and add 1. e. g. 11 is 4 (2^4=16 colours) and - 00 is 1 (2^1=2 colours). + last 2 bits and add 1. e. g. 11 is 4 ($2^4=16$ colours) and + 00 is 1 ($2^1=2$ colours). the last 4 bits are the 5 compression types: from 0 to 4: - 0 RAW_LR (0000) - 1 RLE_LR (0001) - 2 RLE_UD (0010) - 3 LZG_LR (0011) - 4 LZG_UD (0100) + 0 RAW\_LR (0000) + 1 RLE\_LR (0001) + 2 RLE\_UD (0010) + 3 LZG\_LR (0011) + 4 LZG\_UD (0100) The following data in the resource is the image compressed with the algorithm specified by those 4 bits. -3.2.2 Algorithms - RAW_LR means that the data has not been compressed in any way, it is used +\subsubsection{Algorithms} %3.2.2 + +\begin{description} + +\item[RAW\_LR]{means that the data has not been compressed in any way, it is used for small images. The format is saved from left to right (LR) serialising a line to the next integer byte if necessary. In case the image was 16 colours, two pixels per byte (4bpp) will be used. In case the image was 2 colours, 8 pixels per byte (1bpp) will be used. - RLE_LR has a Run length encoding (RLE) algorithm, after uncompressed the - image can be read as a RAW_LR. - RLE_UD is the same as RLE_LR except that after uncompressed the bytes in - the image must be drawn from up to down and then from left to right. - LZG_LR has some kind of variant of the LZ77 algorithm (the sliding windows +} +\item[RLE\_LR]{has a Run length encoding (RLE) algorithm, after uncompressed the + image can be read as a RAW\_LR.} + +\item[RLE\_UD]{is the same as RLE\_LR except that after uncompressed the bytes in + the image must be drawn from up to down and then from left to right.} + +\item[LZG\_LR]{ has some kind of variant of the LZ77 algorithm (the sliding windows algorithm), here we named it LZG in honour of Lance Groody, the original coder. - After decompressed it may be handled as RAW_LR. - LZG_UD Uses LZG compression but is drawn from top to bottom as RLE_UD + After decompressed it may be handled as RAW\_LR.} +\item[LZG\_UD]{Uses LZG compression but is drawn from top to bottom as RLE\_UD.} + +\end{description} -3.2.2.1 Run length encoding (RLE) +\subsubsection{Run length encoding (RLE)} %3.2.2.1 The first byte is always a control byte, the format is SC. If the control byte is negative, then the next byte must be repeated n times as the bit inverted control byte says, after the next byte (the one that was @@ -243,10 +218,10 @@ Table of Contents If you reach a control byte but the image size is passed, then you have completed the image. -3.2.2.2 LZ variant (LZG) +\subsubsection{LZ variant (LZG)} %3.2.2.2 This is a simplified algorithm explanation: - Definition: "print" means to commit a byte into the current location + Definition: ``print'' means to commit a byte into the current location of the output stream. The output stream is a slide window initialised with zeros. @@ -256,9 +231,9 @@ Table of Contents If the bit is a zero read the next two bytes as control bytes with the following format (RRRRRRSS SSSSSSSS): - 6 bits for the copy size number (R). Add 3 to this number. - Range: 2 to 66 + Range: $2$ to $2^6+2=66$ - 10 bits for the slide position (S). Add 66 to this number. - Range: 66 to 1090 + Range: $2^6+2=66$ to $2^6+2+2^{10}=1090$ Then print in the slide window the next R bytes that are the same slide window starting with the S'th byte. @@ -270,13 +245,19 @@ Table of Contents For each input byte we take a window containing the 1023 previous bytes. If the window goes out of bounds (ie, when the current input byte is - before position 1024), we consider it filled with zeros. + before position $2^{10}=1024$), we consider it filled with zeros. + +% 00000000000000000000******************************** +% ^ ^ +% input start current input byte +% |--------------------------------| +% window size=1023 +\begin{figure}[h] +\centerline{\includegraphics[width=10cm]{lzg.eps}} +\vspace*{8pt} +\caption{Distribution of the sindow size.} +\end{figure} - 00000000000000000000******************************** - ^ ^ - input start current input byte - |--------------------------------| - window size=1023 The algorithm works as follows: @@ -298,26 +279,30 @@ Table of Contents Advance input pointer by 1. For a better understanding of the algorithm we strongly recommend to read - the PR source files lzg_uncompress.c and lzg_compress.c that may be - located at https://gforge.lug.fi.uba.ar/plugins/scmcvs/cvsweb.php/PR/src/ - lib/compression/?cvsroot=freeprince + the PR source files lzg\_uncompress.c and lzg\_compress.c that may be + located at https://gforge.lug.fi.uba.ar/plugins/scmcvs/cvsweb.php/PR/src/lib/compression/?cvsroot=freeprince in the PR repository module. -3.3. Palettes +\subsection{Palettes} Palette resources store a palette for the VGA and patterns for the CGA and - EGA. Each palette resource is sized 100 bytes distributed in this way: - - Table 3.1: DAT 1.0 Palette blocks - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Length Offset Block Name - ~~~~~~ ~~~~~~ ~~~~~~~~~~ - 4 0 unknown (TGA?) - 48 4 vga_palette - 16 52 cga_patterns - 32 68 ega_patterns - - The vga_palette block stores 16 records of three bytes each that is the + EGA. Each palette resource is sized 100 bytes distributed as explained in Table~\ref{palettes table}: + +\begin{table} +\begin{tabular}{ccl} +\hline + Length & Offset & Block Name \\ +\hline + 4 & 0 & unknown (TGA?) \\ + 48 & 4 & vga\_palette \\ + 16 & 52 & cga\_patterns \\ + 32 & 68 & ega\_patterns \\ +\hline +\end{tabular} +\caption{DAT 1.0 Palette blocks} +\label{palettes table} +\end{table} + + The vga\_palette block stores 16 records of three bytes each that is the palette in the RGB-18-bits format (6 bits for each colour). Each colour is a number from 0 to 63. Remember to shift the colour bytes by two to get the colour number from 0 to 256. The format is 00rrrrrr 00gggggg 00bbbbbb @@ -327,27 +312,33 @@ Table of Contents In the case of EGA and CGA, palettes are not stores, and the palettes used are the ones defined by the adapter as the following: - Table 3.2: EGA and CGA palettes - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - EGA CGA1 CGA2 Color name HTML rgbRGB - ~~~ ~~~~ ~~~~ ~~~~~ ~~~~ ~~~~ ~~~~~~ - 0 0 0 black #000000 000000 - 1 - - blue #0000aa 000001 - 2 - 1 green #00aa00 000010 - 3 1 - cyan #00aaaa 000011 - 4 - 2 red #aa0000 000100 - 5 2 - magenta #aa00aa 000101 - 6 - 3 brown #aa5500 010100 - 7 3 - light gray #aaaaaa 000111 - 8 - - dark gray #555555 111000 - 9 - - bright blue #5555ff 111001 - 10 - - bright green #55ff55 111010 - 11 - - bright cyan #55ffff 111011 - 12 - - bright red #ff5555 111100 - 13 - - bright magenta #ff55ff 111101 - 14 - - bright yellow #ffff55 111110 - 15 - - bright white #ffffff 111111 +\begin{table} + +\begin{tabular}{ccclll} +\hline + EGA & CGA1 & CGA2 & Color name & HTML & rgbRGB \\ +\hline + 0 & 0 & 0 & black & \#000000 & 000000 \\ + 1 & - & - & blue & \#0000aa & 000001 \\ + 2 & - & 1 & green & \#00aa00 & 000010 \\ + 3 & 1 & - & cyan & \#00aaaa & 000011 \\ + 4 & - & 2 & red & \#aa0000 & 000100 \\ + 5 & 2 & - & magenta & \#aa00aa & 000101 \\ + 6 & - & 3 & brown & \#aa5500 & 010100 \\ + 7 & 3 & - & light gray & \#aaaaaa & 000111 \\ + 8 & - & - & dark gray & \#555555 & 111000 \\ + 9 & - & - & bright blue & \#5555ff & 111001 \\ + 10 & - & - & bright green & \#55ff55 & 111010 \\ + 11 & - & - & bright cyan & \#55ffff & 111011 \\ + 12 & - & - & bright red & \#ff5555 & 111100 \\ + 13 & - & - & bright magenta & \#ff55ff & 111101 \\ + 14 & - & - & bright yellow & \#ffff55 & 111110 \\ + 15 & - & - & bright white & \#ffffff & 111111 \\ +\hline +\end{tabular} +\caption{EGA and CGA palettes} +\end{table} + Where EGA is the only one palette used in EGA mode of the game and CGA1 and CGA2 are the two palettes used in the CGA mode. @@ -356,7 +347,7 @@ Table of Contents Remember EGA has 16 colours, so is represented in 4 bits and CGA has 4 simultaneous colours represented in 2 bits. - The cga_patterns block stores 16 records of one byte each, separated in + The cga\_patterns block stores 16 records of one byte each, separated in four parts, so the format is aabbccdd where aa is a two bit colour in one of the two CGA palettes (palette 1 is normally used in the dungeon environment and 2 in the palace environment). @@ -372,7 +363,7 @@ Table of Contents 00 01 - 0 1 - black green 01 00 - 1 0 - green black - The ega_patterns block stores 16 records of two bytes each, this time + The ega\_patterns block stores 16 records of two bytes each, this time separated in two parts. So we have again, four parts per record in the format aaaabbbb ccccdddd. @@ -386,38 +377,43 @@ Table of Contents 0010 1111 - 2 15 - brown white 1111 0010 - 15 2 - white brown -3.4. Levels +\subsection{Levels} This table has a summary of the blocks to be used in this section, you can refer it from the text below. - Table 3.3: DAT 1.0 Level blocks - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Length Offset Block Name - ~~~~~~ ~~~~~~ ~~~~~~~~~~ - 720 0 pop1_foretable - 720 720 pop1_backtable - 256 1440 door I - 256 1696 door II - 96 1952 links - 64 2048 unknown I - 3 2112 start_position - 3 2115 unknown II - 1 2116 unknown III - 24 2119 guard_location - 24 2143 guard_direction - 24 2167 unknown IV (a) - 24 2191 unknown IV (b) - 24 2215 guard_skill - 24 2239 unknown IV (c) - 24 2263 guard_colour - 16 2287 unknown IV (d) - 2 2303 0F 09 (2319) +\begin{table} +\begin{tabular}{ccc} +\hline + Length& Offset & Block Name \\ +\hline + 720 & 0 & pop1\_foretable \\ + 720 & 720 & pop1\_backtable \\ + 256 & 1440 & door I \\ + 256 & 1696 & door II \\ + 96 & 1952 & links \\ + 64 & 2048 & unknown I \\ + 3 & 2112 & start\_position \\ + 3 & 2115 & unknown II \\ + 1 & 2116 & unknown III \\ + 24 & 2119 & guard\_location \\ + 24 & 2143 & guard\_direction \\ + 24 & 2167 & unknown IV (a) \\ + 24 & 2191 & unknown IV (b) \\ + 24 & 2215 & guard\_skill \\ + 24 & 2239 & unknown IV (c) \\ + 24 & 2263 & guard\_colour \\ + 16 & 2287 & unknown IV (d) \\ + 2 & 2303 & 0F 09 (2319) \\ +\hline +\end{tabular} +\caption{DAT 1.0 Level blocks} +\label{dat1 level} +\end{table} All levels have a size of 2305, except in the original game, that the potion level has a size of 2304 (may be it was wrong trimmed). -3.4.1 Unknown blocks +\subsubsection{Unknown blocks} %3.4.1 Blocks described in this section are: Unknown from I to IV. Unknown III and IV blocks does not affect the level if changed, if you @@ -435,143 +431,153 @@ Table of Contents how those extensions were defined read the appendix I will write some day. For the moment you may contact us if you need to know that. -3.4.2 Room mapping +\subsubsection{Room mapping\label{room mapping}} %3.4.2 This section explains how the main walls and objects are stored. The - blocks involved here are "pop1_foretable" and "pop1_backtable" + blocks involved here are ``pop1\_foretable'' and ``pop1\_backtable'' In a level you can store a maximum of 24 rooms (also called screens) of 30 tiles each, having three stages of 10 tiles each. Screens are numbered from 1 to 24 (not 0 to 23) because the 0 was reserved for special cases. - The pop1_foretable and pop1_backtable blocks have 24 sub-blocks inside. + The pop1\_foretable and pop1\_backtable blocks have 24 sub-blocks inside. Those sub-blocks have a size of 30 bytes each and has a room associated. So, for example, the sub-block staring in 0 corresponds to the room 1 and the sub-block starting in 690 corresponds to the room 24. - It is reserved 1 byte from the pop1_foretable block and one from the - pop1_backtable block for each tile. To locate the appropriate tile you - have to do the following calculation: tile=(room-1)*30+tileOffset where + It is reserved 1 byte from the pop1\_foretable block and one from the + pop1\_backtable block for each tile. To locate the appropriate tile you + have to do the following calculation: $tile=(room-1)*30+tileOffset$ where tileOffset is a number from 0 to 29 that means a tile from 0 to 9 if in the upper stage, from 10 to 19 if in the middle stage and 20 to 29 if in the bottom stage. We define this as the location format and will be used also in the start position. Always looking from the left to the right. - So there is a pop1_foretable and pop1_backtable byte for each tile in the + So there is a pop1\_foretable and pop1\_backtable byte for each tile in the level and this is stored this way. - The pop1_foretable part of the tile stores the main tile form according to + The pop1\_foretable part of the tile stores the main tile form according to the table below. Note that those are just a limited number of tiles, each code has a tile in the game. The tiles listed are all the ones needed to make a level so the missing tiles have an equivalent in this list. Each tile has a code id, as some codes are repeated this is how you have - to calculate the codes. A tile in the pop1_foretable part has 8 bits in + to calculate the codes. A tile in the pop1\_foretable part has 8 bits in this format rrmccccc, where rr are random bits and can be ignored. m is a modifier of the tile. For example modified loose floors do not fall down. The rest ccccc is the code of the tile tabled below. Tile names are the same as the ones used by RoomShaker to keep compatibility. - Table 3.4: POP1 Foretable codes - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Hex Binary Group Description - ~~~~ ~~~~~~ ~~~~~ ~~~~~~~~~~~ - 0x00 00000 free Empty - 0x01 00001 free Floor - 0x02 00010 spike Spikes - 0x03 00011 none Pillar - 0x04 00100 gate Gate - 0x05 00101 none Stuck Button - 0x06 00110 event Drop Button - 0x07 00111 tapest Tapestry - 0x08 01000 none Bottom Big-pillar - 0x09 01001 none Top Big-pillar - 0x0A 01010 potion Potion - 0x0B 01011 none Loose Board - 0x0C 01100 ttop Tapestry Top - 0x0D 01101 none Mirror - 0x0E 01110 none Debris - 0x0F 01111 event Raise Button - 0x10 10000 none Exit Left - 0x11 10001 none Exit Right - 0x12 10010 chomp Chopper - 0x13 10011 none Torch - 0x14 10100 wall Wall - 0x15 10101 none Skeleton - 0x16 10110 none Sword - 0x17 10111 none Balcony Left - 0x18 11000 none Balcony Right - 0x19 11001 none Lattice Pillar - 0x1A 11010 none Lattice Support - 0x1B 11011 none Small Lattice - 0x1C 11100 none Lattice Left - 0x1D 11101 none Lattice Right - 0x1E 11110 none Torch with Debris - 0x1F 11111 none Null - - The pop1_backtable part of the tile stores a modifier or attribute of the - pop1_foretable part of the tile. This works independently of the modifier +\begin{table} +\begin{tabular}{cccl} +\hline + Hex & Binary& Group & Description \\ +\hline +0x00 & 00000 & free & Empty \\ +0x01 & 00001 & free & Floor \\ +0x02 & 00010 & spike & Spikes \\ +0x03 & 00011 & none & Pillar \\ +0x04 & 00100 & gate & Gate \\ +0x05 & 00101 & none & Stuck Button \\ +0x06 & 00110 & event & Drop Button \\ +0x07 & 00111 & tapest& Tapestry \\ +0x08 & 01000 & none & Bottom Big-pillar \\ +0x09 & 01001 & none & Top Big-pillar \\ +0x0A & 01010 & potion& Potion \\ +0x0B & 01011 & none & Loose Board \\ +0x0C & 01100 & ttop & Tapestry Top \\ +0x0D & 01101 & none & Mirror \\ +0x0E & 01110 & none & Debris \\ +0x0F & 01111 & event & Raise Button \\ +0x10 & 10000 & none & Exit Left \\ +0x11 & 10001 & none & Exit Right \\ +0x12 & 10010 & chomp & Chopper \\ +0x13 & 10011 & none & Torch \\ +0x14 & 10100 & wall & Wall \\ +0x15 & 10101 & none & Skeleton \\ +0x16 & 10110 & none & Sword \\ +0x17 & 10111 & none & Balcony Left \\ +0x18 & 11000 & none & Balcony Right \\ +0x19 & 11001 & none & Lattice Pillar \\ +0x1A & 11010 & none & Lattice Support \\ +0x1B & 11011 & none & Small Lattice \\ +0x1C & 11100 & none & Lattice Left \\ +0x1D & 11101 & none & Lattice Right \\ +0x1E & 11110 & none & Torch with Debris \\ +0x1F & 11111 & none & Null \\ +\hline +\end{tabular} +\caption{POP1 Foretable codes} +\label{palettes table} +\end{table} + + The pop1\_backtable part of the tile stores a modifier or attribute of the + pop1\_foretable part of the tile. This works independently of the modifier bit in the code. The tile modifier depends on the group the tile belongs which are wall, chomp, event, ttop, potion, tapp, gate, spike and free. - The group event allows the 256 modifiers and will be described in 3.4.6. - Note + means allowed for the dungeon environment, - means allowed for the - palace environment. - - Table 3.5: Background modifiers by group - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Group Code Description - ~~~~~ ~~~~ ~~~~~~~~~~~ - none 0x00 This value is used always for this group - free 0x00 +Nothing -Blue line - free 0x01 +Spot1 -No blue line - free 0x02 +Spot2 -Diamond - free 0x03 Window - free 0xFF +Spot3 -Blue line? - spike 0x00 Normal (allows animation) - spike 0x01 Barely Out - spike 0x02 Half Out - spike 0x03 Fully Out - spike 0x04 Fully Out - spike 0x05 Out? - spike 0x06 Out? - spike 0x07 Half Out? - spike 0x08 Barely Out? - spike 0x09 Disabled - gate 0x00 Closed - gate 0x01 Open - tapest 0x00 -With Lattice - tapest 0x01 -Alternative Design - tapest 0x02 -Normal - tapest 0x03 -Black - potion 0x00 Empty - potion 0x01 Health point - potion 0x02 Life - potion 0x03 Feather Fall - potion 0x04 Invert - potion 0x05 Poison - potion 0x06 Open - ttop 0x00 -With lattice - ttop 0x01 -Alternative design - ttop 0x02 -Normal - ttop 0x03 -Black - ttop 0x04 -Black - ttop 0x05 -With alternative design and bottom - ttop 0x06 -With bottom - ttop 0x07 -With window - chomp 0x00 Normal - chomp 0x01 Half Open - chomp 0x02 Closed - chomp 0x03 Partially Open - chomp 0x04 Extra Open - chomp 0x05 Stuck Open - wall 0x00 +Normal -Blue line - wall 0x01 +Normal -No Blue line + The group event allows the 256 modifiers and will be described in Section~\ref{door events}. +% Note + means allowed for the dungeon environment, - means allowed for the +% palace environment. + +\begin{table} +\begin{tabular}{ccl} +\hline + Group & Code & Description \\ +\hline + none & 0x00 & This value is used always for this group \\ + free & 0x00 & Nothing\footnote[1]{Dungeon environment \label{id:de}}, Blue line\footnote[2]{Dungeon environment \label{id:pe}} \\ + free & 0x01 & Spot1\footnotemark[1], No blue line\footnotemark[2] \\ +% free & 0x02 & Spot2\footnotemark{\value{fnnumber}}, Diamond\footnotemark[{\ref{id:pe}}] \\ + free & 0x03 & Window \\ + free & 0xFF & Spot3\footnotemark[1], Blue line?\footnotemark[2] \\ + spike & 0x00 & Normal (allows animation) \\ + spike & 0x01 & Barely Out \\ + spike & 0x02 & Half Out \\ + spike & 0x03 & Fully Out \\ + spike & 0x04 & Fully Out \\ + spike & 0x05 & Out? \\ + spike & 0x06 & Out? \\ + spike & 0x07 & Half Out? \\ + spike & 0x08 & Barely Out? \\ + spike & 0x09 & Disabled \\ + gate & 0x00 & Closed \\ + gate & 0x01 & Open \\ + tapest & 0x00 & -With Lattice \\ + tapest & 0x01 & -Alternative Design \\ + tapest & 0x02 & -Normal \\ + tapest & 0x03 & -Black \\ + potion & 0x00 & Empty \\ + potion & 0x01 & Health point \\ + potion & 0x02 & Life \\ + potion & 0x03 & Feather Fall \\ + potion & 0x04 & Invert \\ + potion & 0x05 & Poison \\ + potion & 0x06 & Open \\ + ttop & 0x00 & -With lattice \\ + ttop & 0x01 & -Alternative design \\ + ttop & 0x02 & -Normal \\ + ttop & 0x03 & -Black \\ + ttop & 0x04 & -Black \\ + ttop & 0x05 & -With alternative design and bottom \\ + ttop & 0x06 & -With bottom \\ + ttop & 0x07 & -With window \\ + chomp & 0x00 & Normal \\ + chomp & 0x01 & Half Open \\ + chomp & 0x02 & Closed \\ + chomp & 0x03 & Partially Open \\ + chomp & 0x04 & Extra Open \\ + chomp & 0x05 & Stuck Open \\ + wall & 0x00 & +Normal -Blue line \\ + wall & 0x01 & +Normal -No Blue line \\ +\hline +\end{tabular} +\caption{Background modifiers by group} +\label{background modifiers} +\end{table} Note: Some modifiers have not been tested, there may be any other unknown tile type we have not still discover. -3.4.2.1 Wall drawing algorithm +\subsubsection{Wall drawing algorithm} %\ref{room mapping}.1 This section does not have a direct relation with the format because it describes how the walls must be drawn on the room. However, as this information should be useful to recreate a cloned room read from the @@ -588,12 +594,12 @@ Table of Contents those 53 panels. This array has indexes from 1 to 53 included. To calculate what value take from the array this calculation must be - performed: panelInfo=seedArray[roomNumber+wallPosition] + performed: $panelInfo=seedArray[roomNumber+wallPosition]$ where panelInfo is the result modifier information that will be applied to the base image; seedArray is this array that will be described above as a table; roomNumber is the number of the room the wall is (from 1 to 24) and wallPosition is the position the wall is (from 0 to 29), using the - location format specified in section 3.4.2. This means the first value is + location format specified in section \ref{room mapping}. This means the first value is 1 (roomNumber=1 and wallPosition=0) and the last is 53 (roomNumber=24 and wallPosition=29). @@ -601,45 +607,58 @@ Table of Contents wall. If the modifier is activated this corner will appear different (seems to be darker). Another modifier is the grey stone. - Table 3.6: Stone modifiers on seed position - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Modifier Seed Positions - ~~~~~~~~ ~~~~ ~~~~~~~~~ - (First row modifiers) - Grey stone 2, 5, 14, 17, 26, 32, 35, 50 - Left, bottom 2, 11, 36, 45 - Left, top 37 - Right, bottom 27, 33 - Right, up 4, 10, 31, 37 - - (second row) - Grey stone none - Left, bottom 34, 47 - Left, top 9, 10 - Right, bottom 2, 8, 25, 35 - Right, top 6, 12, 23, 29, 39 - - (third row) - Grey stone none - Left, bottom none - Left, top 16 - Right, bottom none - Right, top none +\begin{table} +\begin{tabular}{ll} +\hline + Modifier & Seed Positions \\ +\hline + (First row) \\ +\hline + Grey stone & 2, 5, 14, 17, 26, 32, 35, 50 \\ + Left, bottom & 2, 11, 36, 45 \\ + Left, top & 37 \\ + Right, bottom & 27, 33 \\ + Right, up & 4, 10, 31, 37 \\ + \\ +\hline + (second row) \\ +\hline + Grey stone & none \\ + Left, bottom & 34, 47 \\ + Left, top & 9, 10 \\ + Right, bottom & 2, 8, 25, 35 \\ + Right, top & 6, 12, 23, 29, 39 \\ + \\ +\hline + (third row) \\ +\hline + Grey stone & none \\ + Left, bottom & none \\ + Left, top & 16 \\ + Right, bottom & none \\ + Right, top & none \\ +\hline +\end{tabular} +\caption{Stone modifiers on seed position} +\label{seeds} +\end{table} Another modifiers are saved in the seed too. Those modifiers are not boolean values, they are offsets and sizes. As each stone has a different size the stone separation offset is saved in the seed. + For the first row, the stones are all the same size and the seed is not needed. - For the second row we have got the first 20 values, ordered from 1 to 20. - position 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 - offsets: 5,4,3,3,1,5,4,2,1, 1, 5, 3, 2, 1, 5, 4, 3, 2, 5, 4 - separator size: 0,1,1,0,0,0,1,1,0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 + + For the second row we have got the first 20 values, ordered from 1 to 20. \\ + position 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 \\ + offsets: 5,4,3,3,1,5,4,2,1, 1, 5, 3, 2, 1, 5, 4, 3, 2, 5, 4 \\ + separator size: 0,1,1,0,0,0,1,1,0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 \\ We will be adding the next values as soon as we count the pixels ;) This information can be found in walls.conf file from FreePrince. -3.4.3 Room linking +\subsubsection{Room linking} %3.4.3 This section describes the links block. Each room is linked to another by each of the four sides. Each link @@ -655,47 +674,52 @@ Table of Contents Cross links should be made to allow the kid passing from a room to another and then coming back to the same room but it is not a must. -3.4.4 Guard handling - This section specifies the blocks: guard_location, guard_direction, - guard_skill and guard_colour. +\subsubsection{Guard handling\label{guard handling}} %3.4.4 + This section specifies the blocks: guard\_location, guard\_direction, + guard\_skill and guard\_colour.\\ Each guard section has 24 bytes, each byte of them corresponds to a room so byte 0 is related to room 1 and byte 23 is related to room 24. This room is where the guard is located. The format only allows one - guard per room. Each block describes a property or attribute of the guard. + guard per room. Each block describes a property or attribute of the guard.\\ - The guard_location part of a guard describes where in the room the guard + The guard\_location part of a guard describes where in the room the guard is located, this is a number from 0 to 29 if the guard is in the room or 30 if there is no guard in this room. Other values are allowed but are equivalent to 30. The number from 0 to 29 is in the location format - specified in section 3.4.2 + specified in Section~\ref{room mapping}.\\ - The guard_direction part describes where the guard looks at. If the value + The guard\_direction part describes where the guard looks at. If the value is 0, then the guard looks to the right, if the value is the hex FF (-1 or 255) then he looks left. This is the direction format, and will be used in the start position too. - The guard_skill is how the guard fights, style and hit points. Note that + The guard\_skill is how the guard fights, style and hit points. Note that the hit points also depends on the level you are. Allowed numbers are from 0 to 9. - TODO: add a skill table +% TODO: add a skill table - The guard_colour is the palette the guard has (see 4.8). + The guard\_colour is the palette the guard has (see 4.8). The default colours are in this table: - Table 3.7: Default Guard colours - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Code Pants Cape - ~~~~ ~~~~~ ~~~~ - 0x00 Light Blue Pink - 0x01 Red Purple - 0x02 Orange Yellow - 0x03 Green Yellow - 0x04 Dark Blue Beige - 0x05 Purple Beige - 0x06 Yellow Orange +\begin{table} +\begin{tabular}{ccc} +\hline +Code & Pants & Cape \\ +\hline +0x00 & Light & Blue Pink \\ +0x01 & Red & Purple \\ +0x02 & Orange & Yellow \\ +0x03 & Green & Yellow \\ +0x04 & Dark Blue& Beige \\ +0x05 & Purple & Beige \\ +0x06 & Yellow & Orange \\ +\hline +\end{tabular} +\caption{Default Guard colours} +\label{palettes table} +\end{table} Other codes may generate random colours because the game is reading the palette from trashed memory. This may also cause a game crash. @@ -703,8 +727,8 @@ Table of Contents palette resource (see 3.8) avoiding the crash due to this reason. -3.4.5 Starting Position - This section describes the start_position block. +\subsubsection{Starting Position} %3.4.5 + This section describes the start\_position block. This block stores where and how the kid starts in the level. Note that all level doors that are on the starting room will be closed in the moment @@ -712,12 +736,12 @@ Table of Contents This block has 3 bytes. The first byte is the room, allowed values are from 1 to 24. - The second byte is the location, see the section 3.4.2 for the location + The second byte is the location, see the section \ref{room mapping} for the location format specifications. - The third byte is the direction, see 3.4.4 for the direction format + The third byte is the direction, see \ref{guard handling} for the direction format specifications. -3.4.6 Door events +\subsubsection{Door events\label{door events}} %3.4.6 This section explains how the doors are handled and specifies the blocks door I and II. @@ -734,7 +758,7 @@ Table of Contents Each event line has an ID from 0 to 255. An event has the ID of the first event line in it. - In section 3.4.2 it is explained how a door trigger is associated to an + In section \ref{room mapping} it is explained how a door trigger is associated to an event ID. Those are the tiles that starts the event depending on what are them: closers or openers. @@ -749,41 +773,49 @@ Table of Contents Let's define: Screen as S and it is a number from 1 to 24 (5 bits) - S = s1 s2 s3 s4 s5 + $S = s_1 s_2 s_3 s_4 s_5$ where sn is the bit n of the binary representation of S Location as L and is a number from 0 to 29 (5 bits) - L = l1 l2 l3 l4 l5 + $L = l_1 l_2 l_3 l_4 l_5$ where ln is the bit n of the binary representation of L This number is according to the location format specifications. - Trigger-next as T and is a 1 for "off" or a 0 for "on" (1 bit) - T = t1 + Trigger-next as T and is a 1 for ``off'' or a 0 for ``on'' (1 bit) + $T = t_1$ - Byte I has the form: t1 s4 s5 l1 l2 l3 l4 l5 - Byte II has the form: s1 s2 s3 0 0 0 0 0 + Byte I has the form: $t_1 s_4 s_5 l_1 l_2 l_3 l_4 l_5$ + Byte II has the form: $s_1 s_2 s_3 0 0 0 0 0$ -3.5. Digital Waves +\subsection{Digital Waves} Read them as raw digital wave sound using the following specifications: - Table 3.8: Wave Specifications - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Size of Format: 16 - Format: PCM - Attributes: 8 bit, mono, unsigned - Channels: 1 - Sample rate: 11025 - Bytes/Second: 11025 - Block Align: 1 +\begin{table} +\begin{tabular}{cc} +\hline + Field&Value\\ +\hline + Size of Format& 16 \\ + Format& PCM \\ + Attributes& 8 bit, mono, unsigned \\ + Channels& 1 \\ + Sample rate& 11025 \\ + Bytes/Second& 11025 \\ + Block Align& 1 \\ +\hline +\end{tabular} +\caption{Wave Specifications} +\label{wave specs} +\end{table} GNU/Linux users can play the raw waves just dropping them inside /dev/dsp As DAT headers are very small it is valid to type in a shell console with dsp write access: cat digisnd?.dat>/dev/dsp to play the whole wave files. -3.6. Midi music +\subsection{Midi music} Standard MIDI files. There have been reports that some versions of MIDI did not work, but we believe this can bi fixed saving in other MIDI format variant (like type 0). -3.7. Internal PC Speaker +\subsection{Internal PC Speaker} Header: 3 bytes First byte: 0x00 (or 0x80 sometimes). Next 2 bytes: how many beats per 2 seconds. @@ -796,40 +828,45 @@ Table of Contents Footer: 2 bytes Last 2 bytes: 0x12 0x00. -3.8. Binary files +\subsection{Binary files} Some binary files contains relevant information The resource number 10 in prince.dat has the VGA guard palettes in it saving n records of a 16-colour-palette of 3 bytes in the specified palette format. -3.9. Levels in POP1 for Mac +\subsection{Levels in POP1 for Mac} In the case of Mac, executable and resource data are embedded in the one run-time file. Level data is a part of resources, for examples graphics, icons and sounds. Level blocks are very similar to PC but not exactly identical. Following table has a summary of the blocks of DAT 1.0 for Mac. - Table 3.9: DAT 1.0 Level blocks for Mac - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Length Offset Block Name - ~~~~~~ ~~~~~~ ~~~~~~~~~~ - 720 0 pop1_foretable - 720 720 pop1_backtable - 256 1440 door I - 256 1696 door II - 96 1952 links - 64 2048 unknown I - 3 2112 start_position - 21 2115 unknown II+III - 24 2136 guard_location - 24 2160 guard_direction - 24 2184 unknown IV (a) - 24 2208 unknown IV (b) - 24 2232 guard_skill - 24 2256 unknown IV (c) - 24 2280 guard_colour - 4 2304 unknown IV (d) +\begin{table} +\begin{tabular}{ccc} +\hline + Length& Offset & Block Name \\ +\hline + 720 & 0 & pop1\_foretable \\ + 720 & 720 & pop1\_backtable \\ + 256 & 1440 & door I \\ + 256 & 1696 & door II \\ + 96 & 1952 & links \\ + 64 & 2048 & unknown I \\ + 3 & 2112 & start\_position \\ + 21 & 2115 & unknown II+III \\ + 24 & 2136 & guard\_location \\ + 24 & 2160 & guard\_direction \\ + 24 & 2184 & unknown IV (a) \\ + 24 & 2208 & unknown IV (b) \\ + 24 & 2232 & guard\_skill \\ + 24 & 2256 & unknown IV (c) \\ + 24 & 2280 & guard\_colour \\ + 4 & 2304 & unknown IV (d) \\ +\hline +\end{tabular} +\caption{DAT 1.0 Level blocks for Mac} +\label{palettes table} +\end{table} All levels have a size of 2308. Also there are two different things in comparison with DAT 1.0 for PC. DAT 1.0 for Mac does not have @@ -837,10 +874,10 @@ Table of Contents are only chained in sequence. See 3.4 for reference on each block. -4. DAT v2.0 Format Specifications +\section{DAT v2.0 Format Specifications} ~~~ ~~~~ ~~~~~~ ~~~~~~~~~~~~~~ -4.1. General file specs, index and checksums +\subsection{General file specs, index and checksums} POP2 DAT files are not much different from their POP1 predecessors. The format is similar in almost each way. The main difference is in the index. As DAT v1.0 used an index in the high data, the DAT v2.0 indexes @@ -857,7 +894,7 @@ Table of Contents (the location where the highData begins) - Offset 4, size 2, type US: HighDataSize (the number of bytes the highData has) - Note that HighDataOffset+HighDataSize=file size + Note that $HighDataOffset+HighDataSize=file size$ This is similar to DAT v1.0 format, except that the index area is now called high data. @@ -867,7 +904,7 @@ Table of Contents call this index the \xabmaster index\xbb and the sub index the \xabslave indexes\xbb. Slave indexes are the real file contents index. -4.1.1 The master index +\subsubsection{The master index} %4.1.1 The master index is made with: - Offset HighDataOffset, size 2, type US: NumberOfSlaveIndexes (the number of the high data sections) @@ -890,33 +927,38 @@ Table of Contents There are different 4-byte-length ASCII strings called Slave Index IDs. When the string is less than 4 bytes, a tailing byte 0x00 is used. We will - denote it with the cardinal # symbol. The character order is inverted, so - for example the text SLAP becomes PALS, MARF becomes FRAM, #### becomes - empty or RCS# becomes SCR. They must be in upper case. - - Table 4.1: Slave Index ID strings - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - ID Stored Description - ~~ ~~~~~~ ~~~~~~~~~~~ - "cust" TSUC Custom - "font" TNOF Fonts - "fram" MARF Frames - "palc" CLAP CGA Palette - "pals" SLAP SVGA Palette - "palt" TLAP TGA Palette - "piec" CEIP Pieces - "psl" LSP# ? - "scr" RCS# Screens (images that have the full room) - "shap" PAHS Shapes (normal graphics) - "shpl" LPHS Shape palettes - "strl" LRTS Text - "snd" DNS# Sound - "seqs" SQES Midi sequences - "txt4" 4TXT Text - "" #### Levels - -4.1.2 The slave indexes + denote it with the cardinal \# symbol. The character order is inverted, so + for example the text SLAP becomes PALS, MARF becomes FRAM, \#\#\#\# becomes + empty or RCS\# becomes SCR. They must be in upper case. + +\begin{table} +\begin{tabular}{ccl} +\hline + ID & Stored& Description \\ +\hline + ``cust''& TSUC & Custom \\ + ``font''& TNOF & Fonts \\ + ``fram''& MARF & Frames \\ + ``palc''& CLAP & CGA Palette \\ + ``pals''& SLAP & SVGA Palette \\ + ``palt''& TLAP & TGA Palette \\ + ``piec''& CEIP & Pieces \\ + ``psl'' & LSP\# & ? \\ + ``scr'' & RCS\# & Screens (images that have the full room) \\ + ``shap''& PAHS & Shapes (normal graphics) \\ + ``shpl''& LPHS & Shape palettes \\ + ``strl''& LRTS & Text \\ + ``snd'' & DNS\# & Sound \\ + ``seqs''& SQES & Midi sequences \\ + ``txt4''& 4TXT & Text \\ + ``'' & \#\#\#\# & Levels \\ +\hline +\end{tabular} +\caption{Slave Index ID strings} +\label{slave indexes} +\end{table} + +\subsubsection{The slave indexes} %4.1.2 All encapsulated sections pointed by the Master Index are Slave Indexes. The slave index is specified with: - Offset SlaveIndexOffset, size 2, type US: NumberOfItems @@ -932,14 +974,14 @@ Table of Contents - Relative offset 6, size 2, type US: Size of the item (not including the checksum byte) - Relative offset 8, size 3, type binary: A flags mask - (in "shap" indexes it is always 0x40 0x00 0x00; + (in ``shap'' indexes it is always 0x40 0x00 0x00; in others 0x00 0x00 0x00) Finally, we can locate whatever item we want if we have the - Slave Index ID - Item ID this is not a unique key, unfortunately we have found repeated pairs of - IDs for different items, so we have to use the "order" as a third key. + IDs for different items, so we have to use the ``order'' as a third key. So, the way to find an item is: first read the High Data Offset, go there, read the number of slave items, iterate the master index to find the @@ -950,107 +992,116 @@ Table of Contents Now you will have the offset of the desired item's checksum, increasing the offset by one will give you the beginning of the item content. -4.2. Levels +\subsection{Levels} This table has a summary of the blocks to be used in this section. - Table 4.2: DAT 2.0 Level blocks - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Length Offset Block Name - ~~~~~~ ~~~~~~ ~~~~~~~~~~ - 960 0 pop2_foretable - 3840 960 pop2_backtable - 1280 4800 pop2_doors - 128 6080 links (as explained in section 3.4.3 but having 32 rooms) - 32 6208 unknown I - 3 6240 start_position (as explained in section 3.4.5) - 4 6243 unknown II (00 01 00 02) (check pop1) - 3712 6247 pop2_static_guard - 1088 9959 pop2_dynamic_guard - 978 11047 unknown III +\begin{table} +\begin{tabular}{ccc} +\hline + Length& Offset & Block Name \\ +\hline + 960 & 0 & pop2\_foretable \\ + 3840 & 960 & pop2\_backtable \\ + 1280 & 4800 & pop2\_doors \\ + 128 & 6080 & links (as explained in section 3.4.3 but having 32 rooms) \\ + 32 & 6208 & unknown I \\ + 3 & 6240 & start\_position (as explained in section 3.4.5) \\ + 4 & 6243 & unknown II (00 01 00 02) (check pop1) \\ + 3712 & 6247 & pop2\_static\_guard \\ + 1088 & 9959 & pop2\_dynamic\_guard \\ + 978 & 11047 & unknown III \\ +\hline +\end{tabular} +\caption{DAT 2.0 Level blocks} +\label{dat2 level blocks} +\end{table} All levels have a size of 12025. -4.2.1 Room mapping - You should read section 3.4.2 before reading this one. +\subsubsection{Room mapping} %4.2.1 + You should read section \ref{room mapping} before reading this one. A POP2 level can store a maximum of 32 rooms of 30 tiles each, having three stages of 10 tiles each. Rooms are numbered from 1 to 32 (not 0 to 31) because the 0 is be reserved to the null-room. - The pop2_foretable block has 32 sub-blocks inside. Each sub-block has a + The pop2\_foretable block has 32 sub-blocks inside. Each sub-block has a size of 30 bytes and has a room associated. For each byte in this room there is a tile in the game. Each byte has a code to represent a tile. There are additional attributes to this tile also. To locate the 7th tile in the bottom floor of the room 27 you have to do - the same calculation as in 3.4.2: - tile=(room-1)*30+tileOffset=(27-1)*30+2*10+7=807 + the same calculation as in \ref{room mapping}: + $tile=(room-1)*30+tileOffset=(27-1)*30+2*10+7=807$ - Table 4.3: POP2 Foretable Codes - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Dec Hex Bin Caverns Ruins Temple - ~~~ ~~~ ~~~ ~~~~~~~ ~~~~~ ~~~~~~ - - 00 0x00 000000 Empty Empty Empty - 01 0x01 000001 Floor Floor Floor - 02 0x02 000010 Spikes (?) Spikes - 03 0x03 000011 Pillar Pillar Pillar - 04 0x04 000100 Door Gate Gate - 05 0x05 000101 (?) Raised Button Raised Button - 06 0x06 000110 (?) Drop Button Drop Button - 07 0x07 000111 (?) Tunnel (?) - 08 0x08 001000 Bottom Big Pillar Bottom Big Pillar Bottom Big Pillar - 09 0x09 001001 Top Big Pillar Top Big Pillar Top Big Pillar - 10 0x0A 001010 Potion Potion Potion - 11 0x0B 001011 Loose Floor Loose Floor Loose Floor - 12 0x0C 001100 (?) Slicer Left Half Slicer Left Half - 13 0x0D 001101 (?) Slicer Right Half Slicer Right Half - 14 0x0E 001110 Debris Debris Debris - 15 0x0F 001111 (?) Drop Floor (?) - 16 0x10 010000 Exit Half Left Exit Half Left Exit Half Left - 17 0x11 010001 Exit Half Right Exit Half Right Exit Half Right - 18 0x12 010010 Magic Carpet (?) (?) - 19 0x13 010011 Torch (?) Torch - 20 0x14 010100 Wall Wall Wall - 21 0x15 010101 (?) Skeleton (?) - 22 0x16 010110 (?) Sword (?) - 23 0x17 010111 Lava Pit Left (?) (?) - 24 0x18 011000 Lava Pit Right (?) (?) - 25 0x19 011001 (?) (?) Squash Wall - 26 0x1A 011010 (?) (?) Flip Tile - 27 0x1B 011011 (?) (?) (?) - 28 0x1C 011100 (?) (?) (?) - 29 0x1D 011101 (?) (?) (?) - 30 0x1E 011110 (?) (?) (?) - 31 0x1F 011111 (?) (?) (?) - 32 0x20 100000 Torch w/Debris (?) Torch w/Debris - 33 0x21 100001 Exit Door Top Left (?) (?) - 34 0x22 100010 Pressure Plate (?) (?) - 35 0x23 100011 Exit Door Top Right (?) (?) - 36 0x24 100100 Dart Gun (?) (?) - 37 0x25 100101 (?) (?) (?) - 38 0x26 100110 (?) (?) (?) - 39 0x27 100111 (?) (?) (?) - 40 0x28 101000 (?) (?) (?) - 41 0x29 101001 (?) (?) (?) - 42 0x2A 101010 (?) (?) (?) - 43 0x2B 101011 (?) (?) Blue Flame - 44 0x2C 101100 Rope Bridge (?) (?) - 45 0x2D 101101 (?) (?) (?) - 46 0x2E 101110 (?) (?) (?) - 47 0x2F 101111 (?) (?) (?) - - The pop2_backtable is an expansion if the pop1_backtable and it is sized +\begin{table} +\begin{tabular}{llllll} +\hline + Dec& Hex & Bin & Caverns & Ruins & Temple \\ +\hline + 00 & 0x00 & 000000 & Empty & Empty & Empty \\ + 01 & 0x01 & 000001 & Floor & Floor & Floor \\ + 02 & 0x02 & 000010 & Spikes & (?) & Spikes \\ + 03 & 0x03 & 000011 & Pillar & Pillar & Pillar \\ + 04 & 0x04 & 000100 & Door & Gate & Gate \\ + 05 & 0x05 & 000101 & (?) & Raised Button & Raised Button \\ + 06 & 0x06 & 000110 & (?) & Drop Button & Drop Button \\ + 07 & 0x07 & 000111 & (?) & Tunnel & (?) \\ + 08 & 0x08 & 001000 & Bottom Big Pillar & Bottom Big Pillar & Bottom Big Pillar \\ + 09 & 0x09 & 001001 & Top Big Pillar & Top Big Pillar & Top Big Pillar \\ + 10 & 0x0A & 001010 & Potion & Potion & Potion \\ + 11 & 0x0B & 001011 & Loose Floor & Loose Floor & Loose Floor \\ + 12 & 0x0C & 001100 & (?) & Slicer Left Half & Slicer Left Half \\ + 13 & 0x0D & 001101 & (?) & Slicer Right Half & Slicer Right Half \\ + 14 & 0x0E & 001110 & Debris & Debris & Debris \\ + 15 & 0x0F & 001111 & (?) & Drop Floor & (?) \\ + 16 & 0x10 & 010000 & Exit Half Left & Exit Half Left & Exit Half Left \\ + 17 & 0x11 & 010001 & Exit Half Right & Exit Half Right & Exit Half Right \\ + 18 & 0x12 & 010010 & Magic Carpet & (?) & (?) \\ + 19 & 0x13 & 010011 & Torch & (?) & Torch \\ + 20 & 0x14 & 010100 & Wall & Wall & Wall \\ + 21 & 0x15 & 010101 & (?) & Skeleton & (?) \\ + 22 & 0x16 & 010110 & (?) & Sword & (?) \\ + 23 & 0x17 & 010111 & Lava Pit Left & (?) & (?) \\ + 24 & 0x18 & 011000 & Lava Pit Right & (?) & (?) \\ + 25 & 0x19 & 011001 & (?) & (?) & Squash Wall \\ + 26 & 0x1A & 011010 & (?) & (?) & Flip Tile \\ + 27 & 0x1B & 011011 & (?) & (?) & (?) \\ + 28 & 0x1C & 011100 & (?) & (?) & (?) \\ + 29 & 0x1D & 011101 & (?) & (?) & (?) \\ + 30 & 0x1E & 011110 & (?) & (?) & (?) \\ + 31 & 0x1F & 011111 & (?) & (?) & (?) \\ + 32 & 0x20 & 100000 & Torch w/Debris & (?) & Torch w/Debris \\ + 33 & 0x21 & 100001 & Exit Door Top Left & (?) & (?) \\ + 34 & 0x22 & 100010 & Pressure Plate & (?) & (?) \\ + 35 & 0x23 & 100011 & Exit Door Top Right& (?) & (?) \\ + 36 & 0x24 & 100100 & Dart Gun & (?) & (?) \\ + 37 & 0x25 & 100101 & (?) & (?) & (?) \\ + 38 & 0x26 & 100110 & (?) & (?) & (?) \\ + 39 & 0x27 & 100111 & (?) & (?) & (?) \\ + 40 & 0x28 & 101000 & (?) & (?) & (?) \\ + 41 & 0x29 & 101001 & (?) & (?) & (?) \\ + 42 & 0x2A & 101010 & (?) & (?) & (?) \\ + 43 & 0x2B & 101011 & (?) & (?) & Blue Flame \\ + 44 & 0x2C & 101100 & Rope Bridge & (?) & (?) \\ + 45 & 0x2D & 101101 & (?) & (?) & (?) \\ + 46 & 0x2E & 101110 & (?) & (?) & (?) \\ + 47 & 0x2F & 101111 & (?) & (?) & (?) \\ +\hline +\end{tabular} +\caption{POP2 Foretable Codes} +\label{dat2 foretable} +\end{table} + + The pop2\_backtable is an expansion if the pop1\_backtable and it is sized 4 times bigger. For each tile there are 4 additional bytes in the - pop2_backtable block to specify further actions or attributes. This block - is sized 4 bytes/tile * 10 tiles/floor * 3 floors/room * 32 rooms that is - 3840 bytes. + pop2\_backtable block to specify further actions or attributes. This block + is sized $4 \frac{bytes}{tile} * 10 \frac{tiles}{floor} * 3 \frac{floors}{room} * 32 rooms$ that is + $3840 bytes$. We call background mask to each block of 4 bytes associated to a tile. To locate a background mask you have to do the following operation: - 960+(room-1)*30*4+tileOffset*4 + $960+(room-1)*30*4+tileOffset*4$ Background masks are stored consecutively each after another until the 960 tiles are specified. @@ -1065,11 +1116,11 @@ Table of Contents We believe the special images uses the 3rd or 4th byte. -4.2.2 Door events +\subsubsection{Door events} %4.2.2 This section explains how doors are handled and specifies the block - pop2_door. + pop2\_door. - The pop2_door block has 1280 bytes. It is divided in 256 registers of + The pop2\_door block has 1280 bytes. It is divided in 256 registers of 5 bytes called door events. Like pop1 events have associations to doors and activate them. In POP2 events can also activate a floor shooter. @@ -1078,15 +1129,15 @@ Table of Contents belonging to a button tile points it to a door event that is triggered when the button is pressed. There is a maximum of 256 events because of the unsigned char of the first - byte if the attribute mask in the pop2_backtable block and the 256 - registers in the pop2_door block. + byte if the attribute mask in the pop2\_backtable block and the 256 + registers in the pop2\_door block. - Each event register is of the form "LL SS TT FD FD" which activates the + Each event register is of the form ``LL SS TT FD FD'' which activates the normal door (0x04), right exit door (0x11) or shooter (0x24) located in the tile LL of the screen SS. TT is 00 for normal activation and FF for exit doors. -4.2.3 Guard handling +\subsubsection{Guard handling} %4.2.3 This section explains how guards are handled. In POP2 there are two different types of guards. We will call them static and dynamic guards. Static guards are the normal guards that are waiting in a room like in @@ -1094,21 +1145,21 @@ Table of Contents room running from one of the sides. Each type of guard is attached to a room and is handled in a different way, so a room can have both types of guards, one or none depending on the specifications. There is a block for - each type of guard, pop2_static_guard is the specification of the static - guards and pop2_dynamic_guard is the specification of the dynamic ones. + each type of guard, pop2\_static\_guard is the specification of the static + guards and pop2\_dynamic\_guard is the specification of the dynamic ones. Each block has different specifications and sizes as it is mentioned bellow. -4.2.3.1 Static guards +\subsubsection{Static guards} %4.2.3.1 - In this item static guards are explained and the pop2_static_guard is + In this item static guards are explained and the pop2\_static\_guard is specified. For each screen there is reserved memory space for a maximum of 5 guards. - The pop2_static_guard block has a size of 3712 divided in 32 sub-blocks of + The pop2\_static\_guard block has a size of 3712 divided in 32 sub-blocks of 116 bytes each. As there is a correspondence between each sub-block and - the room with this number, we will call them "room guard blocks". + the room with this number, we will call them ``room guard blocks''. A room guard block has a size of 116 divided this way: - 1 byte for the number of guards present in this room. @@ -1122,10 +1173,10 @@ Table of Contents the following bytes from 0 to 22 will specify the guard: Byte 0 is a UC showing the location in this room (same as explained in - 3.4.4) of the current guard. + \ref{guard handling}) of the current guard. Bytes 1 and 2 are a SS with an offset in pixels to reallocate the guard in the floor. - Byte 3 is the facing direction as specified in 3.4.4. + Byte 3 is the facing direction as specified in \ref{guard handling}. Byte 4 is the skill Byte 5 is unknown Bytes 6,7 and 8 are always 0, probably because 5 is a long from 0 to 255. @@ -1146,10 +1197,10 @@ Table of Contents Bytes 19,20,21 are always 0. Byte 22 is unknown (mostly 0, but 1 and 3 where found for some guards). -4.2.3.2 Dynamic guards +\subsubsection{Dynamic guards} %4.2.3.2 The dynamic guards are the ones who appear running throw a room's corner - and they are defined in the pop2_dynamic_guard block. + and they are defined in the pop2\_dynamic\_guard block. This block has 34 bytes for each of the 32 rooms, so it is sized 1088 bytes. Each room has a specification about those guards. There is only one different type of dynamic guard per room, but it is @@ -1179,25 +1230,29 @@ Table of Contents Byte 31 is the hit points the guards will have. -5. PLV v1.0 Format Specifications - ~~~ ~~~~ ~~~~~~ ~~~~~~~~~~~~~~ +\section{PLV v1.0 Format Specifications} PLV v1.0 files are defined in this table: - Table 5.1: PLV blocks - ~~~~~~~~~~~~~~~~~~~~~ - - Size Offset Description Type Content - ~~~~ ~~~~~~ ~~~~~~~~~~~ ~~~~ ~~~~~~~ - 7 0 Magic identifier text "POP_LVL" - 1 7 POP version UC 0x01 - 1 8 PLV version UC 0x01 - 1 9 Level Number UC - 4 10 Number of fields UL - 4 14 Block 1: Level size (B1) UL 2306/2305 - B1 18 Block 1: Level code - - 4 18+B1 Block 2: User data size (B2) UL - B2 22+B1 Block 2: User data - +\begin{table} +\begin{tabular}{cclcc} +\hline + Size&Offset&Description & Type & Content \\ +\hline + 7 & 0& Magic identifier & text & ``POP\_LVL'' \\ + 1 & 7& POP version & UC & 0x01 \\ + 1 & 8& PLV version & UC & 0x01 \\ + 1 & 9& Level Number & UC \\ + 4 & 10& Number of fields & UL \\ + 4 & 14& Block 1: Level size (B1) & UL & 2306/2305 \\ + B1 & 18& Block 1: Level code & - \\ + 4 & 18+B1& Block 2: User data size (B2)& UL \\ + B2 & 22+B1& Block 2: User data & - \\ +\hline +\end{tabular} +\caption{PLV blocks} +\label{palettes table} +\end{table} Level code is the exact level as described in 4.4 including the checksum byte. Note that Level size (B1) also includes the checksum byte in the @@ -1206,41 +1261,45 @@ Table of Contents PLV version is 1 for PLV v1.0. Only one level may be saved in a PLV, the level number is saved inside. -5.1. User data +\subsection{User data} User data is a block of extensible information, Number of fields is the count of each field/value information pair. A pair is saved in the following format: - field_name\0value\0 - where \0 is the null byte (0x00) and field_name and value are strings. + field\_name\\0value\\0 + where \\0 is the null byte (0x00) and field\_name and value are strings. There are mandatory pairs that must be included in all PLV files. Those are: - Table 5.2: Mandatory Fields - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Field name Description - ~~~~~~~~~~ ~~~~~~~~~~~ - Editor Name The name of the editor used to save the file - Editor Version The version of the editor used to save the file - Level Author The author of the file - Level Title A title for the level - Level Description A description - Time Created The time when the file was created - Time Last Modified The time of the last modification to the file - Original Filename The name of the original file name (levels.dat) - Original Level Number Optional. The level number it has when it was - first exported +\begin{table} +\begin{tabular}{lp{7cm}} +\hline + Field name & Description \\ +\hline + Editor Name & The name of the editor used to save the file \\ + Editor Version & The version of the editor used to save the file \\ + Level Author & The author of the file \\ + Level Title & A title for the level \\ + Level Description & A description \\ + Time Created & The time when the file was created \\ + Time Last Modified & The time of the last modification to the file \\ + Original Filename & The name of the original file name (levels.dat) \\ + Original Level Number & Optional. The level number it has when it was first exported \\ +\hline +\end{tabular} +\caption{PLV Mandatory Fields} +\label{plv mandatory fields} +\end{table} The content values may be empty. There is no need to keep an order within the fields. -5.2. Allowed Date format +\subsection{Allowed Date format} To make easy time parsing the time format must be very strict. There are only two allowed formats: with seconds and without. - With seconds the format is "YYYY-MM-DD HH:II:SS" - Without seconds the format is "YYYY-MM-DD HH:II" + With seconds the format is ``YYYY-MM-DD HH:II:SS'' + Without seconds the format is ``YYYY-MM-DD HH:II'' Where YYYY is the year in 4 digits, MM is the month in numbers, MM the months, DD the days, HH the hour, II the minute and SS the second in the military time: HH is a number from 00 to 23. @@ -1250,23 +1309,27 @@ Table of Contents i.e. 2002-11-26 22:16:39 -6. The SAV v1.0 format - ~~~ ~~~ ~~~~ ~~~~~~ +\section{SAV v1.0 Format Specifications} SAV v1.0 saves kid level, hit points and remaining time information in order to restart the game from this position. SAV files are 8 bytes length in the following format: - Table 6.1: SAV blocks - ~~~~~~~~~~~~~~~~~~~~~ - - Size Offset Description Type - ~~~~ ~~~~~~ ~~~~~~~~~~~ ~~~~ - 2 0 Remaining minutes US (i) - 2 2 Remaining ticks US (ii) - 2 4 Current level US (iii) - 2 6 Current hit points US (iv) +\begin{table} +\begin{tabular}{cclcc} +\hline + Size& Offset& Description & Type \\ +\hline + 2 & 0& Remaining minutes & US & (i) \\ + 2 & 2& Remaining ticks & US & (ii) \\ + 2 & 4& Current level & US & (iii) \\ + 2 & 6& Current hit points & US & (iv) \\ +\hline +\end{tabular} +\caption{SAV blocks} +\label{palettes table} +\end{table} Remaining minutes (i) Range values: @@ -1275,12 +1338,12 @@ Table of Contents 65535 for game over Remaining ticks (ii) - Seconds are stored in ticks, a tick is 1/12 seconds. To get the time in - seconds you have to divide the integer "Remaining ticks" by 12. + Seconds are stored in ticks, a tick is $\frac{1}{12} seconds$. To get the time in + seconds you have to divide the integer ``Remaining ticks'' by 12. Range values: 0.000 to 59.916 seconds - (rounded by units of ~83 milliseconds or 1/12 seconds) + (rounded by units of $\approx 83 ms$ or $\frac{1}{12} seconds$) 0 to 719 ticks Level (iii) @@ -1296,8 +1359,8 @@ Table of Contents 1 to 65535 hit points -7. The HOF v1.0 format - ~~~ ~~~ ~~~~ ~~~~~~ +\section{HOF v1.0 Format Specifications} + HOF files are used to save the Hall of Fame information. All HOF v1.0 files have a size of 176 bytes. The first 2 bytes belongs to @@ -1306,47 +1369,49 @@ Table of Contents Following those bytes there is an array of records. This array has a full size of 29 bytes distributed according to the following table. - Table 7.1: HOF blocks - ~~~~~~~~~~~~~~~~~~~~~ - - Size Offset Description Type - ~~~~ ~~~~~~ ~~~~~~~~~~~ ~~~~ - 25 0 Player name text - 2 25 Remaining minutes US (similar to SAV format) - 2 27 Remaining ticks US (similar to SAV format) +\begin{table} +\begin{tabular}{cclc} +\hline + Size& Offset & Description & Type \\ + 25 & 0 & Player name & text \\ + 2 & 25 & Remaining minutes & US (similar to SAV format) \\ + 2 & 27 & Remaining ticks & US (similar to SAV format) \\ +\hline +\end{tabular} +\caption{HOF blocks} +\label{palettes table} +\end{table} In case there is no record, the 29 bytes spaces must be filled with zeros - in order to complete the whole file and give it the size of 2+29*6 = 176. - - -8. Credits - ~~~~~~~ - - This document: - Writing . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot - Corrections . . . . . . . . . . . . . . . . . . . . . Patrik Jakobsson - Hubai Tamas - - Reverse Engineering: - Indexes . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot - Levels . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot - Brendon James - MAC Levels . . . . . . . . . . . . . . . . . . . . . . . . Dongsoo Lim - Images . . . . . . . . . . . . . . . . . . . . . . . Tammo Jan Dijkema - RLE Compression . . . . . . . . . . . . . . . . . . . Tammo Jan Dijkema - LZG Compression . . . . . . . . . . . . . . . . . . . . . Anke Balderer - Diego Essaya - Sounds . . . . . . . . . . . . . . . . . . . . . . . Christian Lundheim - Palettes and Speaker Sounds . . . . . . . . . . . . . . . . . . . David - - PLV v1.0: - Definition . . . . . . . . . . . . . . . . . . . . . . . Brendon James + in order to complete the whole file and give it the size of $2+29*6 = 176$. + + +\section{Credits} + + This document: \\ + Writing . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot \\ + Corrections . . . . . . . . . . . . . . . . . . . . . Patrik Jakobsson \\ + Hubai Tamas \\ + \\ + Reverse Engineering: \\ + Indexes . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot \\ + Levels . . . . . . . . . . . . . . . . . . . . . . . . . Enrique Calot \\ + Brendon James \\ + MAC Levels . . . . . . . . . . . . . . . . . . . . . . . . Dongsoo Lim \\ + Images . . . . . . . . . . . . . . . . . . . . . . . Tammo Jan Dijkema \\ + RLE Compression . . . . . . . . . . . . . . . . . . . Tammo Jan Dijkema \\ + LZG Compression . . . . . . . . . . . . . . . . . . . . . Anke Balderer \\ + Diego Essaya \\ + Sounds . . . . . . . . . . . . . . . . . . . . . . . Christian Lundheim \\ + Palettes and Speaker Sounds . . . . . . . . . . . . . . . . . . . David \\ + \\ + PLV v1.0: \\ + Definition . . . . . . . . . . . . . . . . . . . . . . . Brendon James \\ Enrique Calot -9. License - ~~~~~~~ +\section{License} - Copyright (c) 2004, 2005, 2006, 2007 The Princed Project Team + Copyright (c) 2004 -- 2008 The Princed Project Team Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; @@ -1354,3 +1419,8 @@ Table of Contents Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". +\section*{Appendix A} +\listoftables +\listoffigures +\printindex +\end{document} diff --git a/FP/doc/lzg.eps b/FP/doc/lzg.eps new file mode 100644 index 0000000..d86835c --- /dev/null +++ b/FP/doc/lzg.eps @@ -0,0 +1,2085 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: inkscape 0.45 +%%Pages: 1 +%%Orientation: Portrait +%%BoundingBox: 84 498 322 581 +%%HiResBoundingBox: 84.572443 498.76862 321.10369 580.62869 +%%EndComments +%%Page: 1 1 +0 842 translate +0.8 -0.8 scale +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +gsave [1 0 0 1 0 0] concat +gsave +0 0 0 setrgbcolor +newpath +108.73899 327.51382 moveto +108.12961 327.51383 107.67063 327.81461 107.36204 328.41617 curveto +107.05735 329.01383 106.905 329.91422 106.90501 331.11734 curveto +106.905 332.31656 107.05735 333.21695 107.36204 333.81851 curveto +107.67063 334.41617 108.12961 334.715 108.73899 334.715 curveto +109.35227 334.715 109.81125 334.41617 110.11594 333.81851 curveto +110.42453 333.21695 110.57883 332.31656 110.57883 331.11734 curveto +110.57883 329.91422 110.42453 329.01383 110.11594 328.41617 curveto +109.81125 327.81461 109.35227 327.51383 108.73899 327.51382 curveto +108.73899 326.57632 moveto +109.71945 326.57633 110.4675 326.965 110.98313 327.74234 curveto +111.50266 328.51578 111.76242 329.64078 111.76243 331.11734 curveto +111.76242 332.59 111.50266 333.715 110.98313 334.49234 curveto +110.4675 335.26578 109.71945 335.6525 108.73899 335.6525 curveto +107.75852 335.6525 107.00852 335.26578 106.48899 334.49234 curveto +105.97336 333.715 105.71555 332.59 105.71555 331.11734 curveto +105.71555 329.64078 105.97336 328.51578 106.48899 327.74234 curveto +107.00852 326.965 107.75852 326.57633 108.73899 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +116.37962 327.51382 moveto +115.77024 327.51383 115.31125 327.81461 115.00266 328.41617 curveto +114.69797 329.01383 114.54563 329.91422 114.54563 331.11734 curveto +114.54563 332.31656 114.69797 333.21695 115.00266 333.81851 curveto +115.31125 334.41617 115.77024 334.715 116.37962 334.715 curveto +116.99289 334.715 117.45188 334.41617 117.75657 333.81851 curveto +118.06516 333.21695 118.21945 332.31656 118.21946 331.11734 curveto +118.21945 329.91422 118.06516 329.01383 117.75657 328.41617 curveto +117.45188 327.81461 116.99289 327.51383 116.37962 327.51382 curveto +116.37962 326.57632 moveto +117.36008 326.57633 118.10813 326.965 118.62376 327.74234 curveto +119.14328 328.51578 119.40305 329.64078 119.40305 331.11734 curveto +119.40305 332.59 119.14328 333.715 118.62376 334.49234 curveto +118.10813 335.26578 117.36008 335.6525 116.37962 335.6525 curveto +115.39914 335.6525 114.64914 335.26578 114.12962 334.49234 curveto +113.61399 333.715 113.35618 332.59 113.35618 331.11734 curveto +113.35618 329.64078 113.61399 328.51578 114.12962 327.74234 curveto +114.64914 326.965 115.39914 326.57633 116.37962 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +124.02024 327.51382 moveto +123.41086 327.51383 122.95188 327.81461 122.64329 328.41617 curveto +122.3386 329.01383 122.18625 329.91422 122.18626 331.11734 curveto +122.18625 332.31656 122.3386 333.21695 122.64329 333.81851 curveto +122.95188 334.41617 123.41086 334.715 124.02024 334.715 curveto +124.63352 334.715 125.0925 334.41617 125.39719 333.81851 curveto +125.70578 333.21695 125.86008 332.31656 125.86008 331.11734 curveto +125.86008 329.91422 125.70578 329.01383 125.39719 328.41617 curveto +125.0925 327.81461 124.63352 327.51383 124.02024 327.51382 curveto +124.02024 326.57632 moveto +125.0007 326.57633 125.74875 326.965 126.26438 327.74234 curveto +126.78391 328.51578 127.04367 329.64078 127.04368 331.11734 curveto +127.04367 332.59 126.78391 333.715 126.26438 334.49234 curveto +125.74875 335.26578 125.0007 335.6525 124.02024 335.6525 curveto +123.03977 335.6525 122.28977 335.26578 121.77024 334.49234 curveto +121.25461 333.715 120.9968 332.59 120.9968 331.11734 curveto +120.9968 329.64078 121.25461 328.51578 121.77024 327.74234 curveto +122.28977 326.965 123.03977 326.57633 124.02024 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +131.66087 327.51382 moveto +131.05149 327.51383 130.5925 327.81461 130.28391 328.41617 curveto +129.97922 329.01383 129.82688 329.91422 129.82688 331.11734 curveto +129.82688 332.31656 129.97922 333.21695 130.28391 333.81851 curveto +130.5925 334.41617 131.05149 334.715 131.66087 334.715 curveto +132.27414 334.715 132.73313 334.41617 133.03782 333.81851 curveto +133.34641 333.21695 133.5007 332.31656 133.50071 331.11734 curveto +133.5007 329.91422 133.34641 329.01383 133.03782 328.41617 curveto +132.73313 327.81461 132.27414 327.51383 131.66087 327.51382 curveto +131.66087 326.57632 moveto +132.64133 326.57633 133.38938 326.965 133.90501 327.74234 curveto +134.42453 328.51578 134.6843 329.64078 134.6843 331.11734 curveto +134.6843 332.59 134.42453 333.715 133.90501 334.49234 curveto +133.38938 335.26578 132.64133 335.6525 131.66087 335.6525 curveto +130.68039 335.6525 129.93039 335.26578 129.41087 334.49234 curveto +128.89524 333.715 128.63743 332.59 128.63743 331.11734 curveto +128.63743 329.64078 128.89524 328.51578 129.41087 327.74234 curveto +129.93039 326.965 130.68039 326.57633 131.66087 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +139.30149 327.51382 moveto +138.69211 327.51383 138.23313 327.81461 137.92454 328.41617 curveto +137.61985 329.01383 137.4675 329.91422 137.46751 331.11734 curveto +137.4675 332.31656 137.61985 333.21695 137.92454 333.81851 curveto +138.23313 334.41617 138.69211 334.715 139.30149 334.715 curveto +139.91477 334.715 140.37375 334.41617 140.67844 333.81851 curveto +140.98703 333.21695 141.14133 332.31656 141.14133 331.11734 curveto +141.14133 329.91422 140.98703 329.01383 140.67844 328.41617 curveto +140.37375 327.81461 139.91477 327.51383 139.30149 327.51382 curveto +139.30149 326.57632 moveto +140.28195 326.57633 141.03 326.965 141.54563 327.74234 curveto +142.06516 328.51578 142.32492 329.64078 142.32493 331.11734 curveto +142.32492 332.59 142.06516 333.715 141.54563 334.49234 curveto +141.03 335.26578 140.28195 335.6525 139.30149 335.6525 curveto +138.32102 335.6525 137.57102 335.26578 137.05149 334.49234 curveto +136.53586 333.715 136.27805 332.59 136.27805 331.11734 curveto +136.27805 329.64078 136.53586 328.51578 137.05149 327.74234 curveto +137.57102 326.965 138.32102 326.57633 139.30149 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +146.94212 327.51382 moveto +146.33274 327.51383 145.87375 327.81461 145.56516 328.41617 curveto +145.26047 329.01383 145.10813 329.91422 145.10813 331.11734 curveto +145.10813 332.31656 145.26047 333.21695 145.56516 333.81851 curveto +145.87375 334.41617 146.33274 334.715 146.94212 334.715 curveto +147.55539 334.715 148.01438 334.41617 148.31907 333.81851 curveto +148.62766 333.21695 148.78195 332.31656 148.78196 331.11734 curveto +148.78195 329.91422 148.62766 329.01383 148.31907 328.41617 curveto +148.01438 327.81461 147.55539 327.51383 146.94212 327.51382 curveto +146.94212 326.57632 moveto +147.92258 326.57633 148.67063 326.965 149.18626 327.74234 curveto +149.70578 328.51578 149.96555 329.64078 149.96555 331.11734 curveto +149.96555 332.59 149.70578 333.715 149.18626 334.49234 curveto +148.67063 335.26578 147.92258 335.6525 146.94212 335.6525 curveto +145.96164 335.6525 145.21164 335.26578 144.69212 334.49234 curveto +144.17649 333.715 143.91868 332.59 143.91868 331.11734 curveto +143.91868 329.64078 144.17649 328.51578 144.69212 327.74234 curveto +145.21164 326.965 145.96164 326.57633 146.94212 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +154.58274 327.51382 moveto +153.97336 327.51383 153.51438 327.81461 153.20579 328.41617 curveto +152.9011 329.01383 152.74875 329.91422 152.74876 331.11734 curveto +152.74875 332.31656 152.9011 333.21695 153.20579 333.81851 curveto +153.51438 334.41617 153.97336 334.715 154.58274 334.715 curveto +155.19602 334.715 155.655 334.41617 155.95969 333.81851 curveto +156.26828 333.21695 156.42258 332.31656 156.42258 331.11734 curveto +156.42258 329.91422 156.26828 329.01383 155.95969 328.41617 curveto +155.655 327.81461 155.19602 327.51383 154.58274 327.51382 curveto +154.58274 326.57632 moveto +155.5632 326.57633 156.31125 326.965 156.82688 327.74234 curveto +157.34641 328.51578 157.60617 329.64078 157.60618 331.11734 curveto +157.60617 332.59 157.34641 333.715 156.82688 334.49234 curveto +156.31125 335.26578 155.5632 335.6525 154.58274 335.6525 curveto +153.60227 335.6525 152.85227 335.26578 152.33274 334.49234 curveto +151.81711 333.715 151.5593 332.59 151.5593 331.11734 curveto +151.5593 329.64078 151.81711 328.51578 152.33274 327.74234 curveto +152.85227 326.965 153.60227 326.57633 154.58274 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +162.22337 327.51382 moveto +161.61399 327.51383 161.155 327.81461 160.84641 328.41617 curveto +160.54172 329.01383 160.38938 329.91422 160.38938 331.11734 curveto +160.38938 332.31656 160.54172 333.21695 160.84641 333.81851 curveto +161.155 334.41617 161.61399 334.715 162.22337 334.715 curveto +162.83664 334.715 163.29563 334.41617 163.60032 333.81851 curveto +163.90891 333.21695 164.0632 332.31656 164.06321 331.11734 curveto +164.0632 329.91422 163.90891 329.01383 163.60032 328.41617 curveto +163.29563 327.81461 162.83664 327.51383 162.22337 327.51382 curveto +162.22337 326.57632 moveto +163.20383 326.57633 163.95188 326.965 164.46751 327.74234 curveto +164.98703 328.51578 165.2468 329.64078 165.2468 331.11734 curveto +165.2468 332.59 164.98703 333.715 164.46751 334.49234 curveto +163.95188 335.26578 163.20383 335.6525 162.22337 335.6525 curveto +161.24289 335.6525 160.49289 335.26578 159.97337 334.49234 curveto +159.45774 333.715 159.19993 332.59 159.19993 331.11734 curveto +159.19993 329.64078 159.45774 328.51578 159.97337 327.74234 curveto +160.49289 326.965 161.24289 326.57633 162.22337 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +169.86399 327.51382 moveto +169.25461 327.51383 168.79563 327.81461 168.48704 328.41617 curveto +168.18235 329.01383 168.03 329.91422 168.03001 331.11734 curveto +168.03 332.31656 168.18235 333.21695 168.48704 333.81851 curveto +168.79563 334.41617 169.25461 334.715 169.86399 334.715 curveto +170.47727 334.715 170.93625 334.41617 171.24094 333.81851 curveto +171.54953 333.21695 171.70383 332.31656 171.70383 331.11734 curveto +171.70383 329.91422 171.54953 329.01383 171.24094 328.41617 curveto +170.93625 327.81461 170.47727 327.51383 169.86399 327.51382 curveto +169.86399 326.57632 moveto +170.84445 326.57633 171.5925 326.965 172.10813 327.74234 curveto +172.62766 328.51578 172.88742 329.64078 172.88743 331.11734 curveto +172.88742 332.59 172.62766 333.715 172.10813 334.49234 curveto +171.5925 335.26578 170.84445 335.6525 169.86399 335.6525 curveto +168.88352 335.6525 168.13352 335.26578 167.61399 334.49234 curveto +167.09836 333.715 166.84055 332.59 166.84055 331.11734 curveto +166.84055 329.64078 167.09836 328.51578 167.61399 327.74234 curveto +168.13352 326.965 168.88352 326.57633 169.86399 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +174.97337 333.99429 moveto +176.20969 333.99429 lineto +176.20969 335.48257 lineto +174.97337 335.48257 lineto +174.97337 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +178.79368 333.99429 moveto +180.03001 333.99429 lineto +180.03001 335.48257 lineto +178.79368 335.48257 lineto +178.79368 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +182.61399 333.99429 moveto +183.85032 333.99429 lineto +183.85032 335.48257 lineto +182.61399 335.48257 lineto +182.61399 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +188.96555 327.51382 moveto +188.35618 327.51383 187.89719 327.81461 187.5886 328.41617 curveto +187.28391 329.01383 187.13157 329.91422 187.13157 331.11734 curveto +187.13157 332.31656 187.28391 333.21695 187.5886 333.81851 curveto +187.89719 334.41617 188.35618 334.715 188.96555 334.715 curveto +189.57883 334.715 190.03781 334.41617 190.34251 333.81851 curveto +190.65109 333.21695 190.80539 332.31656 190.8054 331.11734 curveto +190.80539 329.91422 190.65109 329.01383 190.34251 328.41617 curveto +190.03781 327.81461 189.57883 327.51383 188.96555 327.51382 curveto +188.96555 326.57632 moveto +189.94602 326.57633 190.69406 326.965 191.20969 327.74234 curveto +191.72922 328.51578 191.98898 329.64078 191.98899 331.11734 curveto +191.98898 332.59 191.72922 333.715 191.20969 334.49234 curveto +190.69406 335.26578 189.94602 335.6525 188.96555 335.6525 curveto +187.98508 335.6525 187.23508 335.26578 186.71555 334.49234 curveto +186.19993 333.715 185.94211 332.59 185.94212 331.11734 curveto +185.94211 329.64078 186.19993 328.51578 186.71555 327.74234 curveto +187.23508 326.965 187.98508 326.57633 188.96555 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +196.60618 327.51382 moveto +195.9968 327.51383 195.53782 327.81461 195.22923 328.41617 curveto +194.92454 329.01383 194.77219 329.91422 194.77219 331.11734 curveto +194.77219 332.31656 194.92454 333.21695 195.22923 333.81851 curveto +195.53782 334.41617 195.9968 334.715 196.60618 334.715 curveto +197.21946 334.715 197.67844 334.41617 197.98313 333.81851 curveto +198.29172 333.21695 198.44602 332.31656 198.44602 331.11734 curveto +198.44602 329.91422 198.29172 329.01383 197.98313 328.41617 curveto +197.67844 327.81461 197.21946 327.51383 196.60618 327.51382 curveto +196.60618 326.57632 moveto +197.58664 326.57633 198.33469 326.965 198.85032 327.74234 curveto +199.36984 328.51578 199.62961 329.64078 199.62962 331.11734 curveto +199.62961 332.59 199.36984 333.715 198.85032 334.49234 curveto +198.33469 335.26578 197.58664 335.6525 196.60618 335.6525 curveto +195.62571 335.6525 194.87571 335.26578 194.35618 334.49234 curveto +193.84055 333.715 193.58274 332.59 193.58274 331.11734 curveto +193.58274 329.64078 193.84055 328.51578 194.35618 327.74234 curveto +194.87571 326.965 195.62571 326.57633 196.60618 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +204.2468 327.51382 moveto +203.63743 327.51383 203.17844 327.81461 202.86985 328.41617 curveto +202.56516 329.01383 202.41282 329.91422 202.41282 331.11734 curveto +202.41282 332.31656 202.56516 333.21695 202.86985 333.81851 curveto +203.17844 334.41617 203.63743 334.715 204.2468 334.715 curveto +204.86008 334.715 205.31906 334.41617 205.62376 333.81851 curveto +205.93234 333.21695 206.08664 332.31656 206.08665 331.11734 curveto +206.08664 329.91422 205.93234 329.01383 205.62376 328.41617 curveto +205.31906 327.81461 204.86008 327.51383 204.2468 327.51382 curveto +204.2468 326.57632 moveto +205.22727 326.57633 205.97531 326.965 206.49094 327.74234 curveto +207.01047 328.51578 207.27023 329.64078 207.27024 331.11734 curveto +207.27023 332.59 207.01047 333.715 206.49094 334.49234 curveto +205.97531 335.26578 205.22727 335.6525 204.2468 335.6525 curveto +203.26633 335.6525 202.51633 335.26578 201.9968 334.49234 curveto +201.48118 333.715 201.22336 332.59 201.22337 331.11734 curveto +201.22336 329.64078 201.48118 328.51578 201.9968 327.74234 curveto +202.51633 326.965 203.26633 326.57633 204.2468 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +211.88743 327.51382 moveto +211.27805 327.51383 210.81907 327.81461 210.51048 328.41617 curveto +210.20579 329.01383 210.05344 329.91422 210.05344 331.11734 curveto +210.05344 332.31656 210.20579 333.21695 210.51048 333.81851 curveto +210.81907 334.41617 211.27805 334.715 211.88743 334.715 curveto +212.50071 334.715 212.95969 334.41617 213.26438 333.81851 curveto +213.57297 333.21695 213.72727 332.31656 213.72727 331.11734 curveto +213.72727 329.91422 213.57297 329.01383 213.26438 328.41617 curveto +212.95969 327.81461 212.50071 327.51383 211.88743 327.51382 curveto +211.88743 326.57632 moveto +212.86789 326.57633 213.61594 326.965 214.13157 327.74234 curveto +214.65109 328.51578 214.91086 329.64078 214.91087 331.11734 curveto +214.91086 332.59 214.65109 333.715 214.13157 334.49234 curveto +213.61594 335.26578 212.86789 335.6525 211.88743 335.6525 curveto +210.90696 335.6525 210.15696 335.26578 209.63743 334.49234 curveto +209.1218 333.715 208.86399 332.59 208.86399 331.11734 curveto +208.86399 329.64078 209.1218 328.51578 209.63743 327.74234 curveto +210.15696 326.965 210.90696 326.57633 211.88743 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +219.52805 327.51382 moveto +218.91868 327.51383 218.45969 327.81461 218.1511 328.41617 curveto +217.84641 329.01383 217.69407 329.91422 217.69407 331.11734 curveto +217.69407 332.31656 217.84641 333.21695 218.1511 333.81851 curveto +218.45969 334.41617 218.91868 334.715 219.52805 334.715 curveto +220.14133 334.715 220.60031 334.41617 220.90501 333.81851 curveto +221.21359 333.21695 221.36789 332.31656 221.3679 331.11734 curveto +221.36789 329.91422 221.21359 329.01383 220.90501 328.41617 curveto +220.60031 327.81461 220.14133 327.51383 219.52805 327.51382 curveto +219.52805 326.57632 moveto +220.50852 326.57633 221.25656 326.965 221.77219 327.74234 curveto +222.29172 328.51578 222.55148 329.64078 222.55149 331.11734 curveto +222.55148 332.59 222.29172 333.715 221.77219 334.49234 curveto +221.25656 335.26578 220.50852 335.6525 219.52805 335.6525 curveto +218.54758 335.6525 217.79758 335.26578 217.27805 334.49234 curveto +216.76243 333.715 216.50461 332.59 216.50462 331.11734 curveto +216.50461 329.64078 216.76243 328.51578 217.27805 327.74234 curveto +217.79758 326.965 218.54758 326.57633 219.52805 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +227.16868 327.51382 moveto +226.5593 327.51383 226.10032 327.81461 225.79173 328.41617 curveto +225.48704 329.01383 225.33469 329.91422 225.33469 331.11734 curveto +225.33469 332.31656 225.48704 333.21695 225.79173 333.81851 curveto +226.10032 334.41617 226.5593 334.715 227.16868 334.715 curveto +227.78196 334.715 228.24094 334.41617 228.54563 333.81851 curveto +228.85422 333.21695 229.00852 332.31656 229.00852 331.11734 curveto +229.00852 329.91422 228.85422 329.01383 228.54563 328.41617 curveto +228.24094 327.81461 227.78196 327.51383 227.16868 327.51382 curveto +227.16868 326.57632 moveto +228.14914 326.57633 228.89719 326.965 229.41282 327.74234 curveto +229.93234 328.51578 230.19211 329.64078 230.19212 331.11734 curveto +230.19211 332.59 229.93234 333.715 229.41282 334.49234 curveto +228.89719 335.26578 228.14914 335.6525 227.16868 335.6525 curveto +226.18821 335.6525 225.43821 335.26578 224.91868 334.49234 curveto +224.40305 333.715 224.14524 332.59 224.14524 331.11734 curveto +224.14524 329.64078 224.40305 328.51578 224.91868 327.74234 curveto +225.43821 326.965 226.18821 326.57633 227.16868 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +234.8093 327.51382 moveto +234.19993 327.51383 233.74094 327.81461 233.43235 328.41617 curveto +233.12766 329.01383 232.97532 329.91422 232.97532 331.11734 curveto +232.97532 332.31656 233.12766 333.21695 233.43235 333.81851 curveto +233.74094 334.41617 234.19993 334.715 234.8093 334.715 curveto +235.42258 334.715 235.88156 334.41617 236.18626 333.81851 curveto +236.49484 333.21695 236.64914 332.31656 236.64915 331.11734 curveto +236.64914 329.91422 236.49484 329.01383 236.18626 328.41617 curveto +235.88156 327.81461 235.42258 327.51383 234.8093 327.51382 curveto +234.8093 326.57632 moveto +235.78977 326.57633 236.53781 326.965 237.05344 327.74234 curveto +237.57297 328.51578 237.83273 329.64078 237.83274 331.11734 curveto +237.83273 332.59 237.57297 333.715 237.05344 334.49234 curveto +236.53781 335.26578 235.78977 335.6525 234.8093 335.6525 curveto +233.82883 335.6525 233.07883 335.26578 232.5593 334.49234 curveto +232.04368 333.715 231.78586 332.59 231.78587 331.11734 curveto +231.78586 329.64078 232.04368 328.51578 232.5593 327.74234 curveto +233.07883 326.965 233.82883 326.57633 234.8093 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +242.44993 327.51382 moveto +241.84055 327.51383 241.38157 327.81461 241.07298 328.41617 curveto +240.76829 329.01383 240.61594 329.91422 240.61594 331.11734 curveto +240.61594 332.31656 240.76829 333.21695 241.07298 333.81851 curveto +241.38157 334.41617 241.84055 334.715 242.44993 334.715 curveto +243.06321 334.715 243.52219 334.41617 243.82688 333.81851 curveto +244.13547 333.21695 244.28977 332.31656 244.28977 331.11734 curveto +244.28977 329.91422 244.13547 329.01383 243.82688 328.41617 curveto +243.52219 327.81461 243.06321 327.51383 242.44993 327.51382 curveto +242.44993 326.57632 moveto +243.43039 326.57633 244.17844 326.965 244.69407 327.74234 curveto +245.21359 328.51578 245.47336 329.64078 245.47337 331.11734 curveto +245.47336 332.59 245.21359 333.715 244.69407 334.49234 curveto +244.17844 335.26578 243.43039 335.6525 242.44993 335.6525 curveto +241.46946 335.6525 240.71946 335.26578 240.19993 334.49234 curveto +239.6843 333.715 239.42649 332.59 239.42649 331.11734 curveto +239.42649 329.64078 239.6843 328.51578 240.19993 327.74234 curveto +240.71946 326.965 241.46946 326.57633 242.44993 326.57632 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +251.91868 328.17593 moveto +249.81516 329.31265 lineto +251.91868 330.45523 lineto +251.57883 331.02945 lineto +249.61008 329.84 lineto +249.61008 332.04898 lineto +248.94212 332.04898 lineto +248.94212 329.84 lineto +246.97337 331.02945 lineto +246.63352 330.45523 lineto +248.73704 329.31265 lineto +246.63352 328.17593 lineto +246.97337 327.59586 lineto +248.94212 328.78531 lineto +248.94212 326.57632 lineto +249.61008 326.57632 lineto +249.61008 328.78531 lineto +251.57883 327.59586 lineto +251.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +257.91868 328.17593 moveto +255.81516 329.31265 lineto +257.91868 330.45523 lineto +257.57883 331.02945 lineto +255.61008 329.84 lineto +255.61008 332.04898 lineto +254.94212 332.04898 lineto +254.94212 329.84 lineto +252.97337 331.02945 lineto +252.63352 330.45523 lineto +254.73704 329.31265 lineto +252.63352 328.17593 lineto +252.97337 327.59586 lineto +254.94212 328.78531 lineto +254.94212 326.57632 lineto +255.61008 326.57632 lineto +255.61008 328.78531 lineto +257.57883 327.59586 lineto +257.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +263.91868 328.17593 moveto +261.81516 329.31265 lineto +263.91868 330.45523 lineto +263.57883 331.02945 lineto +261.61008 329.84 lineto +261.61008 332.04898 lineto +260.94212 332.04898 lineto +260.94212 329.84 lineto +258.97337 331.02945 lineto +258.63352 330.45523 lineto +260.73704 329.31265 lineto +258.63352 328.17593 lineto +258.97337 327.59586 lineto +260.94212 328.78531 lineto +260.94212 326.57632 lineto +261.61008 326.57632 lineto +261.61008 328.78531 lineto +263.57883 327.59586 lineto +263.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +269.91868 328.17593 moveto +267.81516 329.31265 lineto +269.91868 330.45523 lineto +269.57883 331.02945 lineto +267.61008 329.84 lineto +267.61008 332.04898 lineto +266.94212 332.04898 lineto +266.94212 329.84 lineto +264.97337 331.02945 lineto +264.63352 330.45523 lineto +266.73704 329.31265 lineto +264.63352 328.17593 lineto +264.97337 327.59586 lineto +266.94212 328.78531 lineto +266.94212 326.57632 lineto +267.61008 326.57632 lineto +267.61008 328.78531 lineto +269.57883 327.59586 lineto +269.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +275.91868 328.17593 moveto +273.81516 329.31265 lineto +275.91868 330.45523 lineto +275.57883 331.02945 lineto +273.61008 329.84 lineto +273.61008 332.04898 lineto +272.94212 332.04898 lineto +272.94212 329.84 lineto +270.97337 331.02945 lineto +270.63352 330.45523 lineto +272.73704 329.31265 lineto +270.63352 328.17593 lineto +270.97337 327.59586 lineto +272.94212 328.78531 lineto +272.94212 326.57632 lineto +273.61008 326.57632 lineto +273.61008 328.78531 lineto +275.57883 327.59586 lineto +275.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +281.91868 328.17593 moveto +279.81516 329.31265 lineto +281.91868 330.45523 lineto +281.57883 331.02945 lineto +279.61008 329.84 lineto +279.61008 332.04898 lineto +278.94212 332.04898 lineto +278.94212 329.84 lineto +276.97337 331.02945 lineto +276.63352 330.45523 lineto +278.73704 329.31265 lineto +276.63352 328.17593 lineto +276.97337 327.59586 lineto +278.94212 328.78531 lineto +278.94212 326.57632 lineto +279.61008 326.57632 lineto +279.61008 328.78531 lineto +281.57883 327.59586 lineto +281.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +287.91868 328.17593 moveto +285.81516 329.31265 lineto +287.91868 330.45523 lineto +287.57883 331.02945 lineto +285.61008 329.84 lineto +285.61008 332.04898 lineto +284.94212 332.04898 lineto +284.94212 329.84 lineto +282.97337 331.02945 lineto +282.63352 330.45523 lineto +284.73704 329.31265 lineto +282.63352 328.17593 lineto +282.97337 327.59586 lineto +284.94212 328.78531 lineto +284.94212 326.57632 lineto +285.61008 326.57632 lineto +285.61008 328.78531 lineto +287.57883 327.59586 lineto +287.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +293.91868 328.17593 moveto +291.81516 329.31265 lineto +293.91868 330.45523 lineto +293.57883 331.02945 lineto +291.61008 329.84 lineto +291.61008 332.04898 lineto +290.94212 332.04898 lineto +290.94212 329.84 lineto +288.97337 331.02945 lineto +288.63352 330.45523 lineto +290.73704 329.31265 lineto +288.63352 328.17593 lineto +288.97337 327.59586 lineto +290.94212 328.78531 lineto +290.94212 326.57632 lineto +291.61008 326.57632 lineto +291.61008 328.78531 lineto +293.57883 327.59586 lineto +293.91868 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +295.5593 333.99429 moveto +296.79563 333.99429 lineto +296.79563 335.48257 lineto +295.5593 335.48257 lineto +295.5593 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +299.37962 333.99429 moveto +300.61594 333.99429 lineto +300.61594 335.48257 lineto +299.37962 335.48257 lineto +299.37962 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +303.19993 333.99429 moveto +304.43626 333.99429 lineto +304.43626 335.48257 lineto +303.19993 335.48257 lineto +303.19993 333.99429 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +311.37962 328.17593 moveto +309.2761 329.31265 lineto +311.37962 330.45523 lineto +311.03977 331.02945 lineto +309.07102 329.84 lineto +309.07102 332.04898 lineto +308.40305 332.04898 lineto +308.40305 329.84 lineto +306.4343 331.02945 lineto +306.09446 330.45523 lineto +308.19798 329.31265 lineto +306.09446 328.17593 lineto +306.4343 327.59586 lineto +308.40305 328.78531 lineto +308.40305 326.57632 lineto +309.07102 326.57632 lineto +309.07102 328.78531 lineto +311.03977 327.59586 lineto +311.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +317.37962 328.17593 moveto +315.2761 329.31265 lineto +317.37962 330.45523 lineto +317.03977 331.02945 lineto +315.07102 329.84 lineto +315.07102 332.04898 lineto +314.40305 332.04898 lineto +314.40305 329.84 lineto +312.4343 331.02945 lineto +312.09446 330.45523 lineto +314.19798 329.31265 lineto +312.09446 328.17593 lineto +312.4343 327.59586 lineto +314.40305 328.78531 lineto +314.40305 326.57632 lineto +315.07102 326.57632 lineto +315.07102 328.78531 lineto +317.03977 327.59586 lineto +317.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +323.37962 328.17593 moveto +321.2761 329.31265 lineto +323.37962 330.45523 lineto +323.03977 331.02945 lineto +321.07102 329.84 lineto +321.07102 332.04898 lineto +320.40305 332.04898 lineto +320.40305 329.84 lineto +318.4343 331.02945 lineto +318.09446 330.45523 lineto +320.19798 329.31265 lineto +318.09446 328.17593 lineto +318.4343 327.59586 lineto +320.40305 328.78531 lineto +320.40305 326.57632 lineto +321.07102 326.57632 lineto +321.07102 328.78531 lineto +323.03977 327.59586 lineto +323.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +329.37962 328.17593 moveto +327.2761 329.31265 lineto +329.37962 330.45523 lineto +329.03977 331.02945 lineto +327.07102 329.84 lineto +327.07102 332.04898 lineto +326.40305 332.04898 lineto +326.40305 329.84 lineto +324.4343 331.02945 lineto +324.09446 330.45523 lineto +326.19798 329.31265 lineto +324.09446 328.17593 lineto +324.4343 327.59586 lineto +326.40305 328.78531 lineto +326.40305 326.57632 lineto +327.07102 326.57632 lineto +327.07102 328.78531 lineto +329.03977 327.59586 lineto +329.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +335.37962 328.17593 moveto +333.2761 329.31265 lineto +335.37962 330.45523 lineto +335.03977 331.02945 lineto +333.07102 329.84 lineto +333.07102 332.04898 lineto +332.40305 332.04898 lineto +332.40305 329.84 lineto +330.4343 331.02945 lineto +330.09446 330.45523 lineto +332.19798 329.31265 lineto +330.09446 328.17593 lineto +330.4343 327.59586 lineto +332.40305 328.78531 lineto +332.40305 326.57632 lineto +333.07102 326.57632 lineto +333.07102 328.78531 lineto +335.03977 327.59586 lineto +335.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +341.37962 328.17593 moveto +339.2761 329.31265 lineto +341.37962 330.45523 lineto +341.03977 331.02945 lineto +339.07102 329.84 lineto +339.07102 332.04898 lineto +338.40305 332.04898 lineto +338.40305 329.84 lineto +336.4343 331.02945 lineto +336.09446 330.45523 lineto +338.19798 329.31265 lineto +336.09446 328.17593 lineto +336.4343 327.59586 lineto +338.40305 328.78531 lineto +338.40305 326.57632 lineto +339.07102 326.57632 lineto +339.07102 328.78531 lineto +341.03977 327.59586 lineto +341.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +347.37962 328.17593 moveto +345.2761 329.31265 lineto +347.37962 330.45523 lineto +347.03977 331.02945 lineto +345.07102 329.84 lineto +345.07102 332.04898 lineto +344.40305 332.04898 lineto +344.40305 329.84 lineto +342.4343 331.02945 lineto +342.09446 330.45523 lineto +344.19798 329.31265 lineto +342.09446 328.17593 lineto +342.4343 327.59586 lineto +344.40305 328.78531 lineto +344.40305 326.57632 lineto +345.07102 326.57632 lineto +345.07102 328.78531 lineto +347.03977 327.59586 lineto +347.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +353.37962 328.17593 moveto +351.2761 329.31265 lineto +353.37962 330.45523 lineto +353.03977 331.02945 lineto +351.07102 329.84 lineto +351.07102 332.04898 lineto +350.40305 332.04898 lineto +350.40305 329.84 lineto +348.4343 331.02945 lineto +348.09446 330.45523 lineto +350.19798 329.31265 lineto +348.09446 328.17593 lineto +348.4343 327.59586 lineto +350.40305 328.78531 lineto +350.40305 326.57632 lineto +351.07102 326.57632 lineto +351.07102 328.78531 lineto +353.03977 327.59586 lineto +353.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +359.37962 328.17593 moveto +357.2761 329.31265 lineto +359.37962 330.45523 lineto +359.03977 331.02945 lineto +357.07102 329.84 lineto +357.07102 332.04898 lineto +356.40305 332.04898 lineto +356.40305 329.84 lineto +354.4343 331.02945 lineto +354.09446 330.45523 lineto +356.19798 329.31265 lineto +354.09446 328.17593 lineto +354.4343 327.59586 lineto +356.40305 328.78531 lineto +356.40305 326.57632 lineto +357.07102 326.57632 lineto +357.07102 328.78531 lineto +359.03977 327.59586 lineto +359.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +365.37962 328.17593 moveto +363.2761 329.31265 lineto +365.37962 330.45523 lineto +365.03977 331.02945 lineto +363.07102 329.84 lineto +363.07102 332.04898 lineto +362.40305 332.04898 lineto +362.40305 329.84 lineto +360.4343 331.02945 lineto +360.09446 330.45523 lineto +362.19798 329.31265 lineto +360.09446 328.17593 lineto +360.4343 327.59586 lineto +362.40305 328.78531 lineto +362.40305 326.57632 lineto +363.07102 326.57632 lineto +363.07102 328.78531 lineto +365.03977 327.59586 lineto +365.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +371.37962 328.17593 moveto +369.2761 329.31265 lineto +371.37962 330.45523 lineto +371.03977 331.02945 lineto +369.07102 329.84 lineto +369.07102 332.04898 lineto +368.40305 332.04898 lineto +368.40305 329.84 lineto +366.4343 331.02945 lineto +366.09446 330.45523 lineto +368.19798 329.31265 lineto +366.09446 328.17593 lineto +366.4343 327.59586 lineto +368.40305 328.78531 lineto +368.40305 326.57632 lineto +369.07102 326.57632 lineto +369.07102 328.78531 lineto +371.03977 327.59586 lineto +371.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +377.37962 328.17593 moveto +375.2761 329.31265 lineto +377.37962 330.45523 lineto +377.03977 331.02945 lineto +375.07102 329.84 lineto +375.07102 332.04898 lineto +374.40305 332.04898 lineto +374.40305 329.84 lineto +372.4343 331.02945 lineto +372.09446 330.45523 lineto +374.19798 329.31265 lineto +372.09446 328.17593 lineto +372.4343 327.59586 lineto +374.40305 328.78531 lineto +374.40305 326.57632 lineto +375.07102 326.57632 lineto +375.07102 328.78531 lineto +377.03977 327.59586 lineto +377.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +383.37962 328.17593 moveto +381.2761 329.31265 lineto +383.37962 330.45523 lineto +383.03977 331.02945 lineto +381.07102 329.84 lineto +381.07102 332.04898 lineto +380.40305 332.04898 lineto +380.40305 329.84 lineto +378.4343 331.02945 lineto +378.09446 330.45523 lineto +380.19798 329.31265 lineto +378.09446 328.17593 lineto +378.4343 327.59586 lineto +380.40305 328.78531 lineto +380.40305 326.57632 lineto +381.07102 326.57632 lineto +381.07102 328.78531 lineto +383.03977 327.59586 lineto +383.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +389.37962 328.17593 moveto +387.2761 329.31265 lineto +389.37962 330.45523 lineto +389.03977 331.02945 lineto +387.07102 329.84 lineto +387.07102 332.04898 lineto +386.40305 332.04898 lineto +386.40305 329.84 lineto +384.4343 331.02945 lineto +384.09446 330.45523 lineto +386.19798 329.31265 lineto +384.09446 328.17593 lineto +384.4343 327.59586 lineto +386.40305 328.78531 lineto +386.40305 326.57632 lineto +387.07102 326.57632 lineto +387.07102 328.78531 lineto +389.03977 327.59586 lineto +389.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +395.37962 328.17593 moveto +393.2761 329.31265 lineto +395.37962 330.45523 lineto +395.03977 331.02945 lineto +393.07102 329.84 lineto +393.07102 332.04898 lineto +392.40305 332.04898 lineto +392.40305 329.84 lineto +390.4343 331.02945 lineto +390.09446 330.45523 lineto +392.19798 329.31265 lineto +390.09446 328.17593 lineto +390.4343 327.59586 lineto +392.40305 328.78531 lineto +392.40305 326.57632 lineto +393.07102 326.57632 lineto +393.07102 328.78531 lineto +395.03977 327.59586 lineto +395.37962 328.17593 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +401.37962 328.17593 moveto +399.2761 329.31265 lineto +401.37962 330.45523 lineto +401.03977 331.02945 lineto +399.07102 329.84 lineto +399.07102 332.04898 lineto +398.40305 332.04898 lineto +398.40305 329.84 lineto +396.4343 331.02945 lineto +396.09446 330.45523 lineto +398.19798 329.31265 lineto +396.09446 328.17593 lineto +396.4343 327.59586 lineto +398.40305 328.78531 lineto +398.40305 326.57632 lineto +399.07102 326.57632 lineto +399.07102 328.78531 lineto +401.03977 327.59586 lineto +401.37962 328.17593 lineto +fill +grestore +gsave [2.8206622 0 0 2.7479225 -940.77889 -883.80242] concat +gsave [0 -1.0264708 0.9742118 0 -28.940665 875.69724] concat +gsave [1 0 0 1 5.0745988 10.322631] concat +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +409.33094 452.702 moveto +414.11938 452.702 414.11938 452.702 414.11938 452.702 curveto +stroke +gsave +0 0 0 setrgbcolor +newpath +413.33138 453.47487 moveto +413.35112 451.92912 lineto +415.128 452.79723 lineto +413.33138 453.47487 lineto +closepath +eofill +grestore +0 0 0 setrgbcolor +[] 0 setdash +0.4225325 setlinewidth +0 setlinejoin +0 setlinecap +newpath +413.33138 453.47487 moveto +413.35112 451.92912 lineto +415.128 452.79723 lineto +413.33138 453.47487 lineto +closepath +stroke +grestore +gsave [1 0 0 1 5.0745988 49.190084] concat +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +409.33094 452.702 moveto +414.11938 452.702 414.11938 452.702 414.11938 452.702 curveto +stroke +gsave +0 0 0 setrgbcolor +newpath +413.33138 453.47487 moveto +413.35112 451.92912 lineto +415.128 452.79723 lineto +413.33138 453.47487 lineto +closepath +eofill +grestore +0 0 0 setrgbcolor +[] 0 setdash +0.4225325 setlinewidth +0 setlinejoin +0 setlinecap +newpath +413.33138 453.47487 moveto +413.35112 451.92912 lineto +415.128 452.79723 lineto +413.33138 453.47487 lineto +closepath +stroke +grestore +gsave [0 1.0131489 -0.9870217 0 0 0] concat +gsave +0 0 0 setrgbcolor +newpath +451.7633 -419.80611 moveto +452.18843 -419.80611 lineto +452.18843 -416.66391 lineto +451.7633 -416.66391 lineto +451.7633 -419.80611 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +454.97705 -418.08663 moveto +454.97705 -416.66391 lineto +454.5898 -416.66391 lineto +454.5898 -418.074 lineto +454.5898 -418.29709 454.54631 -418.46406 454.45932 -418.5749 curveto +454.37232 -418.68575 454.24184 -418.74117 454.06786 -418.74117 curveto +453.8588 -418.74117 453.69394 -418.67452 453.57327 -418.54123 curveto +453.45261 -418.40794 453.39227 -418.22624 453.39227 -417.99613 curveto +453.39227 -416.66391 lineto +453.00292 -416.66391 lineto +453.00292 -419.02108 lineto +453.39227 -419.02108 lineto +453.39227 -418.65488 lineto +453.48488 -418.79659 453.59362 -418.90252 453.71849 -418.97268 curveto +453.84477 -419.04283 453.98999 -419.07791 454.15415 -419.07791 curveto +454.42494 -419.07791 454.62979 -418.99372 454.7687 -418.82535 curveto +454.9076 -418.65839 454.97705 -418.41215 454.97705 -418.08663 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +456.12828 -417.01749 moveto +456.12828 -415.76734 lineto +455.73893 -415.76734 lineto +455.73893 -419.02108 lineto +456.12828 -419.02108 lineto +456.12828 -418.6633 lineto +456.20966 -418.8036 456.31208 -418.90743 456.43555 -418.97478 curveto +456.56043 -419.04353 456.70915 -419.07791 456.88173 -419.07791 curveto +457.16796 -419.07791 457.40017 -418.96426 457.57836 -418.73696 curveto +457.75795 -418.50966 457.84775 -418.2108 457.84775 -417.84039 curveto +457.84775 -417.46998 457.75795 -417.17112 457.57836 -416.94382 curveto +457.40017 -416.71653 457.16796 -416.60288 456.88173 -416.60288 curveto +456.70915 -416.60288 456.56043 -416.63655 456.43555 -416.7039 curveto +456.31208 -416.77265 456.20966 -416.87718 456.12828 -417.01749 curveto +457.44577 -417.84039 moveto +457.44577 -418.12522 457.38684 -418.34831 457.26898 -418.50966 curveto +457.15253 -418.67242 456.99187 -418.75379 456.78703 -418.7538 curveto +456.58217 -418.75379 456.42082 -418.67242 456.30296 -418.50966 curveto +456.18651 -418.34831 456.12828 -418.12522 456.12828 -417.84039 curveto +456.12828 -417.55557 456.18651 -417.33178 456.30296 -417.16902 curveto +456.42082 -417.00766 456.58217 -416.92699 456.78703 -416.92699 curveto +456.99187 -416.92699 457.15253 -417.00766 457.26898 -417.16902 curveto +457.38684 -417.33178 457.44577 -417.55557 457.44577 -417.84039 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +458.44968 -417.59415 moveto +458.44968 -419.02108 lineto +458.83693 -419.02108 lineto +458.83693 -417.60888 lineto +458.83692 -417.38579 458.88042 -417.21813 458.96741 -417.10588 curveto +459.0544 -416.99504 459.18489 -416.93961 459.35887 -416.93962 curveto +459.56793 -416.93961 459.73279 -417.00626 459.85346 -417.13955 curveto +459.97552 -417.27285 460.03656 -417.45454 460.03656 -417.68465 curveto +460.03656 -419.02108 lineto +460.42381 -419.02108 lineto +460.42381 -416.66391 lineto +460.03656 -416.66391 lineto +460.03656 -417.0259 lineto +459.94255 -416.88279 459.83311 -416.77616 459.70824 -416.706 curveto +459.58476 -416.63725 459.44095 -416.60288 459.27679 -416.60288 curveto +459.006 -416.60288 458.80044 -416.68706 458.66014 -416.85543 curveto +458.51983 -417.0238 458.44967 -417.27004 458.44968 -417.59415 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +461.60871 -419.69035 moveto +461.60871 -419.02108 lineto +462.40636 -419.02108 lineto +462.40636 -418.72012 lineto +461.60871 -418.72012 lineto +461.60871 -417.44051 lineto +461.60871 -417.24829 461.63466 -417.12482 461.68658 -417.0701 curveto +461.7399 -417.01538 461.84723 -416.98802 462.00859 -416.98802 curveto +462.40636 -416.98802 lineto +462.40636 -416.66391 lineto +462.00859 -416.66391 lineto +461.70973 -416.66391 461.50348 -416.71933 461.38983 -416.83017 curveto +461.27618 -416.94242 461.21935 -417.14587 461.21935 -417.44051 curveto +461.21935 -418.72012 lineto +460.93523 -418.72012 lineto +460.93523 -419.02108 lineto +461.21935 -419.02108 lineto +461.21935 -419.69035 lineto +461.60871 -419.69035 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +453.64693 -414.31515 moveto +453.64693 -413.90054 lineto +453.48558 -413.97771 453.33334 -414.03524 453.19023 -414.07312 curveto +453.04712 -414.111 452.90891 -414.12995 452.77562 -414.12995 curveto +452.54411 -414.12995 452.36522 -414.08505 452.23894 -413.99525 curveto +452.11407 -413.90545 452.05163 -413.77777 452.05163 -413.61221 curveto +452.05163 -413.4733 452.09302 -413.36807 452.1758 -413.29652 curveto +452.25999 -413.22636 452.41854 -413.16954 452.65145 -413.12604 curveto +452.90821 -413.07343 lineto +453.22531 -413.0131 453.45892 -412.90646 453.60905 -412.75353 curveto +453.76058 -412.60199 453.83635 -412.39855 453.83635 -412.14319 curveto +453.83635 -411.83872 453.73392 -411.60791 453.52908 -411.45077 curveto +453.32563 -411.29362 453.02677 -411.21505 452.63251 -411.21505 curveto +452.48378 -411.21505 452.32523 -411.23189 452.15686 -411.26556 curveto +451.9899 -411.29924 451.81662 -411.34904 451.63702 -411.41499 curveto +451.63702 -411.85275 lineto +451.8096 -411.75594 451.97867 -411.68298 452.14424 -411.63387 curveto +452.3098 -411.58476 452.47256 -411.56021 452.63251 -411.56021 curveto +452.87524 -411.56021 453.06255 -411.60791 453.19444 -411.70332 curveto +453.32633 -411.79873 453.39227 -411.93483 453.39227 -412.11162 curveto +453.39227 -412.26596 453.34457 -412.38662 453.24916 -412.47361 curveto +453.15515 -412.5606 453.00011 -412.62585 452.78404 -412.66934 curveto +452.52517 -412.71985 lineto +452.20807 -412.78299 451.97867 -412.88191 451.83696 -413.0166 curveto +451.69525 -413.1513 451.62439 -413.33861 451.62439 -413.57854 curveto +451.62439 -413.85635 451.72191 -414.07523 451.91694 -414.23518 curveto +452.11337 -414.39513 452.38346 -414.4751 452.72722 -414.47511 curveto +452.87454 -414.4751 453.02467 -414.46177 453.1776 -414.43512 curveto +453.33054 -414.40846 453.48698 -414.36847 453.64693 -414.31515 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +454.86551 -414.30253 moveto +454.86551 -413.63326 lineto +455.66316 -413.63326 lineto +455.66316 -413.3323 lineto +454.86551 -413.3323 lineto +454.86551 -412.05269 lineto +454.86551 -411.86047 454.89146 -411.737 454.94338 -411.68228 curveto +454.9967 -411.62756 455.10403 -411.6002 455.26539 -411.6002 curveto +455.66316 -411.6002 lineto +455.66316 -411.27608 lineto +455.26539 -411.27608 lineto +454.96653 -411.27608 454.76028 -411.33151 454.64663 -411.44235 curveto +454.53298 -411.5546 454.47615 -411.75804 454.47615 -412.05269 curveto +454.47615 -413.3323 lineto +454.19203 -413.3323 lineto +454.19203 -413.63326 lineto +454.47615 -413.63326 lineto +454.47615 -414.30253 lineto +454.86551 -414.30253 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +457.24583 -412.46099 moveto +456.93294 -412.46098 456.71617 -412.42521 456.59551 -412.35365 curveto +456.47484 -412.28209 456.41451 -412.16002 456.41451 -411.98745 curveto +456.41451 -411.84994 456.45941 -411.7405 456.5492 -411.65913 curveto +456.6404 -411.57915 456.76387 -411.53916 456.91962 -411.53916 curveto +457.13429 -411.53916 457.30616 -411.61493 457.43525 -411.76646 curveto +457.56573 -411.9194 457.63098 -412.12214 457.63098 -412.3747 curveto +457.63098 -412.46099 lineto +457.24583 -412.46099 lineto +458.01823 -412.62094 moveto +458.01823 -411.27608 lineto +457.63098 -411.27608 lineto +457.63098 -411.63387 lineto +457.54258 -411.49076 457.43244 -411.38482 457.30055 -411.31607 curveto +457.16866 -411.24872 457.00731 -411.21505 456.81649 -411.21505 curveto +456.57516 -411.21505 456.38294 -411.2824 456.23982 -411.41709 curveto +456.09811 -411.55319 456.02726 -411.73489 456.02726 -411.96219 curveto +456.02726 -412.22737 456.11565 -412.42731 456.29244 -412.56201 curveto +456.47063 -412.6967 456.73581 -412.76405 457.08799 -412.76405 curveto +457.63098 -412.76405 lineto +457.63098 -412.80193 lineto +457.63098 -412.98012 457.57205 -413.11762 457.45419 -413.21444 curveto +457.33773 -413.31265 457.17357 -413.36176 456.96171 -413.36176 curveto +456.82701 -413.36176 456.69582 -413.34562 456.56815 -413.31336 curveto +456.44046 -413.28108 456.31769 -413.23268 456.19984 -413.16814 curveto +456.19984 -413.52592 lineto +456.34155 -413.58064 456.47905 -413.62133 456.61234 -413.64799 curveto +456.74563 -413.67605 456.87542 -413.69008 457.0017 -413.69008 curveto +457.34264 -413.69008 457.5973 -413.60169 457.76567 -413.4249 curveto +457.93404 -413.24811 458.01823 -412.98012 458.01823 -412.62094 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +460.18388 -413.27126 moveto +460.14038 -413.29652 460.09268 -413.31476 460.04077 -413.32598 curveto +459.99025 -413.33861 459.93413 -413.34492 459.8724 -413.34493 curveto +459.65352 -413.34492 459.48515 -413.27337 459.36729 -413.13025 curveto +459.25083 -412.98854 459.1926 -412.78439 459.19261 -412.51781 curveto +459.19261 -411.27608 lineto +458.80325 -411.27608 lineto +458.80325 -413.63326 lineto +459.19261 -413.63326 lineto +459.19261 -413.26705 lineto +459.27398 -413.41017 459.37992 -413.5161 459.5104 -413.58485 curveto +459.64089 -413.655 459.79944 -413.69008 459.98605 -413.69008 curveto +460.0127 -413.69008 460.04217 -413.68798 460.07444 -413.68377 curveto +460.10671 -413.68096 460.14249 -413.67605 460.18178 -413.66904 curveto +460.18388 -413.27126 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +460.97732 -414.30253 moveto +460.97732 -413.63326 lineto +461.77497 -413.63326 lineto +461.77497 -413.3323 lineto +460.97732 -413.3323 lineto +460.97732 -412.05269 lineto +460.97732 -411.86047 461.00328 -411.737 461.05519 -411.68228 curveto +461.10851 -411.62756 461.21585 -411.6002 461.3772 -411.6002 curveto +461.77497 -411.6002 lineto +461.77497 -411.27608 lineto +461.3772 -411.27608 lineto +461.07834 -411.27608 460.87209 -411.33151 460.75844 -411.44235 curveto +460.64479 -411.5546 460.58797 -411.75804 460.58797 -412.05269 curveto +460.58797 -413.3323 lineto +460.30384 -413.3323 lineto +460.30384 -413.63326 lineto +460.58797 -413.63326 lineto +460.58797 -414.30253 lineto +460.97732 -414.30253 lineto +fill +grestore +grestore +gsave [0 1.0131489 -0.9870217 0 0 0] concat +gsave +0 0 0 setrgbcolor +newpath +489.979 -419.50725 moveto +489.979 -419.05897 lineto +489.83588 -419.19226 489.68294 -419.29188 489.52019 -419.35782 curveto +489.35883 -419.42377 489.18696 -419.45674 489.00456 -419.45674 curveto +488.64537 -419.45674 488.37037 -419.3466 488.17955 -419.12632 curveto +487.98873 -418.90743 487.89332 -418.59034 487.89332 -418.17503 curveto +487.89332 -417.76112 487.98873 -417.44402 488.17955 -417.22374 curveto +488.37037 -417.00486 488.64537 -416.89542 489.00456 -416.89542 curveto +489.18696 -416.89542 489.35883 -416.92839 489.52019 -416.99434 curveto +489.68294 -417.06028 489.83588 -417.1599 489.979 -417.29319 curveto +489.979 -416.84912 lineto +489.83027 -416.7481 489.67242 -416.67233 489.50546 -416.62182 curveto +489.33989 -416.57131 489.16451 -416.54605 488.9793 -416.54605 curveto +488.50366 -416.54605 488.12904 -416.69127 487.85544 -416.98171 curveto +487.58184 -417.27355 487.44504 -417.67132 487.44504 -418.17503 curveto +487.44504 -418.68013 487.58184 -419.07791 487.85544 -419.36835 curveto +488.12904 -419.66018 488.50366 -419.8061 488.9793 -419.80611 curveto +489.16731 -419.8061 489.3441 -419.78085 489.50967 -419.73034 curveto +489.67663 -419.68123 489.83307 -419.60687 489.979 -419.50725 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +490.58302 -417.53733 moveto +490.58302 -418.96426 lineto +490.97027 -418.96426 lineto +490.97027 -417.55206 lineto +490.97027 -417.32897 491.01377 -417.1613 491.10076 -417.04906 curveto +491.18775 -416.93821 491.31824 -416.88279 491.49222 -416.88279 curveto +491.70128 -416.88279 491.86614 -416.94944 491.9868 -417.08273 curveto +492.10887 -417.21602 492.1699 -417.39772 492.16991 -417.62783 curveto +492.16991 -418.96426 lineto +492.55716 -418.96426 lineto +492.55716 -416.60709 lineto +492.16991 -416.60709 lineto +492.16991 -416.96908 lineto +492.0759 -416.82597 491.96646 -416.71933 491.84159 -416.64918 curveto +491.71811 -416.58043 491.5743 -416.54605 491.41014 -416.54605 curveto +491.13934 -416.54605 490.93379 -416.63024 490.79348 -416.79861 curveto +490.65318 -416.96698 490.58302 -417.21322 490.58302 -417.53733 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +494.72491 -418.60227 moveto +494.68142 -418.62752 494.63371 -418.64576 494.5818 -418.65699 curveto +494.53129 -418.66961 494.47516 -418.67592 494.41343 -418.67593 curveto +494.19455 -418.67592 494.02618 -418.60437 493.90832 -418.46126 curveto +493.79186 -418.31954 493.73364 -418.1154 493.73364 -417.84881 curveto +493.73364 -416.60709 lineto +493.34428 -416.60709 lineto +493.34428 -418.96426 lineto +493.73364 -418.96426 lineto +493.73364 -418.59806 lineto +493.81502 -418.74117 493.92095 -418.8471 494.05144 -418.91585 curveto +494.18192 -418.98601 494.34047 -419.02108 494.52708 -419.02108 curveto +494.55374 -419.02108 494.5832 -419.01898 494.61547 -419.01477 curveto +494.64774 -419.01196 494.68352 -419.00705 494.72281 -419.00004 curveto +494.72491 -418.60227 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +496.42545 -418.60227 moveto +496.38195 -418.62752 496.33424 -418.64576 496.28233 -418.65699 curveto +496.23182 -418.66961 496.1757 -418.67592 496.11396 -418.67593 curveto +495.89508 -418.67592 495.72671 -418.60437 495.60885 -418.46126 curveto +495.4924 -418.31954 495.43417 -418.1154 495.43417 -417.84881 curveto +495.43417 -416.60709 lineto +495.04482 -416.60709 lineto +495.04482 -418.96426 lineto +495.43417 -418.96426 lineto +495.43417 -418.59806 lineto +495.51555 -418.74117 495.62148 -418.8471 495.75197 -418.91585 curveto +495.88245 -418.98601 496.041 -419.02108 496.22761 -419.02108 curveto +496.25427 -419.02108 496.28373 -419.01898 496.31601 -419.01477 curveto +496.34828 -419.01196 496.38405 -419.00705 496.42334 -419.00004 curveto +496.42545 -418.60227 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +498.75947 -417.88249 moveto +498.75947 -417.69307 lineto +496.97896 -417.69307 lineto +496.9958 -417.42648 497.07577 -417.22304 497.21889 -417.08273 curveto +497.3634 -416.94382 497.56404 -416.87437 497.82081 -416.87437 curveto +497.96953 -416.87437 498.11335 -416.89261 498.25226 -416.92909 curveto +498.39256 -416.96557 498.53147 -417.02029 498.66897 -417.09325 curveto +498.66897 -416.72705 lineto +498.53006 -416.66812 498.38765 -416.62322 498.24173 -416.59235 curveto +498.09581 -416.56149 497.94779 -416.54605 497.79766 -416.54605 curveto +497.42163 -416.54605 497.12348 -416.65549 496.90319 -416.87437 curveto +496.68431 -417.09325 496.57487 -417.3893 496.57487 -417.76252 curveto +496.57487 -418.14837 496.6787 -418.45424 496.88636 -418.68014 curveto +497.09542 -418.90743 497.37673 -419.02108 497.73031 -419.02108 curveto +498.0474 -419.02108 498.29785 -418.91866 498.48166 -418.71381 curveto +498.66686 -418.51036 498.75947 -418.23325 498.75947 -417.88249 curveto +498.37222 -417.99613 moveto +498.36941 -418.208 498.30978 -418.37707 498.19333 -418.50335 curveto +498.07827 -418.62962 497.92534 -418.69276 497.73452 -418.69276 curveto +497.51844 -418.69276 497.34516 -418.63173 497.21468 -418.50966 curveto +497.08559 -418.38759 497.01123 -418.21572 496.99159 -417.99403 curveto +498.37222 -417.99613 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +501.35446 -418.02981 moveto +501.35446 -416.60709 lineto +500.96721 -416.60709 lineto +500.96721 -418.01718 lineto +500.96721 -418.24027 500.92372 -418.40724 500.83673 -418.51808 curveto +500.74973 -418.62892 500.61925 -418.68434 500.44527 -418.68435 curveto +500.23621 -418.68434 500.07135 -418.6177 499.95068 -418.48441 curveto +499.83002 -418.35111 499.76968 -418.16941 499.76969 -417.93931 curveto +499.76969 -416.60709 lineto +499.38033 -416.60709 lineto +499.38033 -418.96426 lineto +499.76969 -418.96426 lineto +499.76969 -418.59806 lineto +499.86229 -418.73976 499.97103 -418.8457 500.0959 -418.91585 curveto +500.22218 -418.98601 500.3674 -419.02108 500.53156 -419.02108 curveto +500.80235 -419.02108 501.0072 -418.9369 501.14611 -418.76853 curveto +501.28501 -418.60156 501.35446 -418.35532 501.35446 -418.02981 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +502.51411 -419.63353 moveto +502.51411 -418.96426 lineto +503.31176 -418.96426 lineto +503.31176 -418.6633 lineto +502.51411 -418.6633 lineto +502.51411 -417.38369 lineto +502.51411 -417.19147 502.54007 -417.068 502.59198 -417.01328 curveto +502.6453 -416.95856 502.75263 -416.9312 502.91399 -416.9312 curveto +503.31176 -416.9312 lineto +503.31176 -416.60709 lineto +502.91399 -416.60709 lineto +502.61513 -416.60709 502.40888 -416.66251 502.29523 -416.77335 curveto +502.18158 -416.8856 502.12475 -417.08904 502.12476 -417.38369 curveto +502.12476 -418.6633 lineto +501.84063 -418.6633 lineto +501.84063 -418.96426 lineto +502.12476 -418.96426 lineto +502.12476 -419.63353 lineto +502.51411 -419.63353 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +490.14737 -414.36146 moveto +490.5725 -414.36146 lineto +490.5725 -411.21926 lineto +490.14737 -411.21926 lineto +490.14737 -414.36146 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +493.36112 -412.64198 moveto +493.36112 -411.21926 lineto +492.97387 -411.21926 lineto +492.97387 -412.62936 lineto +492.97387 -412.85244 492.93037 -413.01941 492.84338 -413.13026 curveto +492.75639 -413.2411 492.6259 -413.29652 492.45192 -413.29652 curveto +492.24286 -413.29652 492.078 -413.22987 491.95734 -413.09658 curveto +491.83667 -412.96329 491.77634 -412.78159 491.77634 -412.55148 curveto +491.77634 -411.21926 lineto +491.38699 -411.21926 lineto +491.38699 -413.57643 lineto +491.77634 -413.57643 lineto +491.77634 -413.21023 lineto +491.86894 -413.35194 491.97768 -413.45787 492.10256 -413.52803 curveto +492.22883 -413.59818 492.37405 -413.63326 492.53821 -413.63326 curveto +492.80901 -413.63326 493.01386 -413.54907 493.15276 -413.3807 curveto +493.29167 -413.21374 493.36112 -412.9675 493.36112 -412.64198 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +494.51235 -411.57284 moveto +494.51235 -410.32269 lineto +494.12299 -410.32269 lineto +494.12299 -413.57643 lineto +494.51235 -413.57643 lineto +494.51235 -413.21865 lineto +494.59372 -413.35895 494.69615 -413.46278 494.81962 -413.53013 curveto +494.94449 -413.59888 495.09322 -413.63326 495.2658 -413.63326 curveto +495.55203 -413.63326 495.78424 -413.51961 495.96243 -413.29231 curveto +496.14202 -413.06501 496.23182 -412.76615 496.23182 -412.39574 curveto +496.23182 -412.02533 496.14202 -411.72647 495.96243 -411.49918 curveto +495.78424 -411.27188 495.55203 -411.15823 495.2658 -411.15823 curveto +495.09322 -411.15823 494.94449 -411.1919 494.81962 -411.25925 curveto +494.69615 -411.328 494.59372 -411.43253 494.51235 -411.57284 curveto +495.82984 -412.39574 moveto +495.82984 -412.68057 495.77091 -412.90366 495.65305 -413.06501 curveto +495.53659 -413.22777 495.37594 -413.30915 495.17109 -413.30915 curveto +494.96624 -413.30915 494.80489 -413.22777 494.68703 -413.06501 curveto +494.57057 -412.90366 494.51235 -412.68057 494.51235 -412.39574 curveto +494.51235 -412.11092 494.57057 -411.88713 494.68703 -411.72437 curveto +494.80489 -411.56301 494.96624 -411.48234 495.17109 -411.48234 curveto +495.37594 -411.48234 495.53659 -411.56301 495.65305 -411.72437 curveto +495.77091 -411.88713 495.82984 -412.11092 495.82984 -412.39574 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +496.83374 -412.1495 moveto +496.83374 -413.57643 lineto +497.22099 -413.57643 lineto +497.22099 -412.16423 lineto +497.22099 -411.94114 497.26449 -411.77348 497.35148 -411.66123 curveto +497.43847 -411.55039 497.56895 -411.49497 497.74294 -411.49497 curveto +497.95199 -411.49497 498.11686 -411.56161 498.23752 -411.6949 curveto +498.35959 -411.8282 498.42062 -412.0099 498.42062 -412.24 curveto +498.42062 -413.57643 lineto +498.80787 -413.57643 lineto +498.80787 -411.21926 lineto +498.42062 -411.21926 lineto +498.42062 -411.58126 lineto +498.32662 -411.43814 498.21718 -411.33151 498.0923 -411.26135 curveto +497.96883 -411.1926 497.82502 -411.15823 497.66086 -411.15823 curveto +497.39006 -411.15823 497.18451 -411.24241 497.0442 -411.41078 curveto +496.9039 -411.57915 496.83374 -411.82539 496.83374 -412.1495 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +499.99278 -414.2457 moveto +499.99278 -413.57643 lineto +500.79043 -413.57643 lineto +500.79043 -413.27547 lineto +499.99278 -413.27547 lineto +499.99278 -411.99587 lineto +499.99277 -411.80364 500.01873 -411.68017 500.07065 -411.62545 curveto +500.12396 -411.57073 500.2313 -411.54337 500.39265 -411.54337 curveto +500.79043 -411.54337 lineto +500.79043 -411.21926 lineto +500.39265 -411.21926 lineto +500.0938 -411.21926 499.88754 -411.27468 499.77389 -411.38553 curveto +499.66025 -411.49777 499.60342 -411.70122 499.60342 -411.99587 curveto +499.60342 -413.27547 lineto +499.3193 -413.27547 lineto +499.3193 -413.57643 lineto +499.60342 -413.57643 lineto +499.60342 -414.2457 lineto +499.99278 -414.2457 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +491.23335 -407.33203 moveto +491.23335 -406.1808 lineto +491.91525 -406.1808 lineto +492.14395 -406.1808 492.31302 -406.22781 492.42246 -406.32181 curveto +492.5333 -406.41722 492.58872 -406.56244 492.58872 -406.75747 curveto +492.58872 -406.9539 492.5333 -407.09841 492.42246 -407.19102 curveto +492.31302 -407.28502 492.14395 -407.33203 491.91525 -407.33203 curveto +491.23335 -407.33203 lineto +491.23335 -408.62427 moveto +491.23335 -407.67719 lineto +491.86263 -407.67719 lineto +492.07029 -407.67718 492.22462 -407.71577 492.32565 -407.79294 curveto +492.42807 -407.87151 492.47928 -407.99077 492.47928 -408.15073 curveto +492.47928 -408.30927 492.42807 -408.42783 492.32565 -408.50641 curveto +492.22462 -408.58498 492.07029 -408.62426 491.86263 -408.62427 curveto +491.23335 -408.62427 lineto +490.80822 -408.97363 moveto +491.8942 -408.97363 lineto +492.21831 -408.97363 492.46806 -408.90628 492.64344 -408.77159 curveto +492.81883 -408.63689 492.90652 -408.44537 492.90652 -408.19703 curveto +492.90652 -408.0048 492.86162 -407.85187 492.77183 -407.73822 curveto +492.68203 -407.62457 492.55014 -407.55371 492.37616 -407.52565 curveto +492.58521 -407.48075 492.74727 -407.38675 492.86233 -407.24363 curveto +492.97878 -407.10192 493.03701 -406.92443 493.03701 -406.71117 curveto +493.03701 -406.43055 492.9416 -406.21377 492.75078 -406.06084 curveto +492.55996 -405.9079 492.28846 -405.83144 491.93629 -405.83144 curveto +490.80822 -405.83144 lineto +490.80822 -408.97363 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +494.72702 -405.61256 moveto +494.61758 -405.33194 494.51094 -405.14884 494.40712 -405.06325 curveto +494.30329 -404.97766 494.16438 -404.93487 493.9904 -404.93487 curveto +493.68102 -404.93487 lineto +493.68102 -405.25898 lineto +493.90832 -405.25898 lineto +494.01495 -405.25898 494.09774 -405.28423 494.15667 -405.33475 curveto +494.21559 -405.38526 494.28084 -405.50452 494.3524 -405.69253 curveto +494.42185 -405.86932 lineto +493.46846 -408.18861 lineto +493.87886 -408.18861 lineto +494.61547 -406.34496 lineto +495.35209 -408.18861 lineto +495.76249 -408.18861 lineto +494.72702 -405.61256 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +496.6801 -408.85788 moveto +496.6801 -408.18861 lineto +497.47776 -408.18861 lineto +497.47776 -407.88765 lineto +496.6801 -407.88765 lineto +496.6801 -406.60804 lineto +496.6801 -406.41582 496.70606 -406.29235 496.75798 -406.23763 curveto +496.81129 -406.18291 496.91863 -406.15555 497.07998 -406.15555 curveto +497.47776 -406.15555 lineto +497.47776 -405.83144 lineto +497.07998 -405.83144 lineto +496.78113 -405.83144 496.57487 -405.88686 496.46122 -405.9977 curveto +496.34757 -406.10995 496.29075 -406.31339 496.29075 -406.60804 curveto +496.29075 -407.88765 lineto +496.00663 -407.88765 lineto +496.00663 -408.18861 lineto +496.29075 -408.18861 lineto +496.29075 -408.85788 lineto +496.6801 -408.85788 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +500.0054 -407.10683 moveto +500.0054 -406.91742 lineto +498.2249 -406.91742 lineto +498.24173 -406.65083 498.32171 -406.44739 498.46482 -406.30708 curveto +498.60934 -406.16817 498.80998 -406.09872 499.06674 -406.09872 curveto +499.21547 -406.09872 499.35928 -406.11696 499.49819 -406.15344 curveto +499.6385 -406.18992 499.7774 -406.24464 499.9149 -406.3176 curveto +499.9149 -405.9514 lineto +499.776 -405.89247 499.63358 -405.84757 499.48767 -405.8167 curveto +499.34174 -405.78584 499.19372 -405.7704 499.04359 -405.7704 curveto +498.66757 -405.7704 498.36941 -405.87984 498.14913 -406.09872 curveto +497.93025 -406.3176 497.82081 -406.61365 497.82081 -406.98687 curveto +497.82081 -407.37272 497.92464 -407.67859 498.13229 -407.90449 curveto +498.34135 -408.13178 498.62267 -408.24543 498.97624 -408.24543 curveto +499.29334 -408.24543 499.54379 -408.14301 499.72759 -407.93816 curveto +499.9128 -407.73471 500.0054 -407.4576 500.0054 -407.10683 curveto +499.61815 -407.22048 moveto +499.61534 -407.43235 499.55571 -407.60142 499.43926 -407.7277 curveto +499.32421 -407.85397 499.17127 -407.91711 498.98045 -407.91711 curveto +498.76438 -407.91711 498.5911 -407.85608 498.46061 -407.73401 curveto +498.33153 -407.61194 498.25717 -407.44006 498.23752 -407.21838 curveto +499.61815 -407.22048 lineto +fill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +0.50717396 setlinewidth +1 setlinejoin +0 setlinecap +newpath +398.62284 419.34085 moveto +393.95714 419.34085 lineto +393.95714 501.99318 lineto +398.62284 501.99318 lineto +stroke +gsave [0 1.0131489 -0.9870217 0 0 0] concat +gsave +0 0 0 setrgbcolor +newpath +434.03044 -396.02751 moveto +434.45979 -396.02751 lineto +435.12064 -393.37148 lineto +435.77938 -396.02751 lineto +436.25713 -396.02751 lineto +436.91798 -393.37148 lineto +437.57673 -396.02751 lineto +438.00817 -396.02751 lineto +437.21894 -392.88531 lineto +436.68437 -392.88531 lineto +436.02141 -395.6129 lineto +435.35214 -392.88531 lineto +434.81757 -392.88531 lineto +434.03044 -396.02751 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +438.46067 -395.24249 moveto +438.84792 -395.24249 lineto +438.84792 -392.88531 lineto +438.46067 -392.88531 lineto +438.46067 -395.24249 lineto +438.46067 -396.1601 moveto +438.84792 -396.1601 lineto +438.84792 -395.66973 lineto +438.46067 -395.66973 lineto +438.46067 -396.1601 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +441.61549 -394.30804 moveto +441.61549 -392.88531 lineto +441.22824 -392.88531 lineto +441.22824 -394.29541 lineto +441.22824 -394.5185 441.18474 -394.68546 441.09775 -394.79631 curveto +441.01076 -394.90715 440.88028 -394.96257 440.7063 -394.96257 curveto +440.49724 -394.96257 440.33237 -394.89593 440.21171 -394.76264 curveto +440.09104 -394.62934 440.03071 -394.44764 440.03071 -394.21754 curveto +440.03071 -392.88531 lineto +439.64136 -392.88531 lineto +439.64136 -395.24249 lineto +440.03071 -395.24249 lineto +440.03071 -394.87628 lineto +440.12332 -395.01799 440.23205 -395.12393 440.35693 -395.19408 curveto +440.4832 -395.26423 440.62842 -395.29931 440.79258 -395.29931 curveto +441.06338 -395.29931 441.26823 -395.21513 441.40713 -395.04676 curveto +441.54604 -394.87979 441.61549 -394.63355 441.61549 -394.30804 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +443.9432 -394.8847 moveto +443.9432 -396.1601 lineto +444.33045 -396.1601 lineto +444.33045 -392.88531 lineto +443.9432 -392.88531 lineto +443.9432 -393.23889 lineto +443.86182 -393.09858 443.75869 -392.99405 443.63382 -392.9253 curveto +443.51035 -392.85795 443.36162 -392.82428 443.18764 -392.82428 curveto +442.90282 -392.82428 442.67061 -392.93793 442.49101 -393.16523 curveto +442.31282 -393.39253 442.22373 -393.69138 442.22373 -394.0618 curveto +442.22373 -394.43221 442.31282 -394.73106 442.49101 -394.95836 curveto +442.67061 -395.18566 442.90282 -395.29931 443.18764 -395.29931 curveto +443.36162 -395.29931 443.51035 -395.26494 443.63382 -395.19619 curveto +443.75869 -395.12884 443.86182 -395.02501 443.9432 -394.8847 curveto +442.6236 -394.0618 moveto +442.6236 -393.77697 442.68183 -393.55318 442.79829 -393.39042 curveto +442.91614 -393.22907 443.0775 -393.14839 443.28235 -393.14839 curveto +443.4872 -393.14839 443.64855 -393.22907 443.76641 -393.39042 curveto +443.88427 -393.55318 443.9432 -393.77697 443.9432 -394.0618 curveto +443.9432 -394.34662 443.88427 -394.56971 443.76641 -394.73107 curveto +443.64855 -394.89382 443.4872 -394.9752 443.28235 -394.9752 curveto +443.0775 -394.9752 442.91614 -394.89382 442.79829 -394.73107 curveto +442.68183 -394.56971 442.6236 -394.34662 442.6236 -394.0618 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +446.04151 -394.97099 moveto +445.83385 -394.97099 445.66969 -394.88961 445.54902 -394.72686 curveto +445.42836 -394.5655 445.36803 -394.34381 445.36803 -394.0618 curveto +445.36803 -393.77978 445.42766 -393.55739 445.54692 -393.39463 curveto +445.66758 -393.23328 445.83245 -393.1526 446.04151 -393.1526 curveto +446.24776 -393.1526 446.41122 -393.23398 446.53188 -393.39674 curveto +446.65255 -393.55949 446.71288 -393.78118 446.71288 -394.0618 curveto +446.71288 -394.34101 446.65255 -394.56199 446.53188 -394.72475 curveto +446.41122 -394.88891 446.24776 -394.97099 446.04151 -394.97099 curveto +446.04151 -395.29931 moveto +446.37824 -395.29931 446.64272 -395.18987 446.83495 -394.97099 curveto +447.02717 -394.75211 447.12328 -394.44905 447.12328 -394.0618 curveto +447.12328 -393.67595 447.02717 -393.37288 446.83495 -393.1526 curveto +446.64272 -392.93372 446.37824 -392.82428 446.04151 -392.82428 curveto +445.70336 -392.82428 445.43818 -392.93372 445.24596 -393.1526 curveto +445.05514 -393.37288 444.95973 -393.67595 444.95973 -394.0618 curveto +444.95973 -394.44905 445.05514 -394.75211 445.24596 -394.97099 curveto +445.43818 -395.18987 445.70336 -395.29931 446.04151 -395.29931 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +447.53789 -395.24249 moveto +447.92514 -395.24249 lineto +448.4092 -393.40305 lineto +448.89116 -395.24249 lineto +449.34786 -395.24249 lineto +449.83192 -393.40305 lineto +450.31388 -395.24249 lineto +450.70113 -395.24249 lineto +450.08448 -392.88531 lineto +449.62778 -392.88531 lineto +449.12056 -394.81736 lineto +448.61125 -392.88531 lineto +448.15454 -392.88531 lineto +447.53789 -395.24249 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +454.56311 -395.92439 moveto +454.56311 -395.50978 lineto +454.40175 -395.58694 454.24952 -395.64447 454.10641 -395.68235 curveto +453.96329 -395.72023 453.82509 -395.73918 453.6918 -395.73918 curveto +453.46029 -395.73918 453.2814 -395.69428 453.15512 -395.60448 curveto +453.03024 -395.51468 452.96781 -395.387 452.96781 -395.22144 curveto +452.96781 -395.08254 453.0092 -394.9773 453.09198 -394.90575 curveto +453.17616 -394.83559 453.33471 -394.77877 453.56762 -394.73528 curveto +453.82439 -394.68266 lineto +454.14148 -394.62233 454.37509 -394.51569 454.52523 -394.36276 curveto +454.67676 -394.21122 454.75252 -394.00778 454.75253 -393.75242 curveto +454.75252 -393.44795 454.6501 -393.21714 454.44525 -393.06 curveto +454.2418 -392.90285 453.94295 -392.82428 453.54868 -392.82428 curveto +453.39996 -392.82428 453.24141 -392.84112 453.07304 -392.87479 curveto +452.90607 -392.90847 452.73279 -392.95828 452.5532 -393.02422 curveto +452.5532 -393.46198 lineto +452.72578 -393.36517 452.89485 -393.29221 453.06041 -393.2431 curveto +453.22597 -393.19399 453.38873 -393.16944 453.54868 -393.16944 curveto +453.79141 -393.16944 453.97873 -393.21714 454.11062 -393.31255 curveto +454.2425 -393.40796 454.30845 -393.54406 454.30845 -393.72085 curveto +454.30845 -393.87519 454.26074 -393.99585 454.16534 -394.08284 curveto +454.07133 -394.16983 453.91629 -394.23508 453.70022 -394.27857 curveto +453.44135 -394.32908 lineto +453.12425 -394.39222 452.89485 -394.49114 452.75314 -394.62584 curveto +452.61143 -394.76053 452.54057 -394.94784 452.54057 -395.18777 curveto +452.54057 -395.46558 452.63808 -395.68446 452.83311 -395.84441 curveto +453.02954 -396.00436 453.29964 -396.08433 453.64339 -396.08434 curveto +453.79071 -396.08433 453.94084 -396.071 454.09378 -396.04435 curveto +454.24671 -396.01769 454.40316 -395.9777 454.56311 -395.92439 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +455.39864 -395.24249 moveto +455.78589 -395.24249 lineto +455.78589 -392.88531 lineto +455.39864 -392.88531 lineto +455.39864 -395.24249 lineto +455.39864 -396.1601 moveto +455.78589 -396.1601 lineto +455.78589 -395.66973 lineto +455.39864 -395.66973 lineto +455.39864 -396.1601 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +456.4257 -395.24249 moveto +458.26513 -395.24249 lineto +458.26513 -394.88891 lineto +456.80874 -393.19469 lineto +458.26513 -393.19469 lineto +458.26513 -392.88531 lineto +456.37308 -392.88531 lineto +456.37308 -393.23889 lineto +457.82948 -394.93311 lineto +456.4257 -394.93311 lineto +456.4257 -395.24249 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +460.87486 -394.16071 moveto +460.87486 -393.9713 lineto +459.09435 -393.9713 lineto +459.11119 -393.70471 459.19117 -393.50127 459.33428 -393.36096 curveto +459.4788 -393.22205 459.67944 -393.1526 459.9362 -393.1526 curveto +460.08493 -393.1526 460.22874 -393.17084 460.36765 -393.20732 curveto +460.50796 -393.2438 460.64686 -393.29852 460.78436 -393.37148 curveto +460.78436 -393.00528 lineto +460.64546 -392.94635 460.50304 -392.90145 460.35713 -392.87058 curveto +460.2112 -392.83971 460.06318 -392.82428 459.91305 -392.82428 curveto +459.53703 -392.82428 459.23887 -392.93372 459.01859 -393.1526 curveto +458.79971 -393.37148 458.69027 -393.66753 458.69027 -394.04075 curveto +458.69027 -394.4266 458.7941 -394.73247 459.00175 -394.95836 curveto +459.21081 -395.18566 459.49213 -395.29931 459.8457 -395.29931 curveto +460.1628 -395.29931 460.41325 -395.19689 460.59705 -394.99204 curveto +460.78226 -394.78859 460.87486 -394.51148 460.87486 -394.16071 curveto +460.48761 -394.27436 moveto +460.4848 -394.48623 460.42517 -394.6553 460.30872 -394.78158 curveto +460.19367 -394.90785 460.04073 -394.97099 459.84991 -394.97099 curveto +459.63384 -394.97099 459.46056 -394.90996 459.33007 -394.78789 curveto +459.20099 -394.66582 459.12663 -394.49394 459.10698 -394.27226 curveto +460.48761 -394.27436 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +461.56097 -394.84261 moveto +464.25909 -394.84261 lineto +464.25909 -394.48903 lineto +461.56097 -394.48903 lineto +461.56097 -394.84261 lineto +461.56097 -393.98393 moveto +464.25909 -393.98393 lineto +464.25909 -393.62614 lineto +461.56097 -393.62614 lineto +461.56097 -393.98393 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +465.25037 -393.2431 moveto +465.94489 -393.2431 lineto +465.94489 -395.64026 lineto +465.18933 -395.48873 lineto +465.18933 -395.87598 lineto +465.94068 -396.02751 lineto +466.36581 -396.02751 lineto +466.36581 -393.2431 lineto +467.06034 -393.2431 lineto +467.06034 -392.88531 lineto +465.25037 -392.88531 lineto +465.25037 -393.2431 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +468.83032 -395.7476 moveto +468.61144 -395.74759 468.44658 -395.63956 468.33574 -395.42349 curveto +468.2263 -395.20881 468.17158 -394.8854 468.17158 -394.45326 curveto +468.17158 -394.02251 468.2263 -393.6991 468.33574 -393.48303 curveto +468.44658 -393.26836 468.61144 -393.16102 468.83032 -393.16102 curveto +469.05061 -393.16102 469.21547 -393.26836 469.32491 -393.48303 curveto +469.43575 -393.6991 469.49117 -394.02251 469.49117 -394.45326 curveto +469.49117 -394.8854 469.43575 -395.20881 469.32491 -395.42349 curveto +469.21547 -395.63956 469.05061 -395.74759 468.83032 -395.7476 curveto +468.83032 -396.08434 moveto +469.18249 -396.08433 469.45118 -395.94473 469.63639 -395.66552 curveto +469.823 -395.3877 469.9163 -394.98362 469.91631 -394.45326 curveto +469.9163 -393.92429 469.823 -393.52021 469.63639 -393.241 curveto +469.45118 -392.96319 469.18249 -392.82428 468.83032 -392.82428 curveto +468.47815 -392.82428 468.20876 -392.96319 468.02215 -393.241 curveto +467.83694 -393.52021 467.74434 -393.92429 467.74434 -394.45326 curveto +467.74434 -394.98362 467.83694 -395.3877 468.02215 -395.66552 curveto +468.20876 -395.94473 468.47815 -396.08433 468.83032 -396.08434 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +471.03175 -393.2431 moveto +472.51551 -393.2431 lineto +472.51551 -392.88531 lineto +470.52033 -392.88531 lineto +470.52033 -393.2431 lineto +470.68169 -393.41007 470.90127 -393.63386 471.17908 -393.91447 curveto +471.45829 -394.19649 471.63367 -394.37819 471.70523 -394.45957 curveto +471.84133 -394.6125 471.93604 -394.74159 471.98936 -394.84682 curveto +472.04407 -394.95345 472.07143 -395.05798 472.07144 -395.16041 curveto +472.07143 -395.32737 472.01251 -395.46347 471.89465 -395.5687 curveto +471.77819 -395.67393 471.62596 -395.72655 471.43795 -395.72655 curveto +471.30465 -395.72655 471.16364 -395.7034 471.01492 -395.6571 curveto +470.86759 -395.61079 470.70975 -395.54064 470.54138 -395.44664 curveto +470.54138 -395.87598 lineto +470.71255 -395.94473 470.8725 -395.99664 471.02123 -396.03172 curveto +471.16996 -396.06679 471.30606 -396.08433 471.42953 -396.08434 curveto +471.75504 -396.08433 472.01461 -396.00295 472.20824 -395.8402 curveto +472.40186 -395.67744 472.49867 -395.45996 472.49867 -395.18777 curveto +472.49867 -395.05868 472.47412 -394.93591 472.42501 -394.81946 curveto +472.37731 -394.70441 472.28961 -394.56831 472.16194 -394.41116 curveto +472.12686 -394.37047 472.01531 -394.25261 471.8273 -394.05759 curveto +471.63929 -393.86396 471.37411 -393.59247 471.03175 -393.2431 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +474.698 -394.57953 moveto +474.90145 -394.53604 475.05999 -394.44554 475.17364 -394.30804 curveto +475.2887 -394.17053 475.34622 -394.00076 475.34622 -393.79872 curveto +475.34622 -393.48864 475.23959 -393.24871 475.02632 -393.07894 curveto +474.81305 -392.90917 474.50999 -392.82428 474.11713 -392.82428 curveto +473.98524 -392.82428 473.84914 -392.83761 473.70883 -392.86427 curveto +473.56992 -392.88952 473.42611 -392.92811 473.27738 -392.98002 curveto +473.27738 -393.39042 lineto +473.39524 -393.32167 473.52432 -393.26976 473.66463 -393.23468 curveto +473.80494 -393.1996 473.95156 -393.18207 474.1045 -393.18207 curveto +474.37108 -393.18207 474.57383 -393.23468 474.71273 -393.33991 curveto +474.85304 -393.44514 474.92319 -393.59808 474.9232 -393.79872 curveto +474.92319 -393.98393 474.85795 -394.12844 474.72747 -394.23227 curveto +474.59838 -394.3375 474.41809 -394.39012 474.18658 -394.39012 curveto +473.82037 -394.39012 lineto +473.82037 -394.73948 lineto +474.20342 -394.73948 lineto +474.41247 -394.73948 474.57242 -394.78087 474.68327 -394.86366 curveto +474.79411 -394.94784 474.84953 -395.0685 474.84953 -395.22565 curveto +474.84953 -395.387 474.79201 -395.51047 474.67695 -395.59606 curveto +474.5633 -395.68305 474.39985 -395.72655 474.18658 -395.72655 curveto +474.07012 -395.72655 473.94525 -395.71392 473.81196 -395.68867 curveto +473.67866 -395.66341 473.53204 -395.62412 473.37209 -395.57081 curveto +473.37209 -395.94964 lineto +473.53344 -395.99454 473.68428 -396.02821 473.82458 -396.05066 curveto +473.96629 -396.07311 474.09959 -396.08433 474.22446 -396.08434 curveto +474.54717 -396.08433 474.80253 -396.01067 474.99054 -395.86335 curveto +475.17855 -395.71743 475.27256 -395.51959 475.27256 -395.26985 curveto +475.27256 -395.09586 475.22275 -394.94854 475.12313 -394.82788 curveto +475.02351 -394.70861 474.8818 -394.62583 474.698 -394.57953 curveto +fill +grestore +grestore +grestore +grestore +grestore +showpage +%%EOF diff --git a/FP/doc/lzg.svg b/FP/doc/lzg.svg new file mode 100644 index 0000000..b821d3b --- /dev/null +++ b/FP/doc/lzg.svg @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45" + sodipodi:docbase="/home/ecalot/Desktop" + sodipodi:docname="lzg.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + sodipodi:modified="true"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + id="linearGradient3136"> + <stop + style="stop-color:#800000;stop-opacity:1;" + offset="0" + id="stop3138" /> + <stop + style="stop-color:#800000;stop-opacity:0;" + offset="1" + id="stop3140" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3136" + id="linearGradient3142" + x1="120.00351" + y1="459.25583" + x2="331.10916" + y2="461.76898" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.3555602" + inkscape:cx="312.72656" + inkscape:cy="686.12369" + inkscape:document-units="px" + inkscape:current-layer="g3334" + inkscape:window-width="1280" + inkscape:window-height="947" + inkscape:window-x="0" + inkscape:window-y="25" + showguides="true" + inkscape:guide-bbox="true" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="104.92454" + y="335.48257" + id="text2160"><tspan + sodipodi:role="line" + id="tspan2162" + x="104.92454" + y="335.48257">000000000...00000000********...****************</tspan></text> + <g + id="g3310" + inkscape:label="Layer 1" + transform="matrix(2.8206622,0,0,2.7479225,-940.77889,-883.80242)"> + <g + id="g3334" + transform="matrix(0,-1.0264708,0.9742118,0,-28.940665,875.69724)"> + <g + id="g3356" + transform="translate(5.0745988,10.322631)"> + <path + id="path3681" + d="M 409.33094,452.702 C 414.11938,452.702 414.11938,452.702 414.11938,452.702" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccc" + id="path3687" + d="M 413.33138,453.47487 L 413.35112,451.92912 L 415.128,452.79723 L 413.33138,453.47487 z " + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.4225325px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + </g> + <g + id="g3360" + transform="translate(5.0745988,49.190084)"> + <path + id="path3362" + d="M 409.33094,452.702 C 414.11938,452.702 414.11938,452.702 414.11938,452.702" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccc" + id="path3364" + d="M 413.33138,453.47487 L 413.35112,451.92912 L 415.128,452.79723 L 413.33138,453.47487 z " + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.4225325px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + </g> + <text + xml:space="preserve" + style="font-size:4.3102603px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="451.34027" + y="-416.66391" + id="text3366" + transform="matrix(0,1.0131489,-0.9870217,0,0,0)"><tspan + sodipodi:role="line" + id="tspan3368" + x="451.34027" + y="-416.66391">Input</tspan><tspan + sodipodi:role="line" + x="451.34027" + y="-411.27608" + id="tspan3370">Start</tspan></text> + <text + xml:space="preserve" + style="font-size:4.3102603px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="495.31" + y="-416.60709" + id="text3372" + transform="matrix(0,1.0131489,-0.9870217,0,0,0)" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan3374" + x="495.31" + y="-416.60709">Current</tspan><tspan + sodipodi:role="line" + x="495.31" + y="-411.21926" + id="tspan3376">Input</tspan><tspan + sodipodi:role="line" + x="495.31" + y="-405.83144" + id="tspan3378">Byte</tspan></text> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.50717396;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 398.62284,419.34085 L 393.95714,419.34085 L 393.95714,501.99318 L 398.62284,501.99318" + id="path3380" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-size:4.3102603px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="433.88733" + y="-392.88531" + id="text5320" + transform="matrix(0,1.0131489,-0.9870217,0,0,0)"><tspan + sodipodi:role="line" + id="tspan5322" + x="433.88733" + y="-392.88531">Window Size=1023</tspan></text> + </g> + </g> + </g> +</svg>