Hex Artifact Content
Not logged in

Artifact b5132a66c7b6d08e0198b391a346a283cf773006:


0000: 2f 2a 20 6d 69 6e 69 7a 2e 63 20 76 31 2e 31 34  /* miniz.c v1.14
0010: 20 2d 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e   - public domain
0020: 20 64 65 66 6c 61 74 65 2f 69 6e 66 6c 61 74 65   deflate/inflate
0030: 2c 20 7a 6c 69 62 2d 73 75 62 73 65 74 2c 20 5a  , zlib-subset, Z
0040: 49 50 20 72 65 61 64 69 6e 67 2f 77 72 69 74 69  IP reading/writi
0050: 6e 67 2f 61 70 70 65 6e 64 69 6e 67 2c 20 50 4e  ng/appending, PN
0060: 47 20 77 72 69 74 69 6e 67 0a 20 20 20 53 65 65  G writing.   See
0070: 20 22 75 6e 6c 69 63 65 6e 73 65 22 20 73 74 61   "unlicense" sta
0080: 74 65 6d 65 6e 74 20 61 74 20 74 68 65 20 65 6e  tement at the en
0090: 64 20 6f 66 20 74 68 69 73 20 66 69 6c 65 2e 0a  d of this file..
00a0: 20 20 20 52 69 63 68 20 47 65 6c 64 72 65 69 63     Rich Geldreic
00b0: 68 20 3c 72 69 63 68 67 65 6c 39 39 40 67 6d 61  h <richgel99@gma
00c0: 69 6c 2e 63 6f 6d 3e 2c 20 6c 61 73 74 20 75 70  il.com>, last up
00d0: 64 61 74 65 64 20 4d 61 79 20 32 30 2c 20 32 30  dated May 20, 20
00e0: 31 32 0a 20 20 20 49 6d 70 6c 65 6d 65 6e 74 73  12.   Implements
00f0: 20 52 46 43 20 31 39 35 30 3a 20 68 74 74 70 3a   RFC 1950: http:
0100: 2f 2f 77 77 77 2e 69 65 74 66 2e 6f 72 67 2f 72  //www.ietf.org/r
0110: 66 63 2f 72 66 63 31 39 35 30 2e 74 78 74 20 61  fc/rfc1950.txt a
0120: 6e 64 20 52 46 43 20 31 39 35 31 3a 20 68 74 74  nd RFC 1951: htt
0130: 70 3a 2f 2f 77 77 77 2e 69 65 74 66 2e 6f 72 67  p://www.ietf.org
0140: 2f 72 66 63 2f 72 66 63 31 39 35 31 2e 74 78 74  /rfc/rfc1951.txt
0150: 0a 0a 20 20 20 4d 6f 73 74 20 41 50 49 27 73 20  ..   Most API's 
0160: 64 65 66 69 6e 65 64 20 69 6e 20 6d 69 6e 69 7a  defined in miniz
0170: 2e 63 20 61 72 65 20 6f 70 74 69 6f 6e 61 6c 2e  .c are optional.
0180: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 6f   For example, to
0190: 20 64 69 73 61 62 6c 65 20 74 68 65 20 61 72 63   disable the arc
01a0: 68 69 76 65 20 72 65 6c 61 74 65 64 20 66 75 6e  hive related fun
01b0: 63 74 69 6f 6e 73 20 6a 75 73 74 20 64 65 66 69  ctions just defi
01c0: 6e 65 0a 20 20 20 4d 49 4e 49 5a 5f 4e 4f 5f 41  ne.   MINIZ_NO_A
01d0: 52 43 48 49 56 45 5f 41 50 49 53 2c 20 6f 72 20  RCHIVE_APIS, or 
01e0: 74 6f 20 67 65 74 20 72 69 64 20 6f 66 20 61 6c  to get rid of al
01f0: 6c 20 73 74 64 69 6f 20 75 73 61 67 65 20 64 65  l stdio usage de
0200: 66 69 6e 65 20 4d 49 4e 49 5a 5f 4e 4f 5f 53 54  fine MINIZ_NO_ST
0210: 44 49 4f 20 28 73 65 65 20 74 68 65 20 6c 69 73  DIO (see the lis
0220: 74 20 62 65 6c 6f 77 20 66 6f 72 20 6d 6f 72 65  t below for more
0230: 20 6d 61 63 72 6f 73 29 2e 0a 0a 20 20 20 2a 20   macros)...   * 
0240: 43 68 61 6e 67 65 20 48 69 73 74 6f 72 79 0a 20  Change History. 
0250: 20 20 20 20 35 2f 32 30 2f 31 32 20 76 31 2e 31      5/20/12 v1.1
0260: 34 20 2d 20 4d 69 6e 47 57 33 32 2f 36 34 20 47  4 - MinGW32/64 G
0270: 43 43 20 34 2e 36 2e 31 20 63 6f 6d 70 69 6c 65  CC 4.6.1 compile
0280: 72 20 66 69 78 65 73 3a 20 61 64 64 65 64 20 4d  r fixes: added M
0290: 5a 5f 46 4f 52 43 45 49 4e 4c 49 4e 45 2c 20 23  Z_FORCEINLINE, #
02a0: 69 6e 63 6c 75 64 65 20 3c 74 69 6d 65 2e 68 3e  include <time.h>
02b0: 20 28 74 68 61 6e 6b 73 20 66 65 72 6d 74 65 63   (thanks fermtec
02c0: 74 29 2e 0a 20 20 20 20 20 35 2f 31 39 2f 31 32  t)..     5/19/12
02d0: 20 76 31 2e 31 33 20 2d 20 46 72 6f 6d 20 6a 61   v1.13 - From ja
02e0: 73 6f 6e 40 63 6f 72 6e 73 79 72 75 70 2e 6f 72  son@cornsyrup.or
02f0: 67 20 61 6e 64 20 6b 65 6c 77 65 72 74 40 6d 74  g and kelwert@mt
0300: 75 2e 65 64 75 20 2d 20 46 69 78 20 6d 7a 5f 63  u.edu - Fix mz_c
0310: 72 63 33 32 28 29 20 73 6f 20 69 74 20 64 6f 65  rc32() so it doe
0320: 73 6e 27 74 20 63 6f 6d 70 75 74 65 20 74 68 65  sn't compute the
0330: 20 77 72 6f 6e 67 20 43 52 43 2d 33 32 27 73 20   wrong CRC-32's 
0340: 77 68 65 6e 20 6d 7a 5f 75 6c 6f 6e 67 20 69 73  when mz_ulong is
0350: 20 36 34 2d 62 69 74 2e 0a 20 20 20 20 20 20 20   64-bit..       
0360: 54 65 6d 70 6f 72 61 72 69 6c 79 2f 6c 6f 63 61  Temporarily/loca
0370: 6c 6c 79 20 73 6c 61 6d 6d 65 64 20 69 6e 20 22  lly slammed in "
0380: 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
0390: 20 6c 6f 6e 67 20 6d 7a 5f 75 6c 6f 6e 67 22 20   long mz_ulong" 
03a0: 61 6e 64 20 72 65 2d 72 61 6e 20 61 20 72 61 6e  and re-ran a ran
03b0: 64 6f 6d 69 7a 65 64 20 72 65 67 72 65 73 73 69  domized regressi
03c0: 6f 6e 20 74 65 73 74 20 6f 6e 20 7e 35 30 30 6b  on test on ~500k
03d0: 20 66 69 6c 65 73 2e 0a 20 20 20 20 20 20 20 45   files..       E
03e0: 6c 69 6d 69 6e 61 74 65 64 20 61 20 62 75 6e 63  liminated a bunc
03f0: 68 20 6f 66 20 77 61 72 6e 69 6e 67 73 20 77 68  h of warnings wh
0400: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  en compiling wit
0410: 68 20 47 43 43 20 33 32 2d 62 69 74 2f 36 34 2e  h GCC 32-bit/64.
0420: 0a 20 20 20 20 20 20 20 52 61 6e 20 61 6c 6c 20  .       Ran all 
0430: 65 78 61 6d 70 6c 65 73 2c 20 6d 69 6e 69 7a 2e  examples, miniz.
0440: 63 2c 20 61 6e 64 20 74 69 6e 66 6c 2e 63 20 74  c, and tinfl.c t
0450: 68 72 6f 75 67 68 20 4d 53 56 43 20 32 30 30 38  hrough MSVC 2008
0460: 27 73 20 2f 61 6e 61 6c 79 7a 65 20 28 73 74 61  's /analyze (sta
0470: 74 69 63 20 61 6e 61 6c 79 73 69 73 29 20 6f 70  tic analysis) op
0480: 74 69 6f 6e 20 61 6e 64 20 66 69 78 65 64 20 61  tion and fixed a
0490: 6c 6c 20 77 61 72 6e 69 6e 67 73 20 28 65 78 63  ll warnings (exc
04a0: 65 70 74 20 66 6f 72 20 74 68 65 20 73 69 6c 6c  ept for the sill
04b0: 79 0a 20 20 20 20 20 20 20 22 55 73 65 20 6f 66  y.       "Use of
04c0: 20 74 68 65 20 63 6f 6d 6d 61 2d 6f 70 65 72 61   the comma-opera
04d0: 74 6f 72 20 69 6e 20 61 20 74 65 73 74 65 64 20  tor in a tested 
04e0: 65 78 70 72 65 73 73 69 6f 6e 2e 2e 22 20 61 6e  expression.." an
04f0: 61 6c 79 73 69 73 20 77 61 72 6e 69 6e 67 2c 20  alysis warning, 
0500: 77 68 69 63 68 20 49 20 70 75 72 70 6f 73 65 6c  which I purposel
0510: 79 20 75 73 65 20 74 6f 20 77 6f 72 6b 20 61 72  y use to work ar
0520: 6f 75 6e 64 20 61 20 4d 53 56 43 20 63 6f 6d 70  ound a MSVC comp
0530: 69 6c 65 72 20 77 61 72 6e 69 6e 67 29 2e 0a 20  iler warning).. 
0540: 20 20 20 20 20 20 43 72 65 61 74 65 64 20 33 32        Created 32
0550: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20  -bit and 64-bit 
0560: 43 6f 64 65 62 6c 6f 63 6b 73 20 70 72 6f 6a 65  Codeblocks proje
0570: 63 74 73 2f 77 6f 72 6b 73 70 61 63 65 2e 20 42  cts/workspace. B
0580: 75 69 6c 74 20 61 6e 64 20 74 65 73 74 65 64 20  uilt and tested 
0590: 4c 69 6e 75 78 20 65 78 65 63 75 74 61 62 6c 65  Linux executable
05a0: 73 2e 20 54 68 65 20 63 6f 64 65 62 6c 6f 63 6b  s. The codeblock
05b0: 73 20 77 6f 72 6b 73 70 61 63 65 20 69 73 20 63  s workspace is c
05c0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 4c  ompatible with L
05d0: 69 6e 75 78 2b 57 69 6e 33 32 2f 78 36 34 2e 0a  inux+Win32/x64..
05e0: 20 20 20 20 20 20 20 41 64 64 65 64 20 6d 69 6e         Added min
05f0: 69 7a 5f 74 65 73 74 65 72 20 73 6f 6c 75 74 69  iz_tester soluti
0600: 6f 6e 2f 70 72 6f 6a 65 63 74 2c 20 77 68 69 63  on/project, whic
0610: 68 20 69 73 20 61 20 75 73 65 66 75 6c 20 6c 69  h is a useful li
0620: 74 74 6c 65 20 61 70 70 20 64 65 72 69 76 65 64  ttle app derived
0630: 20 66 72 6f 6d 20 4c 5a 48 41 4d 27 73 20 74 65   from LZHAM's te
0640: 73 74 65 72 20 61 70 70 20 74 68 61 74 20 49 20  ster app that I 
0650: 75 73 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  use as part of t
0660: 68 65 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  he regression te
0670: 73 74 2e 0a 20 20 20 20 20 20 20 52 61 6e 20 6d  st..       Ran m
0680: 69 6e 69 7a 2e 63 20 61 6e 64 20 74 69 6e 66 6c  iniz.c and tinfl
0690: 2e 63 20 74 68 72 6f 75 67 68 20 61 6e 6f 74 68  .c through anoth
06a0: 65 72 20 73 65 72 69 65 73 20 6f 66 20 72 65 67  er series of reg
06b0: 72 65 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 20  ression testing 
06c0: 6f 6e 20 7e 35 30 30 2c 30 30 30 20 66 69 6c 65  on ~500,000 file
06d0: 73 20 61 6e 64 20 61 72 63 68 69 76 65 73 2e 0a  s and archives..
06e0: 20 20 20 20 20 20 20 4d 6f 64 69 66 69 65 64 20         Modified 
06f0: 65 78 61 6d 70 6c 65 35 2e 63 20 73 6f 20 69 74  example5.c so it
0700: 20 70 75 72 70 6f 73 65 6c 79 20 64 69 73 61 62   purposely disab
0710: 6c 65 73 20 61 20 62 75 6e 63 68 20 6f 66 20 68  les a bunch of h
0720: 69 67 68 2d 6c 65 76 65 6c 20 66 75 6e 63 74 69  igh-level functi
0730: 6f 6e 61 6c 69 74 79 20 28 4d 49 4e 49 5a 5f 4e  onality (MINIZ_N
0740: 4f 5f 53 54 44 49 4f 2c 20 65 74 63 2e 29 2e 20  O_STDIO, etc.). 
0750: 28 54 68 61 6e 6b 73 20 74 6f 20 63 6f 72 79 73  (Thanks to corys
0760: 61 6d 61 20 66 6f 72 20 74 68 65 20 4d 49 4e 49  ama for the MINI
0770: 5a 5f 4e 4f 5f 53 54 44 49 4f 20 62 75 67 20 72  Z_NO_STDIO bug r
0780: 65 70 6f 72 74 2e 29 0a 20 20 20 20 20 20 20 46  eport.).       F
0790: 69 78 20 66 74 65 6c 6c 28 29 20 75 73 61 67 65  ix ftell() usage
07a0: 20 69 6e 20 65 78 61 6d 70 6c 65 73 20 73 6f 20   in examples so 
07b0: 74 68 65 79 20 65 78 69 74 20 77 69 74 68 20 61  they exit with a
07c0: 6e 20 65 72 72 6f 72 20 6f 6e 20 66 69 6c 65 73  n error on files
07d0: 20 77 68 69 63 68 20 61 72 65 20 74 6f 6f 20 6c   which are too l
07e0: 61 72 67 65 20 28 61 20 6c 69 6d 69 74 61 74 69  arge (a limitati
07f0: 6f 6e 20 6f 66 20 74 68 65 20 65 78 61 6d 70 6c  on of the exampl
0800: 65 73 2c 20 6e 6f 74 20 6d 69 6e 69 7a 20 69 74  es, not miniz it
0810: 73 65 6c 66 29 2e 0a 20 20 20 20 20 34 2f 31 32  self)..     4/12
0820: 2f 31 32 20 76 31 2e 31 32 20 2d 20 4d 6f 72 65  /12 v1.12 - More
0830: 20 63 6f 6d 6d 65 6e 74 73 2c 20 61 64 64 65 64   comments, added
0840: 20 6c 6f 77 2d 6c 65 76 65 6c 20 65 78 61 6d 70   low-level examp
0850: 6c 65 35 2e 63 2c 20 66 69 78 65 64 20 61 20 63  le5.c, fixed a c
0860: 6f 75 70 6c 65 20 6d 69 6e 6f 72 20 6c 65 76 65  ouple minor leve
0870: 6c 5f 61 6e 64 5f 66 6c 61 67 73 20 69 73 73 75  l_and_flags issu
0880: 65 73 20 69 6e 20 74 68 65 20 61 72 63 68 69 76  es in the archiv
0890: 65 20 41 50 49 27 73 2e 0a 20 20 20 20 20 20 6c  e API's..      l
08a0: 65 76 65 6c 5f 61 6e 64 5f 66 6c 61 67 73 20 63  evel_and_flags c
08b0: 61 6e 20 6e 6f 77 20 62 65 20 73 65 74 20 74 6f  an now be set to
08c0: 20 4d 5a 5f 44 45 46 41 55 4c 54 5f 43 4f 4d 50   MZ_DEFAULT_COMP
08d0: 52 45 53 53 49 4f 4e 2e 20 54 68 61 6e 6b 73 20  RESSION. Thanks 
08e0: 74 6f 20 42 72 75 63 65 20 44 61 77 73 6f 6e 20  to Bruce Dawson 
08f0: 3c 62 72 75 63 65 64 40 76 61 6c 76 65 73 6f 66  <bruced@valvesof
0900: 74 77 61 72 65 2e 63 6f 6d 3e 20 66 6f 72 20 74  tware.com> for t
0910: 68 65 20 66 65 65 64 62 61 63 6b 2f 62 75 67 20  he feedback/bug 
0920: 72 65 70 6f 72 74 2e 0a 20 20 20 20 20 35 2f 32  report..     5/2
0930: 38 2f 31 31 20 76 31 2e 31 31 20 2d 20 41 64 64  8/11 v1.11 - Add
0940: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 66 72 6f  ed statement fro
0950: 6d 20 75 6e 6c 69 63 65 6e 73 65 2e 6f 72 67 0a  m unlicense.org.
0960: 20 20 20 20 20 35 2f 32 37 2f 31 31 20 76 31 2e       5/27/11 v1.
0970: 31 30 20 2d 20 53 75 62 73 74 61 6e 74 69 61 6c  10 - Substantial
0980: 20 63 6f 6d 70 72 65 73 73 6f 72 20 6f 70 74 69   compressor opti
0990: 6d 69 7a 61 74 69 6f 6e 73 3a 0a 20 20 20 20 20  mizations:.     
09a0: 20 4c 65 76 65 6c 20 31 20 69 73 20 6e 6f 77 20   Level 1 is now 
09b0: 7e 34 78 20 66 61 73 74 65 72 20 74 68 61 6e 20  ~4x faster than 
09c0: 62 65 66 6f 72 65 2e 20 54 68 65 20 4c 31 20 63  before. The L1 c
09d0: 6f 6d 70 72 65 73 73 6f 72 27 73 20 74 68 72 6f  ompressor's thro
09e0: 75 67 68 70 75 74 20 6e 6f 77 20 76 61 72 69 65  ughput now varie
09f0: 73 20 62 65 74 77 65 65 6e 20 37 30 2d 31 31 30  s between 70-110
0a00: 4d 42 2f 73 65 63 2e 20 6f 6e 20 61 0a 20 20 20  MB/sec. on a.   
0a10: 20 20 20 43 6f 72 65 20 69 37 20 28 61 63 74 75     Core i7 (actu
0a20: 61 6c 20 74 68 72 6f 75 67 68 70 75 74 20 76 61  al throughput va
0a30: 72 69 65 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  ries depending o
0a40: 6e 20 74 68 65 20 74 79 70 65 20 6f 66 20 64 61  n the type of da
0a50: 74 61 2c 20 61 6e 64 20 78 36 34 20 76 73 2e 20  ta, and x64 vs. 
0a60: 78 38 36 29 2e 0a 20 20 20 20 20 20 49 6d 70 72  x86)..      Impr
0a70: 6f 76 65 64 20 62 61 73 65 6c 69 6e 65 20 4c 32  oved baseline L2
0a80: 2d 4c 39 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  -L9 compression 
0a90: 70 65 72 66 2e 20 41 6c 73 6f 2c 20 67 72 65 61  perf. Also, grea
0aa0: 74 6c 79 20 69 6d 70 72 6f 76 65 64 20 63 6f 6d  tly improved com
0ab0: 70 72 65 73 73 69 6f 6e 20 70 65 72 66 2e 20 69  pression perf. i
0ac0: 73 73 75 65 73 20 6f 6e 20 73 6f 6d 65 20 66 69  ssues on some fi
0ad0: 6c 65 20 74 79 70 65 73 2e 0a 20 20 20 20 20 20  le types..      
0ae0: 52 65 66 61 63 74 6f 72 65 64 20 74 68 65 20 63  Refactored the c
0af0: 6f 6d 70 72 65 73 73 69 6f 6e 20 63 6f 64 65 20  ompression code 
0b00: 66 6f 72 20 62 65 74 74 65 72 20 72 65 61 64 61  for better reada
0b10: 62 69 6c 69 74 79 20 61 6e 64 20 6d 61 69 6e 74  bility and maint
0b20: 61 69 6e 61 62 69 6c 69 74 79 2e 0a 20 20 20 20  ainability..    
0b30: 20 20 41 64 64 65 64 20 6c 65 76 65 6c 20 31 30    Added level 10
0b40: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 6c 65 76   compression lev
0b50: 65 6c 20 28 4c 31 30 20 68 61 73 20 73 6c 69 67  el (L10 has slig
0b60: 68 74 6c 79 20 62 65 74 74 65 72 20 72 61 74 69  htly better rati
0b70: 6f 20 74 68 61 6e 20 6c 65 76 65 6c 20 39 2c 20  o than level 9, 
0b80: 62 75 74 20 63 6f 75 6c 64 20 68 61 76 65 20 61  but could have a
0b90: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 6c 61 72   potentially lar
0ba0: 67 65 0a 20 20 20 20 20 20 64 72 6f 70 20 69 6e  ge.      drop in
0bb0: 20 74 68 72 6f 75 67 68 70 75 74 20 6f 6e 20 73   throughput on s
0bc0: 6f 6d 65 20 66 69 6c 65 73 29 2e 0a 20 20 20 20  ome files)..    
0bd0: 20 35 2f 31 35 2f 31 31 20 76 31 2e 30 39 20 2d   5/15/11 v1.09 -
0be0: 20 49 6e 69 74 69 61 6c 20 73 74 61 62 6c 65 20   Initial stable 
0bf0: 72 65 6c 65 61 73 65 2e 0a 0a 20 20 20 2a 20 4c  release...   * L
0c00: 6f 77 2d 6c 65 76 65 6c 20 44 65 66 6c 61 74 65  ow-level Deflate
0c10: 2f 49 6e 66 6c 61 74 65 20 69 6d 70 6c 65 6d 65  /Inflate impleme
0c20: 6e 74 61 74 69 6f 6e 20 6e 6f 74 65 73 3a 0a 0a  ntation notes:..
0c30: 20 20 20 20 20 43 6f 6d 70 72 65 73 73 69 6f 6e       Compression
0c40: 3a 20 55 73 65 20 74 68 65 20 22 74 64 65 66 6c  : Use the "tdefl
0c50: 22 20 41 50 49 27 73 2e 20 54 68 65 20 63 6f 6d  " API's. The com
0c60: 70 72 65 73 73 6f 72 20 73 75 70 70 6f 72 74 73  pressor supports
0c70: 20 72 61 77 2c 20 73 74 61 74 69 63 2c 20 61 6e   raw, static, an
0c80: 64 20 64 79 6e 61 6d 69 63 20 62 6c 6f 63 6b 73  d dynamic blocks
0c90: 2c 20 6c 61 7a 79 20 6f 72 0a 20 20 20 20 20 67  , lazy or.     g
0ca0: 72 65 65 64 79 20 70 61 72 73 69 6e 67 2c 20 6d  reedy parsing, m
0cb0: 61 74 63 68 20 6c 65 6e 67 74 68 20 66 69 6c 74  atch length filt
0cc0: 65 72 69 6e 67 2c 20 52 4c 45 2d 6f 6e 6c 79 2c  ering, RLE-only,
0cd0: 20 61 6e 64 20 48 75 66 66 6d 61 6e 2d 6f 6e 6c   and Huffman-onl
0ce0: 79 20 73 74 72 65 61 6d 73 2e 20 49 74 20 70 65  y streams. It pe
0cf0: 72 66 6f 72 6d 73 20 61 6e 64 20 63 6f 6d 70 72  rforms and compr
0d00: 65 73 73 65 73 0a 20 20 20 20 20 61 70 70 72 6f  esses.     appro
0d10: 78 69 6d 61 74 65 6c 79 20 61 73 20 77 65 6c 6c  ximately as well
0d20: 20 61 73 20 7a 6c 69 62 2e 0a 0a 20 20 20 20 20   as zlib...     
0d30: 44 65 63 6f 6d 70 72 65 73 73 69 6f 6e 3a 20 55  Decompression: U
0d40: 73 65 20 74 68 65 20 22 74 69 6e 66 6c 22 20 41  se the "tinfl" A
0d50: 50 49 27 73 2e 20 54 68 65 20 65 6e 74 69 72 65  PI's. The entire
0d60: 20 64 65 63 6f 6d 70 72 65 73 73 6f 72 20 69 73   decompressor is
0d70: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   implemented as 
0d80: 61 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f  a single functio
0d90: 6e 0a 20 20 20 20 20 63 6f 72 6f 75 74 69 6e 65  n.     coroutine
0da0: 3a 20 73 65 65 20 74 69 6e 66 6c 5f 64 65 63 6f  : see tinfl_deco
0db0: 6d 70 72 65 73 73 28 29 2e 20 49 74 20 73 75 70  mpress(). It sup
0dc0: 70 6f 72 74 73 20 64 65 63 6f 6d 70 72 65 73 73  ports decompress
0dd0: 69 6f 6e 20 69 6e 74 6f 20 61 20 33 32 4b 42 20  ion into a 32KB 
0de0: 28 6f 72 20 6c 61 72 67 65 72 20 70 6f 77 65 72  (or larger power
0df0: 20 6f 66 20 32 29 20 77 72 61 70 70 69 6e 67 20   of 2) wrapping 
0e00: 62 75 66 66 65 72 2c 20 6f 72 20 69 6e 74 6f 20  buffer, or into 
0e10: 61 20 6d 65 6d 6f 72 79 0a 20 20 20 20 20 62 6c  a memory.     bl
0e20: 6f 63 6b 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ock large enough
0e30: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
0e40: 69 72 65 20 66 69 6c 65 2e 0a 0a 20 20 20 20 20  ire file...     
0e50: 54 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 74 64  The low-level td
0e60: 65 66 6c 2f 74 69 6e 66 6c 20 41 50 49 27 73 20  efl/tinfl API's 
0e70: 64 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  do not make any 
0e80: 75 73 65 20 6f 66 20 64 79 6e 61 6d 69 63 20 6d  use of dynamic m
0e90: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
0ea0: 2e 0a 0a 20 20 20 2a 20 49 6d 70 6f 72 74 61 6e  ...   * Importan
0eb0: 74 3a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66  t: For best perf
0ec0: 2e 20 62 65 20 73 75 72 65 20 74 6f 20 63 75 73  . be sure to cus
0ed0: 74 6f 6d 69 7a 65 20 74 68 65 20 62 65 6c 6f 77  tomize the below
0ee0: 20 6d 61 63 72 6f 73 20 66 6f 72 20 79 6f 75 72   macros for your
0ef0: 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d   target platform
0f00: 3a 0a 20 20 20 20 20 23 64 65 66 69 6e 65 20 4d  :.     #define M
0f10: 49 4e 49 5a 5f 55 53 45 5f 55 4e 41 4c 49 47 4e  INIZ_USE_UNALIGN
0f20: 45 44 5f 4c 4f 41 44 53 5f 41 4e 44 5f 53 54 4f  ED_LOADS_AND_STO
0f30: 52 45 53 20 31 0a 20 20 20 20 20 23 64 65 66 69  RES 1.     #defi
0f40: 6e 65 20 4d 49 4e 49 5a 5f 4c 49 54 54 4c 45 5f  ne MINIZ_LITTLE_
0f50: 45 4e 44 49 41 4e 20 31 0a 20 20 20 20 20 23 64  ENDIAN 1.     #d
0f60: 65 66 69 6e 65 20 4d 49 4e 49 5a 5f 48 41 53 5f  efine MINIZ_HAS_
0f70: 36 34 42 49 54 5f 52 45 47 49 53 54 45 52 53 20  64BIT_REGISTERS 
0f80: 31 0a 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4d 49  1.*/..#ifndef MI
0f90: 4e 49 5a 5f 48 45 41 44 45 52 5f 49 4e 43 4c 55  NIZ_HEADER_INCLU
0fa0: 44 45 44 0a 23 64 65 66 69 6e 65 20 4d 49 4e 49  DED.#define MINI
0fb0: 5a 5f 48 45 41 44 45 52 5f 49 4e 43 4c 55 44 45  Z_HEADER_INCLUDE
0fc0: 44 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  D..#include <std
0fd0: 6c 69 62 2e 68 3e 0a 0a 2f 2f 20 44 65 66 69 6e  lib.h>..// Defin
0fe0: 65 73 20 74 6f 20 63 6f 6d 70 6c 65 74 65 6c 79  es to completely
0ff0: 20 64 69 73 61 62 6c 65 20 73 70 65 63 69 66 69   disable specifi
1000: 63 20 70 6f 72 74 69 6f 6e 73 20 6f 66 20 6d 69  c portions of mi
1010: 6e 69 7a 2e 63 3a 0a 2f 2f 20 49 66 20 61 6c 6c  niz.c:.// If all
1020: 20 6d 61 63 72 6f 73 20 68 65 72 65 20 61 72 65   macros here are
1030: 20 64 65 66 69 6e 65 64 20 74 68 65 20 6f 6e 6c   defined the onl
1040: 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
1050: 72 65 6d 61 69 6e 69 6e 67 20 77 69 6c 6c 20 62  remaining will b
1060: 65 20 43 52 43 2d 33 32 2c 20 61 64 6c 65 72 2d  e CRC-32, adler-
1070: 33 32 2c 20 74 69 6e 66 6c 2c 20 61 6e 64 20 74  32, tinfl, and t
1080: 64 65 66 6c 2e 0a 0a 2f 2f 20 44 65 66 69 6e 65  defl...// Define
1090: 20 4d 49 4e 49 5a 5f 4e 4f 5f 4d 41 4c 4c 4f 43   MINIZ_NO_MALLOC
10a0: 20 74 6f 20 64 69 73 61 62 6c 65 20 61 6c 6c 20   to disable all 
10b0: 63 61 6c 6c 73 20 74 6f 20 6d 61 6c 6c 6f 63 2c  calls to malloc,
10c0: 20 66 72 65 65 2c 20 61 6e 64 20 72 65 61 6c 6c   free, and reall
10d0: 6f 63 2e 0a 2f 2f 20 4e 6f 74 65 20 69 66 20 4d  oc..// Note if M
10e0: 49 4e 49 5a 5f 4e 4f 5f 4d 41 4c 4c 4f 43 20 69  INIZ_NO_MALLOC i
10f0: 73 20 64 65 66 69 6e 65 64 20 74 68 65 6e 20 74  s defined then t
1100: 68 65 20 75 73 65 72 20 6d 75 73 74 20 61 6c 77  he user must alw
1110: 61 79 73 20 70 72 6f 76 69 64 65 20 63 75 73 74  ays provide cust
1120: 6f 6d 20 75 73 65 72 20 61 6c 6c 6f 63 2f 66 72  om user alloc/fr
1130: 65 65 2f 72 65 61 6c 6c 6f 63 0a 2f 2f 20 63 61  ee/realloc.// ca
1140: 6c 6c 62 61 63 6b 73 20 74 6f 20 74 68 65 20 7a  llbacks to the z
1150: 6c 69 62 20 61 6e 64 20 61 72 63 68 69 76 65 20  lib and archive 
1160: 41 50 49 27 73 2c 20 61 6e 64 20 61 20 66 65 77  API's, and a few
1170: 20 73 74 61 6e 64 2d 61 6c 6f 6e 65 20 68 65 6c   stand-alone hel
1180: 70 65 72 20 41 50 49 27 73 20 77 68 69 63 68 20  per API's which 
1190: 64 6f 6e 27 74 20 70 72 6f 76 69 64 65 20 63 75  don't provide cu
11a0: 73 74 6f 6d 20 75 73 65 72 0a 2f 2f 20 66 75 6e  stom user.// fun
11b0: 63 74 69 6f 6e 73 20 28 73 75 63 68 20 61 73 20  ctions (such as 
11c0: 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 6d  tdefl_compress_m
11d0: 65 6d 5f 74 6f 5f 68 65 61 70 28 29 20 61 6e 64  em_to_heap() and
11e0: 20 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73   tinfl_decompres
11f0: 73 5f 6d 65 6d 5f 74 6f 5f 68 65 61 70 28 29 29  s_mem_to_heap())
1200: 20 77 6f 6e 27 74 20 77 6f 72 6b 2e 0a 2f 2f 23   won't work..//#
1210: 64 65 66 69 6e 65 20 4d 49 4e 49 5a 5f 4e 4f 5f  define MINIZ_NO_
1220: 4d 41 4c 4c 4f 43 0a 0a 23 69 66 20 64 65 66 69  MALLOC..#if defi
1230: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
1240: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
1250: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
1260: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
1270: 5f 5f 69 33 38 36 29 20 7c 7c 20 64 65 66 69 6e  __i386) || defin
1280: 65 64 28 5f 5f 69 34 38 36 5f 5f 29 20 7c 7c 20  ed(__i486__) || 
1290: 64 65 66 69 6e 65 64 28 5f 5f 69 34 38 36 29 20  defined(__i486) 
12a0: 7c 7c 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  || defined(i386)
12b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61   || defined(__ia
12c0: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
12d0: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2f 20  (__x86_64__).// 
12e0: 4d 49 4e 49 5a 5f 58 38 36 5f 4f 52 5f 58 36 34  MINIZ_X86_OR_X64
12f0: 5f 43 50 55 20 69 73 20 6f 6e 6c 79 20 75 73 65  _CPU is only use
1300: 64 20 74 6f 20 68 65 6c 70 20 73 65 74 20 74 68  d to help set th
1310: 65 20 62 65 6c 6f 77 20 6d 61 63 72 6f 73 2e 0a  e below macros..
1320: 23 64 65 66 69 6e 65 20 4d 49 4e 49 5a 5f 58 38  #define MINIZ_X8
1330: 36 5f 4f 52 5f 58 36 34 5f 43 50 55 20 31 0a 23  6_OR_X64_CPU 1.#
1340: 65 6e 64 69 66 0a 0a 23 69 66 20 28 5f 5f 42 59  endif..#if (__BY
1350: 54 45 5f 4f 52 44 45 52 5f 5f 3d 3d 5f 5f 4f 52  TE_ORDER__==__OR
1360: 44 45 52 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41  DER_LITTLE_ENDIA
1370: 4e 5f 5f 29 20 7c 7c 20 4d 49 4e 49 5a 5f 58 38  N__) || MINIZ_X8
1380: 36 5f 4f 52 5f 58 36 34 5f 43 50 55 0a 2f 2f 20  6_OR_X64_CPU.// 
1390: 53 65 74 20 4d 49 4e 49 5a 5f 4c 49 54 54 4c 45  Set MINIZ_LITTLE
13a0: 5f 45 4e 44 49 41 4e 20 74 6f 20 31 20 69 66 20  _ENDIAN to 1 if 
13b0: 74 68 65 20 70 72 6f 63 65 73 73 6f 72 20 69 73  the processor is
13c0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2e 0a   little endian..
13d0: 23 64 65 66 69 6e 65 20 4d 49 4e 49 5a 5f 4c 49  #define MINIZ_LI
13e0: 54 54 4c 45 5f 45 4e 44 49 41 4e 20 31 0a 23 65  TTLE_ENDIAN 1.#e
13f0: 6e 64 69 66 0a 0a 23 69 66 20 4d 49 4e 49 5a 5f  ndif..#if MINIZ_
1400: 58 38 36 5f 4f 52 5f 58 36 34 5f 43 50 55 0a 2f  X86_OR_X64_CPU./
1410: 2f 20 53 65 74 20 4d 49 4e 49 5a 5f 55 53 45 5f  / Set MINIZ_USE_
1420: 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f 41 44 53 5f  UNALIGNED_LOADS_
1430: 41 4e 44 5f 53 54 4f 52 45 53 20 74 6f 20 31 20  AND_STORES to 1 
1440: 6f 6e 20 43 50 55 27 73 20 74 68 61 74 20 70 65  on CPU's that pe
1450: 72 6d 69 74 20 65 66 66 69 63 69 65 6e 74 20 69  rmit efficient i
1460: 6e 74 65 67 65 72 20 6c 6f 61 64 73 20 61 6e 64  nteger loads and
1470: 20 73 74 6f 72 65 73 20 66 72 6f 6d 20 75 6e 61   stores from una
1480: 6c 69 67 6e 65 64 20 61 64 64 72 65 73 73 65 73  ligned addresses
1490: 2e 0a 23 64 65 66 69 6e 65 20 4d 49 4e 49 5a 5f  ..#define MINIZ_
14a0: 55 53 45 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f  USE_UNALIGNED_LO
14b0: 41 44 53 5f 41 4e 44 5f 53 54 4f 52 45 53 20 30  ADS_AND_STORES 0
14c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
14d0: 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 7c 7c 20  ined(_M_X64) || 
14e0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20  defined(_WIN64) 
14f0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e  || defined(__MIN
1500: 47 57 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  GW64__) || defin
1510: 65 64 28 5f 4c 50 36 34 29 20 7c 7c 20 64 65 66  ed(_LP64) || def
1520: 69 6e 65 64 28 5f 5f 4c 50 36 34 5f 5f 29 20 7c  ined(__LP64__) |
1530: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 34  | defined(__ia64
1540: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
1550: 5f 78 38 36 5f 36 34 5f 5f 29 0a 2f 2f 20 53 65  _x86_64__).// Se
1560: 74 20 4d 49 4e 49 5a 5f 48 41 53 5f 36 34 42 49  t MINIZ_HAS_64BI
1570: 54 5f 52 45 47 49 53 54 45 52 53 20 74 6f 20 31  T_REGISTERS to 1
1580: 20 69 66 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f   if operations o
1590: 6e 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  n 64-bit integer
15a0: 73 20 61 72 65 20 72 65 61 73 6f 6e 61 62 6c 79  s are reasonably
15b0: 20 66 61 73 74 20 28 61 6e 64 20 64 6f 6e 27 74   fast (and don't
15c0: 20 69 6e 76 6f 6c 76 65 20 63 6f 6d 70 69 6c 65   involve compile
15d0: 72 20 67 65 6e 65 72 61 74 65 64 20 63 61 6c 6c  r generated call
15e0: 73 20 74 6f 20 68 65 6c 70 65 72 20 66 75 6e 63  s to helper func
15f0: 74 69 6f 6e 73 29 2e 0a 23 64 65 66 69 6e 65 20  tions)..#define 
1600: 4d 49 4e 49 5a 5f 48 41 53 5f 36 34 42 49 54 5f  MINIZ_HAS_64BIT_
1610: 52 45 47 49 53 54 45 52 53 20 31 0a 23 65 6e 64  REGISTERS 1.#end
1620: 69 66 0a 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c  if..#ifdef __cpl
1630: 75 73 70 6c 75 73 0a 65 78 74 65 72 6e 20 22 43  usplus.extern "C
1640: 22 20 7b 0a 23 65 6e 64 69 66 0a 0a 2f 2f 20 2d  " {.#endif..// -
1650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1660: 2d 2d 20 7a 6c 69 62 2d 73 74 79 6c 65 20 41 50  -- zlib-style AP
1670: 49 20 44 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 0a  I Definitions...
1680: 2f 2f 20 46 6f 72 20 6d 6f 72 65 20 63 6f 6d 70  // For more comp
1690: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 7a  atibility with z
16a0: 6c 69 62 2c 20 6d 69 6e 69 7a 2e 63 20 75 73 65  lib, miniz.c use
16b0: 73 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  s unsigned long 
16c0: 66 6f 72 20 73 6f 6d 65 20 70 61 72 61 6d 65 74  for some paramet
16d0: 65 72 73 2f 73 74 72 75 63 74 20 6d 65 6d 62 65  ers/struct membe
16e0: 72 73 2e 20 42 65 77 61 72 65 3a 20 6d 7a 5f 75  rs. Beware: mz_u
16f0: 6c 6f 6e 67 20 63 61 6e 20 62 65 20 65 69 74 68  long can be eith
1700: 65 72 20 33 32 20 6f 72 20 36 34 2d 62 69 74 73  er 32 or 64-bits
1710: 21 0a 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e  !.typedef unsign
1720: 65 64 20 6c 6f 6e 67 20 6d 7a 5f 75 6c 6f 6e 67  ed long mz_ulong
1730: 3b 0a 0a 2f 2f 20 6d 7a 5f 66 72 65 65 28 29 20  ;..// mz_free() 
1740: 69 6e 74 65 72 6e 61 6c 6c 79 20 75 73 65 73 20  internally uses 
1750: 74 68 65 20 4d 5a 5f 46 52 45 45 28 29 20 6d 61  the MZ_FREE() ma
1760: 63 72 6f 20 28 77 68 69 63 68 20 62 79 20 64 65  cro (which by de
1770: 66 61 75 6c 74 20 63 61 6c 6c 73 20 66 72 65 65  fault calls free
1780: 28 29 20 75 6e 6c 65 73 73 20 79 6f 75 27 76 65  () unless you've
1790: 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 4d 5a   modified the MZ
17a0: 5f 4d 41 4c 4c 4f 43 20 6d 61 63 72 6f 29 20 74  _MALLOC macro) t
17b0: 6f 20 72 65 6c 65 61 73 65 20 61 20 62 6c 6f 63  o release a bloc
17c0: 6b 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  k allocated from
17d0: 20 74 68 65 20 68 65 61 70 2e 0a 76 6f 69 64 20   the heap..void 
17e0: 6d 7a 5f 66 72 65 65 28 76 6f 69 64 20 2a 70 29  mz_free(void *p)
17f0: 3b 0a 0a 23 64 65 66 69 6e 65 20 4d 5a 5f 41 44  ;..#define MZ_AD
1800: 4c 45 52 33 32 5f 49 4e 49 54 20 28 31 29 0a 2f  LER32_INIT (1)./
1810: 2f 20 6d 7a 5f 61 64 6c 65 72 33 32 28 29 20 72  / mz_adler32() r
1820: 65 74 75 72 6e 73 20 74 68 65 20 69 6e 69 74 69  eturns the initi
1830: 61 6c 20 61 64 6c 65 72 2d 33 32 20 76 61 6c 75  al adler-32 valu
1840: 65 20 74 6f 20 75 73 65 20 77 68 65 6e 20 63 61  e to use when ca
1850: 6c 6c 65 64 20 77 69 74 68 20 70 74 72 3d 3d 4e  lled with ptr==N
1860: 55 4c 4c 2e 0a 6d 7a 5f 75 6c 6f 6e 67 20 6d 7a  ULL..mz_ulong mz
1870: 5f 61 64 6c 65 72 33 32 28 6d 7a 5f 75 6c 6f 6e  _adler32(mz_ulon
1880: 67 20 61 64 6c 65 72 2c 20 63 6f 6e 73 74 20 75  g adler, const u
1890: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 74  nsigned char *pt
18a0: 72 2c 20 73 69 7a 65 5f 74 20 62 75 66 5f 6c 65  r, size_t buf_le
18b0: 6e 29 3b 0a 0a 23 64 65 66 69 6e 65 20 4d 5a 5f  n);..#define MZ_
18c0: 43 52 43 33 32 5f 49 4e 49 54 20 28 30 29 0a 2f  CRC32_INIT (0)./
18d0: 2f 20 6d 7a 5f 63 72 63 33 32 28 29 20 72 65 74  / mz_crc32() ret
18e0: 75 72 6e 73 20 74 68 65 20 69 6e 69 74 69 61 6c  urns the initial
18f0: 20 43 52 43 2d 33 32 20 76 61 6c 75 65 20 74 6f   CRC-32 value to
1900: 20 75 73 65 20 77 68 65 6e 20 63 61 6c 6c 65 64   use when called
1910: 20 77 69 74 68 20 70 74 72 3d 3d 4e 55 4c 4c 2e   with ptr==NULL.
1920: 0a 6d 7a 5f 75 6c 6f 6e 67 20 6d 7a 5f 63 72 63  .mz_ulong mz_crc
1930: 33 32 28 6d 7a 5f 75 6c 6f 6e 67 20 63 72 63 2c  32(mz_ulong crc,
1940: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1950: 63 68 61 72 20 2a 70 74 72 2c 20 73 69 7a 65 5f  char *ptr, size_
1960: 74 20 62 75 66 5f 6c 65 6e 29 3b 0a 0a 2f 2f 20  t buf_len);..// 
1970: 43 6f 6d 70 72 65 73 73 69 6f 6e 20 73 74 72 61  Compression stra
1980: 74 65 67 69 65 73 2e 0a 65 6e 75 6d 20 7b 20 4d  tegies..enum { M
1990: 5a 5f 44 45 46 41 55 4c 54 5f 53 54 52 41 54 45  Z_DEFAULT_STRATE
19a0: 47 59 20 3d 20 30 2c 20 4d 5a 5f 46 49 4c 54 45  GY = 0, MZ_FILTE
19b0: 52 45 44 20 3d 20 31 2c 20 4d 5a 5f 48 55 46 46  RED = 1, MZ_HUFF
19c0: 4d 41 4e 5f 4f 4e 4c 59 20 3d 20 32 2c 20 4d 5a  MAN_ONLY = 2, MZ
19d0: 5f 52 4c 45 20 3d 20 33 2c 20 4d 5a 5f 46 49 58  _RLE = 3, MZ_FIX
19e0: 45 44 20 3d 20 34 20 7d 3b 0a 0a 2f 2f 20 4d 65  ED = 4 };..// Me
19f0: 74 68 6f 64 0a 23 64 65 66 69 6e 65 20 4d 5a 5f  thod.#define MZ_
1a00: 44 45 46 4c 41 54 45 44 20 38 0a 0a 2f 2f 20 2d  DEFLATED 8..// -
1a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a20: 2d 2d 20 54 79 70 65 73 20 61 6e 64 20 6d 61 63  -- Types and mac
1a30: 72 6f 73 0a 0a 74 79 70 65 64 65 66 20 75 6e 73  ros..typedef uns
1a40: 69 67 6e 65 64 20 63 68 61 72 20 6d 7a 5f 75 69  igned char mz_ui
1a50: 6e 74 38 3b 0a 74 79 70 65 64 65 66 20 73 69 67  nt8;.typedef sig
1a60: 6e 65 64 20 73 68 6f 72 74 20 6d 7a 5f 69 6e 74  ned short mz_int
1a70: 31 36 3b 0a 74 79 70 65 64 65 66 20 75 6e 73 69  16;.typedef unsi
1a80: 67 6e 65 64 20 73 68 6f 72 74 20 6d 7a 5f 75 69  gned short mz_ui
1a90: 6e 74 31 36 3b 0a 74 79 70 65 64 65 66 20 75 6e  nt16;.typedef un
1aa0: 73 69 67 6e 65 64 20 69 6e 74 20 6d 7a 5f 75 69  signed int mz_ui
1ab0: 6e 74 33 32 3b 0a 74 79 70 65 64 65 66 20 75 6e  nt32;.typedef un
1ac0: 73 69 67 6e 65 64 20 69 6e 74 20 6d 7a 5f 75 69  signed int mz_ui
1ad0: 6e 74 3b 0a 74 79 70 65 64 65 66 20 6c 6f 6e 67  nt;.typedef long
1ae0: 20 6c 6f 6e 67 20 6d 7a 5f 69 6e 74 36 34 3b 0a   long mz_int64;.
1af0: 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
1b00: 20 6c 6f 6e 67 20 6c 6f 6e 67 20 6d 7a 5f 75 69   long long mz_ui
1b10: 6e 74 36 34 3b 0a 74 79 70 65 64 65 66 20 69 6e  nt64;.typedef in
1b20: 74 20 6d 7a 5f 62 6f 6f 6c 3b 0a 0a 23 64 65 66  t mz_bool;..#def
1b30: 69 6e 65 20 4d 5a 5f 46 41 4c 53 45 20 28 30 29  ine MZ_FALSE (0)
1b40: 0a 23 64 65 66 69 6e 65 20 4d 5a 5f 54 52 55 45  .#define MZ_TRUE
1b50: 20 28 31 29 0a 0a 2f 2f 20 57 6f 72 6b 73 20 61   (1)..// Works a
1b60: 72 6f 75 6e 64 20 4d 53 56 43 27 73 20 73 70 61  round MSVC's spa
1b70: 6d 6d 79 20 22 77 61 72 6e 69 6e 67 20 43 34 31  mmy "warning C41
1b80: 32 37 3a 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  27: conditional 
1b90: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
1ba0: 6e 73 74 61 6e 74 22 20 6d 65 73 73 61 67 65 2e  nstant" message.
1bb0: 0a 23 69 66 64 65 66 20 5f 4d 53 43 5f 56 45 52  .#ifdef _MSC_VER
1bc0: 0a 20 20 20 23 64 65 66 69 6e 65 20 4d 5a 5f 4d  .   #define MZ_M
1bd0: 41 43 52 4f 5f 45 4e 44 20 77 68 69 6c 65 20 28  ACRO_END while (
1be0: 30 2c 20 30 29 0a 23 65 6c 73 65 0a 20 20 20 23  0, 0).#else.   #
1bf0: 64 65 66 69 6e 65 20 4d 5a 5f 4d 41 43 52 4f 5f  define MZ_MACRO_
1c00: 45 4e 44 20 77 68 69 6c 65 20 28 30 29 0a 23 65  END while (0).#e
1c10: 6e 64 69 66 0a 0a 2f 2f 20 2d 2d 2d 2d 2d 2d 2d  ndif..// -------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 4c 6f 77  ------------ Low
1c30: 2d 6c 65 76 65 6c 20 44 65 63 6f 6d 70 72 65 73  -level Decompres
1c40: 73 69 6f 6e 20 41 50 49 20 44 65 66 69 6e 69 74  sion API Definit
1c50: 69 6f 6e 73 0a 0a 2f 2f 20 44 65 63 6f 6d 70 72  ions..// Decompr
1c60: 65 73 73 69 6f 6e 20 66 6c 61 67 73 20 75 73 65  ession flags use
1c70: 64 20 62 79 20 74 69 6e 66 6c 5f 64 65 63 6f 6d  d by tinfl_decom
1c80: 70 72 65 73 73 28 29 2e 0a 2f 2f 20 54 49 4e 46  press()..// TINF
1c90: 4c 5f 46 4c 41 47 5f 50 41 52 53 45 5f 5a 4c 49  L_FLAG_PARSE_ZLI
1ca0: 42 5f 48 45 41 44 45 52 3a 20 49 66 20 73 65 74  B_HEADER: If set
1cb0: 2c 20 74 68 65 20 69 6e 70 75 74 20 68 61 73 20  , the input has 
1cc0: 61 20 76 61 6c 69 64 20 7a 6c 69 62 20 68 65 61  a valid zlib hea
1cd0: 64 65 72 20 61 6e 64 20 65 6e 64 73 20 77 69 74  der and ends wit
1ce0: 68 20 61 6e 20 61 64 6c 65 72 33 32 20 63 68 65  h an adler32 che
1cf0: 63 6b 73 75 6d 20 28 69 74 27 73 20 61 20 76 61  cksum (it's a va
1d00: 6c 69 64 20 7a 6c 69 62 20 73 74 72 65 61 6d 29  lid zlib stream)
1d10: 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
1d20: 20 69 6e 70 75 74 20 69 73 20 61 20 72 61 77 20   input is a raw 
1d30: 64 65 66 6c 61 74 65 20 73 74 72 65 61 6d 2e 0a  deflate stream..
1d40: 2f 2f 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 48 41  // TINFL_FLAG_HA
1d50: 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 3a 20 49 66  S_MORE_INPUT: If
1d60: 20 73 65 74 2c 20 74 68 65 72 65 20 61 72 65 20   set, there are 
1d70: 6d 6f 72 65 20 69 6e 70 75 74 20 62 79 74 65 73  more input bytes
1d80: 20 61 76 61 69 6c 61 62 6c 65 20 62 65 79 6f 6e   available beyon
1d90: 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
1da0: 20 73 75 70 70 6c 69 65 64 20 69 6e 70 75 74 20   supplied input 
1db0: 62 75 66 66 65 72 2e 20 49 66 20 63 6c 65 61 72  buffer. If clear
1dc0: 2c 20 74 68 65 20 69 6e 70 75 74 20 62 75 66 66  , the input buff
1dd0: 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  er contains all 
1de0: 72 65 6d 61 69 6e 69 6e 67 20 69 6e 70 75 74 2e  remaining input.
1df0: 0a 2f 2f 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 55  .// TINFL_FLAG_U
1e00: 53 49 4e 47 5f 4e 4f 4e 5f 57 52 41 50 50 49 4e  SING_NON_WRAPPIN
1e10: 47 5f 4f 55 54 50 55 54 5f 42 55 46 3a 20 49 66  G_OUTPUT_BUF: If
1e20: 20 73 65 74 2c 20 74 68 65 20 6f 75 74 70 75 74   set, the output
1e30: 20 62 75 66 66 65 72 20 69 73 20 6c 61 72 67 65   buffer is large
1e40: 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20   enough to hold 
1e50: 74 68 65 20 65 6e 74 69 72 65 20 64 65 63 6f 6d  the entire decom
1e60: 70 72 65 73 73 65 64 20 73 74 72 65 61 6d 2e 20  pressed stream. 
1e70: 49 66 20 63 6c 65 61 72 2c 20 74 68 65 20 6f 75  If clear, the ou
1e80: 74 70 75 74 20 62 75 66 66 65 72 20 69 73 20 61  tput buffer is a
1e90: 74 20 6c 65 61 73 74 20 74 68 65 20 73 69 7a 65  t least the size
1ea0: 20 6f 66 20 74 68 65 20 64 69 63 74 69 6f 6e 61   of the dictiona
1eb0: 72 79 20 28 74 79 70 69 63 61 6c 6c 79 20 33 32  ry (typically 32
1ec0: 4b 42 29 2e 0a 2f 2f 20 54 49 4e 46 4c 5f 46 4c  KB)..// TINFL_FL
1ed0: 41 47 5f 43 4f 4d 50 55 54 45 5f 41 44 4c 45 52  AG_COMPUTE_ADLER
1ee0: 33 32 3a 20 46 6f 72 63 65 20 61 64 6c 65 72 2d  32: Force adler-
1ef0: 33 32 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70  32 checksum comp
1f00: 75 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  utation of the d
1f10: 65 63 6f 6d 70 72 65 73 73 65 64 20 62 79 74 65  ecompressed byte
1f20: 73 2e 0a 65 6e 75 6d 0a 7b 0a 20 20 54 49 4e 46  s..enum.{.  TINF
1f30: 4c 5f 46 4c 41 47 5f 50 41 52 53 45 5f 5a 4c 49  L_FLAG_PARSE_ZLI
1f40: 42 5f 48 45 41 44 45 52 20 3d 20 31 2c 0a 20 20  B_HEADER = 1,.  
1f50: 54 49 4e 46 4c 5f 46 4c 41 47 5f 48 41 53 5f 4d  TINFL_FLAG_HAS_M
1f60: 4f 52 45 5f 49 4e 50 55 54 20 3d 20 32 2c 0a 20  ORE_INPUT = 2,. 
1f70: 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 55 53 49 4e   TINFL_FLAG_USIN
1f80: 47 5f 4e 4f 4e 5f 57 52 41 50 50 49 4e 47 5f 4f  G_NON_WRAPPING_O
1f90: 55 54 50 55 54 5f 42 55 46 20 3d 20 34 2c 0a 20  UTPUT_BUF = 4,. 
1fa0: 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 43 4f 4d 50   TINFL_FLAG_COMP
1fb0: 55 54 45 5f 41 44 4c 45 52 33 32 20 3d 20 38 0a  UTE_ADLER32 = 8.
1fc0: 7d 3b 0a 0a 2f 2f 20 48 69 67 68 20 6c 65 76 65  };..// High leve
1fd0: 6c 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 20  l decompression 
1fe0: 66 75 6e 63 74 69 6f 6e 73 3a 0a 2f 2f 20 74 69  functions:.// ti
1ff0: 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 5f 6d  nfl_decompress_m
2000: 65 6d 5f 74 6f 5f 68 65 61 70 28 29 20 64 65 63  em_to_heap() dec
2010: 6f 6d 70 72 65 73 73 65 73 20 61 20 62 6c 6f 63  ompresses a bloc
2020: 6b 20 69 6e 20 6d 65 6d 6f 72 79 20 74 6f 20 61  k in memory to a
2030: 20 68 65 61 70 20 62 6c 6f 63 6b 20 61 6c 6c 6f   heap block allo
2040: 63 61 74 65 64 20 76 69 61 20 6d 61 6c 6c 6f 63  cated via malloc
2050: 28 29 2e 0a 2f 2f 20 4f 6e 20 65 6e 74 72 79 3a  ()..// On entry:
2060: 0a 2f 2f 20 20 70 53 72 63 5f 62 75 66 2c 20 73  .//  pSrc_buf, s
2070: 72 63 5f 62 75 66 5f 6c 65 6e 3a 20 50 6f 69 6e  rc_buf_len: Poin
2080: 74 65 72 20 61 6e 64 20 73 69 7a 65 20 6f 66 20  ter and size of 
2090: 74 68 65 20 44 65 66 6c 61 74 65 20 6f 72 20 7a  the Deflate or z
20a0: 6c 69 62 20 73 6f 75 72 63 65 20 64 61 74 61 20  lib source data 
20b0: 74 6f 20 64 65 63 6f 6d 70 72 65 73 73 2e 0a 2f  to decompress../
20c0: 2f 20 4f 6e 20 72 65 74 75 72 6e 3a 0a 2f 2f 20  / On return:.// 
20d0: 20 46 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   Function return
20e0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
20f0: 68 65 20 64 65 63 6f 6d 70 72 65 73 73 65 64 20  he decompressed 
2100: 64 61 74 61 2c 20 6f 72 20 4e 55 4c 4c 20 6f 6e  data, or NULL on
2110: 20 66 61 69 6c 75 72 65 2e 0a 2f 2f 20 20 2a 70   failure..//  *p
2120: 4f 75 74 5f 6c 65 6e 20 77 69 6c 6c 20 62 65 20  Out_len will be 
2130: 73 65 74 20 74 6f 20 74 68 65 20 64 65 63 6f 6d  set to the decom
2140: 70 72 65 73 73 65 64 20 64 61 74 61 27 73 20 73  pressed data's s
2150: 69 7a 65 2c 20 77 68 69 63 68 20 63 6f 75 6c 64  ize, which could
2160: 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20   be larger than 
2170: 73 72 63 5f 62 75 66 5f 6c 65 6e 20 6f 6e 20 75  src_buf_len on u
2180: 6e 63 6f 6d 70 72 65 73 73 69 62 6c 65 20 64 61  ncompressible da
2190: 74 61 2e 0a 2f 2f 20 20 54 68 65 20 63 61 6c 6c  ta..//  The call
21a0: 65 72 20 6d 75 73 74 20 63 61 6c 6c 20 6d 7a 5f  er must call mz_
21b0: 66 72 65 65 28 29 20 6f 6e 20 74 68 65 20 72 65  free() on the re
21c0: 74 75 72 6e 65 64 20 62 6c 6f 63 6b 20 77 68 65  turned block whe
21d0: 6e 20 69 74 27 73 20 6e 6f 20 6c 6f 6e 67 65 72  n it's no longer
21e0: 20 6e 65 65 64 65 64 2e 0a 76 6f 69 64 20 2a 74   needed..void *t
21f0: 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 5f  infl_decompress_
2200: 6d 65 6d 5f 74 6f 5f 68 65 61 70 28 63 6f 6e 73  mem_to_heap(cons
2210: 74 20 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66  t void *pSrc_buf
2220: 2c 20 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66  , size_t src_buf
2230: 5f 6c 65 6e 2c 20 73 69 7a 65 5f 74 20 2a 70 4f  _len, size_t *pO
2240: 75 74 5f 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67  ut_len, int flag
2250: 73 29 3b 0a 0a 2f 2f 20 74 69 6e 66 6c 5f 64 65  s);..// tinfl_de
2260: 63 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f  compress_mem_to_
2270: 6d 65 6d 28 29 20 64 65 63 6f 6d 70 72 65 73 73  mem() decompress
2280: 65 73 20 61 20 62 6c 6f 63 6b 20 69 6e 20 6d 65  es a block in me
2290: 6d 6f 72 79 20 74 6f 20 61 6e 6f 74 68 65 72 20  mory to another 
22a0: 62 6c 6f 63 6b 20 69 6e 20 6d 65 6d 6f 72 79 2e  block in memory.
22b0: 0a 2f 2f 20 52 65 74 75 72 6e 73 20 54 49 4e 46  .// Returns TINF
22c0: 4c 5f 44 45 43 4f 4d 50 52 45 53 53 5f 4d 45 4d  L_DECOMPRESS_MEM
22d0: 5f 54 4f 5f 4d 45 4d 5f 46 41 49 4c 45 44 20 6f  _TO_MEM_FAILED o
22e0: 6e 20 66 61 69 6c 75 72 65 2c 20 6f 72 20 74 68  n failure, or th
22f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
2300: 73 20 77 72 69 74 74 65 6e 20 6f 6e 20 73 75 63  s written on suc
2310: 63 65 73 73 2e 0a 23 64 65 66 69 6e 65 20 54 49  cess..#define TI
2320: 4e 46 4c 5f 44 45 43 4f 4d 50 52 45 53 53 5f 4d  NFL_DECOMPRESS_M
2330: 45 4d 5f 54 4f 5f 4d 45 4d 5f 46 41 49 4c 45 44  EM_TO_MEM_FAILED
2340: 20 28 28 73 69 7a 65 5f 74 29 28 2d 31 29 29 0a   ((size_t)(-1)).
2350: 73 69 7a 65 5f 74 20 74 69 6e 66 6c 5f 64 65 63  size_t tinfl_dec
2360: 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 6d  ompress_mem_to_m
2370: 65 6d 28 76 6f 69 64 20 2a 70 4f 75 74 5f 62 75  em(void *pOut_bu
2380: 66 2c 20 73 69 7a 65 5f 74 20 6f 75 74 5f 62 75  f, size_t out_bu
2390: 66 5f 6c 65 6e 2c 20 63 6f 6e 73 74 20 76 6f 69  f_len, const voi
23a0: 64 20 2a 70 53 72 63 5f 62 75 66 2c 20 73 69 7a  d *pSrc_buf, siz
23b0: 65 5f 74 20 73 72 63 5f 62 75 66 5f 6c 65 6e 2c  e_t src_buf_len,
23c0: 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 0a 2f 2f   int flags);..//
23d0: 20 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73   tinfl_decompres
23e0: 73 5f 6d 65 6d 5f 74 6f 5f 63 61 6c 6c 62 61 63  s_mem_to_callbac
23f0: 6b 28 29 20 64 65 63 6f 6d 70 72 65 73 73 65 73  k() decompresses
2400: 20 61 20 62 6c 6f 63 6b 20 69 6e 20 6d 65 6d 6f   a block in memo
2410: 72 79 20 74 6f 20 61 6e 20 69 6e 74 65 72 6e 61  ry to an interna
2420: 6c 20 33 32 4b 42 20 62 75 66 66 65 72 2c 20 61  l 32KB buffer, a
2430: 6e 64 20 61 20 75 73 65 72 20 70 72 6f 76 69 64  nd a user provid
2440: 65 64 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ed callback func
2450: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 63 61 6c  tion will be cal
2460: 6c 65 64 20 74 6f 20 66 6c 75 73 68 20 74 68 65  led to flush the
2470: 20 62 75 66 66 65 72 2e 0a 2f 2f 20 52 65 74 75   buffer..// Retu
2480: 72 6e 73 20 31 20 6f 6e 20 73 75 63 63 65 73 73  rns 1 on success
2490: 20 6f 72 20 30 20 6f 6e 20 66 61 69 6c 75 72 65   or 0 on failure
24a0: 2e 0a 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a  ..typedef int (*
24b0: 74 69 6e 66 6c 5f 70 75 74 5f 62 75 66 5f 66 75  tinfl_put_buf_fu
24c0: 6e 63 5f 70 74 72 29 28 63 6f 6e 73 74 20 76 6f  nc_ptr)(const vo
24d0: 69 64 2a 20 70 42 75 66 2c 20 69 6e 74 20 6c 65  id* pBuf, int le
24e0: 6e 2c 20 76 6f 69 64 20 2a 70 55 73 65 72 29 3b  n, void *pUser);
24f0: 0a 69 6e 74 20 74 69 6e 66 6c 5f 64 65 63 6f 6d  .int tinfl_decom
2500: 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 63 61 6c  press_mem_to_cal
2510: 6c 62 61 63 6b 28 63 6f 6e 73 74 20 76 6f 69 64  lback(const void
2520: 20 2a 70 49 6e 5f 62 75 66 2c 20 73 69 7a 65 5f   *pIn_buf, size_
2530: 74 20 2a 70 49 6e 5f 62 75 66 5f 73 69 7a 65 2c  t *pIn_buf_size,
2540: 20 74 69 6e 66 6c 5f 70 75 74 5f 62 75 66 5f 66   tinfl_put_buf_f
2550: 75 6e 63 5f 70 74 72 20 70 50 75 74 5f 62 75 66  unc_ptr pPut_buf
2560: 5f 66 75 6e 63 2c 20 76 6f 69 64 20 2a 70 50 75  _func, void *pPu
2570: 74 5f 62 75 66 5f 75 73 65 72 2c 20 69 6e 74 20  t_buf_user, int 
2580: 66 6c 61 67 73 29 3b 0a 0a 73 74 72 75 63 74 20  flags);..struct 
2590: 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73  tinfl_decompress
25a0: 6f 72 5f 74 61 67 3b 20 74 79 70 65 64 65 66 20  or_tag; typedef 
25b0: 73 74 72 75 63 74 20 74 69 6e 66 6c 5f 64 65 63  struct tinfl_dec
25c0: 6f 6d 70 72 65 73 73 6f 72 5f 74 61 67 20 74 69  ompressor_tag ti
25d0: 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 6f 72  nfl_decompressor
25e0: 3b 0a 0a 2f 2f 20 4d 61 78 20 73 69 7a 65 20 6f  ;..// Max size o
25f0: 66 20 4c 5a 20 64 69 63 74 69 6f 6e 61 72 79 2e  f LZ dictionary.
2600: 0a 23 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 4c  .#define TINFL_L
2610: 5a 5f 44 49 43 54 5f 53 49 5a 45 20 33 32 37 36  Z_DICT_SIZE 3276
2620: 38 0a 0a 2f 2f 20 52 65 74 75 72 6e 20 73 74 61  8..// Return sta
2630: 74 75 73 2e 0a 74 79 70 65 64 65 66 20 65 6e 75  tus..typedef enu
2640: 6d 0a 7b 0a 20 20 54 49 4e 46 4c 5f 53 54 41 54  m.{.  TINFL_STAT
2650: 55 53 5f 42 41 44 5f 50 41 52 41 4d 20 3d 20 2d  US_BAD_PARAM = -
2660: 33 2c 0a 20 20 54 49 4e 46 4c 5f 53 54 41 54 55  3,.  TINFL_STATU
2670: 53 5f 41 44 4c 45 52 33 32 5f 4d 49 53 4d 41 54  S_ADLER32_MISMAT
2680: 43 48 20 3d 20 2d 32 2c 0a 20 20 54 49 4e 46 4c  CH = -2,.  TINFL
2690: 5f 53 54 41 54 55 53 5f 46 41 49 4c 45 44 20 3d  _STATUS_FAILED =
26a0: 20 2d 31 2c 0a 20 20 54 49 4e 46 4c 5f 53 54 41   -1,.  TINFL_STA
26b0: 54 55 53 5f 44 4f 4e 45 20 3d 20 30 2c 0a 20 20  TUS_DONE = 0,.  
26c0: 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 4e 45 45  TINFL_STATUS_NEE
26d0: 44 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 20 3d 20  DS_MORE_INPUT = 
26e0: 31 2c 0a 20 20 54 49 4e 46 4c 5f 53 54 41 54 55  1,.  TINFL_STATU
26f0: 53 5f 48 41 53 5f 4d 4f 52 45 5f 4f 55 54 50 55  S_HAS_MORE_OUTPU
2700: 54 20 3d 20 32 0a 7d 20 74 69 6e 66 6c 5f 73 74  T = 2.} tinfl_st
2710: 61 74 75 73 3b 0a 0a 2f 2f 20 49 6e 69 74 69 61  atus;..// Initia
2720: 6c 69 7a 65 73 20 74 68 65 20 64 65 63 6f 6d 70  lizes the decomp
2730: 72 65 73 73 6f 72 20 74 6f 20 69 74 73 20 69 6e  ressor to its in
2740: 69 74 69 61 6c 20 73 74 61 74 65 2e 0a 23 64 65  itial state..#de
2750: 66 69 6e 65 20 74 69 6e 66 6c 5f 69 6e 69 74 28  fine tinfl_init(
2760: 72 29 20 64 6f 20 7b 20 28 72 29 2d 3e 6d 5f 73  r) do { (r)->m_s
2770: 74 61 74 65 20 3d 20 30 3b 20 7d 20 4d 5a 5f 4d  tate = 0; } MZ_M
2780: 41 43 52 4f 5f 45 4e 44 0a 23 64 65 66 69 6e 65  ACRO_END.#define
2790: 20 74 69 6e 66 6c 5f 67 65 74 5f 61 64 6c 65 72   tinfl_get_adler
27a0: 33 32 28 72 29 20 28 72 29 2d 3e 6d 5f 63 68 65  32(r) (r)->m_che
27b0: 63 6b 5f 61 64 6c 65 72 33 32 0a 0a 2f 2f 20 4d  ck_adler32..// M
27c0: 61 69 6e 20 6c 6f 77 2d 6c 65 76 65 6c 20 64 65  ain low-level de
27d0: 63 6f 6d 70 72 65 73 73 6f 72 20 63 6f 72 6f 75  compressor corou
27e0: 74 69 6e 65 20 66 75 6e 63 74 69 6f 6e 2e 20 54  tine function. T
27f0: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
2800: 66 75 6e 63 74 69 6f 6e 20 61 63 74 75 61 6c 6c  function actuall
2810: 79 20 6e 65 65 64 65 64 20 66 6f 72 20 64 65 63  y needed for dec
2820: 6f 6d 70 72 65 73 73 69 6f 6e 2e 20 41 6c 6c 20  ompression. All 
2830: 74 68 65 20 6f 74 68 65 72 20 66 75 6e 63 74 69  the other functi
2840: 6f 6e 73 20 61 72 65 20 6a 75 73 74 20 68 69 67  ons are just hig
2850: 68 2d 6c 65 76 65 6c 20 68 65 6c 70 65 72 73 20  h-level helpers 
2860: 66 6f 72 20 69 6d 70 72 6f 76 65 64 20 75 73 61  for improved usa
2870: 62 69 6c 69 74 79 2e 0a 2f 2f 20 54 68 69 73 20  bility..// This 
2880: 69 73 20 61 20 75 6e 69 76 65 72 73 61 6c 20 41  is a universal A
2890: 50 49 2c 20 69 2e 65 2e 20 69 74 20 63 61 6e 20  PI, i.e. it can 
28a0: 62 65 20 75 73 65 64 20 61 73 20 61 20 62 75 69  be used as a bui
28b0: 6c 64 69 6e 67 20 62 6c 6f 63 6b 20 74 6f 20 62  lding block to b
28c0: 75 69 6c 64 20 61 6e 79 20 64 65 73 69 72 65 64  uild any desired
28d0: 20 68 69 67 68 65 72 20 6c 65 76 65 6c 20 64 65   higher level de
28e0: 63 6f 6d 70 72 65 73 73 69 6f 6e 20 41 50 49 2e  compression API.
28f0: 20 49 6e 20 74 68 65 20 6c 69 6d 69 74 20 63 61   In the limit ca
2900: 73 65 2c 20 69 74 20 63 61 6e 20 62 65 20 63 61  se, it can be ca
2910: 6c 6c 65 64 20 6f 6e 63 65 20 70 65 72 20 65 76  lled once per ev
2920: 65 72 79 20 62 79 74 65 20 69 6e 70 75 74 20 6f  ery byte input o
2930: 72 20 6f 75 74 70 75 74 2e 0a 74 69 6e 66 6c 5f  r output..tinfl_
2940: 73 74 61 74 75 73 20 74 69 6e 66 6c 5f 64 65 63  status tinfl_dec
2950: 6f 6d 70 72 65 73 73 28 74 69 6e 66 6c 5f 64 65  ompress(tinfl_de
2960: 63 6f 6d 70 72 65 73 73 6f 72 20 2a 72 2c 20 63  compressor *r, c
2970: 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  onst mz_uint8 *p
2980: 49 6e 5f 62 75 66 5f 6e 65 78 74 2c 20 73 69 7a  In_buf_next, siz
2990: 65 5f 74 20 2a 70 49 6e 5f 62 75 66 5f 73 69 7a  e_t *pIn_buf_siz
29a0: 65 2c 20 6d 7a 5f 75 69 6e 74 38 20 2a 70 4f 75  e, mz_uint8 *pOu
29b0: 74 5f 62 75 66 5f 73 74 61 72 74 2c 20 6d 7a 5f  t_buf_start, mz_
29c0: 75 69 6e 74 38 20 2a 70 4f 75 74 5f 62 75 66 5f  uint8 *pOut_buf_
29d0: 6e 65 78 74 2c 20 73 69 7a 65 5f 74 20 2a 70 4f  next, size_t *pO
29e0: 75 74 5f 62 75 66 5f 73 69 7a 65 2c 20 63 6f 6e  ut_buf_size, con
29f0: 73 74 20 6d 7a 5f 75 69 6e 74 33 32 20 64 65 63  st mz_uint32 dec
2a00: 6f 6d 70 5f 66 6c 61 67 73 29 3b 0a 0a 2f 2f 20  omp_flags);..// 
2a10: 49 6e 74 65 72 6e 61 6c 2f 70 72 69 76 61 74 65  Internal/private
2a20: 20 62 69 74 73 20 66 6f 6c 6c 6f 77 2e 0a 65 6e   bits follow..en
2a30: 75 6d 0a 7b 0a 20 20 54 49 4e 46 4c 5f 4d 41 58  um.{.  TINFL_MAX
2a40: 5f 48 55 46 46 5f 54 41 42 4c 45 53 20 3d 20 33  _HUFF_TABLES = 3
2a50: 2c 20 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46  , TINFL_MAX_HUFF
2a60: 5f 53 59 4d 42 4f 4c 53 5f 30 20 3d 20 32 38 38  _SYMBOLS_0 = 288
2a70: 2c 20 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46  , TINFL_MAX_HUFF
2a80: 5f 53 59 4d 42 4f 4c 53 5f 31 20 3d 20 33 32 2c  _SYMBOLS_1 = 32,
2a90: 20 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TINFL_MAX_HUFF_
2aa0: 53 59 4d 42 4f 4c 53 5f 32 20 3d 20 31 39 2c 0a  SYMBOLS_2 = 19,.
2ab0: 20 20 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f    TINFL_FAST_LOO
2ac0: 4b 55 50 5f 42 49 54 53 20 3d 20 31 30 2c 20 54  KUP_BITS = 10, T
2ad0: 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50  INFL_FAST_LOOKUP
2ae0: 5f 53 49 5a 45 20 3d 20 31 20 3c 3c 20 54 49 4e  _SIZE = 1 << TIN
2af0: 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50 5f 42  FL_FAST_LOOKUP_B
2b00: 49 54 53 0a 7d 3b 0a 0a 74 79 70 65 64 65 66 20  ITS.};..typedef 
2b10: 73 74 72 75 63 74 0a 7b 0a 20 20 6d 7a 5f 75 69  struct.{.  mz_ui
2b20: 6e 74 38 20 6d 5f 63 6f 64 65 5f 73 69 7a 65 5b  nt8 m_code_size[
2b30: 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53  TINFL_MAX_HUFF_S
2b40: 59 4d 42 4f 4c 53 5f 30 5d 3b 0a 20 20 6d 7a 5f  YMBOLS_0];.  mz_
2b50: 69 6e 74 31 36 20 6d 5f 6c 6f 6f 6b 5f 75 70 5b  int16 m_look_up[
2b60: 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55  TINFL_FAST_LOOKU
2b70: 50 5f 53 49 5a 45 5d 2c 20 6d 5f 74 72 65 65 5b  P_SIZE], m_tree[
2b80: 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53  TINFL_MAX_HUFF_S
2b90: 59 4d 42 4f 4c 53 5f 30 20 2a 20 32 5d 3b 0a 7d  YMBOLS_0 * 2];.}
2ba0: 20 74 69 6e 66 6c 5f 68 75 66 66 5f 74 61 62 6c   tinfl_huff_tabl
2bb0: 65 3b 0a 0a 23 69 66 20 4d 49 4e 49 5a 5f 48 41  e;..#if MINIZ_HA
2bc0: 53 5f 36 34 42 49 54 5f 52 45 47 49 53 54 45 52  S_64BIT_REGISTER
2bd0: 53 0a 20 20 23 64 65 66 69 6e 65 20 54 49 4e 46  S.  #define TINF
2be0: 4c 5f 55 53 45 5f 36 34 42 49 54 5f 42 49 54 42  L_USE_64BIT_BITB
2bf0: 55 46 20 31 0a 23 65 6e 64 69 66 0a 0a 23 69 66  UF 1.#endif..#if
2c00: 20 54 49 4e 46 4c 5f 55 53 45 5f 36 34 42 49 54   TINFL_USE_64BIT
2c10: 5f 42 49 54 42 55 46 0a 20 20 74 79 70 65 64 65  _BITBUF.  typede
2c20: 66 20 6d 7a 5f 75 69 6e 74 36 34 20 74 69 6e 66  f mz_uint64 tinf
2c30: 6c 5f 62 69 74 5f 62 75 66 5f 74 3b 0a 20 20 23  l_bit_buf_t;.  #
2c40: 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 42 49 54  define TINFL_BIT
2c50: 42 55 46 5f 53 49 5a 45 20 28 36 34 29 0a 23 65  BUF_SIZE (64).#e
2c60: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 6d 7a  lse.  typedef mz
2c70: 5f 75 69 6e 74 33 32 20 74 69 6e 66 6c 5f 62 69  _uint32 tinfl_bi
2c80: 74 5f 62 75 66 5f 74 3b 0a 20 20 23 64 65 66 69  t_buf_t;.  #defi
2c90: 6e 65 20 54 49 4e 46 4c 5f 42 49 54 42 55 46 5f  ne TINFL_BITBUF_
2ca0: 53 49 5a 45 20 28 33 32 29 0a 23 65 6e 64 69 66  SIZE (32).#endif
2cb0: 0a 0a 73 74 72 75 63 74 20 74 69 6e 66 6c 5f 64  ..struct tinfl_d
2cc0: 65 63 6f 6d 70 72 65 73 73 6f 72 5f 74 61 67 0a  ecompressor_tag.
2cd0: 7b 0a 20 20 6d 7a 5f 75 69 6e 74 33 32 20 6d 5f  {.  mz_uint32 m_
2ce0: 73 74 61 74 65 2c 20 6d 5f 6e 75 6d 5f 62 69 74  state, m_num_bit
2cf0: 73 2c 20 6d 5f 7a 68 64 72 30 2c 20 6d 5f 7a 68  s, m_zhdr0, m_zh
2d00: 64 72 31 2c 20 6d 5f 7a 5f 61 64 6c 65 72 33 32  dr1, m_z_adler32
2d10: 2c 20 6d 5f 66 69 6e 61 6c 2c 20 6d 5f 74 79 70  , m_final, m_typ
2d20: 65 2c 20 6d 5f 63 68 65 63 6b 5f 61 64 6c 65 72  e, m_check_adler
2d30: 33 32 2c 20 6d 5f 64 69 73 74 2c 20 6d 5f 63 6f  32, m_dist, m_co
2d40: 75 6e 74 65 72 2c 20 6d 5f 6e 75 6d 5f 65 78 74  unter, m_num_ext
2d50: 72 61 2c 20 6d 5f 74 61 62 6c 65 5f 73 69 7a 65  ra, m_table_size
2d60: 73 5b 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46  s[TINFL_MAX_HUFF
2d70: 5f 54 41 42 4c 45 53 5d 3b 0a 20 20 74 69 6e 66  _TABLES];.  tinf
2d80: 6c 5f 62 69 74 5f 62 75 66 5f 74 20 6d 5f 62 69  l_bit_buf_t m_bi
2d90: 74 5f 62 75 66 3b 0a 20 20 73 69 7a 65 5f 74 20  t_buf;.  size_t 
2da0: 6d 5f 64 69 73 74 5f 66 72 6f 6d 5f 6f 75 74 5f  m_dist_from_out_
2db0: 62 75 66 5f 73 74 61 72 74 3b 0a 20 20 74 69 6e  buf_start;.  tin
2dc0: 66 6c 5f 68 75 66 66 5f 74 61 62 6c 65 20 6d 5f  fl_huff_table m_
2dd0: 74 61 62 6c 65 73 5b 54 49 4e 46 4c 5f 4d 41 58  tables[TINFL_MAX
2de0: 5f 48 55 46 46 5f 54 41 42 4c 45 53 5d 3b 0a 20  _HUFF_TABLES];. 
2df0: 20 6d 7a 5f 75 69 6e 74 38 20 6d 5f 72 61 77 5f   mz_uint8 m_raw_
2e00: 68 65 61 64 65 72 5b 34 5d 2c 20 6d 5f 6c 65 6e  header[4], m_len
2e10: 5f 63 6f 64 65 73 5b 54 49 4e 46 4c 5f 4d 41 58  _codes[TINFL_MAX
2e20: 5f 48 55 46 46 5f 53 59 4d 42 4f 4c 53 5f 30 20  _HUFF_SYMBOLS_0 
2e30: 2b 20 54 49 4e 46 4c 5f 4d 41 58 5f 48 55 46 46  + TINFL_MAX_HUFF
2e40: 5f 53 59 4d 42 4f 4c 53 5f 31 20 2b 20 31 33 37  _SYMBOLS_1 + 137
2e50: 5d 3b 0a 7d 3b 0a 0a 2f 2f 20 2d 2d 2d 2d 2d 2d  ];.};..// ------
2e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 4c 6f  ------------- Lo
2e70: 77 2d 6c 65 76 65 6c 20 43 6f 6d 70 72 65 73 73  w-level Compress
2e80: 69 6f 6e 20 41 50 49 20 44 65 66 69 6e 69 74 69  ion API Definiti
2e90: 6f 6e 73 0a 0a 2f 2f 20 53 65 74 20 54 44 45 46  ons..// Set TDEF
2ea0: 4c 5f 4c 45 53 53 5f 4d 45 4d 4f 52 59 20 74 6f  L_LESS_MEMORY to
2eb0: 20 31 20 74 6f 20 75 73 65 20 6c 65 73 73 20 6d   1 to use less m
2ec0: 65 6d 6f 72 79 20 28 63 6f 6d 70 72 65 73 73 69  emory (compressi
2ed0: 6f 6e 20 77 69 6c 6c 20 62 65 20 73 6c 69 67 68  on will be sligh
2ee0: 74 6c 79 20 73 6c 6f 77 65 72 2c 20 61 6e 64 20  tly slower, and 
2ef0: 72 61 77 2f 64 79 6e 61 6d 69 63 20 62 6c 6f 63  raw/dynamic bloc
2f00: 6b 73 20 77 69 6c 6c 20 62 65 20 6f 75 74 70 75  ks will be outpu
2f10: 74 20 6d 6f 72 65 20 66 72 65 71 75 65 6e 74 6c  t more frequentl
2f20: 79 29 2e 0a 23 64 65 66 69 6e 65 20 54 44 45 46  y)..#define TDEF
2f30: 4c 5f 4c 45 53 53 5f 4d 45 4d 4f 52 59 20 30 0a  L_LESS_MEMORY 0.
2f40: 0a 2f 2f 20 74 64 65 66 6c 5f 69 6e 69 74 28 29  .// tdefl_init()
2f50: 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20 66 6c 61   compression fla
2f60: 67 73 20 6c 6f 67 69 63 61 6c 6c 79 20 4f 52 27  gs logically OR'
2f70: 64 20 74 6f 67 65 74 68 65 72 20 28 6c 6f 77 20  d together (low 
2f80: 31 32 20 62 69 74 73 20 63 6f 6e 74 61 69 6e 20  12 bits contain 
2f90: 74 68 65 20 6d 61 78 2e 20 6e 75 6d 62 65 72 20  the max. number 
2fa0: 6f 66 20 70 72 6f 62 65 73 20 70 65 72 20 64 69  of probes per di
2fb0: 63 74 69 6f 6e 61 72 79 20 73 65 61 72 63 68 29  ctionary search)
2fc0: 3a 0a 2f 2f 20 54 44 45 46 4c 5f 44 45 46 41 55  :.// TDEFL_DEFAU
2fd0: 4c 54 5f 4d 41 58 5f 50 52 4f 42 45 53 3a 20 54  LT_MAX_PROBES: T
2fe0: 68 65 20 63 6f 6d 70 72 65 73 73 6f 72 20 64 65  he compressor de
2ff0: 66 61 75 6c 74 73 20 74 6f 20 31 32 38 20 64 69  faults to 128 di
3000: 63 74 69 6f 6e 61 72 79 20 70 72 6f 62 65 73 20  ctionary probes 
3010: 70 65 72 20 64 69 63 74 69 6f 6e 61 72 79 20 73  per dictionary s
3020: 65 61 72 63 68 2e 20 30 3d 48 75 66 66 6d 61 6e  earch. 0=Huffman
3030: 20 6f 6e 6c 79 2c 20 31 3d 48 75 66 66 6d 61 6e   only, 1=Huffman
3040: 2b 4c 5a 20 28 66 61 73 74 65 73 74 2f 63 72 61  +LZ (fastest/cra
3050: 70 20 63 6f 6d 70 72 65 73 73 69 6f 6e 29 2c 20  p compression), 
3060: 34 30 39 35 3d 48 75 66 66 6d 61 6e 2b 4c 5a 20  4095=Huffman+LZ 
3070: 28 73 6c 6f 77 65 73 74 2f 62 65 73 74 20 63 6f  (slowest/best co
3080: 6d 70 72 65 73 73 69 6f 6e 29 2e 0a 65 6e 75 6d  mpression)..enum
3090: 0a 7b 0a 20 20 54 44 45 46 4c 5f 48 55 46 46 4d  .{.  TDEFL_HUFFM
30a0: 41 4e 5f 4f 4e 4c 59 20 3d 20 30 2c 20 54 44 45  AN_ONLY = 0, TDE
30b0: 46 4c 5f 44 45 46 41 55 4c 54 5f 4d 41 58 5f 50  FL_DEFAULT_MAX_P
30c0: 52 4f 42 45 53 20 3d 20 31 32 38 2c 20 54 44 45  ROBES = 128, TDE
30d0: 46 4c 5f 4d 41 58 5f 50 52 4f 42 45 53 5f 4d 41  FL_MAX_PROBES_MA
30e0: 53 4b 20 3d 20 30 78 46 46 46 0a 7d 3b 0a 0a 2f  SK = 0xFFF.};../
30f0: 2f 20 54 44 45 46 4c 5f 57 52 49 54 45 5f 5a 4c  / TDEFL_WRITE_ZL
3100: 49 42 5f 48 45 41 44 45 52 3a 20 49 66 20 73 65  IB_HEADER: If se
3110: 74 2c 20 74 68 65 20 63 6f 6d 70 72 65 73 73 6f  t, the compresso
3120: 72 20 6f 75 74 70 75 74 73 20 61 20 7a 6c 69 62  r outputs a zlib
3130: 20 68 65 61 64 65 72 20 62 65 66 6f 72 65 20 74   header before t
3140: 68 65 20 64 65 66 6c 61 74 65 20 64 61 74 61 2c  he deflate data,
3150: 20 61 6e 64 20 74 68 65 20 41 64 6c 65 72 2d 33   and the Adler-3
3160: 32 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  2 of the source 
3170: 64 61 74 61 20 61 74 20 74 68 65 20 65 6e 64 2e  data at the end.
3180: 20 4f 74 68 65 72 77 69 73 65 2c 20 79 6f 75 27   Otherwise, you'
3190: 6c 6c 20 67 65 74 20 72 61 77 20 64 65 66 6c 61  ll get raw defla
31a0: 74 65 20 64 61 74 61 2e 0a 2f 2f 20 54 44 45 46  te data..// TDEF
31b0: 4c 5f 43 4f 4d 50 55 54 45 5f 41 44 4c 45 52 33  L_COMPUTE_ADLER3
31c0: 32 3a 20 41 6c 77 61 79 73 20 63 6f 6d 70 75 74  2: Always comput
31d0: 65 20 74 68 65 20 61 64 6c 65 72 2d 33 32 20 6f  e the adler-32 o
31e0: 66 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61  f the input data
31f0: 20 28 65 76 65 6e 20 77 68 65 6e 20 6e 6f 74 20   (even when not 
3200: 77 72 69 74 69 6e 67 20 7a 6c 69 62 20 68 65 61  writing zlib hea
3210: 64 65 72 73 29 2e 0a 2f 2f 20 54 44 45 46 4c 5f  ders)..// TDEFL_
3220: 47 52 45 45 44 59 5f 50 41 52 53 49 4e 47 5f 46  GREEDY_PARSING_F
3230: 4c 41 47 3a 20 53 65 74 20 74 6f 20 75 73 65 20  LAG: Set to use 
3240: 66 61 73 74 65 72 20 67 72 65 65 64 79 20 70 61  faster greedy pa
3250: 72 73 69 6e 67 2c 20 69 6e 73 74 65 61 64 20 6f  rsing, instead o
3260: 66 20 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  f more efficient
3270: 20 6c 61 7a 79 20 70 61 72 73 69 6e 67 2e 0a 2f   lazy parsing../
3280: 2f 20 54 44 45 46 4c 5f 4e 4f 4e 44 45 54 45 52  / TDEFL_NONDETER
3290: 4d 49 4e 49 53 54 49 43 5f 50 41 52 53 49 4e 47  MINISTIC_PARSING
32a0: 5f 46 4c 41 47 3a 20 45 6e 61 62 6c 65 20 74 6f  _FLAG: Enable to
32b0: 20 64 65 63 72 65 61 73 65 20 74 68 65 20 63 6f   decrease the co
32c0: 6d 70 72 65 73 73 6f 72 27 73 20 69 6e 69 74 69  mpressor's initi
32d0: 61 6c 69 7a 61 74 69 6f 6e 20 74 69 6d 65 20 74  alization time t
32e0: 6f 20 74 68 65 20 6d 69 6e 69 6d 75 6d 2c 20 62  o the minimum, b
32f0: 75 74 20 74 68 65 20 6f 75 74 70 75 74 20 6d 61  ut the output ma
3300: 79 20 76 61 72 79 20 66 72 6f 6d 20 72 75 6e 20  y vary from run 
3310: 74 6f 20 72 75 6e 20 67 69 76 65 6e 20 74 68 65  to run given the
3320: 20 73 61 6d 65 20 69 6e 70 75 74 20 28 64 65 70   same input (dep
3330: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 63 6f  ending on the co
3340: 6e 74 65 6e 74 73 20 6f 66 20 6d 65 6d 6f 72 79  ntents of memory
3350: 29 2e 0a 2f 2f 20 54 44 45 46 4c 5f 52 4c 45 5f  )..// TDEFL_RLE_
3360: 4d 41 54 43 48 45 53 3a 20 4f 6e 6c 79 20 6c 6f  MATCHES: Only lo
3370: 6f 6b 20 66 6f 72 20 52 4c 45 20 6d 61 74 63 68  ok for RLE match
3380: 65 73 20 28 6d 61 74 63 68 65 73 20 77 69 74 68  es (matches with
3390: 20 61 20 64 69 73 74 61 6e 63 65 20 6f 66 20 31   a distance of 1
33a0: 29 0a 2f 2f 20 54 44 45 46 4c 5f 46 49 4c 54 45  ).// TDEFL_FILTE
33b0: 52 5f 4d 41 54 43 48 45 53 3a 20 44 69 73 63 61  R_MATCHES: Disca
33c0: 72 64 73 20 6d 61 74 63 68 65 73 20 3c 3d 20 35  rds matches <= 5
33d0: 20 63 68 61 72 73 20 69 66 20 65 6e 61 62 6c 65   chars if enable
33e0: 64 2e 0a 2f 2f 20 54 44 45 46 4c 5f 46 4f 52 43  d..// TDEFL_FORC
33f0: 45 5f 41 4c 4c 5f 53 54 41 54 49 43 5f 42 4c 4f  E_ALL_STATIC_BLO
3400: 43 4b 53 3a 20 44 69 73 61 62 6c 65 20 75 73 61  CKS: Disable usa
3410: 67 65 20 6f 66 20 6f 70 74 69 6d 69 7a 65 64 20  ge of optimized 
3420: 48 75 66 66 6d 61 6e 20 74 61 62 6c 65 73 2e 0a  Huffman tables..
3430: 2f 2f 20 54 44 45 46 4c 5f 46 4f 52 43 45 5f 41  // TDEFL_FORCE_A
3440: 4c 4c 5f 52 41 57 5f 42 4c 4f 43 4b 53 3a 20 4f  LL_RAW_BLOCKS: O
3450: 6e 6c 79 20 75 73 65 20 72 61 77 20 28 75 6e 63  nly use raw (unc
3460: 6f 6d 70 72 65 73 73 65 64 29 20 64 65 66 6c 61  ompressed) defla
3470: 74 65 20 62 6c 6f 63 6b 73 2e 0a 65 6e 75 6d 0a  te blocks..enum.
3480: 7b 0a 20 20 54 44 45 46 4c 5f 57 52 49 54 45 5f  {.  TDEFL_WRITE_
3490: 5a 4c 49 42 5f 48 45 41 44 45 52 20 20 20 20 20  ZLIB_HEADER     
34a0: 20 20 20 20 20 20 20 20 3d 20 30 78 30 31 30 30          = 0x0100
34b0: 30 2c 0a 20 20 54 44 45 46 4c 5f 43 4f 4d 50 55  0,.  TDEFL_COMPU
34c0: 54 45 5f 41 44 4c 45 52 33 32 20 20 20 20 20 20  TE_ADLER32      
34d0: 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 32 30           = 0x020
34e0: 30 30 2c 0a 20 20 54 44 45 46 4c 5f 47 52 45 45  00,.  TDEFL_GREE
34f0: 44 59 5f 50 41 52 53 49 4e 47 5f 46 4c 41 47 20  DY_PARSING_FLAG 
3500: 20 20 20 20 20 20 20 20 20 20 3d 20 30 78 30 34            = 0x04
3510: 30 30 30 2c 0a 20 20 54 44 45 46 4c 5f 4e 4f 4e  000,.  TDEFL_NON
3520: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 5f 50 41  DETERMINISTIC_PA
3530: 52 53 49 4e 47 5f 46 4c 41 47 20 3d 20 30 78 30  RSING_FLAG = 0x0
3540: 38 30 30 30 2c 0a 20 20 54 44 45 46 4c 5f 52 4c  8000,.  TDEFL_RL
3550: 45 5f 4d 41 54 43 48 45 53 20 20 20 20 20 20 20  E_MATCHES       
3560: 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30 78              = 0x
3570: 31 30 30 30 30 2c 0a 20 20 54 44 45 46 4c 5f 46  10000,.  TDEFL_F
3580: 49 4c 54 45 52 5f 4d 41 54 43 48 45 53 20 20 20  ILTER_MATCHES   
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 20 30               = 0
35a0: 78 32 30 30 30 30 2c 0a 20 20 54 44 45 46 4c 5f  x20000,.  TDEFL_
35b0: 46 4f 52 43 45 5f 41 4c 4c 5f 53 54 41 54 49 43  FORCE_ALL_STATIC
35c0: 5f 42 4c 4f 43 4b 53 20 20 20 20 20 20 20 3d 20  _BLOCKS       = 
35d0: 30 78 34 30 30 30 30 2c 0a 20 20 54 44 45 46 4c  0x40000,.  TDEFL
35e0: 5f 46 4f 52 43 45 5f 41 4c 4c 5f 52 41 57 5f 42  _FORCE_ALL_RAW_B
35f0: 4c 4f 43 4b 53 20 20 20 20 20 20 20 20 20 20 3d  LOCKS          =
3600: 20 30 78 38 30 30 30 30 0a 7d 3b 0a 0a 2f 2f 20   0x80000.};..// 
3610: 48 69 67 68 20 6c 65 76 65 6c 20 63 6f 6d 70 72  High level compr
3620: 65 73 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ession functions
3630: 3a 0a 2f 2f 20 74 64 65 66 6c 5f 63 6f 6d 70 72  :.// tdefl_compr
3640: 65 73 73 5f 6d 65 6d 5f 74 6f 5f 68 65 61 70 28  ess_mem_to_heap(
3650: 29 20 63 6f 6d 70 72 65 73 73 65 73 20 61 20 62  ) compresses a b
3660: 6c 6f 63 6b 20 69 6e 20 6d 65 6d 6f 72 79 20 74  lock in memory t
3670: 6f 20 61 20 68 65 61 70 20 62 6c 6f 63 6b 20 61  o a heap block a
3680: 6c 6c 6f 63 61 74 65 64 20 76 69 61 20 6d 61 6c  llocated via mal
3690: 6c 6f 63 28 29 2e 0a 2f 2f 20 4f 6e 20 65 6e 74  loc()..// On ent
36a0: 72 79 3a 0a 2f 2f 20 20 70 53 72 63 5f 62 75 66  ry:.//  pSrc_buf
36b0: 2c 20 73 72 63 5f 62 75 66 5f 6c 65 6e 3a 20 50  , src_buf_len: P
36c0: 6f 69 6e 74 65 72 20 61 6e 64 20 73 69 7a 65 20  ointer and size 
36d0: 6f 66 20 73 6f 75 72 63 65 20 62 6c 6f 63 6b 20  of source block 
36e0: 74 6f 20 63 6f 6d 70 72 65 73 73 2e 0a 2f 2f 20  to compress..// 
36f0: 20 66 6c 61 67 73 3a 20 54 68 65 20 6d 61 78 20   flags: The max 
3700: 6d 61 74 63 68 20 66 69 6e 64 65 72 20 70 72 6f  match finder pro
3710: 62 65 73 20 28 64 65 66 61 75 6c 74 20 69 73 20  bes (default is 
3720: 31 32 38 29 20 6c 6f 67 69 63 61 6c 6c 79 20 4f  128) logically O
3730: 52 27 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  R'd against the 
3740: 61 62 6f 76 65 20 66 6c 61 67 73 2e 20 48 69 67  above flags. Hig
3750: 68 65 72 20 70 72 6f 62 65 73 20 61 72 65 20 73  her probes are s
3760: 6c 6f 77 65 72 20 62 75 74 20 69 6d 70 72 6f 76  lower but improv
3770: 65 20 63 6f 6d 70 72 65 73 73 69 6f 6e 2e 0a 2f  e compression../
3780: 2f 20 4f 6e 20 72 65 74 75 72 6e 3a 0a 2f 2f 20  / On return:.// 
3790: 20 46 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   Function return
37a0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
37b0: 68 65 20 63 6f 6d 70 72 65 73 73 65 64 20 64 61  he compressed da
37c0: 74 61 2c 20 6f 72 20 4e 55 4c 4c 20 6f 6e 20 66  ta, or NULL on f
37d0: 61 69 6c 75 72 65 2e 0a 2f 2f 20 20 2a 70 4f 75  ailure..//  *pOu
37e0: 74 5f 6c 65 6e 20 77 69 6c 6c 20 62 65 20 73 65  t_len will be se
37f0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 72 65 73  t to the compres
3800: 73 65 64 20 64 61 74 61 27 73 20 73 69 7a 65 2c  sed data's size,
3810: 20 77 68 69 63 68 20 63 6f 75 6c 64 20 62 65 20   which could be 
3820: 6c 61 72 67 65 72 20 74 68 61 6e 20 73 72 63 5f  larger than src_
3830: 62 75 66 5f 6c 65 6e 20 6f 6e 20 75 6e 63 6f 6d  buf_len on uncom
3840: 70 72 65 73 73 69 62 6c 65 20 64 61 74 61 2e 0a  pressible data..
3850: 2f 2f 20 20 54 68 65 20 63 61 6c 6c 65 72 20 6d  //  The caller m
3860: 75 73 74 20 66 72 65 65 28 29 20 74 68 65 20 72  ust free() the r
3870: 65 74 75 72 6e 65 64 20 62 6c 6f 63 6b 20 77 68  eturned block wh
3880: 65 6e 20 69 74 27 73 20 6e 6f 20 6c 6f 6e 67 65  en it's no longe
3890: 72 20 6e 65 65 64 65 64 2e 0a 76 6f 69 64 20 2a  r needed..void *
38a0: 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 6d  tdefl_compress_m
38b0: 65 6d 5f 74 6f 5f 68 65 61 70 28 63 6f 6e 73 74  em_to_heap(const
38c0: 20 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66 2c   void *pSrc_buf,
38d0: 20 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66 5f   size_t src_buf_
38e0: 6c 65 6e 2c 20 73 69 7a 65 5f 74 20 2a 70 4f 75  len, size_t *pOu
38f0: 74 5f 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73  t_len, int flags
3900: 29 3b 0a 0a 2f 2f 20 74 64 65 66 6c 5f 63 6f 6d  );..// tdefl_com
3910: 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 6d 65 6d  press_mem_to_mem
3920: 28 29 20 63 6f 6d 70 72 65 73 73 65 73 20 61 20  () compresses a 
3930: 62 6c 6f 63 6b 20 69 6e 20 6d 65 6d 6f 72 79 20  block in memory 
3940: 74 6f 20 61 6e 6f 74 68 65 72 20 62 6c 6f 63 6b  to another block
3950: 20 69 6e 20 6d 65 6d 6f 72 79 2e 0a 2f 2f 20 52   in memory..// R
3960: 65 74 75 72 6e 73 20 30 20 6f 6e 20 66 61 69 6c  eturns 0 on fail
3970: 75 72 65 2e 0a 73 69 7a 65 5f 74 20 74 64 65 66  ure..size_t tdef
3980: 6c 5f 63 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74  l_compress_mem_t
3990: 6f 5f 6d 65 6d 28 76 6f 69 64 20 2a 70 4f 75 74  o_mem(void *pOut
39a0: 5f 62 75 66 2c 20 73 69 7a 65 5f 74 20 6f 75 74  _buf, size_t out
39b0: 5f 62 75 66 5f 6c 65 6e 2c 20 63 6f 6e 73 74 20  _buf_len, const 
39c0: 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66 2c 20  void *pSrc_buf, 
39d0: 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66 5f 6c  size_t src_buf_l
39e0: 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a  en, int flags);.
39f0: 0a 2f 2f 20 4f 75 74 70 75 74 20 73 74 72 65 61  .// Output strea
3a00: 6d 20 69 6e 74 65 72 66 61 63 65 2e 20 54 68 65  m interface. The
3a10: 20 63 6f 6d 70 72 65 73 73 6f 72 20 75 73 65 73   compressor uses
3a20: 20 74 68 69 73 20 69 6e 74 65 72 66 61 63 65 20   this interface 
3a30: 74 6f 20 77 72 69 74 65 20 63 6f 6d 70 72 65 73  to write compres
3a40: 73 65 64 20 64 61 74 61 2e 20 49 74 27 6c 6c 20  sed data. It'll 
3a50: 74 79 70 69 63 61 6c 6c 79 20 62 65 20 63 61 6c  typically be cal
3a60: 6c 65 64 20 54 44 45 46 4c 5f 4f 55 54 5f 42 55  led TDEFL_OUT_BU
3a70: 46 5f 53 49 5a 45 20 61 74 20 61 20 74 69 6d 65  F_SIZE at a time
3a80: 2e 0a 74 79 70 65 64 65 66 20 6d 7a 5f 62 6f 6f  ..typedef mz_boo
3a90: 6c 20 28 2a 74 64 65 66 6c 5f 70 75 74 5f 62 75  l (*tdefl_put_bu
3aa0: 66 5f 66 75 6e 63 5f 70 74 72 29 28 63 6f 6e 73  f_func_ptr)(cons
3ab0: 74 20 76 6f 69 64 2a 20 70 42 75 66 2c 20 69 6e  t void* pBuf, in
3ac0: 74 20 6c 65 6e 2c 20 76 6f 69 64 20 2a 70 55 73  t len, void *pUs
3ad0: 65 72 29 3b 0a 0a 2f 2f 20 74 64 65 66 6c 5f 63  er);..// tdefl_c
3ae0: 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 6f  ompress_mem_to_o
3af0: 75 74 70 75 74 28 29 20 63 6f 6d 70 72 65 73 73  utput() compress
3b00: 65 73 20 61 20 62 6c 6f 63 6b 20 74 6f 20 61 6e  es a block to an
3b10: 20 6f 75 74 70 75 74 20 73 74 72 65 61 6d 2e 20   output stream. 
3b20: 54 68 65 20 61 62 6f 76 65 20 68 65 6c 70 65 72  The above helper
3b30: 73 20 75 73 65 20 74 68 69 73 20 66 75 6e 63 74  s use this funct
3b40: 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  ion internally..
3b50: 6d 7a 5f 62 6f 6f 6c 20 74 64 65 66 6c 5f 63 6f  mz_bool tdefl_co
3b60: 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 6f 75  mpress_mem_to_ou
3b70: 74 70 75 74 28 63 6f 6e 73 74 20 76 6f 69 64 20  tput(const void 
3b80: 2a 70 42 75 66 2c 20 73 69 7a 65 5f 74 20 62 75  *pBuf, size_t bu
3b90: 66 5f 6c 65 6e 2c 20 74 64 65 66 6c 5f 70 75 74  f_len, tdefl_put
3ba0: 5f 62 75 66 5f 66 75 6e 63 5f 70 74 72 20 70 50  _buf_func_ptr pP
3bb0: 75 74 5f 62 75 66 5f 66 75 6e 63 2c 20 76 6f 69  ut_buf_func, voi
3bc0: 64 20 2a 70 50 75 74 5f 62 75 66 5f 75 73 65 72  d *pPut_buf_user
3bd0: 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 0a 65  , int flags);..e
3be0: 6e 75 6d 20 7b 20 54 44 45 46 4c 5f 4d 41 58 5f  num { TDEFL_MAX_
3bf0: 48 55 46 46 5f 54 41 42 4c 45 53 20 3d 20 33 2c  HUFF_TABLES = 3,
3c00: 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TDEFL_MAX_HUFF_
3c10: 53 59 4d 42 4f 4c 53 5f 30 20 3d 20 32 38 38 2c  SYMBOLS_0 = 288,
3c20: 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TDEFL_MAX_HUFF_
3c30: 53 59 4d 42 4f 4c 53 5f 31 20 3d 20 33 32 2c 20  SYMBOLS_1 = 32, 
3c40: 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53  TDEFL_MAX_HUFF_S
3c50: 59 4d 42 4f 4c 53 5f 32 20 3d 20 31 39 2c 20 54  YMBOLS_2 = 19, T
3c60: 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a  DEFL_LZ_DICT_SIZ
3c70: 45 20 3d 20 33 32 37 36 38 2c 20 54 44 45 46 4c  E = 32768, TDEFL
3c80: 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d 41  _LZ_DICT_SIZE_MA
3c90: 53 4b 20 3d 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  SK = TDEFL_LZ_DI
3ca0: 43 54 5f 53 49 5a 45 20 2d 20 31 2c 20 54 44 45  CT_SIZE - 1, TDE
3cb0: 46 4c 5f 4d 49 4e 5f 4d 41 54 43 48 5f 4c 45 4e  FL_MIN_MATCH_LEN
3cc0: 20 3d 20 33 2c 20 54 44 45 46 4c 5f 4d 41 58 5f   = 3, TDEFL_MAX_
3cd0: 4d 41 54 43 48 5f 4c 45 4e 20 3d 20 32 35 38 20  MATCH_LEN = 258 
3ce0: 7d 3b 0a 0a 2f 2f 20 54 44 45 46 4c 5f 4f 55 54  };..// TDEFL_OUT
3cf0: 5f 42 55 46 5f 53 49 5a 45 20 4d 55 53 54 20 62  _BUF_SIZE MUST b
3d00: 65 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  e large enough t
3d10: 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 20  o hold a single 
3d20: 65 6e 74 69 72 65 20 63 6f 6d 70 72 65 73 73 65  entire compresse
3d30: 64 20 6f 75 74 70 75 74 20 62 6c 6f 63 6b 20 28  d output block (
3d40: 75 73 69 6e 67 20 73 74 61 74 69 63 2f 66 69 78  using static/fix
3d50: 65 64 20 48 75 66 66 6d 61 6e 20 63 6f 64 65 73  ed Huffman codes
3d60: 29 2e 0a 23 69 66 20 54 44 45 46 4c 5f 4c 45 53  )..#if TDEFL_LES
3d70: 53 5f 4d 45 4d 4f 52 59 0a 65 6e 75 6d 20 7b 20  S_MEMORY.enum { 
3d80: 54 44 45 46 4c 5f 4c 5a 5f 43 4f 44 45 5f 42 55  TDEFL_LZ_CODE_BU
3d90: 46 5f 53 49 5a 45 20 3d 20 32 34 20 2a 20 31 30  F_SIZE = 24 * 10
3da0: 32 34 2c 20 54 44 45 46 4c 5f 4f 55 54 5f 42 55  24, TDEFL_OUT_BU
3db0: 46 5f 53 49 5a 45 20 3d 20 28 54 44 45 46 4c 5f  F_SIZE = (TDEFL_
3dc0: 4c 5a 5f 43 4f 44 45 5f 42 55 46 5f 53 49 5a 45  LZ_CODE_BUF_SIZE
3dd0: 20 2a 20 31 33 20 29 20 2f 20 31 30 2c 20 54 44   * 13 ) / 10, TD
3de0: 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53 59 4d  EFL_MAX_HUFF_SYM
3df0: 42 4f 4c 53 20 3d 20 32 38 38 2c 20 54 44 45 46  BOLS = 288, TDEF
3e00: 4c 5f 4c 5a 5f 48 41 53 48 5f 42 49 54 53 20 3d  L_LZ_HASH_BITS =
3e10: 20 31 32 2c 20 54 44 45 46 4c 5f 4c 45 56 45 4c   12, TDEFL_LEVEL
3e20: 31 5f 48 41 53 48 5f 53 49 5a 45 5f 4d 41 53 4b  1_HASH_SIZE_MASK
3e30: 20 3d 20 34 30 39 35 2c 20 54 44 45 46 4c 5f 4c   = 4095, TDEFL_L
3e40: 5a 5f 48 41 53 48 5f 53 48 49 46 54 20 3d 20 28  Z_HASH_SHIFT = (
3e50: 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f 42 49  TDEFL_LZ_HASH_BI
3e60: 54 53 20 2b 20 32 29 20 2f 20 33 2c 20 54 44 45  TS + 2) / 3, TDE
3e70: 46 4c 5f 4c 5a 5f 48 41 53 48 5f 53 49 5a 45 20  FL_LZ_HASH_SIZE 
3e80: 3d 20 31 20 3c 3c 20 54 44 45 46 4c 5f 4c 5a 5f  = 1 << TDEFL_LZ_
3e90: 48 41 53 48 5f 42 49 54 53 20 7d 3b 0a 23 65 6c  HASH_BITS };.#el
3ea0: 73 65 0a 65 6e 75 6d 20 7b 20 54 44 45 46 4c 5f  se.enum { TDEFL_
3eb0: 4c 5a 5f 43 4f 44 45 5f 42 55 46 5f 53 49 5a 45  LZ_CODE_BUF_SIZE
3ec0: 20 3d 20 36 34 20 2a 20 31 30 32 34 2c 20 54 44   = 64 * 1024, TD
3ed0: 45 46 4c 5f 4f 55 54 5f 42 55 46 5f 53 49 5a 45  EFL_OUT_BUF_SIZE
3ee0: 20 3d 20 28 54 44 45 46 4c 5f 4c 5a 5f 43 4f 44   = (TDEFL_LZ_COD
3ef0: 45 5f 42 55 46 5f 53 49 5a 45 20 2a 20 31 33 20  E_BUF_SIZE * 13 
3f00: 29 20 2f 20 31 30 2c 20 54 44 45 46 4c 5f 4d 41  ) / 10, TDEFL_MA
3f10: 58 5f 48 55 46 46 5f 53 59 4d 42 4f 4c 53 20 3d  X_HUFF_SYMBOLS =
3f20: 20 32 38 38 2c 20 54 44 45 46 4c 5f 4c 5a 5f 48   288, TDEFL_LZ_H
3f30: 41 53 48 5f 42 49 54 53 20 3d 20 31 35 2c 20 54  ASH_BITS = 15, T
3f40: 44 45 46 4c 5f 4c 45 56 45 4c 31 5f 48 41 53 48  DEFL_LEVEL1_HASH
3f50: 5f 53 49 5a 45 5f 4d 41 53 4b 20 3d 20 34 30 39  _SIZE_MASK = 409
3f60: 35 2c 20 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48  5, TDEFL_LZ_HASH
3f70: 5f 53 48 49 46 54 20 3d 20 28 54 44 45 46 4c 5f  _SHIFT = (TDEFL_
3f80: 4c 5a 5f 48 41 53 48 5f 42 49 54 53 20 2b 20 32  LZ_HASH_BITS + 2
3f90: 29 20 2f 20 33 2c 20 54 44 45 46 4c 5f 4c 5a 5f  ) / 3, TDEFL_LZ_
3fa0: 48 41 53 48 5f 53 49 5a 45 20 3d 20 31 20 3c 3c  HASH_SIZE = 1 <<
3fb0: 20 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f 42   TDEFL_LZ_HASH_B
3fc0: 49 54 53 20 7d 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ITS };.#endif../
3fd0: 2f 20 54 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20  / The low-level 
3fe0: 74 64 65 66 6c 20 66 75 6e 63 74 69 6f 6e 73 20  tdefl functions 
3ff0: 62 65 6c 6f 77 20 6d 61 79 20 62 65 20 75 73 65  below may be use
4000: 64 20 64 69 72 65 63 74 6c 79 20 69 66 20 74 68  d directly if th
4010: 65 20 61 62 6f 76 65 20 68 65 6c 70 65 72 20 66  e above helper f
4020: 75 6e 63 74 69 6f 6e 73 20 61 72 65 6e 27 74 20  unctions aren't 
4030: 66 6c 65 78 69 62 6c 65 20 65 6e 6f 75 67 68 2e  flexible enough.
4040: 20 54 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 66   The low-level f
4050: 75 6e 63 74 69 6f 6e 73 20 64 6f 6e 27 74 20 6d  unctions don't m
4060: 61 6b 65 20 61 6e 79 20 68 65 61 70 20 61 6c 6c  ake any heap all
4070: 6f 63 61 74 69 6f 6e 73 2c 20 75 6e 6c 69 6b 65  ocations, unlike
4080: 20 74 68 65 20 61 62 6f 76 65 20 68 65 6c 70 65   the above helpe
4090: 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 74 79 70  r functions..typ
40a0: 65 64 65 66 20 65 6e 75 6d 0a 7b 0a 20 20 54 44  edef enum.{.  TD
40b0: 45 46 4c 5f 53 54 41 54 55 53 5f 42 41 44 5f 50  EFL_STATUS_BAD_P
40c0: 41 52 41 4d 20 3d 20 2d 32 2c 0a 20 20 54 44 45  ARAM = -2,.  TDE
40d0: 46 4c 5f 53 54 41 54 55 53 5f 50 55 54 5f 42 55  FL_STATUS_PUT_BU
40e0: 46 5f 46 41 49 4c 45 44 20 3d 20 2d 31 2c 0a 20  F_FAILED = -1,. 
40f0: 20 54 44 45 46 4c 5f 53 54 41 54 55 53 5f 4f 4b   TDEFL_STATUS_OK
4100: 41 59 20 3d 20 30 2c 0a 20 20 54 44 45 46 4c 5f  AY = 0,.  TDEFL_
4110: 53 54 41 54 55 53 5f 44 4f 4e 45 20 3d 20 31 2c  STATUS_DONE = 1,
4120: 0a 7d 20 74 64 65 66 6c 5f 73 74 61 74 75 73 3b  .} tdefl_status;
4130: 0a 0a 2f 2f 20 4d 75 73 74 20 6d 61 70 20 74 6f  ..// Must map to
4140: 20 4d 5a 5f 4e 4f 5f 46 4c 55 53 48 2c 20 4d 5a   MZ_NO_FLUSH, MZ
4150: 5f 53 59 4e 43 5f 46 4c 55 53 48 2c 20 65 74 63  _SYNC_FLUSH, etc
4160: 2e 20 65 6e 75 6d 73 0a 74 79 70 65 64 65 66 20  . enums.typedef 
4170: 65 6e 75 6d 0a 7b 0a 20 20 54 44 45 46 4c 5f 4e  enum.{.  TDEFL_N
4180: 4f 5f 46 4c 55 53 48 20 3d 20 30 2c 0a 20 20 54  O_FLUSH = 0,.  T
4190: 44 45 46 4c 5f 53 59 4e 43 5f 46 4c 55 53 48 20  DEFL_SYNC_FLUSH 
41a0: 3d 20 32 2c 0a 20 20 54 44 45 46 4c 5f 46 55 4c  = 2,.  TDEFL_FUL
41b0: 4c 5f 46 4c 55 53 48 20 3d 20 33 2c 0a 20 20 54  L_FLUSH = 3,.  T
41c0: 44 45 46 4c 5f 46 49 4e 49 53 48 20 3d 20 34 0a  DEFL_FINISH = 4.
41d0: 7d 20 74 64 65 66 6c 5f 66 6c 75 73 68 3b 0a 0a  } tdefl_flush;..
41e0: 2f 2f 20 74 64 65 66 6c 27 73 20 63 6f 6d 70 72  // tdefl's compr
41f0: 65 73 73 69 6f 6e 20 73 74 61 74 65 20 73 74 72  ession state str
4200: 75 63 74 75 72 65 2e 0a 74 79 70 65 64 65 66 20  ucture..typedef 
4210: 73 74 72 75 63 74 0a 7b 0a 20 20 74 64 65 66 6c  struct.{.  tdefl
4220: 5f 70 75 74 5f 62 75 66 5f 66 75 6e 63 5f 70 74  _put_buf_func_pt
4230: 72 20 6d 5f 70 50 75 74 5f 62 75 66 5f 66 75 6e  r m_pPut_buf_fun
4240: 63 3b 0a 20 20 76 6f 69 64 20 2a 6d 5f 70 50 75  c;.  void *m_pPu
4250: 74 5f 62 75 66 5f 75 73 65 72 3b 0a 20 20 6d 7a  t_buf_user;.  mz
4260: 5f 75 69 6e 74 20 6d 5f 66 6c 61 67 73 2c 20 6d  _uint m_flags, m
4270: 5f 6d 61 78 5f 70 72 6f 62 65 73 5b 32 5d 3b 0a  _max_probes[2];.
4280: 20 20 69 6e 74 20 6d 5f 67 72 65 65 64 79 5f 70    int m_greedy_p
4290: 61 72 73 69 6e 67 3b 0a 20 20 6d 7a 5f 75 69 6e  arsing;.  mz_uin
42a0: 74 20 6d 5f 61 64 6c 65 72 33 32 2c 20 6d 5f 6c  t m_adler32, m_l
42b0: 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 2c 20 6d 5f  ookahead_pos, m_
42c0: 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 2c 20  lookahead_size, 
42d0: 6d 5f 64 69 63 74 5f 73 69 7a 65 3b 0a 20 20 6d  m_dict_size;.  m
42e0: 7a 5f 75 69 6e 74 38 20 2a 6d 5f 70 4c 5a 5f 63  z_uint8 *m_pLZ_c
42f0: 6f 64 65 5f 62 75 66 2c 20 2a 6d 5f 70 4c 5a 5f  ode_buf, *m_pLZ_
4300: 66 6c 61 67 73 2c 20 2a 6d 5f 70 4f 75 74 70 75  flags, *m_pOutpu
4310: 74 5f 62 75 66 2c 20 2a 6d 5f 70 4f 75 74 70 75  t_buf, *m_pOutpu
4320: 74 5f 62 75 66 5f 65 6e 64 3b 0a 20 20 6d 7a 5f  t_buf_end;.  mz_
4330: 75 69 6e 74 20 6d 5f 6e 75 6d 5f 66 6c 61 67 73  uint m_num_flags
4340: 5f 6c 65 66 74 2c 20 6d 5f 74 6f 74 61 6c 5f 6c  _left, m_total_l
4350: 7a 5f 62 79 74 65 73 2c 20 6d 5f 6c 7a 5f 63 6f  z_bytes, m_lz_co
4360: 64 65 5f 62 75 66 5f 64 69 63 74 5f 70 6f 73 2c  de_buf_dict_pos,
4370: 20 6d 5f 62 69 74 73 5f 69 6e 2c 20 6d 5f 62 69   m_bits_in, m_bi
4380: 74 5f 62 75 66 66 65 72 3b 0a 20 20 6d 7a 5f 75  t_buffer;.  mz_u
4390: 69 6e 74 20 6d 5f 73 61 76 65 64 5f 6d 61 74 63  int m_saved_matc
43a0: 68 5f 64 69 73 74 2c 20 6d 5f 73 61 76 65 64 5f  h_dist, m_saved_
43b0: 6d 61 74 63 68 5f 6c 65 6e 2c 20 6d 5f 73 61 76  match_len, m_sav
43c0: 65 64 5f 6c 69 74 2c 20 6d 5f 6f 75 74 70 75 74  ed_lit, m_output
43d0: 5f 66 6c 75 73 68 5f 6f 66 73 2c 20 6d 5f 6f 75  _flush_ofs, m_ou
43e0: 74 70 75 74 5f 66 6c 75 73 68 5f 72 65 6d 61 69  tput_flush_remai
43f0: 6e 69 6e 67 2c 20 6d 5f 66 69 6e 69 73 68 65 64  ning, m_finished
4400: 2c 20 6d 5f 62 6c 6f 63 6b 5f 69 6e 64 65 78 2c  , m_block_index,
4410: 20 6d 5f 77 61 6e 74 73 5f 74 6f 5f 66 69 6e 69   m_wants_to_fini
4420: 73 68 3b 0a 20 20 74 64 65 66 6c 5f 73 74 61 74  sh;.  tdefl_stat
4430: 75 73 20 6d 5f 70 72 65 76 5f 72 65 74 75 72 6e  us m_prev_return
4440: 5f 73 74 61 74 75 73 3b 0a 20 20 63 6f 6e 73 74  _status;.  const
4450: 20 76 6f 69 64 20 2a 6d 5f 70 49 6e 5f 62 75 66   void *m_pIn_buf
4460: 3b 0a 20 20 76 6f 69 64 20 2a 6d 5f 70 4f 75 74  ;.  void *m_pOut
4470: 5f 62 75 66 3b 0a 20 20 73 69 7a 65 5f 74 20 2a  _buf;.  size_t *
4480: 6d 5f 70 49 6e 5f 62 75 66 5f 73 69 7a 65 2c 20  m_pIn_buf_size, 
4490: 2a 6d 5f 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65  *m_pOut_buf_size
44a0: 3b 0a 20 20 74 64 65 66 6c 5f 66 6c 75 73 68 20  ;.  tdefl_flush 
44b0: 6d 5f 66 6c 75 73 68 3b 0a 20 20 63 6f 6e 73 74  m_flush;.  const
44c0: 20 6d 7a 5f 75 69 6e 74 38 20 2a 6d 5f 70 53 72   mz_uint8 *m_pSr
44d0: 63 3b 0a 20 20 73 69 7a 65 5f 74 20 6d 5f 73 72  c;.  size_t m_sr
44e0: 63 5f 62 75 66 5f 6c 65 66 74 2c 20 6d 5f 6f 75  c_buf_left, m_ou
44f0: 74 5f 62 75 66 5f 6f 66 73 3b 0a 20 20 6d 7a 5f  t_buf_ofs;.  mz_
4500: 75 69 6e 74 38 20 6d 5f 64 69 63 74 5b 54 44 45  uint8 m_dict[TDE
4510: 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 20  FL_LZ_DICT_SIZE 
4520: 2b 20 54 44 45 46 4c 5f 4d 41 58 5f 4d 41 54 43  + TDEFL_MAX_MATC
4530: 48 5f 4c 45 4e 20 2d 20 31 5d 3b 0a 20 20 6d 7a  H_LEN - 1];.  mz
4540: 5f 75 69 6e 74 31 36 20 6d 5f 68 75 66 66 5f 63  _uint16 m_huff_c
4550: 6f 75 6e 74 5b 54 44 45 46 4c 5f 4d 41 58 5f 48  ount[TDEFL_MAX_H
4560: 55 46 46 5f 54 41 42 4c 45 53 5d 5b 54 44 45 46  UFF_TABLES][TDEF
4570: 4c 5f 4d 41 58 5f 48 55 46 46 5f 53 59 4d 42 4f  L_MAX_HUFF_SYMBO
4580: 4c 53 5d 3b 0a 20 20 6d 7a 5f 75 69 6e 74 31 36  LS];.  mz_uint16
4590: 20 6d 5f 68 75 66 66 5f 63 6f 64 65 73 5b 54 44   m_huff_codes[TD
45a0: 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 54 41 42  EFL_MAX_HUFF_TAB
45b0: 4c 45 53 5d 5b 54 44 45 46 4c 5f 4d 41 58 5f 48  LES][TDEFL_MAX_H
45c0: 55 46 46 5f 53 59 4d 42 4f 4c 53 5d 3b 0a 20 20  UFF_SYMBOLS];.  
45d0: 6d 7a 5f 75 69 6e 74 38 20 6d 5f 68 75 66 66 5f  mz_uint8 m_huff_
45e0: 63 6f 64 65 5f 73 69 7a 65 73 5b 54 44 45 46 4c  code_sizes[TDEFL
45f0: 5f 4d 41 58 5f 48 55 46 46 5f 54 41 42 4c 45 53  _MAX_HUFF_TABLES
4600: 5d 5b 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46  ][TDEFL_MAX_HUFF
4610: 5f 53 59 4d 42 4f 4c 53 5d 3b 0a 20 20 6d 7a 5f  _SYMBOLS];.  mz_
4620: 75 69 6e 74 38 20 6d 5f 6c 7a 5f 63 6f 64 65 5f  uint8 m_lz_code_
4630: 62 75 66 5b 54 44 45 46 4c 5f 4c 5a 5f 43 4f 44  buf[TDEFL_LZ_COD
4640: 45 5f 42 55 46 5f 53 49 5a 45 5d 3b 0a 20 20 6d  E_BUF_SIZE];.  m
4650: 7a 5f 75 69 6e 74 31 36 20 6d 5f 6e 65 78 74 5b  z_uint16 m_next[
4660: 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49  TDEFL_LZ_DICT_SI
4670: 5a 45 5d 3b 0a 20 20 6d 7a 5f 75 69 6e 74 31 36  ZE];.  mz_uint16
4680: 20 6d 5f 68 61 73 68 5b 54 44 45 46 4c 5f 4c 5a   m_hash[TDEFL_LZ
4690: 5f 48 41 53 48 5f 53 49 5a 45 5d 3b 0a 20 20 6d  _HASH_SIZE];.  m
46a0: 7a 5f 75 69 6e 74 38 20 6d 5f 6f 75 74 70 75 74  z_uint8 m_output
46b0: 5f 62 75 66 5b 54 44 45 46 4c 5f 4f 55 54 5f 42  _buf[TDEFL_OUT_B
46c0: 55 46 5f 53 49 5a 45 5d 3b 0a 7d 20 74 64 65 66  UF_SIZE];.} tdef
46d0: 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 3b 0a 0a 2f  l_compressor;../
46e0: 2f 20 49 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  / Initializes th
46f0: 65 20 63 6f 6d 70 72 65 73 73 6f 72 2e 0a 2f 2f  e compressor..//
4700: 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 72   There is no cor
4710: 72 65 73 70 6f 6e 64 69 6e 67 20 64 65 69 6e 69  responding deini
4720: 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 62 65 63  t() function bec
4730: 61 75 73 65 20 74 68 65 20 74 64 65 66 6c 20 41  ause the tdefl A
4740: 50 49 27 73 20 64 6f 20 6e 6f 74 20 64 79 6e 61  PI's do not dyna
4750: 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
4760: 20 6d 65 6d 6f 72 79 2e 0a 2f 2f 20 70 42 75 74   memory..// pBut
4770: 5f 62 75 66 5f 66 75 6e 63 3a 20 49 66 20 4e 55  _buf_func: If NU
4780: 4c 4c 2c 20 6f 75 74 70 75 74 20 64 61 74 61 20  LL, output data 
4790: 77 69 6c 6c 20 62 65 20 73 75 70 70 6c 69 65 64  will be supplied
47a0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
47b0: 64 20 63 61 6c 6c 62 61 63 6b 2e 20 49 6e 20 74  d callback. In t
47c0: 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 75 73  his case, the us
47d0: 65 72 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74  er should call t
47e0: 68 65 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  he tdefl_compres
47f0: 73 5f 62 75 66 66 65 72 28 29 20 41 50 49 20 66  s_buffer() API f
4800: 6f 72 20 63 6f 6d 70 72 65 73 73 69 6f 6e 2e 0a  or compression..
4810: 2f 2f 20 49 66 20 70 42 75 74 5f 62 75 66 5f 66  // If pBut_buf_f
4820: 75 6e 63 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  unc is NULL the 
4830: 75 73 65 72 20 73 68 6f 75 6c 64 20 61 6c 77 61  user should alwa
4840: 79 73 20 63 61 6c 6c 20 74 68 65 20 74 64 65 66  ys call the tdef
4850: 6c 5f 63 6f 6d 70 72 65 73 73 28 29 20 41 50 49  l_compress() API
4860: 2e 0a 2f 2f 20 66 6c 61 67 73 3a 20 53 65 65 20  ..// flags: See 
4870: 74 68 65 20 61 62 6f 76 65 20 65 6e 75 6d 73 20  the above enums 
4880: 28 54 44 45 46 4c 5f 48 55 46 46 4d 41 4e 5f 4f  (TDEFL_HUFFMAN_O
4890: 4e 4c 59 2c 20 54 44 45 46 4c 5f 57 52 49 54 45  NLY, TDEFL_WRITE
48a0: 5f 5a 4c 49 42 5f 48 45 41 44 45 52 2c 20 65 74  _ZLIB_HEADER, et
48b0: 63 2e 29 0a 74 64 65 66 6c 5f 73 74 61 74 75 73  c.).tdefl_status
48c0: 20 74 64 65 66 6c 5f 69 6e 69 74 28 74 64 65 66   tdefl_init(tdef
48d0: 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 20 2a 64 2c  l_compressor *d,
48e0: 20 74 64 65 66 6c 5f 70 75 74 5f 62 75 66 5f 66   tdefl_put_buf_f
48f0: 75 6e 63 5f 70 74 72 20 70 50 75 74 5f 62 75 66  unc_ptr pPut_buf
4900: 5f 66 75 6e 63 2c 20 76 6f 69 64 20 2a 70 50 75  _func, void *pPu
4910: 74 5f 62 75 66 5f 75 73 65 72 2c 20 69 6e 74 20  t_buf_user, int 
4920: 66 6c 61 67 73 29 3b 0a 0a 2f 2f 20 43 6f 6d 70  flags);..// Comp
4930: 72 65 73 73 65 73 20 61 20 62 6c 6f 63 6b 20 6f  resses a block o
4940: 66 20 64 61 74 61 2c 20 63 6f 6e 73 75 6d 69 6e  f data, consumin
4950: 67 20 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65  g as much of the
4960: 20 73 70 65 63 69 66 69 65 64 20 69 6e 70 75 74   specified input
4970: 20 62 75 66 66 65 72 20 61 73 20 70 6f 73 73 69   buffer as possi
4980: 62 6c 65 2c 20 61 6e 64 20 77 72 69 74 69 6e 67  ble, and writing
4990: 20 61 73 20 6d 75 63 68 20 63 6f 6d 70 72 65 73   as much compres
49a0: 73 65 64 20 64 61 74 61 20 74 6f 20 74 68 65 20  sed data to the 
49b0: 73 70 65 63 69 66 69 65 64 20 6f 75 74 70 75 74  specified output
49c0: 20 62 75 66 66 65 72 20 61 73 20 70 6f 73 73 69   buffer as possi
49d0: 62 6c 65 2e 0a 74 64 65 66 6c 5f 73 74 61 74 75  ble..tdefl_statu
49e0: 73 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73  s tdefl_compress
49f0: 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f  (tdefl_compresso
4a00: 72 20 2a 64 2c 20 63 6f 6e 73 74 20 76 6f 69 64  r *d, const void
4a10: 20 2a 70 49 6e 5f 62 75 66 2c 20 73 69 7a 65 5f   *pIn_buf, size_
4a20: 74 20 2a 70 49 6e 5f 62 75 66 5f 73 69 7a 65 2c  t *pIn_buf_size,
4a30: 20 76 6f 69 64 20 2a 70 4f 75 74 5f 62 75 66 2c   void *pOut_buf,
4a40: 20 73 69 7a 65 5f 74 20 2a 70 4f 75 74 5f 62 75   size_t *pOut_bu
4a50: 66 5f 73 69 7a 65 2c 20 74 64 65 66 6c 5f 66 6c  f_size, tdefl_fl
4a60: 75 73 68 20 66 6c 75 73 68 29 3b 0a 0a 2f 2f 20  ush flush);..// 
4a70: 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 62  tdefl_compress_b
4a80: 75 66 66 65 72 28 29 20 69 73 20 6f 6e 6c 79 20  uffer() is only 
4a90: 75 73 61 62 6c 65 20 77 68 65 6e 20 74 68 65 20  usable when the 
4aa0: 74 64 65 66 6c 5f 69 6e 69 74 28 29 20 69 73 20  tdefl_init() is 
4ab0: 63 61 6c 6c 65 64 20 77 69 74 68 20 61 20 6e 6f  called with a no
4ac0: 6e 2d 4e 55 4c 4c 20 74 64 65 66 6c 5f 70 75 74  n-NULL tdefl_put
4ad0: 5f 62 75 66 5f 66 75 6e 63 5f 70 74 72 2e 0a 2f  _buf_func_ptr../
4ae0: 2f 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73  / tdefl_compress
4af0: 5f 62 75 66 66 65 72 28 29 20 61 6c 77 61 79 73  _buffer() always
4b00: 20 63 6f 6e 73 75 6d 65 73 20 74 68 65 20 65 6e   consumes the en
4b10: 74 69 72 65 20 69 6e 70 75 74 20 62 75 66 66 65  tire input buffe
4b20: 72 2e 0a 74 64 65 66 6c 5f 73 74 61 74 75 73 20  r..tdefl_status 
4b30: 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 62  tdefl_compress_b
4b40: 75 66 66 65 72 28 74 64 65 66 6c 5f 63 6f 6d 70  uffer(tdefl_comp
4b50: 72 65 73 73 6f 72 20 2a 64 2c 20 63 6f 6e 73 74  ressor *d, const
4b60: 20 76 6f 69 64 20 2a 70 49 6e 5f 62 75 66 2c 20   void *pIn_buf, 
4b70: 73 69 7a 65 5f 74 20 69 6e 5f 62 75 66 5f 73 69  size_t in_buf_si
4b80: 7a 65 2c 20 74 64 65 66 6c 5f 66 6c 75 73 68 20  ze, tdefl_flush 
4b90: 66 6c 75 73 68 29 3b 0a 0a 74 64 65 66 6c 5f 73  flush);..tdefl_s
4ba0: 74 61 74 75 73 20 74 64 65 66 6c 5f 67 65 74 5f  tatus tdefl_get_
4bb0: 70 72 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74  prev_return_stat
4bc0: 75 73 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  us(tdefl_compres
4bd0: 73 6f 72 20 2a 64 29 3b 0a 6d 7a 5f 75 69 6e 74  sor *d);.mz_uint
4be0: 33 32 20 74 64 65 66 6c 5f 67 65 74 5f 61 64 6c  32 tdefl_get_adl
4bf0: 65 72 33 32 28 74 64 65 66 6c 5f 63 6f 6d 70 72  er32(tdefl_compr
4c00: 65 73 73 6f 72 20 2a 64 29 3b 0a 0a 23 69 66 64  essor *d);..#ifd
4c10: 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a 7d  ef __cplusplus.}
4c20: 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
4c30: 2f 2f 20 4d 49 4e 49 5a 5f 48 45 41 44 45 52 5f  // MINIZ_HEADER_
4c40: 49 4e 43 4c 55 44 45 44 0a 0a 2f 2f 20 2d 2d 2d  INCLUDED..// ---
4c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c60: 20 45 6e 64 20 6f 66 20 48 65 61 64 65 72 3a 20   End of Header: 
4c70: 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66  Implementation f
4c80: 6f 6c 6c 6f 77 73 2e 20 28 49 66 20 79 6f 75 20  ollows. (If you 
4c90: 6f 6e 6c 79 20 77 61 6e 74 20 74 68 65 20 68 65  only want the he
4ca0: 61 64 65 72 2c 20 64 65 66 69 6e 65 20 4d 49 4e  ader, define MIN
4cb0: 49 5a 5f 48 45 41 44 45 52 5f 46 49 4c 45 5f 4f  IZ_HEADER_FILE_O
4cc0: 4e 4c 59 2e 29 0a 0a 23 69 66 6e 64 65 66 20 4d  NLY.)..#ifndef M
4cd0: 49 4e 49 5a 5f 48 45 41 44 45 52 5f 46 49 4c 45  INIZ_HEADER_FILE
4ce0: 5f 4f 4e 4c 59 0a 0a 74 79 70 65 64 65 66 20 75  _ONLY..typedef u
4cf0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6d 7a 5f  nsigned char mz_
4d00: 76 61 6c 69 64 61 74 65 5f 75 69 6e 74 31 36 5b  validate_uint16[
4d10: 73 69 7a 65 6f 66 28 6d 7a 5f 75 69 6e 74 31 36  sizeof(mz_uint16
4d20: 29 3d 3d 32 20 3f 20 31 20 3a 20 2d 31 5d 3b 0a  )==2 ? 1 : -1];.
4d30: 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64  typedef unsigned
4d40: 20 63 68 61 72 20 6d 7a 5f 76 61 6c 69 64 61 74   char mz_validat
4d50: 65 5f 75 69 6e 74 33 32 5b 73 69 7a 65 6f 66 28  e_uint32[sizeof(
4d60: 6d 7a 5f 75 69 6e 74 33 32 29 3d 3d 34 20 3f 20  mz_uint32)==4 ? 
4d70: 31 20 3a 20 2d 31 5d 3b 0a 74 79 70 65 64 65 66  1 : -1];.typedef
4d80: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6d   unsigned char m
4d90: 7a 5f 76 61 6c 69 64 61 74 65 5f 75 69 6e 74 36  z_validate_uint6
4da0: 34 5b 73 69 7a 65 6f 66 28 6d 7a 5f 75 69 6e 74  4[sizeof(mz_uint
4db0: 36 34 29 3d 3d 38 20 3f 20 31 20 3a 20 2d 31 5d  64)==8 ? 1 : -1]
4dc0: 3b 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  ;..#include <str
4dd0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
4de0: 3c 61 73 73 65 72 74 2e 68 3e 0a 0a 23 64 65 66  <assert.h>..#def
4df0: 69 6e 65 20 4d 5a 5f 41 53 53 45 52 54 28 78 29  ine MZ_ASSERT(x)
4e00: 20 61 73 73 65 72 74 28 78 29 0a 0a 23 69 66 64   assert(x)..#ifd
4e10: 65 66 20 4d 49 4e 49 5a 5f 4e 4f 5f 4d 41 4c 4c  ef MINIZ_NO_MALL
4e20: 4f 43 0a 20 20 23 64 65 66 69 6e 65 20 4d 5a 5f  OC.  #define MZ_
4e30: 4d 41 4c 4c 4f 43 28 78 29 20 4e 55 4c 4c 0a 20  MALLOC(x) NULL. 
4e40: 20 23 64 65 66 69 6e 65 20 4d 5a 5f 46 52 45 45   #define MZ_FREE
4e50: 28 78 29 20 28 76 6f 69 64 29 78 2c 20 28 28 76  (x) (void)x, ((v
4e60: 6f 69 64 29 30 29 0a 20 20 23 64 65 66 69 6e 65  oid)0).  #define
4e70: 20 4d 5a 5f 52 45 41 4c 4c 4f 43 28 70 2c 20 78   MZ_REALLOC(p, x
4e80: 29 20 4e 55 4c 4c 0a 23 65 6c 73 65 0a 20 20 23  ) NULL.#else.  #
4e90: 64 65 66 69 6e 65 20 4d 5a 5f 4d 41 4c 4c 4f 43  define MZ_MALLOC
4ea0: 28 78 29 20 6d 61 6c 6c 6f 63 28 78 29 0a 20 20  (x) malloc(x).  
4eb0: 23 64 65 66 69 6e 65 20 4d 5a 5f 46 52 45 45 28  #define MZ_FREE(
4ec0: 78 29 20 66 72 65 65 28 78 29 0a 20 20 23 64 65  x) free(x).  #de
4ed0: 66 69 6e 65 20 4d 5a 5f 52 45 41 4c 4c 4f 43 28  fine MZ_REALLOC(
4ee0: 70 2c 20 78 29 20 72 65 61 6c 6c 6f 63 28 70 2c  p, x) realloc(p,
4ef0: 20 78 29 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66   x).#endif..#def
4f00: 69 6e 65 20 4d 5a 5f 4d 41 58 28 61 2c 62 29 20  ine MZ_MAX(a,b) 
4f10: 28 28 28 61 29 3e 28 62 29 29 3f 28 61 29 3a 28  (((a)>(b))?(a):(
4f20: 62 29 29 0a 23 64 65 66 69 6e 65 20 4d 5a 5f 4d  b)).#define MZ_M
4f30: 49 4e 28 61 2c 62 29 20 28 28 28 61 29 3c 28 62  IN(a,b) (((a)<(b
4f40: 29 29 3f 28 61 29 3a 28 62 29 29 0a 23 64 65 66  ))?(a):(b)).#def
4f50: 69 6e 65 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a  ine MZ_CLEAR_OBJ
4f60: 28 6f 62 6a 29 20 6d 65 6d 73 65 74 28 26 28 6f  (obj) memset(&(o
4f70: 62 6a 29 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6f  bj), 0, sizeof(o
4f80: 62 6a 29 29 0a 0a 23 69 66 20 4d 49 4e 49 5a 5f  bj))..#if MINIZ_
4f90: 55 53 45 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f  USE_UNALIGNED_LO
4fa0: 41 44 53 5f 41 4e 44 5f 53 54 4f 52 45 53 20 26  ADS_AND_STORES &
4fb0: 26 20 4d 49 4e 49 5a 5f 4c 49 54 54 4c 45 5f 45  & MINIZ_LITTLE_E
4fc0: 4e 44 49 41 4e 0a 20 20 23 64 65 66 69 6e 65 20  NDIAN.  #define 
4fd0: 4d 5a 5f 52 45 41 44 5f 4c 45 31 36 28 70 29 20  MZ_READ_LE16(p) 
4fe0: 2a 28 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  *((const mz_uint
4ff0: 31 36 20 2a 29 28 70 29 29 0a 20 20 23 64 65 66  16 *)(p)).  #def
5000: 69 6e 65 20 4d 5a 5f 52 45 41 44 5f 4c 45 33 32  ine MZ_READ_LE32
5010: 28 70 29 20 2a 28 28 63 6f 6e 73 74 20 6d 7a 5f  (p) *((const mz_
5020: 75 69 6e 74 33 32 20 2a 29 28 70 29 29 0a 23 65  uint32 *)(p)).#e
5030: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 4d 5a  lse.  #define MZ
5040: 5f 52 45 41 44 5f 4c 45 31 36 28 70 29 20 28 28  _READ_LE16(p) ((
5050: 6d 7a 5f 75 69 6e 74 33 32 29 28 28 28 63 6f 6e  mz_uint32)(((con
5060: 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 29 28 70  st mz_uint8 *)(p
5070: 29 29 5b 30 5d 29 20 7c 20 28 28 6d 7a 5f 75 69  ))[0]) | ((mz_ui
5080: 6e 74 33 32 29 28 28 28 63 6f 6e 73 74 20 6d 7a  nt32)(((const mz
5090: 5f 75 69 6e 74 38 20 2a 29 28 70 29 29 5b 31 5d  _uint8 *)(p))[1]
50a0: 29 20 3c 3c 20 38 55 29 29 0a 20 20 23 64 65 66  ) << 8U)).  #def
50b0: 69 6e 65 20 4d 5a 5f 52 45 41 44 5f 4c 45 33 32  ine MZ_READ_LE32
50c0: 28 70 29 20 28 28 6d 7a 5f 75 69 6e 74 33 32 29  (p) ((mz_uint32)
50d0: 28 28 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  (((const mz_uint
50e0: 38 20 2a 29 28 70 29 29 5b 30 5d 29 20 7c 20 28  8 *)(p))[0]) | (
50f0: 28 6d 7a 5f 75 69 6e 74 33 32 29 28 28 28 63 6f  (mz_uint32)(((co
5100: 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 29 28  nst mz_uint8 *)(
5110: 70 29 29 5b 31 5d 29 20 3c 3c 20 38 55 29 20 7c  p))[1]) << 8U) |
5120: 20 28 28 6d 7a 5f 75 69 6e 74 33 32 29 28 28 28   ((mz_uint32)(((
5130: 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a  const mz_uint8 *
5140: 29 28 70 29 29 5b 32 5d 29 20 3c 3c 20 31 36 55  )(p))[2]) << 16U
5150: 29 20 7c 20 28 28 6d 7a 5f 75 69 6e 74 33 32 29  ) | ((mz_uint32)
5160: 28 28 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  (((const mz_uint
5170: 38 20 2a 29 28 70 29 29 5b 33 5d 29 20 3c 3c 20  8 *)(p))[3]) << 
5180: 32 34 55 29 29 0a 23 65 6e 64 69 66 0a 0a 23 69  24U)).#endif..#i
5190: 66 64 65 66 20 5f 4d 53 43 5f 56 45 52 0a 20 20  fdef _MSC_VER.  
51a0: 23 64 65 66 69 6e 65 20 4d 5a 5f 46 4f 52 43 45  #define MZ_FORCE
51b0: 49 4e 4c 49 4e 45 20 5f 5f 66 6f 72 63 65 69 6e  INLINE __forcein
51c0: 6c 69 6e 65 0a 23 65 6c 69 66 20 64 65 66 69 6e  line.#elif defin
51d0: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 23  ed(__GNUC__).  #
51e0: 64 65 66 69 6e 65 20 4d 5a 5f 46 4f 52 43 45 49  define MZ_FORCEI
51f0: 4e 4c 49 4e 45 20 69 6e 6c 69 6e 65 20 5f 5f 61  NLINE inline __a
5200: 74 74 72 69 62 75 74 65 5f 5f 28 28 5f 5f 61 6c  ttribute__((__al
5210: 77 61 79 73 5f 69 6e 6c 69 6e 65 5f 5f 29 29 0a  ways_inline__)).
5220: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
5230: 4d 5a 5f 46 4f 52 43 45 49 4e 4c 49 4e 45 0a 23  MZ_FORCEINLINE.#
5240: 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 5f 5f  endif..#ifdef __
5250: 63 70 6c 75 73 70 6c 75 73 0a 20 20 65 78 74 65  cplusplus.  exte
5260: 72 6e 20 22 43 22 20 7b 0a 23 65 6e 64 69 66 0a  rn "C" {.#endif.
5270: 0a 2f 2f 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .// ------------
5280: 2d 2d 2d 2d 2d 2d 2d 20 7a 6c 69 62 2d 73 74 79  ------- zlib-sty
5290: 6c 65 20 41 50 49 27 73 0a 0a 6d 7a 5f 75 6c 6f  le API's..mz_ulo
52a0: 6e 67 20 6d 7a 5f 61 64 6c 65 72 33 32 28 6d 7a  ng mz_adler32(mz
52b0: 5f 75 6c 6f 6e 67 20 61 64 6c 65 72 2c 20 63 6f  _ulong adler, co
52c0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
52d0: 72 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 62  r *ptr, size_t b
52e0: 75 66 5f 6c 65 6e 29 0a 7b 0a 20 20 6d 7a 5f 75  uf_len).{.  mz_u
52f0: 69 6e 74 33 32 20 69 2c 20 73 31 20 3d 20 28 6d  int32 i, s1 = (m
5300: 7a 5f 75 69 6e 74 33 32 29 28 61 64 6c 65 72 20  z_uint32)(adler 
5310: 26 20 30 78 66 66 66 66 29 2c 20 73 32 20 3d 20  & 0xffff), s2 = 
5320: 28 6d 7a 5f 75 69 6e 74 33 32 29 28 61 64 6c 65  (mz_uint32)(adle
5330: 72 20 3e 3e 20 31 36 29 3b 20 73 69 7a 65 5f 74  r >> 16); size_t
5340: 20 62 6c 6f 63 6b 5f 6c 65 6e 20 3d 20 62 75 66   block_len = buf
5350: 5f 6c 65 6e 20 25 20 35 35 35 32 3b 0a 20 20 69  _len % 5552;.  i
5360: 66 20 28 21 70 74 72 29 20 72 65 74 75 72 6e 20  f (!ptr) return 
5370: 4d 5a 5f 41 44 4c 45 52 33 32 5f 49 4e 49 54 3b  MZ_ADLER32_INIT;
5380: 0a 20 20 77 68 69 6c 65 20 28 62 75 66 5f 6c 65  .  while (buf_le
5390: 6e 29 20 7b 0a 20 20 20 20 66 6f 72 20 28 69 20  n) {.    for (i 
53a0: 3d 20 30 3b 20 69 20 2b 20 37 20 3c 20 62 6c 6f  = 0; i + 7 < blo
53b0: 63 6b 5f 6c 65 6e 3b 20 69 20 2b 3d 20 38 2c 20  ck_len; i += 8, 
53c0: 70 74 72 20 2b 3d 20 38 29 20 7b 0a 20 20 20 20  ptr += 8) {.    
53d0: 20 20 73 31 20 2b 3d 20 70 74 72 5b 30 5d 2c 20    s1 += ptr[0], 
53e0: 73 32 20 2b 3d 20 73 31 3b 20 73 31 20 2b 3d 20  s2 += s1; s1 += 
53f0: 70 74 72 5b 31 5d 2c 20 73 32 20 2b 3d 20 73 31  ptr[1], s2 += s1
5400: 3b 20 73 31 20 2b 3d 20 70 74 72 5b 32 5d 2c 20  ; s1 += ptr[2], 
5410: 73 32 20 2b 3d 20 73 31 3b 20 73 31 20 2b 3d 20  s2 += s1; s1 += 
5420: 70 74 72 5b 33 5d 2c 20 73 32 20 2b 3d 20 73 31  ptr[3], s2 += s1
5430: 3b 0a 20 20 20 20 20 20 73 31 20 2b 3d 20 70 74  ;.      s1 += pt
5440: 72 5b 34 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 20  r[4], s2 += s1; 
5450: 73 31 20 2b 3d 20 70 74 72 5b 35 5d 2c 20 73 32  s1 += ptr[5], s2
5460: 20 2b 3d 20 73 31 3b 20 73 31 20 2b 3d 20 70 74   += s1; s1 += pt
5470: 72 5b 36 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 20  r[6], s2 += s1; 
5480: 73 31 20 2b 3d 20 70 74 72 5b 37 5d 2c 20 73 32  s1 += ptr[7], s2
5490: 20 2b 3d 20 73 31 3b 0a 20 20 20 20 7d 0a 20 20   += s1;.    }.  
54a0: 20 20 66 6f 72 20 28 20 3b 20 69 20 3c 20 62 6c    for ( ; i < bl
54b0: 6f 63 6b 5f 6c 65 6e 3b 20 2b 2b 69 29 20 73 31  ock_len; ++i) s1
54c0: 20 2b 3d 20 2a 70 74 72 2b 2b 2c 20 73 32 20 2b   += *ptr++, s2 +
54d0: 3d 20 73 31 3b 0a 20 20 20 20 73 31 20 25 3d 20  = s1;.    s1 %= 
54e0: 36 35 35 32 31 55 2c 20 73 32 20 25 3d 20 36 35  65521U, s2 %= 65
54f0: 35 32 31 55 3b 20 62 75 66 5f 6c 65 6e 20 2d 3d  521U; buf_len -=
5500: 20 62 6c 6f 63 6b 5f 6c 65 6e 3b 20 62 6c 6f 63   block_len; bloc
5510: 6b 5f 6c 65 6e 20 3d 20 35 35 35 32 3b 0a 20 20  k_len = 5552;.  
5520: 7d 0a 20 20 72 65 74 75 72 6e 20 28 73 32 20 3c  }.  return (s2 <
5530: 3c 20 31 36 29 20 2b 20 73 31 3b 0a 7d 0a 0a 2f  < 16) + s1;.}../
5540: 2f 20 4b 61 72 6c 20 4d 61 6c 62 72 61 69 6e 27  / Karl Malbrain'
5550: 73 20 63 6f 6d 70 61 63 74 20 43 52 43 2d 33 32  s compact CRC-32
5560: 2e 20 53 65 65 20 22 41 20 63 6f 6d 70 61 63 74  . See "A compact
5570: 20 43 43 49 54 54 20 63 72 63 31 36 20 61 6e 64   CCITT crc16 and
5580: 20 63 72 63 33 32 20 43 20 69 6d 70 6c 65 6d 65   crc32 C impleme
5590: 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 62 61 6c  ntation that bal
55a0: 61 6e 63 65 73 20 70 72 6f 63 65 73 73 6f 72 20  ances processor 
55b0: 63 61 63 68 65 20 75 73 61 67 65 20 61 67 61 69  cache usage agai
55c0: 6e 73 74 20 73 70 65 65 64 22 3a 20 68 74 74 70  nst speed": http
55d0: 3a 2f 2f 77 77 77 2e 67 65 6f 63 69 74 69 65 73  ://www.geocities
55e0: 2e 63 6f 6d 2f 6d 61 6c 62 72 61 69 6e 2f 0a 6d  .com/malbrain/.m
55f0: 7a 5f 75 6c 6f 6e 67 20 6d 7a 5f 63 72 63 33 32  z_ulong mz_crc32
5600: 28 6d 7a 5f 75 6c 6f 6e 67 20 63 72 63 2c 20 63  (mz_ulong crc, c
5610: 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  onst mz_uint8 *p
5620: 74 72 2c 20 73 69 7a 65 5f 74 20 62 75 66 5f 6c  tr, size_t buf_l
5630: 65 6e 29 0a 7b 0a 20 20 73 74 61 74 69 63 20 63  en).{.  static c
5640: 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 33 32 20 73  onst mz_uint32 s
5650: 5f 63 72 63 33 32 5b 31 36 5d 20 3d 20 7b 20 30  _crc32[16] = { 0
5660: 2c 20 30 78 31 64 62 37 31 30 36 34 2c 20 30 78  , 0x1db71064, 0x
5670: 33 62 36 65 32 30 63 38 2c 20 30 78 32 36 64 39  3b6e20c8, 0x26d9
5680: 33 30 61 63 2c 20 30 78 37 36 64 63 34 31 39 30  30ac, 0x76dc4190
5690: 2c 20 30 78 36 62 36 62 35 31 66 34 2c 20 30 78  , 0x6b6b51f4, 0x
56a0: 34 64 62 32 36 31 35 38 2c 20 30 78 35 30 30 35  4db26158, 0x5005
56b0: 37 31 33 63 2c 0a 20 20 20 20 30 78 65 64 62 38  713c,.    0xedb8
56c0: 38 33 32 30 2c 20 30 78 66 30 30 66 39 33 34 34  8320, 0xf00f9344
56d0: 2c 20 30 78 64 36 64 36 61 33 65 38 2c 20 30 78  , 0xd6d6a3e8, 0x
56e0: 63 62 36 31 62 33 38 63 2c 20 30 78 39 62 36 34  cb61b38c, 0x9b64
56f0: 63 32 62 30 2c 20 30 78 38 36 64 33 64 32 64 34  c2b0, 0x86d3d2d4
5700: 2c 20 30 78 61 30 30 61 65 32 37 38 2c 20 30 78  , 0xa00ae278, 0x
5710: 62 64 62 64 66 32 31 63 20 7d 3b 0a 20 20 6d 7a  bdbdf21c };.  mz
5720: 5f 75 69 6e 74 33 32 20 63 72 63 75 33 32 20 3d  _uint32 crcu32 =
5730: 20 28 6d 7a 5f 75 69 6e 74 33 32 29 63 72 63 3b   (mz_uint32)crc;
5740: 0a 20 20 69 66 20 28 21 70 74 72 29 20 72 65 74  .  if (!ptr) ret
5750: 75 72 6e 20 4d 5a 5f 43 52 43 33 32 5f 49 4e 49  urn MZ_CRC32_INI
5760: 54 3b 0a 20 20 63 72 63 75 33 32 20 3d 20 7e 63  T;.  crcu32 = ~c
5770: 72 63 75 33 32 3b 20 77 68 69 6c 65 20 28 62 75  rcu32; while (bu
5780: 66 5f 6c 65 6e 2d 2d 29 20 7b 20 6d 7a 5f 75 69  f_len--) { mz_ui
5790: 6e 74 38 20 62 20 3d 20 2a 70 74 72 2b 2b 3b 20  nt8 b = *ptr++; 
57a0: 63 72 63 75 33 32 20 3d 20 28 63 72 63 75 33 32  crcu32 = (crcu32
57b0: 20 3e 3e 20 34 29 20 5e 20 73 5f 63 72 63 33 32   >> 4) ^ s_crc32
57c0: 5b 28 63 72 63 75 33 32 20 26 20 30 78 46 29 20  [(crcu32 & 0xF) 
57d0: 5e 20 28 62 20 26 20 30 78 46 29 5d 3b 20 63 72  ^ (b & 0xF)]; cr
57e0: 63 75 33 32 20 3d 20 28 63 72 63 75 33 32 20 3e  cu32 = (crcu32 >
57f0: 3e 20 34 29 20 5e 20 73 5f 63 72 63 33 32 5b 28  > 4) ^ s_crc32[(
5800: 63 72 63 75 33 32 20 26 20 30 78 46 29 20 5e 20  crcu32 & 0xF) ^ 
5810: 28 62 20 3e 3e 20 34 29 5d 3b 20 7d 0a 20 20 72  (b >> 4)]; }.  r
5820: 65 74 75 72 6e 20 7e 63 72 63 75 33 32 3b 0a 7d  eturn ~crcu32;.}
5830: 0a 0a 76 6f 69 64 20 6d 7a 5f 66 72 65 65 28 76  ..void mz_free(v
5840: 6f 69 64 20 2a 70 29 0a 7b 0a 20 20 4d 5a 5f 46  oid *p).{.  MZ_F
5850: 52 45 45 28 70 29 3b 0a 7d 0a 0a 2f 2f 20 2d 2d  REE(p);.}..// --
5860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5870: 2d 20 4c 6f 77 2d 6c 65 76 65 6c 20 44 65 63 6f  - Low-level Deco
5880: 6d 70 72 65 73 73 69 6f 6e 20 28 63 6f 6d 70 6c  mpression (compl
5890: 65 74 65 6c 79 20 69 6e 64 65 70 65 6e 64 65 6e  etely independen
58a0: 74 20 66 72 6f 6d 20 61 6c 6c 20 63 6f 6d 70 72  t from all compr
58b0: 65 73 73 69 6f 6e 20 41 50 49 27 73 29 0a 0a 23  ession API's)..#
58c0: 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 4d 45 4d  define TINFL_MEM
58d0: 43 50 59 28 64 2c 20 73 2c 20 6c 29 20 6d 65 6d  CPY(d, s, l) mem
58e0: 63 70 79 28 64 2c 20 73 2c 20 6c 29 0a 23 64 65  cpy(d, s, l).#de
58f0: 66 69 6e 65 20 54 49 4e 46 4c 5f 4d 45 4d 53 45  fine TINFL_MEMSE
5900: 54 28 70 2c 20 63 2c 20 6c 29 20 6d 65 6d 73 65  T(p, c, l) memse
5910: 74 28 70 2c 20 63 2c 20 6c 29 0a 0a 23 64 65 66  t(p, c, l)..#def
5920: 69 6e 65 20 54 49 4e 46 4c 5f 43 52 5f 42 45 47  ine TINFL_CR_BEG
5930: 49 4e 20 73 77 69 74 63 68 28 72 2d 3e 6d 5f 73  IN switch(r->m_s
5940: 74 61 74 65 29 20 7b 20 63 61 73 65 20 30 3a 0a  tate) { case 0:.
5950: 23 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 43 52  #define TINFL_CR
5960: 5f 52 45 54 55 52 4e 28 73 74 61 74 65 5f 69 6e  _RETURN(state_in
5970: 64 65 78 2c 20 72 65 73 75 6c 74 29 20 64 6f 20  dex, result) do 
5980: 7b 20 73 74 61 74 75 73 20 3d 20 72 65 73 75 6c  { status = resul
5990: 74 3b 20 72 2d 3e 6d 5f 73 74 61 74 65 20 3d 20  t; r->m_state = 
59a0: 73 74 61 74 65 5f 69 6e 64 65 78 3b 20 67 6f 74  state_index; got
59b0: 6f 20 63 6f 6d 6d 6f 6e 5f 65 78 69 74 3b 20 63  o common_exit; c
59c0: 61 73 65 20 73 74 61 74 65 5f 69 6e 64 65 78 3a  ase state_index:
59d0: 3b 20 7d 20 4d 5a 5f 4d 41 43 52 4f 5f 45 4e 44  ; } MZ_MACRO_END
59e0: 0a 23 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 43  .#define TINFL_C
59f0: 52 5f 52 45 54 55 52 4e 5f 46 4f 52 45 56 45 52  R_RETURN_FOREVER
5a00: 28 73 74 61 74 65 5f 69 6e 64 65 78 2c 20 72 65  (state_index, re
5a10: 73 75 6c 74 29 20 64 6f 20 7b 20 66 6f 72 20 28  sult) do { for (
5a20: 20 3b 20 3b 20 29 20 7b 20 54 49 4e 46 4c 5f 43   ; ; ) { TINFL_C
5a30: 52 5f 52 45 54 55 52 4e 28 73 74 61 74 65 5f 69  R_RETURN(state_i
5a40: 6e 64 65 78 2c 20 72 65 73 75 6c 74 29 3b 20 7d  ndex, result); }
5a50: 20 7d 20 4d 5a 5f 4d 41 43 52 4f 5f 45 4e 44 0a   } MZ_MACRO_END.
5a60: 23 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f 43 52  #define TINFL_CR
5a70: 5f 46 49 4e 49 53 48 20 7d 0a 0a 2f 2f 20 54 4f  _FINISH }..// TO
5a80: 44 4f 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65  DO: If the calle
5a90: 72 20 68 61 73 20 69 6e 64 69 63 61 74 65 64 20  r has indicated 
5aa0: 74 68 61 74 20 74 68 65 72 65 27 73 20 6e 6f 20  that there's no 
5ab0: 6d 6f 72 65 20 69 6e 70 75 74 2c 20 61 6e 64 20  more input, and 
5ac0: 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  we attempt to re
5ad0: 61 64 20 62 65 79 6f 6e 64 20 74 68 65 20 69 6e  ad beyond the in
5ae0: 70 75 74 20 62 75 66 2c 20 74 68 65 6e 20 73 6f  put buf, then so
5af0: 6d 65 74 68 69 6e 67 20 69 73 20 77 72 6f 6e 67  mething is wrong
5b00: 20 77 69 74 68 20 74 68 65 20 69 6e 70 75 74 20   with the input 
5b10: 62 65 63 61 75 73 65 20 74 68 65 20 69 6e 66 6c  because the infl
5b20: 61 74 6f 72 20 6e 65 76 65 72 0a 2f 2f 20 72 65  ator never.// re
5b30: 61 64 73 20 61 68 65 61 64 20 6d 6f 72 65 20 74  ads ahead more t
5b40: 68 61 6e 20 69 74 20 6e 65 65 64 73 20 74 6f 2e  han it needs to.
5b50: 20 43 75 72 72 65 6e 74 6c 79 20 54 49 4e 46 4c   Currently TINFL
5b60: 5f 47 45 54 5f 42 59 54 45 28 29 20 70 61 64 73  _GET_BYTE() pads
5b70: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
5b80: 73 74 72 65 61 6d 20 77 69 74 68 20 30 27 73 20  stream with 0's 
5b90: 69 6e 20 74 68 69 73 20 73 63 65 6e 61 72 69 6f  in this scenario
5ba0: 2e 0a 23 64 65 66 69 6e 65 20 54 49 4e 46 4c 5f  ..#define TINFL_
5bb0: 47 45 54 5f 42 59 54 45 28 73 74 61 74 65 5f 69  GET_BYTE(state_i
5bc0: 6e 64 65 78 2c 20 63 29 20 64 6f 20 7b 20 5c 0a  ndex, c) do { \.
5bd0: 20 20 69 66 20 28 70 49 6e 5f 62 75 66 5f 63 75    if (pIn_buf_cu
5be0: 72 20 3e 3d 20 70 49 6e 5f 62 75 66 5f 65 6e 64  r >= pIn_buf_end
5bf0: 29 20 7b 20 5c 0a 20 20 20 20 66 6f 72 20 28 20  ) { \.    for ( 
5c00: 3b 20 3b 20 29 20 7b 20 5c 0a 20 20 20 20 20 20  ; ; ) { \.      
5c10: 69 66 20 28 64 65 63 6f 6d 70 5f 66 6c 61 67 73  if (decomp_flags
5c20: 20 26 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 48 41   & TINFL_FLAG_HA
5c30: 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 29 20 7b 20  S_MORE_INPUT) { 
5c40: 5c 0a 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f  \.        TINFL_
5c50: 43 52 5f 52 45 54 55 52 4e 28 73 74 61 74 65 5f  CR_RETURN(state_
5c60: 69 6e 64 65 78 2c 20 54 49 4e 46 4c 5f 53 54 41  index, TINFL_STA
5c70: 54 55 53 5f 4e 45 45 44 53 5f 4d 4f 52 45 5f 49  TUS_NEEDS_MORE_I
5c80: 4e 50 55 54 29 3b 20 5c 0a 20 20 20 20 20 20 20  NPUT); \.       
5c90: 20 69 66 20 28 70 49 6e 5f 62 75 66 5f 63 75 72   if (pIn_buf_cur
5ca0: 20 3c 20 70 49 6e 5f 62 75 66 5f 65 6e 64 29 20   < pIn_buf_end) 
5cb0: 7b 20 5c 0a 20 20 20 20 20 20 20 20 20 20 63 20  { \.          c 
5cc0: 3d 20 2a 70 49 6e 5f 62 75 66 5f 63 75 72 2b 2b  = *pIn_buf_cur++
5cd0: 3b 20 5c 0a 20 20 20 20 20 20 20 20 20 20 62 72  ; \.          br
5ce0: 65 61 6b 3b 20 5c 0a 20 20 20 20 20 20 20 20 7d  eak; \.        }
5cf0: 20 5c 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20   \.      } else 
5d00: 7b 20 5c 0a 20 20 20 20 20 20 20 20 63 20 3d 20  { \.        c = 
5d10: 30 3b 20 5c 0a 20 20 20 20 20 20 20 20 62 72 65  0; \.        bre
5d20: 61 6b 3b 20 5c 0a 20 20 20 20 20 20 7d 20 5c 0a  ak; \.      } \.
5d30: 20 20 20 20 7d 20 5c 0a 20 20 7d 20 65 6c 73 65      } \.  } else
5d40: 20 63 20 3d 20 2a 70 49 6e 5f 62 75 66 5f 63 75   c = *pIn_buf_cu
5d50: 72 2b 2b 3b 20 7d 20 4d 5a 5f 4d 41 43 52 4f 5f  r++; } MZ_MACRO_
5d60: 45 4e 44 0a 0a 23 64 65 66 69 6e 65 20 54 49 4e  END..#define TIN
5d70: 46 4c 5f 4e 45 45 44 5f 42 49 54 53 28 73 74 61  FL_NEED_BITS(sta
5d80: 74 65 5f 69 6e 64 65 78 2c 20 6e 29 20 64 6f 20  te_index, n) do 
5d90: 7b 20 6d 7a 5f 75 69 6e 74 20 63 3b 20 54 49 4e  { mz_uint c; TIN
5da0: 46 4c 5f 47 45 54 5f 42 59 54 45 28 73 74 61 74  FL_GET_BYTE(stat
5db0: 65 5f 69 6e 64 65 78 2c 20 63 29 3b 20 62 69 74  e_index, c); bit
5dc0: 5f 62 75 66 20 7c 3d 20 28 28 28 74 69 6e 66 6c  _buf |= (((tinfl
5dd0: 5f 62 69 74 5f 62 75 66 5f 74 29 63 29 20 3c 3c  _bit_buf_t)c) <<
5de0: 20 6e 75 6d 5f 62 69 74 73 29 3b 20 6e 75 6d 5f   num_bits); num_
5df0: 62 69 74 73 20 2b 3d 20 38 3b 20 7d 20 77 68 69  bits += 8; } whi
5e00: 6c 65 20 28 6e 75 6d 5f 62 69 74 73 20 3c 20 28  le (num_bits < (
5e10: 6d 7a 5f 75 69 6e 74 29 28 6e 29 29 0a 23 64 65  mz_uint)(n)).#de
5e20: 66 69 6e 65 20 54 49 4e 46 4c 5f 53 4b 49 50 5f  fine TINFL_SKIP_
5e30: 42 49 54 53 28 73 74 61 74 65 5f 69 6e 64 65 78  BITS(state_index
5e40: 2c 20 6e 29 20 64 6f 20 7b 20 69 66 20 28 6e 75  , n) do { if (nu
5e50: 6d 5f 62 69 74 73 20 3c 20 28 6d 7a 5f 75 69 6e  m_bits < (mz_uin
5e60: 74 29 28 6e 29 29 20 7b 20 54 49 4e 46 4c 5f 4e  t)(n)) { TINFL_N
5e70: 45 45 44 5f 42 49 54 53 28 73 74 61 74 65 5f 69  EED_BITS(state_i
5e80: 6e 64 65 78 2c 20 6e 29 3b 20 7d 20 62 69 74 5f  ndex, n); } bit_
5e90: 62 75 66 20 3e 3e 3d 20 28 6e 29 3b 20 6e 75 6d  buf >>= (n); num
5ea0: 5f 62 69 74 73 20 2d 3d 20 28 6e 29 3b 20 7d 20  _bits -= (n); } 
5eb0: 4d 5a 5f 4d 41 43 52 4f 5f 45 4e 44 0a 23 64 65  MZ_MACRO_END.#de
5ec0: 66 69 6e 65 20 54 49 4e 46 4c 5f 47 45 54 5f 42  fine TINFL_GET_B
5ed0: 49 54 53 28 73 74 61 74 65 5f 69 6e 64 65 78 2c  ITS(state_index,
5ee0: 20 62 2c 20 6e 29 20 64 6f 20 7b 20 69 66 20 28   b, n) do { if (
5ef0: 6e 75 6d 5f 62 69 74 73 20 3c 20 28 6d 7a 5f 75  num_bits < (mz_u
5f00: 69 6e 74 29 28 6e 29 29 20 7b 20 54 49 4e 46 4c  int)(n)) { TINFL
5f10: 5f 4e 45 45 44 5f 42 49 54 53 28 73 74 61 74 65  _NEED_BITS(state
5f20: 5f 69 6e 64 65 78 2c 20 6e 29 3b 20 7d 20 62 20  _index, n); } b 
5f30: 3d 20 62 69 74 5f 62 75 66 20 26 20 28 28 31 20  = bit_buf & ((1 
5f40: 3c 3c 20 28 6e 29 29 20 2d 20 31 29 3b 20 62 69  << (n)) - 1); bi
5f50: 74 5f 62 75 66 20 3e 3e 3d 20 28 6e 29 3b 20 6e  t_buf >>= (n); n
5f60: 75 6d 5f 62 69 74 73 20 2d 3d 20 28 6e 29 3b 20  um_bits -= (n); 
5f70: 7d 20 4d 5a 5f 4d 41 43 52 4f 5f 45 4e 44 0a 0a  } MZ_MACRO_END..
5f80: 2f 2f 20 54 49 4e 46 4c 5f 48 55 46 46 5f 42 49  // TINFL_HUFF_BI
5f90: 54 42 55 46 5f 46 49 4c 4c 28 29 20 69 73 20 6f  TBUF_FILL() is o
5fa0: 6e 6c 79 20 75 73 65 64 20 72 61 72 65 6c 79 2c  nly used rarely,
5fb0: 20 77 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   when the number
5fc0: 20 6f 66 20 62 79 74 65 73 20 72 65 6d 61 69 6e   of bytes remain
5fd0: 69 6e 67 20 69 6e 20 74 68 65 20 69 6e 70 75 74  ing in the input
5fe0: 20 62 75 66 66 65 72 20 66 61 6c 6c 73 20 62 65   buffer falls be
5ff0: 6c 6f 77 20 32 2e 0a 2f 2f 20 49 74 20 72 65 61  low 2..// It rea
6000: 64 73 20 6a 75 73 74 20 65 6e 6f 75 67 68 20 62  ds just enough b
6010: 79 74 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e  ytes from the in
6020: 70 75 74 20 73 74 72 65 61 6d 20 74 68 61 74 20  put stream that 
6030: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 64 65  are needed to de
6040: 63 6f 64 65 20 74 68 65 20 6e 65 78 74 20 48 75  code the next Hu
6050: 66 66 6d 61 6e 20 63 6f 64 65 20 28 61 6e 64 20  ffman code (and 
6060: 61 62 73 6f 6c 75 74 65 6c 79 20 6e 6f 20 6d 6f  absolutely no mo
6070: 72 65 29 2e 20 49 74 20 77 6f 72 6b 73 20 62 79  re). It works by
6080: 20 74 72 79 69 6e 67 20 74 6f 20 66 75 6c 6c 79   trying to fully
6090: 20 64 65 63 6f 64 65 20 61 0a 2f 2f 20 48 75 66   decode a.// Huf
60a0: 66 6d 61 6e 20 63 6f 64 65 20 62 79 20 75 73 69  fman code by usi
60b0: 6e 67 20 77 68 61 74 65 76 65 72 20 62 69 74 73  ng whatever bits
60c0: 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 70   are currently p
60d0: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 62 69  resent in the bi
60e0: 74 20 62 75 66 66 65 72 2e 20 49 66 20 74 68 69  t buffer. If thi
60f0: 73 20 66 61 69 6c 73 2c 20 69 74 20 72 65 61 64  s fails, it read
6100: 73 20 61 6e 6f 74 68 65 72 20 62 79 74 65 2c 20  s another byte, 
6110: 61 6e 64 20 74 72 69 65 73 20 61 67 61 69 6e 20  and tries again 
6120: 75 6e 74 69 6c 20 69 74 20 73 75 63 63 65 65 64  until it succeed
6130: 73 20 6f 72 20 75 6e 74 69 6c 20 74 68 65 0a 2f  s or until the./
6140: 2f 20 62 69 74 20 62 75 66 66 65 72 20 63 6f 6e  / bit buffer con
6150: 74 61 69 6e 73 20 3e 3d 31 35 20 62 69 74 73 20  tains >=15 bits 
6160: 28 64 65 66 6c 61 74 65 27 73 20 6d 61 78 2e 20  (deflate's max. 
6170: 48 75 66 66 6d 61 6e 20 63 6f 64 65 20 73 69 7a  Huffman code siz
6180: 65 29 2e 0a 23 64 65 66 69 6e 65 20 54 49 4e 46  e)..#define TINF
6190: 4c 5f 48 55 46 46 5f 42 49 54 42 55 46 5f 46 49  L_HUFF_BITBUF_FI
61a0: 4c 4c 28 73 74 61 74 65 5f 69 6e 64 65 78 2c 20  LL(state_index, 
61b0: 70 48 75 66 66 29 20 5c 0a 20 20 64 6f 20 7b 20  pHuff) \.  do { 
61c0: 5c 0a 20 20 20 20 74 65 6d 70 20 3d 20 28 70 48  \.    temp = (pH
61d0: 75 66 66 29 2d 3e 6d 5f 6c 6f 6f 6b 5f 75 70 5b  uff)->m_look_up[
61e0: 62 69 74 5f 62 75 66 20 26 20 28 54 49 4e 46 4c  bit_buf & (TINFL
61f0: 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50 5f 53 49 5a  _FAST_LOOKUP_SIZ
6200: 45 20 2d 20 31 29 5d 3b 20 5c 0a 20 20 20 20 69  E - 1)]; \.    i
6210: 66 20 28 74 65 6d 70 20 3e 3d 20 30 29 20 7b 20  f (temp >= 0) { 
6220: 5c 0a 20 20 20 20 20 20 63 6f 64 65 5f 6c 65 6e  \.      code_len
6230: 20 3d 20 74 65 6d 70 20 3e 3e 20 39 3b 20 5c 0a   = temp >> 9; \.
6240: 20 20 20 20 20 20 69 66 20 28 28 63 6f 64 65 5f        if ((code_
6250: 6c 65 6e 29 20 26 26 20 28 6e 75 6d 5f 62 69 74  len) && (num_bit
6260: 73 20 3e 3d 20 63 6f 64 65 5f 6c 65 6e 29 29 20  s >= code_len)) 
6270: 5c 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 20 5c  \.      break; \
6280: 0a 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28  .    } else if (
6290: 6e 75 6d 5f 62 69 74 73 20 3e 20 54 49 4e 46 4c  num_bits > TINFL
62a0: 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50 5f 42 49 54  _FAST_LOOKUP_BIT
62b0: 53 29 20 7b 20 5c 0a 20 20 20 20 20 20 20 63 6f  S) { \.       co
62c0: 64 65 5f 6c 65 6e 20 3d 20 54 49 4e 46 4c 5f 46  de_len = TINFL_F
62d0: 41 53 54 5f 4c 4f 4f 4b 55 50 5f 42 49 54 53 3b  AST_LOOKUP_BITS;
62e0: 20 5c 0a 20 20 20 20 20 20 20 64 6f 20 7b 20 5c   \.       do { \
62f0: 0a 20 20 20 20 20 20 20 20 20 20 74 65 6d 70 20  .          temp 
6300: 3d 20 28 70 48 75 66 66 29 2d 3e 6d 5f 74 72 65  = (pHuff)->m_tre
6310: 65 5b 7e 74 65 6d 70 20 2b 20 28 28 62 69 74 5f  e[~temp + ((bit_
6320: 62 75 66 20 3e 3e 20 63 6f 64 65 5f 6c 65 6e 2b  buf >> code_len+
6330: 2b 29 20 26 20 31 29 5d 3b 20 5c 0a 20 20 20 20  +) & 1)]; \.    
6340: 20 20 20 7d 20 77 68 69 6c 65 20 28 28 74 65 6d     } while ((tem
6350: 70 20 3c 20 30 29 20 26 26 20 28 6e 75 6d 5f 62  p < 0) && (num_b
6360: 69 74 73 20 3e 3d 20 28 63 6f 64 65 5f 6c 65 6e  its >= (code_len
6370: 20 2b 20 31 29 29 29 3b 20 69 66 20 28 74 65 6d   + 1))); if (tem
6380: 70 20 3e 3d 20 30 29 20 62 72 65 61 6b 3b 20 5c  p >= 0) break; \
6390: 0a 20 20 20 20 7d 20 54 49 4e 46 4c 5f 47 45 54  .    } TINFL_GET
63a0: 5f 42 59 54 45 28 73 74 61 74 65 5f 69 6e 64 65  _BYTE(state_inde
63b0: 78 2c 20 63 29 3b 20 62 69 74 5f 62 75 66 20 7c  x, c); bit_buf |
63c0: 3d 20 28 28 28 74 69 6e 66 6c 5f 62 69 74 5f 62  = (((tinfl_bit_b
63d0: 75 66 5f 74 29 63 29 20 3c 3c 20 6e 75 6d 5f 62  uf_t)c) << num_b
63e0: 69 74 73 29 3b 20 6e 75 6d 5f 62 69 74 73 20 2b  its); num_bits +
63f0: 3d 20 38 3b 20 5c 0a 20 20 7d 20 77 68 69 6c 65  = 8; \.  } while
6400: 20 28 6e 75 6d 5f 62 69 74 73 20 3c 20 31 35 29   (num_bits < 15)
6410: 3b 0a 0a 2f 2f 20 54 49 4e 46 4c 5f 48 55 46 46  ;..// TINFL_HUFF
6420: 5f 44 45 43 4f 44 45 28 29 20 64 65 63 6f 64 65  _DECODE() decode
6430: 73 20 74 68 65 20 6e 65 78 74 20 48 75 66 66 6d  s the next Huffm
6440: 61 6e 20 63 6f 64 65 64 20 73 79 6d 62 6f 6c 2e  an coded symbol.
6450: 20 49 74 27 73 20 6d 6f 72 65 20 63 6f 6d 70 6c   It's more compl
6460: 65 78 20 74 68 61 6e 20 79 6f 75 20 77 6f 75 6c  ex than you woul
6470: 64 20 69 6e 69 74 69 61 6c 6c 79 20 65 78 70 65  d initially expe
6480: 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 7a  ct because the z
6490: 6c 69 62 20 41 50 49 20 65 78 70 65 63 74 73 20  lib API expects 
64a0: 74 68 65 20 64 65 63 6f 6d 70 72 65 73 73 6f 72  the decompressor
64b0: 20 74 6f 20 6e 65 76 65 72 20 72 65 61 64 0a 2f   to never read./
64c0: 2f 20 62 65 79 6f 6e 64 20 74 68 65 20 66 69 6e  / beyond the fin
64d0: 61 6c 20 62 79 74 65 20 6f 66 20 74 68 65 20 64  al byte of the d
64e0: 65 66 6c 61 74 65 20 73 74 72 65 61 6d 2e 20 28  eflate stream. (
64f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
6500: 77 68 65 6e 20 74 68 69 73 20 6d 61 63 72 6f 20  when this macro 
6510: 77 61 6e 74 73 20 74 6f 20 72 65 61 64 20 61 6e  wants to read an
6520: 6f 74 68 65 72 20 62 79 74 65 20 66 72 6f 6d 20  other byte from 
6530: 74 68 65 20 69 6e 70 75 74 2c 20 69 74 20 52 45  the input, it RE
6540: 41 4c 4c 59 20 6e 65 65 64 73 20 61 6e 6f 74 68  ALLY needs anoth
6550: 65 72 20 62 79 74 65 20 69 6e 20 6f 72 64 65 72  er byte in order
6560: 20 74 6f 20 66 75 6c 6c 79 0a 2f 2f 20 64 65 63   to fully.// dec
6570: 6f 64 65 20 74 68 65 20 6e 65 78 74 20 48 75 66  ode the next Huf
6580: 66 6d 61 6e 20 63 6f 64 65 2e 29 20 48 61 6e 64  fman code.) Hand
6590: 6c 69 6e 67 20 74 68 69 73 20 70 72 6f 70 65 72  ling this proper
65a0: 6c 79 20 69 73 20 70 61 72 74 69 63 75 6c 61 72  ly is particular
65b0: 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 6f 6e 20  ly important on 
65c0: 72 61 77 20 64 65 66 6c 61 74 65 20 28 6e 6f 6e  raw deflate (non
65d0: 2d 7a 6c 69 62 29 20 73 74 72 65 61 6d 73 2c 20  -zlib) streams, 
65e0: 77 68 69 63 68 20 61 72 65 6e 27 74 20 66 6f 6c  which aren't fol
65f0: 6c 6f 77 65 64 20 62 79 20 61 20 62 79 74 65 20  lowed by a byte 
6600: 61 6c 69 67 6e 65 64 20 61 64 6c 65 72 2d 33 32  aligned adler-32
6610: 2e 0a 2f 2f 20 54 68 65 20 73 6c 6f 77 20 70 61  ..// The slow pa
6620: 74 68 20 69 73 20 6f 6e 6c 79 20 65 78 65 63 75  th is only execu
6630: 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20  ted at the very 
6640: 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 70 75 74  end of the input
6650: 20 62 75 66 66 65 72 2e 0a 23 64 65 66 69 6e 65   buffer..#define
6660: 20 54 49 4e 46 4c 5f 48 55 46 46 5f 44 45 43 4f   TINFL_HUFF_DECO
6670: 44 45 28 73 74 61 74 65 5f 69 6e 64 65 78 2c 20  DE(state_index, 
6680: 73 79 6d 2c 20 70 48 75 66 66 29 20 64 6f 20 7b  sym, pHuff) do {
6690: 20 5c 0a 20 20 69 6e 74 20 74 65 6d 70 3b 20 6d   \.  int temp; m
66a0: 7a 5f 75 69 6e 74 20 63 6f 64 65 5f 6c 65 6e 2c  z_uint code_len,
66b0: 20 63 3b 20 5c 0a 20 20 69 66 20 28 6e 75 6d 5f   c; \.  if (num_
66c0: 62 69 74 73 20 3c 20 31 35 29 20 7b 20 5c 0a 20  bits < 15) { \. 
66d0: 20 20 20 69 66 20 28 28 70 49 6e 5f 62 75 66 5f     if ((pIn_buf_
66e0: 65 6e 64 20 2d 20 70 49 6e 5f 62 75 66 5f 63 75  end - pIn_buf_cu
66f0: 72 29 20 3c 20 32 29 20 7b 20 5c 0a 20 20 20 20  r) < 2) { \.    
6700: 20 20 20 54 49 4e 46 4c 5f 48 55 46 46 5f 42 49     TINFL_HUFF_BI
6710: 54 42 55 46 5f 46 49 4c 4c 28 73 74 61 74 65 5f  TBUF_FILL(state_
6720: 69 6e 64 65 78 2c 20 70 48 75 66 66 29 3b 20 5c  index, pHuff); \
6730: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 20 5c 0a  .    } else { \.
6740: 20 20 20 20 20 20 20 62 69 74 5f 62 75 66 20 7c         bit_buf |
6750: 3d 20 28 28 28 74 69 6e 66 6c 5f 62 69 74 5f 62  = (((tinfl_bit_b
6760: 75 66 5f 74 29 70 49 6e 5f 62 75 66 5f 63 75 72  uf_t)pIn_buf_cur
6770: 5b 30 5d 29 20 3c 3c 20 6e 75 6d 5f 62 69 74 73  [0]) << num_bits
6780: 29 20 7c 20 28 28 28 74 69 6e 66 6c 5f 62 69 74  ) | (((tinfl_bit
6790: 5f 62 75 66 5f 74 29 70 49 6e 5f 62 75 66 5f 63  _buf_t)pIn_buf_c
67a0: 75 72 5b 31 5d 29 20 3c 3c 20 28 6e 75 6d 5f 62  ur[1]) << (num_b
67b0: 69 74 73 20 2b 20 38 29 29 3b 20 70 49 6e 5f 62  its + 8)); pIn_b
67c0: 75 66 5f 63 75 72 20 2b 3d 20 32 3b 20 6e 75 6d  uf_cur += 2; num
67d0: 5f 62 69 74 73 20 2b 3d 20 31 36 3b 20 5c 0a 20  _bits += 16; \. 
67e0: 20 20 20 7d 20 5c 0a 20 20 7d 20 5c 0a 20 20 69     } \.  } \.  i
67f0: 66 20 28 28 74 65 6d 70 20 3d 20 28 70 48 75 66  f ((temp = (pHuf
6800: 66 29 2d 3e 6d 5f 6c 6f 6f 6b 5f 75 70 5b 62 69  f)->m_look_up[bi
6810: 74 5f 62 75 66 20 26 20 28 54 49 4e 46 4c 5f 46  t_buf & (TINFL_F
6820: 41 53 54 5f 4c 4f 4f 4b 55 50 5f 53 49 5a 45 20  AST_LOOKUP_SIZE 
6830: 2d 20 31 29 5d 29 20 3e 3d 20 30 29 20 5c 0a 20  - 1)]) >= 0) \. 
6840: 20 20 20 63 6f 64 65 5f 6c 65 6e 20 3d 20 74 65     code_len = te
6850: 6d 70 20 3e 3e 20 39 2c 20 74 65 6d 70 20 26 3d  mp >> 9, temp &=
6860: 20 35 31 31 3b 20 5c 0a 20 20 65 6c 73 65 20 7b   511; \.  else {
6870: 20 5c 0a 20 20 20 20 63 6f 64 65 5f 6c 65 6e 20   \.    code_len 
6880: 3d 20 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f  = TINFL_FAST_LOO
6890: 4b 55 50 5f 42 49 54 53 3b 20 64 6f 20 7b 20 74  KUP_BITS; do { t
68a0: 65 6d 70 20 3d 20 28 70 48 75 66 66 29 2d 3e 6d  emp = (pHuff)->m
68b0: 5f 74 72 65 65 5b 7e 74 65 6d 70 20 2b 20 28 28  _tree[~temp + ((
68c0: 62 69 74 5f 62 75 66 20 3e 3e 20 63 6f 64 65 5f  bit_buf >> code_
68d0: 6c 65 6e 2b 2b 29 20 26 20 31 29 5d 3b 20 7d 20  len++) & 1)]; } 
68e0: 77 68 69 6c 65 20 28 74 65 6d 70 20 3c 20 30 29  while (temp < 0)
68f0: 3b 20 5c 0a 20 20 7d 20 73 79 6d 20 3d 20 74 65  ; \.  } sym = te
6900: 6d 70 3b 20 62 69 74 5f 62 75 66 20 3e 3e 3d 20  mp; bit_buf >>= 
6910: 63 6f 64 65 5f 6c 65 6e 3b 20 6e 75 6d 5f 62 69  code_len; num_bi
6920: 74 73 20 2d 3d 20 63 6f 64 65 5f 6c 65 6e 3b 20  ts -= code_len; 
6930: 7d 20 4d 5a 5f 4d 41 43 52 4f 5f 45 4e 44 0a 0a  } MZ_MACRO_END..
6940: 74 69 6e 66 6c 5f 73 74 61 74 75 73 20 74 69 6e  tinfl_status tin
6950: 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 28 74 69  fl_decompress(ti
6960: 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 6f 72  nfl_decompressor
6970: 20 2a 72 2c 20 63 6f 6e 73 74 20 6d 7a 5f 75 69   *r, const mz_ui
6980: 6e 74 38 20 2a 70 49 6e 5f 62 75 66 5f 6e 65 78  nt8 *pIn_buf_nex
6990: 74 2c 20 73 69 7a 65 5f 74 20 2a 70 49 6e 5f 62  t, size_t *pIn_b
69a0: 75 66 5f 73 69 7a 65 2c 20 6d 7a 5f 75 69 6e 74  uf_size, mz_uint
69b0: 38 20 2a 70 4f 75 74 5f 62 75 66 5f 73 74 61 72  8 *pOut_buf_star
69c0: 74 2c 20 6d 7a 5f 75 69 6e 74 38 20 2a 70 4f 75  t, mz_uint8 *pOu
69d0: 74 5f 62 75 66 5f 6e 65 78 74 2c 20 73 69 7a 65  t_buf_next, size
69e0: 5f 74 20 2a 70 4f 75 74 5f 62 75 66 5f 73 69 7a  _t *pOut_buf_siz
69f0: 65 2c 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  e, const mz_uint
6a00: 33 32 20 64 65 63 6f 6d 70 5f 66 6c 61 67 73 29  32 decomp_flags)
6a10: 0a 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .{.  static cons
6a20: 74 20 69 6e 74 20 73 5f 6c 65 6e 67 74 68 5f 62  t int s_length_b
6a30: 61 73 65 5b 33 31 5d 20 3d 20 7b 20 33 2c 34 2c  ase[31] = { 3,4,
6a40: 35 2c 36 2c 37 2c 38 2c 39 2c 31 30 2c 31 31 2c  5,6,7,8,9,10,11,
6a50: 31 33 2c 20 31 35 2c 31 37 2c 31 39 2c 32 33 2c  13, 15,17,19,23,
6a60: 32 37 2c 33 31 2c 33 35 2c 34 33 2c 35 31 2c 35  27,31,35,43,51,5
6a70: 39 2c 20 36 37 2c 38 33 2c 39 39 2c 31 31 35 2c  9, 67,83,99,115,
6a80: 31 33 31 2c 31 36 33 2c 31 39 35 2c 32 32 37 2c  131,163,195,227,
6a90: 32 35 38 2c 30 2c 30 20 7d 3b 0a 20 20 73 74 61  258,0,0 };.  sta
6aa0: 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 73 5f  tic const int s_
6ab0: 6c 65 6e 67 74 68 5f 65 78 74 72 61 5b 33 31 5d  length_extra[31]
6ac0: 3d 20 7b 20 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c  = { 0,0,0,0,0,0,
6ad0: 30 2c 30 2c 31 2c 31 2c 31 2c 31 2c 32 2c 32 2c  0,0,1,1,1,1,2,2,
6ae0: 32 2c 32 2c 33 2c 33 2c 33 2c 33 2c 34 2c 34 2c  2,2,3,3,3,3,4,4,
6af0: 34 2c 34 2c 35 2c 35 2c 35 2c 35 2c 30 2c 30 2c  4,4,5,5,5,5,0,0,
6b00: 30 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  0 };.  static co
6b10: 6e 73 74 20 69 6e 74 20 73 5f 64 69 73 74 5f 62  nst int s_dist_b
6b20: 61 73 65 5b 33 32 5d 20 3d 20 7b 20 31 2c 32 2c  ase[32] = { 1,2,
6b30: 33 2c 34 2c 35 2c 37 2c 39 2c 31 33 2c 31 37 2c  3,4,5,7,9,13,17,
6b40: 32 35 2c 33 33 2c 34 39 2c 36 35 2c 39 37 2c 31  25,33,49,65,97,1
6b50: 32 39 2c 31 39 33 2c 20 32 35 37 2c 33 38 35 2c  29,193, 257,385,
6b60: 35 31 33 2c 37 36 39 2c 31 30 32 35 2c 31 35 33  513,769,1025,153
6b70: 37 2c 32 30 34 39 2c 33 30 37 33 2c 34 30 39 37  7,2049,3073,4097
6b80: 2c 36 31 34 35 2c 38 31 39 33 2c 31 32 32 38 39  ,6145,8193,12289
6b90: 2c 31 36 33 38 35 2c 32 34 35 37 37 2c 30 2c 30  ,16385,24577,0,0
6ba0: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
6bb0: 74 20 69 6e 74 20 73 5f 64 69 73 74 5f 65 78 74  t int s_dist_ext
6bc0: 72 61 5b 33 32 5d 20 3d 20 7b 20 30 2c 30 2c 30  ra[32] = { 0,0,0
6bd0: 2c 30 2c 31 2c 31 2c 32 2c 32 2c 33 2c 33 2c 34  ,0,1,1,2,2,3,3,4
6be0: 2c 34 2c 35 2c 35 2c 36 2c 36 2c 37 2c 37 2c 38  ,4,5,5,6,6,7,7,8
6bf0: 2c 38 2c 39 2c 39 2c 31 30 2c 31 30 2c 31 31 2c  ,8,9,9,10,10,11,
6c00: 31 31 2c 31 32 2c 31 32 2c 31 33 2c 31 33 7d 3b  11,12,12,13,13};
6c10: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
6c20: 6d 7a 5f 75 69 6e 74 38 20 73 5f 6c 65 6e 67 74  mz_uint8 s_lengt
6c30: 68 5f 64 65 7a 69 67 7a 61 67 5b 31 39 5d 20 3d  h_dezigzag[19] =
6c40: 20 7b 20 31 36 2c 31 37 2c 31 38 2c 30 2c 38 2c   { 16,17,18,0,8,
6c50: 37 2c 39 2c 36 2c 31 30 2c 35 2c 31 31 2c 34 2c  7,9,6,10,5,11,4,
6c60: 31 32 2c 33 2c 31 33 2c 32 2c 31 34 2c 31 2c 31  12,3,13,2,14,1,1
6c70: 35 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  5 };.  static co
6c80: 6e 73 74 20 69 6e 74 20 73 5f 6d 69 6e 5f 74 61  nst int s_min_ta
6c90: 62 6c 65 5f 73 69 7a 65 73 5b 33 5d 20 3d 20 7b  ble_sizes[3] = {
6ca0: 20 32 35 37 2c 20 31 2c 20 34 20 7d 3b 0a 0a 20   257, 1, 4 };.. 
6cb0: 20 74 69 6e 66 6c 5f 73 74 61 74 75 73 20 73 74   tinfl_status st
6cc0: 61 74 75 73 20 3d 20 54 49 4e 46 4c 5f 53 54 41  atus = TINFL_STA
6cd0: 54 55 53 5f 46 41 49 4c 45 44 3b 20 6d 7a 5f 75  TUS_FAILED; mz_u
6ce0: 69 6e 74 33 32 20 6e 75 6d 5f 62 69 74 73 2c 20  int32 num_bits, 
6cf0: 64 69 73 74 2c 20 63 6f 75 6e 74 65 72 2c 20 6e  dist, counter, n
6d00: 75 6d 5f 65 78 74 72 61 3b 20 74 69 6e 66 6c 5f  um_extra; tinfl_
6d10: 62 69 74 5f 62 75 66 5f 74 20 62 69 74 5f 62 75  bit_buf_t bit_bu
6d20: 66 3b 0a 20 20 63 6f 6e 73 74 20 6d 7a 5f 75 69  f;.  const mz_ui
6d30: 6e 74 38 20 2a 70 49 6e 5f 62 75 66 5f 63 75 72  nt8 *pIn_buf_cur
6d40: 20 3d 20 70 49 6e 5f 62 75 66 5f 6e 65 78 74 2c   = pIn_buf_next,
6d50: 20 2a 63 6f 6e 73 74 20 70 49 6e 5f 62 75 66 5f   *const pIn_buf_
6d60: 65 6e 64 20 3d 20 70 49 6e 5f 62 75 66 5f 6e 65  end = pIn_buf_ne
6d70: 78 74 20 2b 20 2a 70 49 6e 5f 62 75 66 5f 73 69  xt + *pIn_buf_si
6d80: 7a 65 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a  ze;.  mz_uint8 *
6d90: 70 4f 75 74 5f 62 75 66 5f 63 75 72 20 3d 20 70  pOut_buf_cur = p
6da0: 4f 75 74 5f 62 75 66 5f 6e 65 78 74 2c 20 2a 63  Out_buf_next, *c
6db0: 6f 6e 73 74 20 70 4f 75 74 5f 62 75 66 5f 65 6e  onst pOut_buf_en
6dc0: 64 20 3d 20 70 4f 75 74 5f 62 75 66 5f 6e 65 78  d = pOut_buf_nex
6dd0: 74 20 2b 20 2a 70 4f 75 74 5f 62 75 66 5f 73 69  t + *pOut_buf_si
6de0: 7a 65 3b 0a 20 20 73 69 7a 65 5f 74 20 6f 75 74  ze;.  size_t out
6df0: 5f 62 75 66 5f 73 69 7a 65 5f 6d 61 73 6b 20 3d  _buf_size_mask =
6e00: 20 28 64 65 63 6f 6d 70 5f 66 6c 61 67 73 20 26   (decomp_flags &
6e10: 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 55 53 49 4e   TINFL_FLAG_USIN
6e20: 47 5f 4e 4f 4e 5f 57 52 41 50 50 49 4e 47 5f 4f  G_NON_WRAPPING_O
6e30: 55 54 50 55 54 5f 42 55 46 29 20 3f 20 28 73 69  UTPUT_BUF) ? (si
6e40: 7a 65 5f 74 29 2d 31 20 3a 20 28 28 70 4f 75 74  ze_t)-1 : ((pOut
6e50: 5f 62 75 66 5f 6e 65 78 74 20 2d 20 70 4f 75 74  _buf_next - pOut
6e60: 5f 62 75 66 5f 73 74 61 72 74 29 20 2b 20 2a 70  _buf_start) + *p
6e70: 4f 75 74 5f 62 75 66 5f 73 69 7a 65 29 20 2d 20  Out_buf_size) - 
6e80: 31 2c 20 64 69 73 74 5f 66 72 6f 6d 5f 6f 75 74  1, dist_from_out
6e90: 5f 62 75 66 5f 73 74 61 72 74 3b 0a 0a 20 20 2f  _buf_start;..  /
6ea0: 2f 20 45 6e 73 75 72 65 20 74 68 65 20 6f 75 74  / Ensure the out
6eb0: 70 75 74 20 62 75 66 66 65 72 27 73 20 73 69 7a  put buffer's siz
6ec0: 65 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  e is a power of 
6ed0: 32 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 6f 75  2, unless the ou
6ee0: 74 70 75 74 20 62 75 66 66 65 72 20 69 73 20 6c  tput buffer is l
6ef0: 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68  arge enough to h
6f00: 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 6f  old the entire o
6f10: 75 74 70 75 74 20 66 69 6c 65 20 28 69 6e 20 77  utput file (in w
6f20: 68 69 63 68 20 63 61 73 65 20 69 74 20 64 6f 65  hich case it doe
6f30: 73 6e 27 74 20 6d 61 74 74 65 72 29 2e 0a 20 20  sn't matter)..  
6f40: 69 66 20 28 28 28 6f 75 74 5f 62 75 66 5f 73 69  if (((out_buf_si
6f50: 7a 65 5f 6d 61 73 6b 20 2b 20 31 29 20 26 20 6f  ze_mask + 1) & o
6f60: 75 74 5f 62 75 66 5f 73 69 7a 65 5f 6d 61 73 6b  ut_buf_size_mask
6f70: 29 20 7c 7c 20 28 70 4f 75 74 5f 62 75 66 5f 6e  ) || (pOut_buf_n
6f80: 65 78 74 20 3c 20 70 4f 75 74 5f 62 75 66 5f 73  ext < pOut_buf_s
6f90: 74 61 72 74 29 29 20 7b 20 2a 70 49 6e 5f 62 75  tart)) { *pIn_bu
6fa0: 66 5f 73 69 7a 65 20 3d 20 2a 70 4f 75 74 5f 62  f_size = *pOut_b
6fb0: 75 66 5f 73 69 7a 65 20 3d 20 30 3b 20 72 65 74  uf_size = 0; ret
6fc0: 75 72 6e 20 54 49 4e 46 4c 5f 53 54 41 54 55 53  urn TINFL_STATUS
6fd0: 5f 42 41 44 5f 50 41 52 41 4d 3b 20 7d 0a 0a 20  _BAD_PARAM; }.. 
6fe0: 20 6e 75 6d 5f 62 69 74 73 20 3d 20 72 2d 3e 6d   num_bits = r->m
6ff0: 5f 6e 75 6d 5f 62 69 74 73 3b 20 62 69 74 5f 62  _num_bits; bit_b
7000: 75 66 20 3d 20 72 2d 3e 6d 5f 62 69 74 5f 62 75  uf = r->m_bit_bu
7010: 66 3b 20 64 69 73 74 20 3d 20 72 2d 3e 6d 5f 64  f; dist = r->m_d
7020: 69 73 74 3b 20 63 6f 75 6e 74 65 72 20 3d 20 72  ist; counter = r
7030: 2d 3e 6d 5f 63 6f 75 6e 74 65 72 3b 20 6e 75 6d  ->m_counter; num
7040: 5f 65 78 74 72 61 20 3d 20 72 2d 3e 6d 5f 6e 75  _extra = r->m_nu
7050: 6d 5f 65 78 74 72 61 3b 20 64 69 73 74 5f 66 72  m_extra; dist_fr
7060: 6f 6d 5f 6f 75 74 5f 62 75 66 5f 73 74 61 72 74  om_out_buf_start
7070: 20 3d 20 72 2d 3e 6d 5f 64 69 73 74 5f 66 72 6f   = r->m_dist_fro
7080: 6d 5f 6f 75 74 5f 62 75 66 5f 73 74 61 72 74 3b  m_out_buf_start;
7090: 0a 20 20 54 49 4e 46 4c 5f 43 52 5f 42 45 47 49  .  TINFL_CR_BEGI
70a0: 4e 0a 0a 20 20 62 69 74 5f 62 75 66 20 3d 20 6e  N..  bit_buf = n
70b0: 75 6d 5f 62 69 74 73 20 3d 20 64 69 73 74 20 3d  um_bits = dist =
70c0: 20 63 6f 75 6e 74 65 72 20 3d 20 6e 75 6d 5f 65   counter = num_e
70d0: 78 74 72 61 20 3d 20 72 2d 3e 6d 5f 7a 68 64 72  xtra = r->m_zhdr
70e0: 30 20 3d 20 72 2d 3e 6d 5f 7a 68 64 72 31 20 3d  0 = r->m_zhdr1 =
70f0: 20 30 3b 20 72 2d 3e 6d 5f 7a 5f 61 64 6c 65 72   0; r->m_z_adler
7100: 33 32 20 3d 20 72 2d 3e 6d 5f 63 68 65 63 6b 5f  32 = r->m_check_
7110: 61 64 6c 65 72 33 32 20 3d 20 31 3b 0a 20 20 69  adler32 = 1;.  i
7120: 66 20 28 64 65 63 6f 6d 70 5f 66 6c 61 67 73 20  f (decomp_flags 
7130: 26 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 50 41 52  & TINFL_FLAG_PAR
7140: 53 45 5f 5a 4c 49 42 5f 48 45 41 44 45 52 29 0a  SE_ZLIB_HEADER).
7150: 20 20 7b 0a 20 20 20 20 54 49 4e 46 4c 5f 47 45    {.    TINFL_GE
7160: 54 5f 42 59 54 45 28 31 2c 20 72 2d 3e 6d 5f 7a  T_BYTE(1, r->m_z
7170: 68 64 72 30 29 3b 20 54 49 4e 46 4c 5f 47 45 54  hdr0); TINFL_GET
7180: 5f 42 59 54 45 28 32 2c 20 72 2d 3e 6d 5f 7a 68  _BYTE(2, r->m_zh
7190: 64 72 31 29 3b 0a 20 20 20 20 63 6f 75 6e 74 65  dr1);.    counte
71a0: 72 20 3d 20 28 28 28 72 2d 3e 6d 5f 7a 68 64 72  r = (((r->m_zhdr
71b0: 30 20 2a 20 32 35 36 20 2b 20 72 2d 3e 6d 5f 7a  0 * 256 + r->m_z
71c0: 68 64 72 31 29 20 25 20 33 31 20 21 3d 20 30 29  hdr1) % 31 != 0)
71d0: 20 7c 7c 20 28 72 2d 3e 6d 5f 7a 68 64 72 31 20   || (r->m_zhdr1 
71e0: 26 20 33 32 29 20 7c 7c 20 28 28 72 2d 3e 6d 5f  & 32) || ((r->m_
71f0: 7a 68 64 72 30 20 26 20 31 35 29 20 21 3d 20 38  zhdr0 & 15) != 8
7200: 29 29 3b 0a 20 20 20 20 69 66 20 28 21 28 64 65  ));.    if (!(de
7210: 63 6f 6d 70 5f 66 6c 61 67 73 20 26 20 54 49 4e  comp_flags & TIN
7220: 46 4c 5f 46 4c 41 47 5f 55 53 49 4e 47 5f 4e 4f  FL_FLAG_USING_NO
7230: 4e 5f 57 52 41 50 50 49 4e 47 5f 4f 55 54 50 55  N_WRAPPING_OUTPU
7240: 54 5f 42 55 46 29 29 20 63 6f 75 6e 74 65 72 20  T_BUF)) counter 
7250: 7c 3d 20 28 28 28 31 55 20 3c 3c 20 28 38 55 20  |= (((1U << (8U 
7260: 2b 20 28 72 2d 3e 6d 5f 7a 68 64 72 30 20 3e 3e  + (r->m_zhdr0 >>
7270: 20 34 29 29 29 20 3e 20 33 32 37 36 38 55 29 20   4))) > 32768U) 
7280: 7c 7c 20 28 28 6f 75 74 5f 62 75 66 5f 73 69 7a  || ((out_buf_siz
7290: 65 5f 6d 61 73 6b 20 2b 20 31 29 20 3c 20 28 73  e_mask + 1) < (s
72a0: 69 7a 65 5f 74 29 28 31 55 20 3c 3c 20 28 38 55  ize_t)(1U << (8U
72b0: 20 2b 20 28 72 2d 3e 6d 5f 7a 68 64 72 30 20 3e   + (r->m_zhdr0 >
72c0: 3e 20 34 29 29 29 29 29 3b 0a 20 20 20 20 69 66  > 4)))));.    if
72d0: 20 28 63 6f 75 6e 74 65 72 29 20 7b 20 54 49 4e   (counter) { TIN
72e0: 46 4c 5f 43 52 5f 52 45 54 55 52 4e 5f 46 4f 52  FL_CR_RETURN_FOR
72f0: 45 56 45 52 28 33 36 2c 20 54 49 4e 46 4c 5f 53  EVER(36, TINFL_S
7300: 54 41 54 55 53 5f 46 41 49 4c 45 44 29 3b 20 7d  TATUS_FAILED); }
7310: 0a 20 20 7d 0a 0a 20 20 64 6f 0a 20 20 7b 0a 20  .  }..  do.  {. 
7320: 20 20 20 54 49 4e 46 4c 5f 47 45 54 5f 42 49 54     TINFL_GET_BIT
7330: 53 28 33 2c 20 72 2d 3e 6d 5f 66 69 6e 61 6c 2c  S(3, r->m_final,
7340: 20 33 29 3b 20 72 2d 3e 6d 5f 74 79 70 65 20 3d   3); r->m_type =
7350: 20 72 2d 3e 6d 5f 66 69 6e 61 6c 20 3e 3e 20 31   r->m_final >> 1
7360: 3b 0a 20 20 20 20 69 66 20 28 72 2d 3e 6d 5f 74  ;.    if (r->m_t
7370: 79 70 65 20 3d 3d 20 30 29 0a 20 20 20 20 7b 0a  ype == 0).    {.
7380: 20 20 20 20 20 20 54 49 4e 46 4c 5f 53 4b 49 50        TINFL_SKIP
7390: 5f 42 49 54 53 28 35 2c 20 6e 75 6d 5f 62 69 74  _BITS(5, num_bit
73a0: 73 20 26 20 37 29 3b 0a 20 20 20 20 20 20 66 6f  s & 7);.      fo
73b0: 72 20 28 63 6f 75 6e 74 65 72 20 3d 20 30 3b 20  r (counter = 0; 
73c0: 63 6f 75 6e 74 65 72 20 3c 20 34 3b 20 2b 2b 63  counter < 4; ++c
73d0: 6f 75 6e 74 65 72 29 20 7b 20 69 66 20 28 6e 75  ounter) { if (nu
73e0: 6d 5f 62 69 74 73 29 20 54 49 4e 46 4c 5f 47 45  m_bits) TINFL_GE
73f0: 54 5f 42 49 54 53 28 36 2c 20 72 2d 3e 6d 5f 72  T_BITS(6, r->m_r
7400: 61 77 5f 68 65 61 64 65 72 5b 63 6f 75 6e 74 65  aw_header[counte
7410: 72 5d 2c 20 38 29 3b 20 65 6c 73 65 20 54 49 4e  r], 8); else TIN
7420: 46 4c 5f 47 45 54 5f 42 59 54 45 28 37 2c 20 72  FL_GET_BYTE(7, r
7430: 2d 3e 6d 5f 72 61 77 5f 68 65 61 64 65 72 5b 63  ->m_raw_header[c
7440: 6f 75 6e 74 65 72 5d 29 3b 20 7d 0a 20 20 20 20  ounter]); }.    
7450: 20 20 69 66 20 28 28 63 6f 75 6e 74 65 72 20 3d    if ((counter =
7460: 20 28 72 2d 3e 6d 5f 72 61 77 5f 68 65 61 64 65   (r->m_raw_heade
7470: 72 5b 30 5d 20 7c 20 28 72 2d 3e 6d 5f 72 61 77  r[0] | (r->m_raw
7480: 5f 68 65 61 64 65 72 5b 31 5d 20 3c 3c 20 38 29  _header[1] << 8)
7490: 29 29 20 21 3d 20 28 6d 7a 5f 75 69 6e 74 29 28  )) != (mz_uint)(
74a0: 30 78 46 46 46 46 20 5e 20 28 72 2d 3e 6d 5f 72  0xFFFF ^ (r->m_r
74b0: 61 77 5f 68 65 61 64 65 72 5b 32 5d 20 7c 20 28  aw_header[2] | (
74c0: 72 2d 3e 6d 5f 72 61 77 5f 68 65 61 64 65 72 5b  r->m_raw_header[
74d0: 33 5d 20 3c 3c 20 38 29 29 29 29 20 7b 20 54 49  3] << 8)))) { TI
74e0: 4e 46 4c 5f 43 52 5f 52 45 54 55 52 4e 5f 46 4f  NFL_CR_RETURN_FO
74f0: 52 45 56 45 52 28 33 39 2c 20 54 49 4e 46 4c 5f  REVER(39, TINFL_
7500: 53 54 41 54 55 53 5f 46 41 49 4c 45 44 29 3b 20  STATUS_FAILED); 
7510: 7d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 28  }.      while ((
7520: 63 6f 75 6e 74 65 72 29 20 26 26 20 28 6e 75 6d  counter) && (num
7530: 5f 62 69 74 73 29 29 0a 20 20 20 20 20 20 7b 0a  _bits)).      {.
7540: 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f 47 45          TINFL_GE
7550: 54 5f 42 49 54 53 28 35 31 2c 20 64 69 73 74 2c  T_BITS(51, dist,
7560: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69   8);.        whi
7570: 6c 65 20 28 70 4f 75 74 5f 62 75 66 5f 63 75 72  le (pOut_buf_cur
7580: 20 3e 3d 20 70 4f 75 74 5f 62 75 66 5f 65 6e 64   >= pOut_buf_end
7590: 29 20 7b 20 54 49 4e 46 4c 5f 43 52 5f 52 45 54  ) { TINFL_CR_RET
75a0: 55 52 4e 28 35 32 2c 20 54 49 4e 46 4c 5f 53 54  URN(52, TINFL_ST
75b0: 41 54 55 53 5f 48 41 53 5f 4d 4f 52 45 5f 4f 55  ATUS_HAS_MORE_OU
75c0: 54 50 55 54 29 3b 20 7d 0a 20 20 20 20 20 20 20  TPUT); }.       
75d0: 20 2a 70 4f 75 74 5f 62 75 66 5f 63 75 72 2b 2b   *pOut_buf_cur++
75e0: 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 64 69 73   = (mz_uint8)dis
75f0: 74 3b 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74  t;.        count
7600: 65 72 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 20 20  er--;.      }.  
7610: 20 20 20 20 77 68 69 6c 65 20 28 63 6f 75 6e 74      while (count
7620: 65 72 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  er).      {.    
7630: 20 20 20 20 73 69 7a 65 5f 74 20 6e 3b 20 77 68      size_t n; wh
7640: 69 6c 65 20 28 70 4f 75 74 5f 62 75 66 5f 63 75  ile (pOut_buf_cu
7650: 72 20 3e 3d 20 70 4f 75 74 5f 62 75 66 5f 65 6e  r >= pOut_buf_en
7660: 64 29 20 7b 20 54 49 4e 46 4c 5f 43 52 5f 52 45  d) { TINFL_CR_RE
7670: 54 55 52 4e 28 39 2c 20 54 49 4e 46 4c 5f 53 54  TURN(9, TINFL_ST
7680: 41 54 55 53 5f 48 41 53 5f 4d 4f 52 45 5f 4f 55  ATUS_HAS_MORE_OU
7690: 54 50 55 54 29 3b 20 7d 0a 20 20 20 20 20 20 20  TPUT); }.       
76a0: 20 77 68 69 6c 65 20 28 70 49 6e 5f 62 75 66 5f   while (pIn_buf_
76b0: 63 75 72 20 3e 3d 20 70 49 6e 5f 62 75 66 5f 65  cur >= pIn_buf_e
76c0: 6e 64 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20  nd).        {.  
76d0: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 63 6f          if (deco
76e0: 6d 70 5f 66 6c 61 67 73 20 26 20 54 49 4e 46 4c  mp_flags & TINFL
76f0: 5f 46 4c 41 47 5f 48 41 53 5f 4d 4f 52 45 5f 49  _FLAG_HAS_MORE_I
7700: 4e 50 55 54 29 0a 20 20 20 20 20 20 20 20 20 20  NPUT).          
7710: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 49  {.            TI
7720: 4e 46 4c 5f 43 52 5f 52 45 54 55 52 4e 28 33 38  NFL_CR_RETURN(38
7730: 2c 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 4e  , TINFL_STATUS_N
7740: 45 45 44 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 29  EEDS_MORE_INPUT)
7750: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
7760: 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20          else.   
7770: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
7780: 20 20 20 20 20 54 49 4e 46 4c 5f 43 52 5f 52 45       TINFL_CR_RE
7790: 54 55 52 4e 5f 46 4f 52 45 56 45 52 28 34 30 2c  TURN_FOREVER(40,
77a0: 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 46 41   TINFL_STATUS_FA
77b0: 49 4c 45 44 29 3b 0a 20 20 20 20 20 20 20 20 20  ILED);.         
77c0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
77d0: 20 20 20 20 20 6e 20 3d 20 4d 5a 5f 4d 49 4e 28       n = MZ_MIN(
77e0: 4d 5a 5f 4d 49 4e 28 28 73 69 7a 65 5f 74 29 28  MZ_MIN((size_t)(
77f0: 70 4f 75 74 5f 62 75 66 5f 65 6e 64 20 2d 20 70  pOut_buf_end - p
7800: 4f 75 74 5f 62 75 66 5f 63 75 72 29 2c 20 28 73  Out_buf_cur), (s
7810: 69 7a 65 5f 74 29 28 70 49 6e 5f 62 75 66 5f 65  ize_t)(pIn_buf_e
7820: 6e 64 20 2d 20 70 49 6e 5f 62 75 66 5f 63 75 72  nd - pIn_buf_cur
7830: 29 29 2c 20 63 6f 75 6e 74 65 72 29 3b 0a 20 20  )), counter);.  
7840: 20 20 20 20 20 20 54 49 4e 46 4c 5f 4d 45 4d 43        TINFL_MEMC
7850: 50 59 28 70 4f 75 74 5f 62 75 66 5f 63 75 72 2c  PY(pOut_buf_cur,
7860: 20 70 49 6e 5f 62 75 66 5f 63 75 72 2c 20 6e 29   pIn_buf_cur, n)
7870: 3b 20 70 49 6e 5f 62 75 66 5f 63 75 72 20 2b 3d  ; pIn_buf_cur +=
7880: 20 6e 3b 20 70 4f 75 74 5f 62 75 66 5f 63 75 72   n; pOut_buf_cur
7890: 20 2b 3d 20 6e 3b 20 63 6f 75 6e 74 65 72 20 2d   += n; counter -
78a0: 3d 20 28 6d 7a 5f 75 69 6e 74 29 6e 3b 0a 20 20  = (mz_uint)n;.  
78b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
78c0: 65 6c 73 65 20 69 66 20 28 72 2d 3e 6d 5f 74 79  else if (r->m_ty
78d0: 70 65 20 3d 3d 20 33 29 0a 20 20 20 20 7b 0a 20  pe == 3).    {. 
78e0: 20 20 20 20 20 54 49 4e 46 4c 5f 43 52 5f 52 45       TINFL_CR_RE
78f0: 54 55 52 4e 5f 46 4f 52 45 56 45 52 28 31 30 2c  TURN_FOREVER(10,
7900: 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 46 41   TINFL_STATUS_FA
7910: 49 4c 45 44 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ILED);.    }.   
7920: 20 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20 20   else.    {.    
7930: 20 20 69 66 20 28 72 2d 3e 6d 5f 74 79 70 65 20    if (r->m_type 
7940: 3d 3d 20 31 29 0a 20 20 20 20 20 20 7b 0a 20 20  == 1).      {.  
7950: 20 20 20 20 20 20 6d 7a 5f 75 69 6e 74 38 20 2a        mz_uint8 *
7960: 70 20 3d 20 72 2d 3e 6d 5f 74 61 62 6c 65 73 5b  p = r->m_tables[
7970: 30 5d 2e 6d 5f 63 6f 64 65 5f 73 69 7a 65 3b 20  0].m_code_size; 
7980: 6d 7a 5f 75 69 6e 74 20 69 3b 0a 20 20 20 20 20  mz_uint i;.     
7990: 20 20 20 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69     r->m_table_si
79a0: 7a 65 73 5b 30 5d 20 3d 20 32 38 38 3b 20 72 2d  zes[0] = 288; r-
79b0: 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65 73 5b 31  >m_table_sizes[1
79c0: 5d 20 3d 20 33 32 3b 20 54 49 4e 46 4c 5f 4d 45  ] = 32; TINFL_ME
79d0: 4d 53 45 54 28 72 2d 3e 6d 5f 74 61 62 6c 65 73  MSET(r->m_tables
79e0: 5b 31 5d 2e 6d 5f 63 6f 64 65 5f 73 69 7a 65 2c  [1].m_code_size,
79f0: 20 35 2c 20 33 32 29 3b 0a 20 20 20 20 20 20 20   5, 32);.       
7a00: 20 66 6f 72 20 28 20 69 20 3d 20 30 3b 20 69 20   for ( i = 0; i 
7a10: 3c 3d 20 31 34 33 3b 20 2b 2b 69 29 20 2a 70 2b  <= 143; ++i) *p+
7a20: 2b 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 66  + = 8;.        f
7a30: 6f 72 20 28 20 3b 20 69 20 3c 3d 20 32 35 35 3b  or ( ; i <= 255;
7a40: 20 2b 2b 69 29 20 2a 70 2b 2b 20 3d 20 39 3b 0a   ++i) *p++ = 9;.
7a50: 20 20 20 20 20 20 20 20 66 6f 72 20 28 20 3b 20          for ( ; 
7a60: 69 20 3c 3d 20 32 37 39 3b 20 2b 2b 69 29 20 2a  i <= 279; ++i) *
7a70: 70 2b 2b 20 3d 20 37 3b 0a 20 20 20 20 20 20 20  p++ = 7;.       
7a80: 20 66 6f 72 20 28 20 3b 20 69 20 3c 3d 20 32 38   for ( ; i <= 28
7a90: 37 3b 20 2b 2b 69 29 20 2a 70 2b 2b 20 3d 20 38  7; ++i) *p++ = 8
7aa0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
7ab0: 65 6c 73 65 0a 20 20 20 20 20 20 7b 0a 20 20 20  else.      {.   
7ac0: 20 20 20 20 20 66 6f 72 20 28 63 6f 75 6e 74 65       for (counte
7ad0: 72 20 3d 20 30 3b 20 63 6f 75 6e 74 65 72 20 3c  r = 0; counter <
7ae0: 20 33 3b 20 63 6f 75 6e 74 65 72 2b 2b 29 20 7b   3; counter++) {
7af0: 20 54 49 4e 46 4c 5f 47 45 54 5f 42 49 54 53 28   TINFL_GET_BITS(
7b00: 31 31 2c 20 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73  11, r->m_table_s
7b10: 69 7a 65 73 5b 63 6f 75 6e 74 65 72 5d 2c 20 22  izes[counter], "
7b20: 5c 30 35 5c 30 35 5c 30 34 22 5b 63 6f 75 6e 74  \05\05\04"[count
7b30: 65 72 5d 29 3b 20 72 2d 3e 6d 5f 74 61 62 6c 65  er]); r->m_table
7b40: 5f 73 69 7a 65 73 5b 63 6f 75 6e 74 65 72 5d 20  _sizes[counter] 
7b50: 2b 3d 20 73 5f 6d 69 6e 5f 74 61 62 6c 65 5f 73  += s_min_table_s
7b60: 69 7a 65 73 5b 63 6f 75 6e 74 65 72 5d 3b 20 7d  izes[counter]; }
7b70: 0a 20 20 20 20 20 20 20 20 4d 5a 5f 43 4c 45 41  .        MZ_CLEA
7b80: 52 5f 4f 42 4a 28 72 2d 3e 6d 5f 74 61 62 6c 65  R_OBJ(r->m_table
7b90: 73 5b 32 5d 2e 6d 5f 63 6f 64 65 5f 73 69 7a 65  s[2].m_code_size
7ba0: 29 3b 20 66 6f 72 20 28 63 6f 75 6e 74 65 72 20  ); for (counter 
7bb0: 3d 20 30 3b 20 63 6f 75 6e 74 65 72 20 3c 20 72  = 0; counter < r
7bc0: 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65 73 5b  ->m_table_sizes[
7bd0: 32 5d 3b 20 63 6f 75 6e 74 65 72 2b 2b 29 20 7b  2]; counter++) {
7be0: 20 6d 7a 5f 75 69 6e 74 20 73 3b 20 54 49 4e 46   mz_uint s; TINF
7bf0: 4c 5f 47 45 54 5f 42 49 54 53 28 31 34 2c 20 73  L_GET_BITS(14, s
7c00: 2c 20 33 29 3b 20 72 2d 3e 6d 5f 74 61 62 6c 65  , 3); r->m_table
7c10: 73 5b 32 5d 2e 6d 5f 63 6f 64 65 5f 73 69 7a 65  s[2].m_code_size
7c20: 5b 73 5f 6c 65 6e 67 74 68 5f 64 65 7a 69 67 7a  [s_length_dezigz
7c30: 61 67 5b 63 6f 75 6e 74 65 72 5d 5d 20 3d 20 28  ag[counter]] = (
7c40: 6d 7a 5f 75 69 6e 74 38 29 73 3b 20 7d 0a 20 20  mz_uint8)s; }.  
7c50: 20 20 20 20 20 20 72 2d 3e 6d 5f 74 61 62 6c 65        r->m_table
7c60: 5f 73 69 7a 65 73 5b 32 5d 20 3d 20 31 39 3b 0a  _sizes[2] = 19;.
7c70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f        }.      fo
7c80: 72 20 28 20 3b 20 28 69 6e 74 29 72 2d 3e 6d 5f  r ( ; (int)r->m_
7c90: 74 79 70 65 20 3e 3d 20 30 3b 20 72 2d 3e 6d 5f  type >= 0; r->m_
7ca0: 74 79 70 65 2d 2d 29 0a 20 20 20 20 20 20 7b 0a  type--).      {.
7cb0: 20 20 20 20 20 20 20 20 69 6e 74 20 74 72 65 65          int tree
7cc0: 5f 6e 65 78 74 2c 20 74 72 65 65 5f 63 75 72 3b  _next, tree_cur;
7cd0: 20 74 69 6e 66 6c 5f 68 75 66 66 5f 74 61 62 6c   tinfl_huff_tabl
7ce0: 65 20 2a 70 54 61 62 6c 65 3b 0a 20 20 20 20 20  e *pTable;.     
7cf0: 20 20 20 6d 7a 5f 75 69 6e 74 20 69 2c 20 6a 2c     mz_uint i, j,
7d00: 20 75 73 65 64 5f 73 79 6d 73 2c 20 74 6f 74 61   used_syms, tota
7d10: 6c 2c 20 73 79 6d 5f 69 6e 64 65 78 2c 20 6e 65  l, sym_index, ne
7d20: 78 74 5f 63 6f 64 65 5b 31 37 5d 2c 20 74 6f 74  xt_code[17], tot
7d30: 61 6c 5f 73 79 6d 73 5b 31 36 5d 3b 20 70 54 61  al_syms[16]; pTa
7d40: 62 6c 65 20 3d 20 26 72 2d 3e 6d 5f 74 61 62 6c  ble = &r->m_tabl
7d50: 65 73 5b 72 2d 3e 6d 5f 74 79 70 65 5d 3b 20 4d  es[r->m_type]; M
7d60: 5a 5f 43 4c 45 41 52 5f 4f 42 4a 28 74 6f 74 61  Z_CLEAR_OBJ(tota
7d70: 6c 5f 73 79 6d 73 29 3b 20 4d 5a 5f 43 4c 45 41  l_syms); MZ_CLEA
7d80: 52 5f 4f 42 4a 28 70 54 61 62 6c 65 2d 3e 6d 5f  R_OBJ(pTable->m_
7d90: 6c 6f 6f 6b 5f 75 70 29 3b 20 4d 5a 5f 43 4c 45  look_up); MZ_CLE
7da0: 41 52 5f 4f 42 4a 28 70 54 61 62 6c 65 2d 3e 6d  AR_OBJ(pTable->m
7db0: 5f 74 72 65 65 29 3b 0a 20 20 20 20 20 20 20 20  _tree);.        
7dc0: 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20  for (i = 0; i < 
7dd0: 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65 73  r->m_table_sizes
7de0: 5b 72 2d 3e 6d 5f 74 79 70 65 5d 3b 20 2b 2b 69  [r->m_type]; ++i
7df0: 29 20 74 6f 74 61 6c 5f 73 79 6d 73 5b 70 54 61  ) total_syms[pTa
7e00: 62 6c 65 2d 3e 6d 5f 63 6f 64 65 5f 73 69 7a 65  ble->m_code_size
7e10: 5b 69 5d 5d 2b 2b 3b 0a 20 20 20 20 20 20 20 20  [i]]++;.        
7e20: 75 73 65 64 5f 73 79 6d 73 20 3d 20 30 2c 20 74  used_syms = 0, t
7e30: 6f 74 61 6c 20 3d 20 30 3b 20 6e 65 78 74 5f 63  otal = 0; next_c
7e40: 6f 64 65 5b 30 5d 20 3d 20 6e 65 78 74 5f 63 6f  ode[0] = next_co
7e50: 64 65 5b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20  de[1] = 0;.     
7e60: 20 20 20 66 6f 72 20 28 69 20 3d 20 31 3b 20 69     for (i = 1; i
7e70: 20 3c 3d 20 31 35 3b 20 2b 2b 69 29 20 7b 20 75   <= 15; ++i) { u
7e80: 73 65 64 5f 73 79 6d 73 20 2b 3d 20 74 6f 74 61  sed_syms += tota
7e90: 6c 5f 73 79 6d 73 5b 69 5d 3b 20 6e 65 78 74 5f  l_syms[i]; next_
7ea0: 63 6f 64 65 5b 69 20 2b 20 31 5d 20 3d 20 28 74  code[i + 1] = (t
7eb0: 6f 74 61 6c 20 3d 20 28 28 74 6f 74 61 6c 20 2b  otal = ((total +
7ec0: 20 74 6f 74 61 6c 5f 73 79 6d 73 5b 69 5d 29 20   total_syms[i]) 
7ed0: 3c 3c 20 31 29 29 3b 20 7d 0a 20 20 20 20 20 20  << 1)); }.      
7ee0: 20 20 69 66 20 28 28 36 35 35 33 36 20 21 3d 20    if ((65536 != 
7ef0: 74 6f 74 61 6c 29 20 26 26 20 28 75 73 65 64 5f  total) && (used_
7f00: 73 79 6d 73 20 3e 20 31 29 29 0a 20 20 20 20 20  syms > 1)).     
7f10: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 54     {.          T
7f20: 49 4e 46 4c 5f 43 52 5f 52 45 54 55 52 4e 5f 46  INFL_CR_RETURN_F
7f30: 4f 52 45 56 45 52 28 33 35 2c 20 54 49 4e 46 4c  OREVER(35, TINFL
7f40: 5f 53 54 41 54 55 53 5f 46 41 49 4c 45 44 29 3b  _STATUS_FAILED);
7f50: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7f60: 20 20 20 66 6f 72 20 28 74 72 65 65 5f 6e 65 78     for (tree_nex
7f70: 74 20 3d 20 2d 31 2c 20 73 79 6d 5f 69 6e 64 65  t = -1, sym_inde
7f80: 78 20 3d 20 30 3b 20 73 79 6d 5f 69 6e 64 65 78  x = 0; sym_index
7f90: 20 3c 20 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69   < r->m_table_si
7fa0: 7a 65 73 5b 72 2d 3e 6d 5f 74 79 70 65 5d 3b 20  zes[r->m_type]; 
7fb0: 2b 2b 73 79 6d 5f 69 6e 64 65 78 29 0a 20 20 20  ++sym_index).   
7fc0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
7fd0: 20 6d 7a 5f 75 69 6e 74 20 72 65 76 5f 63 6f 64   mz_uint rev_cod
7fe0: 65 20 3d 20 30 2c 20 6c 2c 20 63 75 72 5f 63 6f  e = 0, l, cur_co
7ff0: 64 65 2c 20 63 6f 64 65 5f 73 69 7a 65 20 3d 20  de, code_size = 
8000: 70 54 61 62 6c 65 2d 3e 6d 5f 63 6f 64 65 5f 73  pTable->m_code_s
8010: 69 7a 65 5b 73 79 6d 5f 69 6e 64 65 78 5d 3b 20  ize[sym_index]; 
8020: 69 66 20 28 21 63 6f 64 65 5f 73 69 7a 65 29 20  if (!code_size) 
8030: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
8040: 20 20 20 20 63 75 72 5f 63 6f 64 65 20 3d 20 6e      cur_code = n
8050: 65 78 74 5f 63 6f 64 65 5b 63 6f 64 65 5f 73 69  ext_code[code_si
8060: 7a 65 5d 2b 2b 3b 20 66 6f 72 20 28 6c 20 3d 20  ze]++; for (l = 
8070: 63 6f 64 65 5f 73 69 7a 65 3b 20 6c 20 3e 20 30  code_size; l > 0
8080: 3b 20 6c 2d 2d 2c 20 63 75 72 5f 63 6f 64 65 20  ; l--, cur_code 
8090: 3e 3e 3d 20 31 29 20 72 65 76 5f 63 6f 64 65 20  >>= 1) rev_code 
80a0: 3d 20 28 72 65 76 5f 63 6f 64 65 20 3c 3c 20 31  = (rev_code << 1
80b0: 29 20 7c 20 28 63 75 72 5f 63 6f 64 65 20 26 20  ) | (cur_code & 
80c0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  1);.          if
80d0: 20 28 63 6f 64 65 5f 73 69 7a 65 20 3c 3d 20 54   (code_size <= T
80e0: 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50  INFL_FAST_LOOKUP
80f0: 5f 42 49 54 53 29 20 7b 20 6d 7a 5f 69 6e 74 31  _BITS) { mz_int1
8100: 36 20 6b 20 3d 20 28 6d 7a 5f 69 6e 74 31 36 29  6 k = (mz_int16)
8110: 28 28 63 6f 64 65 5f 73 69 7a 65 20 3c 3c 20 39  ((code_size << 9
8120: 29 20 7c 20 73 79 6d 5f 69 6e 64 65 78 29 3b 20  ) | sym_index); 
8130: 77 68 69 6c 65 20 28 72 65 76 5f 63 6f 64 65 20  while (rev_code 
8140: 3c 20 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f  < TINFL_FAST_LOO
8150: 4b 55 50 5f 53 49 5a 45 29 20 7b 20 70 54 61 62  KUP_SIZE) { pTab
8160: 6c 65 2d 3e 6d 5f 6c 6f 6f 6b 5f 75 70 5b 72 65  le->m_look_up[re
8170: 76 5f 63 6f 64 65 5d 20 3d 20 6b 3b 20 72 65 76  v_code] = k; rev
8180: 5f 63 6f 64 65 20 2b 3d 20 28 31 20 3c 3c 20 63  _code += (1 << c
8190: 6f 64 65 5f 73 69 7a 65 29 3b 20 7d 20 63 6f 6e  ode_size); } con
81a0: 74 69 6e 75 65 3b 20 7d 0a 20 20 20 20 20 20 20  tinue; }.       
81b0: 20 20 20 69 66 20 28 30 20 3d 3d 20 28 74 72 65     if (0 == (tre
81c0: 65 5f 63 75 72 20 3d 20 70 54 61 62 6c 65 2d 3e  e_cur = pTable->
81d0: 6d 5f 6c 6f 6f 6b 5f 75 70 5b 72 65 76 5f 63 6f  m_look_up[rev_co
81e0: 64 65 20 26 20 28 54 49 4e 46 4c 5f 46 41 53 54  de & (TINFL_FAST
81f0: 5f 4c 4f 4f 4b 55 50 5f 53 49 5a 45 20 2d 20 31  _LOOKUP_SIZE - 1
8200: 29 5d 29 29 20 7b 20 70 54 61 62 6c 65 2d 3e 6d  )])) { pTable->m
8210: 5f 6c 6f 6f 6b 5f 75 70 5b 72 65 76 5f 63 6f 64  _look_up[rev_cod
8220: 65 20 26 20 28 54 49 4e 46 4c 5f 46 41 53 54 5f  e & (TINFL_FAST_
8230: 4c 4f 4f 4b 55 50 5f 53 49 5a 45 20 2d 20 31 29  LOOKUP_SIZE - 1)
8240: 5d 20 3d 20 28 6d 7a 5f 69 6e 74 31 36 29 74 72  ] = (mz_int16)tr
8250: 65 65 5f 6e 65 78 74 3b 20 74 72 65 65 5f 63 75  ee_next; tree_cu
8260: 72 20 3d 20 74 72 65 65 5f 6e 65 78 74 3b 20 74  r = tree_next; t
8270: 72 65 65 5f 6e 65 78 74 20 2d 3d 20 32 3b 20 7d  ree_next -= 2; }
8280: 0a 20 20 20 20 20 20 20 20 20 20 72 65 76 5f 63  .          rev_c
8290: 6f 64 65 20 3e 3e 3d 20 28 54 49 4e 46 4c 5f 46  ode >>= (TINFL_F
82a0: 41 53 54 5f 4c 4f 4f 4b 55 50 5f 42 49 54 53 20  AST_LOOKUP_BITS 
82b0: 2d 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  - 1);.          
82c0: 66 6f 72 20 28 6a 20 3d 20 63 6f 64 65 5f 73 69  for (j = code_si
82d0: 7a 65 3b 20 6a 20 3e 20 28 54 49 4e 46 4c 5f 46  ze; j > (TINFL_F
82e0: 41 53 54 5f 4c 4f 4f 4b 55 50 5f 42 49 54 53 20  AST_LOOKUP_BITS 
82f0: 2b 20 31 29 3b 20 6a 2d 2d 29 0a 20 20 20 20 20  + 1); j--).     
8300: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
8310: 20 20 20 74 72 65 65 5f 63 75 72 20 2d 3d 20 28     tree_cur -= (
8320: 28 72 65 76 5f 63 6f 64 65 20 3e 3e 3d 20 31 29  (rev_code >>= 1)
8330: 20 26 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20   & 1);.         
8340: 20 20 20 69 66 20 28 21 70 54 61 62 6c 65 2d 3e     if (!pTable->
8350: 6d 5f 74 72 65 65 5b 2d 74 72 65 65 5f 63 75 72  m_tree[-tree_cur
8360: 20 2d 20 31 5d 29 20 7b 20 70 54 61 62 6c 65 2d   - 1]) { pTable-
8370: 3e 6d 5f 74 72 65 65 5b 2d 74 72 65 65 5f 63 75  >m_tree[-tree_cu
8380: 72 20 2d 20 31 5d 20 3d 20 28 6d 7a 5f 69 6e 74  r - 1] = (mz_int
8390: 31 36 29 74 72 65 65 5f 6e 65 78 74 3b 20 74 72  16)tree_next; tr
83a0: 65 65 5f 63 75 72 20 3d 20 74 72 65 65 5f 6e 65  ee_cur = tree_ne
83b0: 78 74 3b 20 74 72 65 65 5f 6e 65 78 74 20 2d 3d  xt; tree_next -=
83c0: 20 32 3b 20 7d 20 65 6c 73 65 20 74 72 65 65 5f   2; } else tree_
83d0: 63 75 72 20 3d 20 70 54 61 62 6c 65 2d 3e 6d 5f  cur = pTable->m_
83e0: 74 72 65 65 5b 2d 74 72 65 65 5f 63 75 72 20 2d  tree[-tree_cur -
83f0: 20 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   1];.          }
8400: 0a 20 20 20 20 20 20 20 20 20 20 74 72 65 65 5f  .          tree_
8410: 63 75 72 20 2d 3d 20 28 28 72 65 76 5f 63 6f 64  cur -= ((rev_cod
8420: 65 20 3e 3e 3d 20 31 29 20 26 20 31 29 3b 20 70  e >>= 1) & 1); p
8430: 54 61 62 6c 65 2d 3e 6d 5f 74 72 65 65 5b 2d 74  Table->m_tree[-t
8440: 72 65 65 5f 63 75 72 20 2d 20 31 5d 20 3d 20 28  ree_cur - 1] = (
8450: 6d 7a 5f 69 6e 74 31 36 29 73 79 6d 5f 69 6e 64  mz_int16)sym_ind
8460: 65 78 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ex;.        }.  
8470: 20 20 20 20 20 20 69 66 20 28 72 2d 3e 6d 5f 74        if (r->m_t
8480: 79 70 65 20 3d 3d 20 32 29 0a 20 20 20 20 20 20  ype == 2).      
8490: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f    {.          fo
84a0: 72 20 28 63 6f 75 6e 74 65 72 20 3d 20 30 3b 20  r (counter = 0; 
84b0: 63 6f 75 6e 74 65 72 20 3c 20 28 72 2d 3e 6d 5f  counter < (r->m_
84c0: 74 61 62 6c 65 5f 73 69 7a 65 73 5b 30 5d 20 2b  table_sizes[0] +
84d0: 20 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65   r->m_table_size
84e0: 73 5b 31 5d 29 3b 20 29 0a 20 20 20 20 20 20 20  s[1]); ).       
84f0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
8500: 20 6d 7a 5f 75 69 6e 74 20 73 3b 20 54 49 4e 46   mz_uint s; TINF
8510: 4c 5f 48 55 46 46 5f 44 45 43 4f 44 45 28 31 36  L_HUFF_DECODE(16
8520: 2c 20 64 69 73 74 2c 20 26 72 2d 3e 6d 5f 74 61  , dist, &r->m_ta
8530: 62 6c 65 73 5b 32 5d 29 3b 20 69 66 20 28 64 69  bles[2]); if (di
8540: 73 74 20 3c 20 31 36 29 20 7b 20 72 2d 3e 6d 5f  st < 16) { r->m_
8550: 6c 65 6e 5f 63 6f 64 65 73 5b 63 6f 75 6e 74 65  len_codes[counte
8560: 72 2b 2b 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 38  r++] = (mz_uint8
8570: 29 64 69 73 74 3b 20 63 6f 6e 74 69 6e 75 65 3b  )dist; continue;
8580: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   }.            i
8590: 66 20 28 28 64 69 73 74 20 3d 3d 20 31 36 29 20  f ((dist == 16) 
85a0: 26 26 20 28 21 63 6f 75 6e 74 65 72 29 29 0a 20  && (!counter)). 
85b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
85c0: 20 20 20 20 20 20 20 20 20 20 20 54 49 4e 46 4c             TINFL
85d0: 5f 43 52 5f 52 45 54 55 52 4e 5f 46 4f 52 45 56  _CR_RETURN_FOREV
85e0: 45 52 28 31 37 2c 20 54 49 4e 46 4c 5f 53 54 41  ER(17, TINFL_STA
85f0: 54 55 53 5f 46 41 49 4c 45 44 29 3b 0a 20 20 20  TUS_FAILED);.   
8600: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
8610: 20 20 20 20 20 20 20 6e 75 6d 5f 65 78 74 72 61         num_extra
8620: 20 3d 20 22 5c 30 32 5c 30 33 5c 30 37 22 5b 64   = "\02\03\07"[d
8630: 69 73 74 20 2d 20 31 36 5d 3b 20 54 49 4e 46 4c  ist - 16]; TINFL
8640: 5f 47 45 54 5f 42 49 54 53 28 31 38 2c 20 73 2c  _GET_BITS(18, s,
8650: 20 6e 75 6d 5f 65 78 74 72 61 29 3b 20 73 20 2b   num_extra); s +
8660: 3d 20 22 5c 30 33 5c 30 33 5c 30 31 33 22 5b 64  = "\03\03\013"[d
8670: 69 73 74 20 2d 20 31 36 5d 3b 0a 20 20 20 20 20  ist - 16];.     
8680: 20 20 20 20 20 20 20 54 49 4e 46 4c 5f 4d 45 4d         TINFL_MEM
8690: 53 45 54 28 72 2d 3e 6d 5f 6c 65 6e 5f 63 6f 64  SET(r->m_len_cod
86a0: 65 73 20 2b 20 63 6f 75 6e 74 65 72 2c 20 28 64  es + counter, (d
86b0: 69 73 74 20 3d 3d 20 31 36 29 20 3f 20 72 2d 3e  ist == 16) ? r->
86c0: 6d 5f 6c 65 6e 5f 63 6f 64 65 73 5b 63 6f 75 6e  m_len_codes[coun
86d0: 74 65 72 20 2d 20 31 5d 20 3a 20 30 2c 20 73 29  ter - 1] : 0, s)
86e0: 3b 20 63 6f 75 6e 74 65 72 20 2b 3d 20 73 3b 0a  ; counter += s;.
86f0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
8700: 20 20 20 20 20 20 69 66 20 28 28 72 2d 3e 6d 5f        if ((r->m_
8710: 74 61 62 6c 65 5f 73 69 7a 65 73 5b 30 5d 20 2b  table_sizes[0] +
8720: 20 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65   r->m_table_size
8730: 73 5b 31 5d 29 20 21 3d 20 63 6f 75 6e 74 65 72  s[1]) != counter
8740: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  ).          {.  
8750: 20 20 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f            TINFL_
8760: 43 52 5f 52 45 54 55 52 4e 5f 46 4f 52 45 56 45  CR_RETURN_FOREVE
8770: 52 28 32 31 2c 20 54 49 4e 46 4c 5f 53 54 41 54  R(21, TINFL_STAT
8780: 55 53 5f 46 41 49 4c 45 44 29 3b 0a 20 20 20 20  US_FAILED);.    
8790: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
87a0: 20 20 54 49 4e 46 4c 5f 4d 45 4d 43 50 59 28 72    TINFL_MEMCPY(r
87b0: 2d 3e 6d 5f 74 61 62 6c 65 73 5b 30 5d 2e 6d 5f  ->m_tables[0].m_
87c0: 63 6f 64 65 5f 73 69 7a 65 2c 20 72 2d 3e 6d 5f  code_size, r->m_
87d0: 6c 65 6e 5f 63 6f 64 65 73 2c 20 72 2d 3e 6d 5f  len_codes, r->m_
87e0: 74 61 62 6c 65 5f 73 69 7a 65 73 5b 30 5d 29 3b  table_sizes[0]);
87f0: 20 54 49 4e 46 4c 5f 4d 45 4d 43 50 59 28 72 2d   TINFL_MEMCPY(r-
8800: 3e 6d 5f 74 61 62 6c 65 73 5b 31 5d 2e 6d 5f 63  >m_tables[1].m_c
8810: 6f 64 65 5f 73 69 7a 65 2c 20 72 2d 3e 6d 5f 6c  ode_size, r->m_l
8820: 65 6e 5f 63 6f 64 65 73 20 2b 20 72 2d 3e 6d 5f  en_codes + r->m_
8830: 74 61 62 6c 65 5f 73 69 7a 65 73 5b 30 5d 2c 20  table_sizes[0], 
8840: 72 2d 3e 6d 5f 74 61 62 6c 65 5f 73 69 7a 65 73  r->m_table_sizes
8850: 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  [1]);.        }.
8860: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 6f        }.      fo
8870: 72 20 28 20 3b 20 3b 20 29 0a 20 20 20 20 20 20  r ( ; ; ).      
8880: 7b 0a 20 20 20 20 20 20 20 20 6d 7a 5f 75 69 6e  {.        mz_uin
8890: 74 38 20 2a 70 53 72 63 3b 0a 20 20 20 20 20 20  t8 *pSrc;.      
88a0: 20 20 66 6f 72 20 28 20 3b 20 3b 20 29 0a 20 20    for ( ; ; ).  
88b0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
88c0: 20 20 69 66 20 28 28 28 70 49 6e 5f 62 75 66 5f    if (((pIn_buf_
88d0: 65 6e 64 20 2d 20 70 49 6e 5f 62 75 66 5f 63 75  end - pIn_buf_cu
88e0: 72 29 20 3c 20 34 29 20 7c 7c 20 28 28 70 4f 75  r) < 4) || ((pOu
88f0: 74 5f 62 75 66 5f 65 6e 64 20 2d 20 70 4f 75 74  t_buf_end - pOut
8900: 5f 62 75 66 5f 63 75 72 29 20 3c 20 32 29 29 0a  _buf_cur) < 2)).
8910: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
8920: 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f 48 55          TINFL_HU
8930: 46 46 5f 44 45 43 4f 44 45 28 32 33 2c 20 63 6f  FF_DECODE(23, co
8940: 75 6e 74 65 72 2c 20 26 72 2d 3e 6d 5f 74 61 62  unter, &r->m_tab
8950: 6c 65 73 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  les[0]);.       
8960: 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 65 72       if (counter
8970: 20 3e 3d 20 32 35 36 29 0a 20 20 20 20 20 20 20   >= 256).       
8980: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
8990: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
89a0: 28 70 4f 75 74 5f 62 75 66 5f 63 75 72 20 3e 3d  (pOut_buf_cur >=
89b0: 20 70 4f 75 74 5f 62 75 66 5f 65 6e 64 29 20 7b   pOut_buf_end) {
89c0: 20 54 49 4e 46 4c 5f 43 52 5f 52 45 54 55 52 4e   TINFL_CR_RETURN
89d0: 28 32 34 2c 20 54 49 4e 46 4c 5f 53 54 41 54 55  (24, TINFL_STATU
89e0: 53 5f 48 41 53 5f 4d 4f 52 45 5f 4f 55 54 50 55  S_HAS_MORE_OUTPU
89f0: 54 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 20 20  T); }.          
8a00: 20 20 2a 70 4f 75 74 5f 62 75 66 5f 63 75 72 2b    *pOut_buf_cur+
8a10: 2b 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 63 6f  + = (mz_uint8)co
8a20: 75 6e 74 65 72 3b 0a 20 20 20 20 20 20 20 20 20  unter;.         
8a30: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73   }.          els
8a40: 65 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20  e.          {.  
8a50: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 79            int sy
8a60: 6d 32 3b 20 6d 7a 5f 75 69 6e 74 20 63 6f 64 65  m2; mz_uint code
8a70: 5f 6c 65 6e 3b 0a 23 69 66 20 54 49 4e 46 4c 5f  _len;.#if TINFL_
8a80: 55 53 45 5f 36 34 42 49 54 5f 42 49 54 42 55 46  USE_64BIT_BITBUF
8a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
8aa0: 28 6e 75 6d 5f 62 69 74 73 20 3c 20 33 30 29 20  (num_bits < 30) 
8ab0: 7b 20 62 69 74 5f 62 75 66 20 7c 3d 20 28 28 28  { bit_buf |= (((
8ac0: 74 69 6e 66 6c 5f 62 69 74 5f 62 75 66 5f 74 29  tinfl_bit_buf_t)
8ad0: 4d 5a 5f 52 45 41 44 5f 4c 45 33 32 28 70 49 6e  MZ_READ_LE32(pIn
8ae0: 5f 62 75 66 5f 63 75 72 29 29 20 3c 3c 20 6e 75  _buf_cur)) << nu
8af0: 6d 5f 62 69 74 73 29 3b 20 70 49 6e 5f 62 75 66  m_bits); pIn_buf
8b00: 5f 63 75 72 20 2b 3d 20 34 3b 20 6e 75 6d 5f 62  _cur += 4; num_b
8b10: 69 74 73 20 2b 3d 20 33 32 3b 20 7d 0a 23 65 6c  its += 32; }.#el
8b20: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  se.            i
8b30: 66 20 28 6e 75 6d 5f 62 69 74 73 20 3c 20 31 35  f (num_bits < 15
8b40: 29 20 7b 20 62 69 74 5f 62 75 66 20 7c 3d 20 28  ) { bit_buf |= (
8b50: 28 28 74 69 6e 66 6c 5f 62 69 74 5f 62 75 66 5f  ((tinfl_bit_buf_
8b60: 74 29 4d 5a 5f 52 45 41 44 5f 4c 45 31 36 28 70  t)MZ_READ_LE16(p
8b70: 49 6e 5f 62 75 66 5f 63 75 72 29 29 20 3c 3c 20  In_buf_cur)) << 
8b80: 6e 75 6d 5f 62 69 74 73 29 3b 20 70 49 6e 5f 62  num_bits); pIn_b
8b90: 75 66 5f 63 75 72 20 2b 3d 20 32 3b 20 6e 75 6d  uf_cur += 2; num
8ba0: 5f 62 69 74 73 20 2b 3d 20 31 36 3b 20 7d 0a 23  _bits += 16; }.#
8bb0: 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 20 20  endif.          
8bc0: 20 20 69 66 20 28 28 73 79 6d 32 20 3d 20 72 2d    if ((sym2 = r-
8bd0: 3e 6d 5f 74 61 62 6c 65 73 5b 30 5d 2e 6d 5f 6c  >m_tables[0].m_l
8be0: 6f 6f 6b 5f 75 70 5b 62 69 74 5f 62 75 66 20 26  ook_up[bit_buf &
8bf0: 20 28 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f   (TINFL_FAST_LOO
8c00: 4b 55 50 5f 53 49 5a 45 20 2d 20 31 29 5d 29 20  KUP_SIZE - 1)]) 
8c10: 3e 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  >= 0).          
8c20: 20 20 20 20 63 6f 64 65 5f 6c 65 6e 20 3d 20 73      code_len = s
8c30: 79 6d 32 20 3e 3e 20 39 3b 0a 20 20 20 20 20 20  ym2 >> 9;.      
8c40: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
8c50: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
8c60: 20 20 20 20 20 20 20 63 6f 64 65 5f 6c 65 6e 20         code_len 
8c70: 3d 20 54 49 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f  = TINFL_FAST_LOO
8c80: 4b 55 50 5f 42 49 54 53 3b 20 64 6f 20 7b 20 73  KUP_BITS; do { s
8c90: 79 6d 32 20 3d 20 72 2d 3e 6d 5f 74 61 62 6c 65  ym2 = r->m_table
8ca0: 73 5b 30 5d 2e 6d 5f 74 72 65 65 5b 7e 73 79 6d  s[0].m_tree[~sym
8cb0: 32 20 2b 20 28 28 62 69 74 5f 62 75 66 20 3e 3e  2 + ((bit_buf >>
8cc0: 20 63 6f 64 65 5f 6c 65 6e 2b 2b 29 20 26 20 31   code_len++) & 1
8cd0: 29 5d 3b 20 7d 20 77 68 69 6c 65 20 28 73 79 6d  )]; } while (sym
8ce0: 32 20 3c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  2 < 0);.        
8cf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
8d00: 20 20 63 6f 75 6e 74 65 72 20 3d 20 73 79 6d 32    counter = sym2
8d10: 3b 20 62 69 74 5f 62 75 66 20 3e 3e 3d 20 63 6f  ; bit_buf >>= co
8d20: 64 65 5f 6c 65 6e 3b 20 6e 75 6d 5f 62 69 74 73  de_len; num_bits
8d30: 20 2d 3d 20 63 6f 64 65 5f 6c 65 6e 3b 0a 20 20   -= code_len;.  
8d40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
8d50: 75 6e 74 65 72 20 26 20 32 35 36 29 0a 20 20 20  unter & 256).   
8d60: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
8d70: 3b 0a 0a 23 69 66 20 21 54 49 4e 46 4c 5f 55 53  ;..#if !TINFL_US
8d80: 45 5f 36 34 42 49 54 5f 42 49 54 42 55 46 0a 20  E_64BIT_BITBUF. 
8d90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
8da0: 75 6d 5f 62 69 74 73 20 3c 20 31 35 29 20 7b 20  um_bits < 15) { 
8db0: 62 69 74 5f 62 75 66 20 7c 3d 20 28 28 28 74 69  bit_buf |= (((ti
8dc0: 6e 66 6c 5f 62 69 74 5f 62 75 66 5f 74 29 4d 5a  nfl_bit_buf_t)MZ
8dd0: 5f 52 45 41 44 5f 4c 45 31 36 28 70 49 6e 5f 62  _READ_LE16(pIn_b
8de0: 75 66 5f 63 75 72 29 29 20 3c 3c 20 6e 75 6d 5f  uf_cur)) << num_
8df0: 62 69 74 73 29 3b 20 70 49 6e 5f 62 75 66 5f 63  bits); pIn_buf_c
8e00: 75 72 20 2b 3d 20 32 3b 20 6e 75 6d 5f 62 69 74  ur += 2; num_bit
8e10: 73 20 2b 3d 20 31 36 3b 20 7d 0a 23 65 6e 64 69  s += 16; }.#endi
8e20: 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  f.            if
8e30: 20 28 28 73 79 6d 32 20 3d 20 72 2d 3e 6d 5f 74   ((sym2 = r->m_t
8e40: 61 62 6c 65 73 5b 30 5d 2e 6d 5f 6c 6f 6f 6b 5f  ables[0].m_look_
8e50: 75 70 5b 62 69 74 5f 62 75 66 20 26 20 28 54 49  up[bit_buf & (TI
8e60: 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50 5f  NFL_FAST_LOOKUP_
8e70: 53 49 5a 45 20 2d 20 31 29 5d 29 20 3e 3d 20 30  SIZE - 1)]) >= 0
8e80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
8e90: 63 6f 64 65 5f 6c 65 6e 20 3d 20 73 79 6d 32 20  code_len = sym2 
8ea0: 3e 3e 20 39 3b 0a 20 20 20 20 20 20 20 20 20 20  >> 9;.          
8eb0: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
8ec0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
8ed0: 20 20 20 63 6f 64 65 5f 6c 65 6e 20 3d 20 54 49     code_len = TI
8ee0: 4e 46 4c 5f 46 41 53 54 5f 4c 4f 4f 4b 55 50 5f  NFL_FAST_LOOKUP_
8ef0: 42 49 54 53 3b 20 64 6f 20 7b 20 73 79 6d 32 20  BITS; do { sym2 
8f00: 3d 20 72 2d 3e 6d 5f 74 61 62 6c 65 73 5b 30 5d  = r->m_tables[0]
8f10: 2e 6d 5f 74 72 65 65 5b 7e 73 79 6d 32 20 2b 20  .m_tree[~sym2 + 
8f20: 28 28 62 69 74 5f 62 75 66 20 3e 3e 20 63 6f 64  ((bit_buf >> cod
8f30: 65 5f 6c 65 6e 2b 2b 29 20 26 20 31 29 5d 3b 20  e_len++) & 1)]; 
8f40: 7d 20 77 68 69 6c 65 20 28 73 79 6d 32 20 3c 20  } while (sym2 < 
8f50: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
8f60: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 69  }.            bi
8f70: 74 5f 62 75 66 20 3e 3e 3d 20 63 6f 64 65 5f 6c  t_buf >>= code_l
8f80: 65 6e 3b 20 6e 75 6d 5f 62 69 74 73 20 2d 3d 20  en; num_bits -= 
8f90: 63 6f 64 65 5f 6c 65 6e 3b 0a 0a 20 20 20 20 20  code_len;..     
8fa0: 20 20 20 20 20 20 20 70 4f 75 74 5f 62 75 66 5f         pOut_buf_
8fb0: 63 75 72 5b 30 5d 20 3d 20 28 6d 7a 5f 75 69 6e  cur[0] = (mz_uin
8fc0: 74 38 29 63 6f 75 6e 74 65 72 3b 0a 20 20 20 20  t8)counter;.    
8fd0: 20 20 20 20 20 20 20 20 69 66 20 28 73 79 6d 32          if (sym2
8fe0: 20 26 20 32 35 36 29 0a 20 20 20 20 20 20 20 20   & 256).        
8ff0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
9000: 20 20 20 20 70 4f 75 74 5f 62 75 66 5f 63 75 72      pOut_buf_cur
9010: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ++;.            
9020: 20 20 63 6f 75 6e 74 65 72 20 3d 20 73 79 6d 32    counter = sym2
9030: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
9040: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
9050: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
9060: 20 70 4f 75 74 5f 62 75 66 5f 63 75 72 5b 31 5d   pOut_buf_cur[1]
9070: 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 73 79 6d   = (mz_uint8)sym
9080: 32 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  2;.            p
9090: 4f 75 74 5f 62 75 66 5f 63 75 72 20 2b 3d 20 32  Out_buf_cur += 2
90a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
90b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
90c0: 69 66 20 28 28 63 6f 75 6e 74 65 72 20 26 3d 20  if ((counter &= 
90d0: 35 31 31 29 20 3d 3d 20 32 35 36 29 20 62 72 65  511) == 256) bre
90e0: 61 6b 3b 0a 0a 20 20 20 20 20 20 20 20 6e 75 6d  ak;..        num
90f0: 5f 65 78 74 72 61 20 3d 20 73 5f 6c 65 6e 67 74  _extra = s_lengt
9100: 68 5f 65 78 74 72 61 5b 63 6f 75 6e 74 65 72 20  h_extra[counter 
9110: 2d 20 32 35 37 5d 3b 20 63 6f 75 6e 74 65 72 20  - 257]; counter 
9120: 3d 20 73 5f 6c 65 6e 67 74 68 5f 62 61 73 65 5b  = s_length_base[
9130: 63 6f 75 6e 74 65 72 20 2d 20 32 35 37 5d 3b 0a  counter - 257];.
9140: 20 20 20 20 20 20 20 20 69 66 20 28 6e 75 6d 5f          if (num_
9150: 65 78 74 72 61 29 20 7b 20 6d 7a 5f 75 69 6e 74  extra) { mz_uint
9160: 20 65 78 74 72 61 5f 62 69 74 73 3b 20 54 49 4e   extra_bits; TIN
9170: 46 4c 5f 47 45 54 5f 42 49 54 53 28 32 35 2c 20  FL_GET_BITS(25, 
9180: 65 78 74 72 61 5f 62 69 74 73 2c 20 6e 75 6d 5f  extra_bits, num_
9190: 65 78 74 72 61 29 3b 20 63 6f 75 6e 74 65 72 20  extra); counter 
91a0: 2b 3d 20 65 78 74 72 61 5f 62 69 74 73 3b 20 7d  += extra_bits; }
91b0: 0a 0a 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f  ..        TINFL_
91c0: 48 55 46 46 5f 44 45 43 4f 44 45 28 32 36 2c 20  HUFF_DECODE(26, 
91d0: 64 69 73 74 2c 20 26 72 2d 3e 6d 5f 74 61 62 6c  dist, &r->m_tabl
91e0: 65 73 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  es[1]);.        
91f0: 6e 75 6d 5f 65 78 74 72 61 20 3d 20 73 5f 64 69  num_extra = s_di
9200: 73 74 5f 65 78 74 72 61 5b 64 69 73 74 5d 3b 20  st_extra[dist]; 
9210: 64 69 73 74 20 3d 20 73 5f 64 69 73 74 5f 62 61  dist = s_dist_ba
9220: 73 65 5b 64 69 73 74 5d 3b 0a 20 20 20 20 20 20  se[dist];.      
9230: 20 20 69 66 20 28 6e 75 6d 5f 65 78 74 72 61 29    if (num_extra)
9240: 20 7b 20 6d 7a 5f 75 69 6e 74 20 65 78 74 72 61   { mz_uint extra
9250: 5f 62 69 74 73 3b 20 54 49 4e 46 4c 5f 47 45 54  _bits; TINFL_GET
9260: 5f 42 49 54 53 28 32 37 2c 20 65 78 74 72 61 5f  _BITS(27, extra_
9270: 62 69 74 73 2c 20 6e 75 6d 5f 65 78 74 72 61 29  bits, num_extra)
9280: 3b 20 64 69 73 74 20 2b 3d 20 65 78 74 72 61 5f  ; dist += extra_
9290: 62 69 74 73 3b 20 7d 0a 0a 20 20 20 20 20 20 20  bits; }..       
92a0: 20 64 69 73 74 5f 66 72 6f 6d 5f 6f 75 74 5f 62   dist_from_out_b
92b0: 75 66 5f 73 74 61 72 74 20 3d 20 70 4f 75 74 5f  uf_start = pOut_
92c0: 62 75 66 5f 63 75 72 20 2d 20 70 4f 75 74 5f 62  buf_cur - pOut_b
92d0: 75 66 5f 73 74 61 72 74 3b 0a 20 20 20 20 20 20  uf_start;.      
92e0: 20 20 69 66 20 28 28 64 69 73 74 20 3e 20 64 69    if ((dist > di
92f0: 73 74 5f 66 72 6f 6d 5f 6f 75 74 5f 62 75 66 5f  st_from_out_buf_
9300: 73 74 61 72 74 29 20 26 26 20 28 64 65 63 6f 6d  start) && (decom
9310: 70 5f 66 6c 61 67 73 20 26 20 54 49 4e 46 4c 5f  p_flags & TINFL_
9320: 46 4c 41 47 5f 55 53 49 4e 47 5f 4e 4f 4e 5f 57  FLAG_USING_NON_W
9330: 52 41 50 50 49 4e 47 5f 4f 55 54 50 55 54 5f 42  RAPPING_OUTPUT_B
9340: 55 46 29 29 0a 20 20 20 20 20 20 20 20 7b 0a 20  UF)).        {. 
9350: 20 20 20 20 20 20 20 20 20 54 49 4e 46 4c 5f 43           TINFL_C
9360: 52 5f 52 45 54 55 52 4e 5f 46 4f 52 45 56 45 52  R_RETURN_FOREVER
9370: 28 33 37 2c 20 54 49 4e 46 4c 5f 53 54 41 54 55  (37, TINFL_STATU
9380: 53 5f 46 41 49 4c 45 44 29 3b 0a 20 20 20 20 20  S_FAILED);.     
9390: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 70 53     }..        pS
93a0: 72 63 20 3d 20 70 4f 75 74 5f 62 75 66 5f 73 74  rc = pOut_buf_st
93b0: 61 72 74 20 2b 20 28 28 64 69 73 74 5f 66 72 6f  art + ((dist_fro
93c0: 6d 5f 6f 75 74 5f 62 75 66 5f 73 74 61 72 74 20  m_out_buf_start 
93d0: 2d 20 64 69 73 74 29 20 26 20 6f 75 74 5f 62 75  - dist) & out_bu
93e0: 66 5f 73 69 7a 65 5f 6d 61 73 6b 29 3b 0a 0a 20  f_size_mask);.. 
93f0: 20 20 20 20 20 20 20 69 66 20 28 28 4d 5a 5f 4d         if ((MZ_M
9400: 41 58 28 70 4f 75 74 5f 62 75 66 5f 63 75 72 2c  AX(pOut_buf_cur,
9410: 20 70 53 72 63 29 20 2b 20 63 6f 75 6e 74 65 72   pSrc) + counter
9420: 29 20 3e 20 70 4f 75 74 5f 62 75 66 5f 65 6e 64  ) > pOut_buf_end
9430: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
9440: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6f 75        while (cou
9450: 6e 74 65 72 2d 2d 29 0a 20 20 20 20 20 20 20 20  nter--).        
9460: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
9470: 77 68 69 6c 65 20 28 70 4f 75 74 5f 62 75 66 5f  while (pOut_buf_
9480: 63 75 72 20 3e 3d 20 70 4f 75 74 5f 62 75 66 5f  cur >= pOut_buf_
9490: 65 6e 64 29 20 7b 20 54 49 4e 46 4c 5f 43 52 5f  end) { TINFL_CR_
94a0: 52 45 54 55 52 4e 28 35 33 2c 20 54 49 4e 46 4c  RETURN(53, TINFL
94b0: 5f 53 54 41 54 55 53 5f 48 41 53 5f 4d 4f 52 45  _STATUS_HAS_MORE
94c0: 5f 4f 55 54 50 55 54 29 3b 20 7d 0a 20 20 20 20  _OUTPUT); }.    
94d0: 20 20 20 20 20 20 20 20 2a 70 4f 75 74 5f 62 75          *pOut_bu
94e0: 66 5f 63 75 72 2b 2b 20 3d 20 70 4f 75 74 5f 62  f_cur++ = pOut_b
94f0: 75 66 5f 73 74 61 72 74 5b 28 64 69 73 74 5f 66  uf_start[(dist_f
9500: 72 6f 6d 5f 6f 75 74 5f 62 75 66 5f 73 74 61 72  rom_out_buf_star
9510: 74 2b 2b 20 2d 20 64 69 73 74 29 20 26 20 6f 75  t++ - dist) & ou
9520: 74 5f 62 75 66 5f 73 69 7a 65 5f 6d 61 73 6b 5d  t_buf_size_mask]
9530: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
9540: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
9550: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 69 66 20  ;.        }.#if 
9560: 4d 49 4e 49 5a 5f 55 53 45 5f 55 4e 41 4c 49 47  MINIZ_USE_UNALIG
9570: 4e 45 44 5f 4c 4f 41 44 53 5f 41 4e 44 5f 53 54  NED_LOADS_AND_ST
9580: 4f 52 45 53 0a 20 20 20 20 20 20 20 20 65 6c 73  ORES.        els
9590: 65 20 69 66 20 28 28 63 6f 75 6e 74 65 72 20 3e  e if ((counter >
95a0: 3d 20 39 29 20 26 26 20 28 63 6f 75 6e 74 65 72  = 9) && (counter
95b0: 20 3c 3d 20 64 69 73 74 29 29 0a 20 20 20 20 20   <= dist)).     
95c0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 63     {.          c
95d0: 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  onst mz_uint8 *p
95e0: 53 72 63 5f 65 6e 64 20 3d 20 70 53 72 63 20 2b  Src_end = pSrc +
95f0: 20 28 63 6f 75 6e 74 65 72 20 26 20 7e 37 29 3b   (counter & ~7);
9600: 0a 20 20 20 20 20 20 20 20 20 20 64 6f 0a 20 20  .          do.  
9610: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
9620: 20 20 20 20 20 20 28 28 6d 7a 5f 75 69 6e 74 33        ((mz_uint3
9630: 32 20 2a 29 70 4f 75 74 5f 62 75 66 5f 63 75 72  2 *)pOut_buf_cur
9640: 29 5b 30 5d 20 3d 20 28 28 63 6f 6e 73 74 20 6d  )[0] = ((const m
9650: 7a 5f 75 69 6e 74 33 32 20 2a 29 70 53 72 63 29  z_uint32 *)pSrc)
9660: 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  [0];.           
9670: 20 28 28 6d 7a 5f 75 69 6e 74 33 32 20 2a 29 70   ((mz_uint32 *)p
9680: 4f 75 74 5f 62 75 66 5f 63 75 72 29 5b 31 5d 20  Out_buf_cur)[1] 
9690: 3d 20 28 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e  = ((const mz_uin
96a0: 74 33 32 20 2a 29 70 53 72 63 29 5b 31 5d 3b 0a  t32 *)pSrc)[1];.
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 75 74              pOut
96c0: 5f 62 75 66 5f 63 75 72 20 2b 3d 20 38 3b 0a 20  _buf_cur += 8;. 
96d0: 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65           } while
96e0: 20 28 28 70 53 72 63 20 2b 3d 20 38 29 20 3c 20   ((pSrc += 8) < 
96f0: 70 53 72 63 5f 65 6e 64 29 3b 0a 20 20 20 20 20  pSrc_end);.     
9700: 20 20 20 20 20 69 66 20 28 28 63 6f 75 6e 74 65       if ((counte
9710: 72 20 26 3d 20 37 29 20 3c 20 33 29 0a 20 20 20  r &= 7) < 3).   
9720: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
9730: 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 65 72       if (counter
9740: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a  ).            {.
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
9760: 75 74 5f 62 75 66 5f 63 75 72 5b 30 5d 20 3d 20  ut_buf_cur[0] = 
9770: 70 53 72 63 5b 30 5d 3b 0a 20 20 20 20 20 20 20  pSrc[0];.       
9780: 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74         if (count
9790: 65 72 20 3e 20 31 29 0a 20 20 20 20 20 20 20 20  er > 1).        
97a0: 20 20 20 20 20 20 20 20 70 4f 75 74 5f 62 75 66          pOut_buf
97b0: 5f 63 75 72 5b 31 5d 20 3d 20 70 53 72 63 5b 31  _cur[1] = pSrc[1
97c0: 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ];.             
97d0: 20 70 4f 75 74 5f 62 75 66 5f 63 75 72 20 2b 3d   pOut_buf_cur +=
97e0: 20 63 6f 75 6e 74 65 72 3b 0a 20 20 20 20 20 20   counter;.      
97f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
9800: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
9810: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9820: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
9830: 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20 7b 0a     do.        {.
9840: 20 20 20 20 20 20 20 20 20 20 70 4f 75 74 5f 62            pOut_b
9850: 75 66 5f 63 75 72 5b 30 5d 20 3d 20 70 53 72 63  uf_cur[0] = pSrc
9860: 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 70  [0];.          p
9870: 4f 75 74 5f 62 75 66 5f 63 75 72 5b 31 5d 20 3d  Out_buf_cur[1] =
9880: 20 70 53 72 63 5b 31 5d 3b 0a 20 20 20 20 20 20   pSrc[1];.      
9890: 20 20 20 20 70 4f 75 74 5f 62 75 66 5f 63 75 72      pOut_buf_cur
98a0: 5b 32 5d 20 3d 20 70 53 72 63 5b 32 5d 3b 0a 20  [2] = pSrc[2];. 
98b0: 20 20 20 20 20 20 20 20 20 70 4f 75 74 5f 62 75           pOut_bu
98c0: 66 5f 63 75 72 20 2b 3d 20 33 3b 20 70 53 72 63  f_cur += 3; pSrc
98d0: 20 2b 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 7d   += 3;.        }
98e0: 20 77 68 69 6c 65 20 28 28 69 6e 74 29 28 63 6f   while ((int)(co
98f0: 75 6e 74 65 72 20 2d 3d 20 33 29 20 3e 20 32 29  unter -= 3) > 2)
9900: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 69  ;.        if ((i
9910: 6e 74 29 63 6f 75 6e 74 65 72 20 3e 20 30 29 0a  nt)counter > 0).
9920: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
9930: 20 20 20 20 70 4f 75 74 5f 62 75 66 5f 63 75 72      pOut_buf_cur
9940: 5b 30 5d 20 3d 20 70 53 72 63 5b 30 5d 3b 0a 20  [0] = pSrc[0];. 
9950: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 69 6e           if ((in
9960: 74 29 63 6f 75 6e 74 65 72 20 3e 20 31 29 0a 20  t)counter > 1). 
9970: 20 20 20 20 20 20 20 20 20 20 20 70 4f 75 74 5f             pOut_
9980: 62 75 66 5f 63 75 72 5b 31 5d 20 3d 20 70 53 72  buf_cur[1] = pSr
9990: 63 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  c[1];.          
99a0: 70 4f 75 74 5f 62 75 66 5f 63 75 72 20 2b 3d 20  pOut_buf_cur += 
99b0: 63 6f 75 6e 74 65 72 3b 0a 20 20 20 20 20 20 20  counter;.       
99c0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
99d0: 0a 20 20 7d 20 77 68 69 6c 65 20 28 21 28 72 2d  .  } while (!(r-
99e0: 3e 6d 5f 66 69 6e 61 6c 20 26 20 31 29 29 3b 0a  >m_final & 1));.
99f0: 20 20 69 66 20 28 64 65 63 6f 6d 70 5f 66 6c 61    if (decomp_fla
9a00: 67 73 20 26 20 54 49 4e 46 4c 5f 46 4c 41 47 5f  gs & TINFL_FLAG_
9a10: 50 41 52 53 45 5f 5a 4c 49 42 5f 48 45 41 44 45  PARSE_ZLIB_HEADE
9a20: 52 29 0a 20 20 7b 0a 20 20 20 20 54 49 4e 46 4c  R).  {.    TINFL
9a30: 5f 53 4b 49 50 5f 42 49 54 53 28 33 32 2c 20 6e  _SKIP_BITS(32, n
9a40: 75 6d 5f 62 69 74 73 20 26 20 37 29 3b 20 66 6f  um_bits & 7); fo
9a50: 72 20 28 63 6f 75 6e 74 65 72 20 3d 20 30 3b 20  r (counter = 0; 
9a60: 63 6f 75 6e 74 65 72 20 3c 20 34 3b 20 2b 2b 63  counter < 4; ++c
9a70: 6f 75 6e 74 65 72 29 20 7b 20 6d 7a 5f 75 69 6e  ounter) { mz_uin
9a80: 74 20 73 3b 20 69 66 20 28 6e 75 6d 5f 62 69 74  t s; if (num_bit
9a90: 73 29 20 54 49 4e 46 4c 5f 47 45 54 5f 42 49 54  s) TINFL_GET_BIT
9aa0: 53 28 34 31 2c 20 73 2c 20 38 29 3b 20 65 6c 73  S(41, s, 8); els
9ab0: 65 20 54 49 4e 46 4c 5f 47 45 54 5f 42 59 54 45  e TINFL_GET_BYTE
9ac0: 28 34 32 2c 20 73 29 3b 20 72 2d 3e 6d 5f 7a 5f  (42, s); r->m_z_
9ad0: 61 64 6c 65 72 33 32 20 3d 20 28 72 2d 3e 6d 5f  adler32 = (r->m_
9ae0: 7a 5f 61 64 6c 65 72 33 32 20 3c 3c 20 38 29 20  z_adler32 << 8) 
9af0: 7c 20 73 3b 20 7d 0a 20 20 7d 0a 20 20 54 49 4e  | s; }.  }.  TIN
9b00: 46 4c 5f 43 52 5f 52 45 54 55 52 4e 5f 46 4f 52  FL_CR_RETURN_FOR
9b10: 45 56 45 52 28 33 34 2c 20 54 49 4e 46 4c 5f 53  EVER(34, TINFL_S
9b20: 54 41 54 55 53 5f 44 4f 4e 45 29 3b 0a 20 20 54  TATUS_DONE);.  T
9b30: 49 4e 46 4c 5f 43 52 5f 46 49 4e 49 53 48 0a 0a  INFL_CR_FINISH..
9b40: 63 6f 6d 6d 6f 6e 5f 65 78 69 74 3a 0a 20 20 72  common_exit:.  r
9b50: 2d 3e 6d 5f 6e 75 6d 5f 62 69 74 73 20 3d 20 6e  ->m_num_bits = n
9b60: 75 6d 5f 62 69 74 73 3b 20 72 2d 3e 6d 5f 62 69  um_bits; r->m_bi
9b70: 74 5f 62 75 66 20 3d 20 62 69 74 5f 62 75 66 3b  t_buf = bit_buf;
9b80: 20 72 2d 3e 6d 5f 64 69 73 74 20 3d 20 64 69 73   r->m_dist = dis
9b90: 74 3b 20 72 2d 3e 6d 5f 63 6f 75 6e 74 65 72 20  t; r->m_counter 
9ba0: 3d 20 63 6f 75 6e 74 65 72 3b 20 72 2d 3e 6d 5f  = counter; r->m_
9bb0: 6e 75 6d 5f 65 78 74 72 61 20 3d 20 6e 75 6d 5f  num_extra = num_
9bc0: 65 78 74 72 61 3b 20 72 2d 3e 6d 5f 64 69 73 74  extra; r->m_dist
9bd0: 5f 66 72 6f 6d 5f 6f 75 74 5f 62 75 66 5f 73 74  _from_out_buf_st
9be0: 61 72 74 20 3d 20 64 69 73 74 5f 66 72 6f 6d 5f  art = dist_from_
9bf0: 6f 75 74 5f 62 75 66 5f 73 74 61 72 74 3b 0a 20  out_buf_start;. 
9c00: 20 2a 70 49 6e 5f 62 75 66 5f 73 69 7a 65 20 3d   *pIn_buf_size =
9c10: 20 70 49 6e 5f 62 75 66 5f 63 75 72 20 2d 20 70   pIn_buf_cur - p
9c20: 49 6e 5f 62 75 66 5f 6e 65 78 74 3b 20 2a 70 4f  In_buf_next; *pO
9c30: 75 74 5f 62 75 66 5f 73 69 7a 65 20 3d 20 70 4f  ut_buf_size = pO
9c40: 75 74 5f 62 75 66 5f 63 75 72 20 2d 20 70 4f 75  ut_buf_cur - pOu
9c50: 74 5f 62 75 66 5f 6e 65 78 74 3b 0a 20 20 69 66  t_buf_next;.  if
9c60: 20 28 28 64 65 63 6f 6d 70 5f 66 6c 61 67 73 20   ((decomp_flags 
9c70: 26 20 28 54 49 4e 46 4c 5f 46 4c 41 47 5f 50 41  & (TINFL_FLAG_PA
9c80: 52 53 45 5f 5a 4c 49 42 5f 48 45 41 44 45 52 20  RSE_ZLIB_HEADER 
9c90: 7c 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 43 4f 4d  | TINFL_FLAG_COM
9ca0: 50 55 54 45 5f 41 44 4c 45 52 33 32 29 29 20 26  PUTE_ADLER32)) &
9cb0: 26 20 28 73 74 61 74 75 73 20 3e 3d 20 30 29 29  & (status >= 0))
9cc0: 0a 20 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 6d  .  {.    const m
9cd0: 7a 5f 75 69 6e 74 38 20 2a 70 74 72 20 3d 20 70  z_uint8 *ptr = p
9ce0: 4f 75 74 5f 62 75 66 5f 6e 65 78 74 3b 20 73 69  Out_buf_next; si
9cf0: 7a 65 5f 74 20 62 75 66 5f 6c 65 6e 20 3d 20 2a  ze_t buf_len = *
9d00: 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65 3b 0a 20  pOut_buf_size;. 
9d10: 20 20 20 6d 7a 5f 75 69 6e 74 33 32 20 69 2c 20     mz_uint32 i, 
9d20: 73 31 20 3d 20 72 2d 3e 6d 5f 63 68 65 63 6b 5f  s1 = r->m_check_
9d30: 61 64 6c 65 72 33 32 20 26 20 30 78 66 66 66 66  adler32 & 0xffff
9d40: 2c 20 73 32 20 3d 20 72 2d 3e 6d 5f 63 68 65 63  , s2 = r->m_chec
9d50: 6b 5f 61 64 6c 65 72 33 32 20 3e 3e 20 31 36 3b  k_adler32 >> 16;
9d60: 20 73 69 7a 65 5f 74 20 62 6c 6f 63 6b 5f 6c 65   size_t block_le
9d70: 6e 20 3d 20 62 75 66 5f 6c 65 6e 20 25 20 35 35  n = buf_len % 55
9d80: 35 32 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 62  52;.    while (b
9d90: 75 66 5f 6c 65 6e 29 0a 20 20 20 20 7b 0a 20 20  uf_len).    {.  
9da0: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20      for (i = 0; 
9db0: 69 20 2b 20 37 20 3c 20 62 6c 6f 63 6b 5f 6c 65  i + 7 < block_le
9dc0: 6e 3b 20 69 20 2b 3d 20 38 2c 20 70 74 72 20 2b  n; i += 8, ptr +
9dd0: 3d 20 38 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  = 8).      {.   
9de0: 20 20 20 20 20 73 31 20 2b 3d 20 70 74 72 5b 30       s1 += ptr[0
9df0: 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 20 73 31 20  ], s2 += s1; s1 
9e00: 2b 3d 20 70 74 72 5b 31 5d 2c 20 73 32 20 2b 3d  += ptr[1], s2 +=
9e10: 20 73 31 3b 20 73 31 20 2b 3d 20 70 74 72 5b 32   s1; s1 += ptr[2
9e20: 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 20 73 31 20  ], s2 += s1; s1 
9e30: 2b 3d 20 70 74 72 5b 33 5d 2c 20 73 32 20 2b 3d  += ptr[3], s2 +=
9e40: 20 73 31 3b 0a 20 20 20 20 20 20 20 20 73 31 20   s1;.        s1 
9e50: 2b 3d 20 70 74 72 5b 34 5d 2c 20 73 32 20 2b 3d  += ptr[4], s2 +=
9e60: 20 73 31 3b 20 73 31 20 2b 3d 20 70 74 72 5b 35   s1; s1 += ptr[5
9e70: 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 20 73 31 20  ], s2 += s1; s1 
9e80: 2b 3d 20 70 74 72 5b 36 5d 2c 20 73 32 20 2b 3d  += ptr[6], s2 +=
9e90: 20 73 31 3b 20 73 31 20 2b 3d 20 70 74 72 5b 37   s1; s1 += ptr[7
9ea0: 5d 2c 20 73 32 20 2b 3d 20 73 31 3b 0a 20 20 20  ], s2 += s1;.   
9eb0: 20 20 20 7d 0a 20 20 20 20 20 20 66 6f 72 20 28     }.      for (
9ec0: 20 3b 20 69 20 3c 20 62 6c 6f 63 6b 5f 6c 65 6e   ; i < block_len
9ed0: 3b 20 2b 2b 69 29 20 73 31 20 2b 3d 20 2a 70 74  ; ++i) s1 += *pt
9ee0: 72 2b 2b 2c 20 73 32 20 2b 3d 20 73 31 3b 0a 20  r++, s2 += s1;. 
9ef0: 20 20 20 20 20 73 31 20 25 3d 20 36 35 35 32 31       s1 %= 65521
9f00: 55 2c 20 73 32 20 25 3d 20 36 35 35 32 31 55 3b  U, s2 %= 65521U;
9f10: 20 62 75 66 5f 6c 65 6e 20 2d 3d 20 62 6c 6f 63   buf_len -= bloc
9f20: 6b 5f 6c 65 6e 3b 20 62 6c 6f 63 6b 5f 6c 65 6e  k_len; block_len
9f30: 20 3d 20 35 35 35 32 3b 0a 20 20 20 20 7d 0a 20   = 5552;.    }. 
9f40: 20 20 20 72 2d 3e 6d 5f 63 68 65 63 6b 5f 61 64     r->m_check_ad
9f50: 6c 65 72 33 32 20 3d 20 28 73 32 20 3c 3c 20 31  ler32 = (s2 << 1
9f60: 36 29 20 2b 20 73 31 3b 20 69 66 20 28 28 73 74  6) + s1; if ((st
9f70: 61 74 75 73 20 3d 3d 20 54 49 4e 46 4c 5f 53 54  atus == TINFL_ST
9f80: 41 54 55 53 5f 44 4f 4e 45 29 20 26 26 20 28 64  ATUS_DONE) && (d
9f90: 65 63 6f 6d 70 5f 66 6c 61 67 73 20 26 20 54 49  ecomp_flags & TI
9fa0: 4e 46 4c 5f 46 4c 41 47 5f 50 41 52 53 45 5f 5a  NFL_FLAG_PARSE_Z
9fb0: 4c 49 42 5f 48 45 41 44 45 52 29 20 26 26 20 28  LIB_HEADER) && (
9fc0: 72 2d 3e 6d 5f 63 68 65 63 6b 5f 61 64 6c 65 72  r->m_check_adler
9fd0: 33 32 20 21 3d 20 72 2d 3e 6d 5f 7a 5f 61 64 6c  32 != r->m_z_adl
9fe0: 65 72 33 32 29 29 20 73 74 61 74 75 73 20 3d 20  er32)) status = 
9ff0: 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 41 44 4c  TINFL_STATUS_ADL
a000: 45 52 33 32 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  ER32_MISMATCH;. 
a010: 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 74 61 74   }.  return stat
a020: 75 73 3b 0a 7d 0a 0a 2f 2f 20 48 69 67 68 65 72  us;.}..// Higher
a030: 20 6c 65 76 65 6c 20 68 65 6c 70 65 72 20 66 75   level helper fu
a040: 6e 63 74 69 6f 6e 73 2e 0a 76 6f 69 64 20 2a 74  nctions..void *t
a050: 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65 73 73 5f  infl_decompress_
a060: 6d 65 6d 5f 74 6f 5f 68 65 61 70 28 63 6f 6e 73  mem_to_heap(cons
a070: 74 20 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66  t void *pSrc_buf
a080: 2c 20 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66  , size_t src_buf
a090: 5f 6c 65 6e 2c 20 73 69 7a 65 5f 74 20 2a 70 4f  _len, size_t *pO
a0a0: 75 74 5f 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67  ut_len, int flag
a0b0: 73 29 0a 7b 0a 20 20 74 69 6e 66 6c 5f 64 65 63  s).{.  tinfl_dec
a0c0: 6f 6d 70 72 65 73 73 6f 72 20 64 65 63 6f 6d 70  ompressor decomp
a0d0: 3b 20 76 6f 69 64 20 2a 70 42 75 66 20 3d 20 4e  ; void *pBuf = N
a0e0: 55 4c 4c 2c 20 2a 70 4e 65 77 5f 62 75 66 3b 20  ULL, *pNew_buf; 
a0f0: 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66 5f 6f  size_t src_buf_o
a100: 66 73 20 3d 20 30 2c 20 6f 75 74 5f 62 75 66 5f  fs = 0, out_buf_
a110: 63 61 70 61 63 69 74 79 20 3d 20 30 3b 0a 20 20  capacity = 0;.  
a120: 2a 70 4f 75 74 5f 6c 65 6e 20 3d 20 30 3b 0a 20  *pOut_len = 0;. 
a130: 20 74 69 6e 66 6c 5f 69 6e 69 74 28 26 64 65 63   tinfl_init(&dec
a140: 6f 6d 70 29 3b 0a 20 20 66 6f 72 20 28 20 3b 20  omp);.  for ( ; 
a150: 3b 20 29 0a 20 20 7b 0a 20 20 20 20 73 69 7a 65  ; ).  {.    size
a160: 5f 74 20 73 72 63 5f 62 75 66 5f 73 69 7a 65 20  _t src_buf_size 
a170: 3d 20 73 72 63 5f 62 75 66 5f 6c 65 6e 20 2d 20  = src_buf_len - 
a180: 73 72 63 5f 62 75 66 5f 6f 66 73 2c 20 64 73 74  src_buf_ofs, dst
a190: 5f 62 75 66 5f 73 69 7a 65 20 3d 20 6f 75 74 5f  _buf_size = out_
a1a0: 62 75 66 5f 63 61 70 61 63 69 74 79 20 2d 20 2a  buf_capacity - *
a1b0: 70 4f 75 74 5f 6c 65 6e 2c 20 6e 65 77 5f 6f 75  pOut_len, new_ou
a1c0: 74 5f 62 75 66 5f 63 61 70 61 63 69 74 79 3b 0a  t_buf_capacity;.
a1d0: 20 20 20 20 74 69 6e 66 6c 5f 73 74 61 74 75 73      tinfl_status
a1e0: 20 73 74 61 74 75 73 20 3d 20 74 69 6e 66 6c 5f   status = tinfl_
a1f0: 64 65 63 6f 6d 70 72 65 73 73 28 26 64 65 63 6f  decompress(&deco
a200: 6d 70 2c 20 28 63 6f 6e 73 74 20 6d 7a 5f 75 69  mp, (const mz_ui
a210: 6e 74 38 2a 29 70 53 72 63 5f 62 75 66 20 2b 20  nt8*)pSrc_buf + 
a220: 73 72 63 5f 62 75 66 5f 6f 66 73 2c 20 26 73 72  src_buf_ofs, &sr
a230: 63 5f 62 75 66 5f 73 69 7a 65 2c 20 28 6d 7a 5f  c_buf_size, (mz_
a240: 75 69 6e 74 38 2a 29 70 42 75 66 2c 20 70 42 75  uint8*)pBuf, pBu
a250: 66 20 3f 20 28 6d 7a 5f 75 69 6e 74 38 2a 29 70  f ? (mz_uint8*)p
a260: 42 75 66 20 2b 20 2a 70 4f 75 74 5f 6c 65 6e 20  Buf + *pOut_len 
a270: 3a 20 4e 55 4c 4c 2c 20 26 64 73 74 5f 62 75 66  : NULL, &dst_buf
a280: 5f 73 69 7a 65 2c 0a 20 20 20 20 20 20 28 66 6c  _size,.      (fl
a290: 61 67 73 20 26 20 7e 54 49 4e 46 4c 5f 46 4c 41  ags & ~TINFL_FLA
a2a0: 47 5f 48 41 53 5f 4d 4f 52 45 5f 49 4e 50 55 54  G_HAS_MORE_INPUT
a2b0: 29 20 7c 20 54 49 4e 46 4c 5f 46 4c 41 47 5f 55  ) | TINFL_FLAG_U
a2c0: 53 49 4e 47 5f 4e 4f 4e 5f 57 52 41 50 50 49 4e  SING_NON_WRAPPIN
a2d0: 47 5f 4f 55 54 50 55 54 5f 42 55 46 29 3b 0a 20  G_OUTPUT_BUF);. 
a2e0: 20 20 20 69 66 20 28 28 73 74 61 74 75 73 20 3c     if ((status <
a2f0: 20 30 29 20 7c 7c 20 28 73 74 61 74 75 73 20 3d   0) || (status =
a300: 3d 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 4e  = TINFL_STATUS_N
a310: 45 45 44 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 29  EEDS_MORE_INPUT)
a320: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 4d 5a  ).    {.      MZ
a330: 5f 46 52 45 45 28 70 42 75 66 29 3b 20 2a 70 4f  _FREE(pBuf); *pO
a340: 75 74 5f 6c 65 6e 20 3d 20 30 3b 20 72 65 74 75  ut_len = 0; retu
a350: 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20  rn NULL;.    }. 
a360: 20 20 20 73 72 63 5f 62 75 66 5f 6f 66 73 20 2b     src_buf_ofs +
a370: 3d 20 73 72 63 5f 62 75 66 5f 73 69 7a 65 3b 0a  = src_buf_size;.
a380: 20 20 20 20 2a 70 4f 75 74 5f 6c 65 6e 20 2b 3d      *pOut_len +=
a390: 20 64 73 74 5f 62 75 66 5f 73 69 7a 65 3b 0a 20   dst_buf_size;. 
a3a0: 20 20 20 69 66 20 28 73 74 61 74 75 73 20 3d 3d     if (status ==
a3b0: 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 44 4f   TINFL_STATUS_DO
a3c0: 4e 45 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 6e  NE) break;.    n
a3d0: 65 77 5f 6f 75 74 5f 62 75 66 5f 63 61 70 61 63  ew_out_buf_capac
a3e0: 69 74 79 20 3d 20 6f 75 74 5f 62 75 66 5f 63 61  ity = out_buf_ca
a3f0: 70 61 63 69 74 79 20 2a 20 32 3b 20 69 66 20 28  pacity * 2; if (
a400: 6e 65 77 5f 6f 75 74 5f 62 75 66 5f 63 61 70 61  new_out_buf_capa
a410: 63 69 74 79 20 3c 20 31 32 38 29 20 6e 65 77 5f  city < 128) new_
a420: 6f 75 74 5f 62 75 66 5f 63 61 70 61 63 69 74 79  out_buf_capacity
a430: 20 3d 20 31 32 38 3b 0a 20 20 20 20 70 4e 65 77   = 128;.    pNew
a440: 5f 62 75 66 20 3d 20 4d 5a 5f 52 45 41 4c 4c 4f  _buf = MZ_REALLO
a450: 43 28 70 42 75 66 2c 20 6e 65 77 5f 6f 75 74 5f  C(pBuf, new_out_
a460: 62 75 66 5f 63 61 70 61 63 69 74 79 29 3b 0a 20  buf_capacity);. 
a470: 20 20 20 69 66 20 28 21 70 4e 65 77 5f 62 75 66     if (!pNew_buf
a480: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 4d 5a  ).    {.      MZ
a490: 5f 46 52 45 45 28 70 42 75 66 29 3b 20 2a 70 4f  _FREE(pBuf); *pO
a4a0: 75 74 5f 6c 65 6e 20 3d 20 30 3b 20 72 65 74 75  ut_len = 0; retu
a4b0: 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 0a 20  rn NULL;.    }. 
a4c0: 20 20 20 70 42 75 66 20 3d 20 70 4e 65 77 5f 62     pBuf = pNew_b
a4d0: 75 66 3b 20 6f 75 74 5f 62 75 66 5f 63 61 70 61  uf; out_buf_capa
a4e0: 63 69 74 79 20 3d 20 6e 65 77 5f 6f 75 74 5f 62  city = new_out_b
a4f0: 75 66 5f 63 61 70 61 63 69 74 79 3b 0a 20 20 7d  uf_capacity;.  }
a500: 0a 20 20 72 65 74 75 72 6e 20 70 42 75 66 3b 0a  .  return pBuf;.
a510: 7d 0a 0a 73 69 7a 65 5f 74 20 74 69 6e 66 6c 5f  }..size_t tinfl_
a520: 64 65 63 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74  decompress_mem_t
a530: 6f 5f 6d 65 6d 28 76 6f 69 64 20 2a 70 4f 75 74  o_mem(void *pOut
a540: 5f 62 75 66 2c 20 73 69 7a 65 5f 74 20 6f 75 74  _buf, size_t out
a550: 5f 62 75 66 5f 6c 65 6e 2c 20 63 6f 6e 73 74 20  _buf_len, const 
a560: 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66 2c 20  void *pSrc_buf, 
a570: 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66 5f 6c  size_t src_buf_l
a580: 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 0a 7b  en, int flags).{
a590: 0a 20 20 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72  .  tinfl_decompr
a5a0: 65 73 73 6f 72 20 64 65 63 6f 6d 70 3b 20 74 69  essor decomp; ti
a5b0: 6e 66 6c 5f 73 74 61 74 75 73 20 73 74 61 74 75  nfl_status statu
a5c0: 73 3b 20 74 69 6e 66 6c 5f 69 6e 69 74 28 26 64  s; tinfl_init(&d
a5d0: 65 63 6f 6d 70 29 3b 0a 20 20 73 74 61 74 75 73  ecomp);.  status
a5e0: 20 3d 20 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72   = tinfl_decompr
a5f0: 65 73 73 28 26 64 65 63 6f 6d 70 2c 20 28 63 6f  ess(&decomp, (co
a600: 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 2a 29 70 53  nst mz_uint8*)pS
a610: 72 63 5f 62 75 66 2c 20 26 73 72 63 5f 62 75 66  rc_buf, &src_buf
a620: 5f 6c 65 6e 2c 20 28 6d 7a 5f 75 69 6e 74 38 2a  _len, (mz_uint8*
a630: 29 70 4f 75 74 5f 62 75 66 2c 20 28 6d 7a 5f 75  )pOut_buf, (mz_u
a640: 69 6e 74 38 2a 29 70 4f 75 74 5f 62 75 66 2c 20  int8*)pOut_buf, 
a650: 26 6f 75 74 5f 62 75 66 5f 6c 65 6e 2c 20 28 66  &out_buf_len, (f
a660: 6c 61 67 73 20 26 20 7e 54 49 4e 46 4c 5f 46 4c  lags & ~TINFL_FL
a670: 41 47 5f 48 41 53 5f 4d 4f 52 45 5f 49 4e 50 55  AG_HAS_MORE_INPU
a680: 54 29 20 7c 20 54 49 4e 46 4c 5f 46 4c 41 47 5f  T) | TINFL_FLAG_
a690: 55 53 49 4e 47 5f 4e 4f 4e 5f 57 52 41 50 50 49  USING_NON_WRAPPI
a6a0: 4e 47 5f 4f 55 54 50 55 54 5f 42 55 46 29 3b 0a  NG_OUTPUT_BUF);.
a6b0: 20 20 72 65 74 75 72 6e 20 28 73 74 61 74 75 73    return (status
a6c0: 20 21 3d 20 54 49 4e 46 4c 5f 53 54 41 54 55 53   != TINFL_STATUS
a6d0: 5f 44 4f 4e 45 29 20 3f 20 54 49 4e 46 4c 5f 44  _DONE) ? TINFL_D
a6e0: 45 43 4f 4d 50 52 45 53 53 5f 4d 45 4d 5f 54 4f  ECOMPRESS_MEM_TO
a6f0: 5f 4d 45 4d 5f 46 41 49 4c 45 44 20 3a 20 6f 75  _MEM_FAILED : ou
a700: 74 5f 62 75 66 5f 6c 65 6e 3b 0a 7d 0a 0a 69 6e  t_buf_len;.}..in
a710: 74 20 74 69 6e 66 6c 5f 64 65 63 6f 6d 70 72 65  t tinfl_decompre
a720: 73 73 5f 6d 65 6d 5f 74 6f 5f 63 61 6c 6c 62 61  ss_mem_to_callba
a730: 63 6b 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  ck(const void *p
a740: 49 6e 5f 62 75 66 2c 20 73 69 7a 65 5f 74 20 2a  In_buf, size_t *
a750: 70 49 6e 5f 62 75 66 5f 73 69 7a 65 2c 20 74 69  pIn_buf_size, ti
a760: 6e 66 6c 5f 70 75 74 5f 62 75 66 5f 66 75 6e 63  nfl_put_buf_func
a770: 5f 70 74 72 20 70 50 75 74 5f 62 75 66 5f 66 75  _ptr pPut_buf_fu
a780: 6e 63 2c 20 76 6f 69 64 20 2a 70 50 75 74 5f 62  nc, void *pPut_b
a790: 75 66 5f 75 73 65 72 2c 20 69 6e 74 20 66 6c 61  uf_user, int fla
a7a0: 67 73 29 0a 7b 0a 20 20 69 6e 74 20 72 65 73 75  gs).{.  int resu
a7b0: 6c 74 20 3d 20 30 3b 0a 20 20 74 69 6e 66 6c 5f  lt = 0;.  tinfl_
a7c0: 64 65 63 6f 6d 70 72 65 73 73 6f 72 20 64 65 63  decompressor dec
a7d0: 6f 6d 70 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20  omp;.  mz_uint8 
a7e0: 2a 70 44 69 63 74 20 3d 20 28 6d 7a 5f 75 69 6e  *pDict = (mz_uin
a7f0: 74 38 2a 29 4d 5a 5f 4d 41 4c 4c 4f 43 28 54 49  t8*)MZ_MALLOC(TI
a800: 4e 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45  NFL_LZ_DICT_SIZE
a810: 29 3b 20 73 69 7a 65 5f 74 20 69 6e 5f 62 75 66  ); size_t in_buf
a820: 5f 6f 66 73 20 3d 20 30 2c 20 64 69 63 74 5f 6f  _ofs = 0, dict_o
a830: 66 73 20 3d 20 30 3b 0a 20 20 69 66 20 28 21 70  fs = 0;.  if (!p
a840: 44 69 63 74 29 0a 20 20 20 20 72 65 74 75 72 6e  Dict).    return
a850: 20 54 49 4e 46 4c 5f 53 54 41 54 55 53 5f 46 41   TINFL_STATUS_FA
a860: 49 4c 45 44 3b 0a 20 20 74 69 6e 66 6c 5f 69 6e  ILED;.  tinfl_in
a870: 69 74 28 26 64 65 63 6f 6d 70 29 3b 0a 20 20 66  it(&decomp);.  f
a880: 6f 72 20 28 20 3b 20 3b 20 29 0a 20 20 7b 0a 20  or ( ; ; ).  {. 
a890: 20 20 20 73 69 7a 65 5f 74 20 69 6e 5f 62 75 66     size_t in_buf
a8a0: 5f 73 69 7a 65 20 3d 20 2a 70 49 6e 5f 62 75 66  _size = *pIn_buf
a8b0: 5f 73 69 7a 65 20 2d 20 69 6e 5f 62 75 66 5f 6f  _size - in_buf_o
a8c0: 66 73 2c 20 64 73 74 5f 62 75 66 5f 73 69 7a 65  fs, dst_buf_size
a8d0: 20 3d 20 54 49 4e 46 4c 5f 4c 5a 5f 44 49 43 54   = TINFL_LZ_DICT
a8e0: 5f 53 49 5a 45 20 2d 20 64 69 63 74 5f 6f 66 73  _SIZE - dict_ofs
a8f0: 3b 0a 20 20 20 20 74 69 6e 66 6c 5f 73 74 61 74  ;.    tinfl_stat
a900: 75 73 20 73 74 61 74 75 73 20 3d 20 74 69 6e 66  us status = tinf
a910: 6c 5f 64 65 63 6f 6d 70 72 65 73 73 28 26 64 65  l_decompress(&de
a920: 63 6f 6d 70 2c 20 28 63 6f 6e 73 74 20 6d 7a 5f  comp, (const mz_
a930: 75 69 6e 74 38 2a 29 70 49 6e 5f 62 75 66 20 2b  uint8*)pIn_buf +
a940: 20 69 6e 5f 62 75 66 5f 6f 66 73 2c 20 26 69 6e   in_buf_ofs, &in
a950: 5f 62 75 66 5f 73 69 7a 65 2c 20 70 44 69 63 74  _buf_size, pDict
a960: 2c 20 70 44 69 63 74 20 2b 20 64 69 63 74 5f 6f  , pDict + dict_o
a970: 66 73 2c 20 26 64 73 74 5f 62 75 66 5f 73 69 7a  fs, &dst_buf_siz
a980: 65 2c 0a 20 20 20 20 20 20 28 66 6c 61 67 73 20  e,.      (flags 
a990: 26 20 7e 28 54 49 4e 46 4c 5f 46 4c 41 47 5f 48  & ~(TINFL_FLAG_H
a9a0: 41 53 5f 4d 4f 52 45 5f 49 4e 50 55 54 20 7c 20  AS_MORE_INPUT | 
a9b0: 54 49 4e 46 4c 5f 46 4c 41 47 5f 55 53 49 4e 47  TINFL_FLAG_USING
a9c0: 5f 4e 4f 4e 5f 57 52 41 50 50 49 4e 47 5f 4f 55  _NON_WRAPPING_OU
a9d0: 54 50 55 54 5f 42 55 46 29 29 29 3b 0a 20 20 20  TPUT_BUF)));.   
a9e0: 20 69 6e 5f 62 75 66 5f 6f 66 73 20 2b 3d 20 69   in_buf_ofs += i
a9f0: 6e 5f 62 75 66 5f 73 69 7a 65 3b 0a 20 20 20 20  n_buf_size;.    
aa00: 69 66 20 28 28 64 73 74 5f 62 75 66 5f 73 69 7a  if ((dst_buf_siz
aa10: 65 29 20 26 26 20 28 21 28 2a 70 50 75 74 5f 62  e) && (!(*pPut_b
aa20: 75 66 5f 66 75 6e 63 29 28 70 44 69 63 74 20 2b  uf_func)(pDict +
aa30: 20 64 69 63 74 5f 6f 66 73 2c 20 28 69 6e 74 29   dict_ofs, (int)
aa40: 64 73 74 5f 62 75 66 5f 73 69 7a 65 2c 20 70 50  dst_buf_size, pP
aa50: 75 74 5f 62 75 66 5f 75 73 65 72 29 29 29 0a 20  ut_buf_user))). 
aa60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
aa70: 69 66 20 28 73 74 61 74 75 73 20 21 3d 20 54 49  if (status != TI
aa80: 4e 46 4c 5f 53 54 41 54 55 53 5f 48 41 53 5f 4d  NFL_STATUS_HAS_M
aa90: 4f 52 45 5f 4f 55 54 50 55 54 29 0a 20 20 20 20  ORE_OUTPUT).    
aaa0: 7b 0a 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d  {.      result =
aab0: 20 28 73 74 61 74 75 73 20 3d 3d 20 54 49 4e 46   (status == TINF
aac0: 4c 5f 53 54 41 54 55 53 5f 44 4f 4e 45 29 3b 0a  L_STATUS_DONE);.
aad0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
aae0: 20 7d 0a 20 20 20 20 64 69 63 74 5f 6f 66 73 20   }.    dict_ofs 
aaf0: 3d 20 28 64 69 63 74 5f 6f 66 73 20 2b 20 64 73  = (dict_ofs + ds
ab00: 74 5f 62 75 66 5f 73 69 7a 65 29 20 26 20 28 54  t_buf_size) & (T
ab10: 49 4e 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a  INFL_LZ_DICT_SIZ
ab20: 45 20 2d 20 31 29 3b 0a 20 20 7d 0a 20 20 4d 5a  E - 1);.  }.  MZ
ab30: 5f 46 52 45 45 28 70 44 69 63 74 29 3b 0a 20 20  _FREE(pDict);.  
ab40: 2a 70 49 6e 5f 62 75 66 5f 73 69 7a 65 20 3d 20  *pIn_buf_size = 
ab50: 69 6e 5f 62 75 66 5f 6f 66 73 3b 0a 20 20 72 65  in_buf_ofs;.  re
ab60: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0a 7d 0a 0a  turn result;.}..
ab70: 2f 2f 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  // -------------
ab80: 2d 2d 2d 2d 2d 2d 20 4c 6f 77 2d 6c 65 76 65 6c  ------ Low-level
ab90: 20 43 6f 6d 70 72 65 73 73 69 6f 6e 20 28 69 6e   Compression (in
aba0: 64 65 70 65 6e 64 65 6e 74 20 66 72 6f 6d 20 61  dependent from a
abb0: 6c 6c 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e  ll decompression
abc0: 20 41 50 49 27 73 29 0a 0a 2f 2f 20 50 75 72 70   API's)..// Purp
abd0: 6f 73 65 6c 79 20 6d 61 6b 69 6e 67 20 74 68 65  osely making the
abe0: 73 65 20 74 61 62 6c 65 73 20 73 74 61 74 69 63  se tables static
abf0: 20 66 6f 72 20 66 61 73 74 65 72 20 69 6e 69 74   for faster init
ac00: 20 61 6e 64 20 74 68 72 65 61 64 20 73 61 66 65   and thread safe
ac10: 74 79 2e 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  ty..static const
ac20: 20 6d 7a 5f 75 69 6e 74 31 36 20 73 5f 74 64 65   mz_uint16 s_tde
ac30: 66 6c 5f 6c 65 6e 5f 73 79 6d 5b 32 35 36 5d 20  fl_len_sym[256] 
ac40: 3d 20 7b 0a 20 20 32 35 37 2c 32 35 38 2c 32 35  = {.  257,258,25
ac50: 39 2c 32 36 30 2c 32 36 31 2c 32 36 32 2c 32 36  9,260,261,262,26
ac60: 33 2c 32 36 34 2c 32 36 35 2c 32 36 35 2c 32 36  3,264,265,265,26
ac70: 36 2c 32 36 36 2c 32 36 37 2c 32 36 37 2c 32 36  6,266,267,267,26
ac80: 38 2c 32 36 38 2c 32 36 39 2c 32 36 39 2c 32 36  8,268,269,269,26
ac90: 39 2c 32 36 39 2c 32 37 30 2c 32 37 30 2c 32 37  9,269,270,270,27
aca0: 30 2c 32 37 30 2c 32 37 31 2c 32 37 31 2c 32 37  0,270,271,271,27
acb0: 31 2c 32 37 31 2c 32 37 32 2c 32 37 32 2c 32 37  1,271,272,272,27
acc0: 32 2c 32 37 32 2c 0a 20 20 32 37 33 2c 32 37 33  2,272,.  273,273
acd0: 2c 32 37 33 2c 32 37 33 2c 32 37 33 2c 32 37 33  ,273,273,273,273
ace0: 2c 32 37 33 2c 32 37 33 2c 32 37 34 2c 32 37 34  ,273,273,274,274
acf0: 2c 32 37 34 2c 32 37 34 2c 32 37 34 2c 32 37 34  ,274,274,274,274
ad00: 2c 32 37 34 2c 32 37 34 2c 32 37 35 2c 32 37 35  ,274,274,275,275
ad10: 2c 32 37 35 2c 32 37 35 2c 32 37 35 2c 32 37 35  ,275,275,275,275
ad20: 2c 32 37 35 2c 32 37 35 2c 32 37 36 2c 32 37 36  ,275,275,276,276
ad30: 2c 32 37 36 2c 32 37 36 2c 32 37 36 2c 32 37 36  ,276,276,276,276
ad40: 2c 32 37 36 2c 32 37 36 2c 0a 20 20 32 37 37 2c  ,276,276,.  277,
ad50: 32 37 37 2c 32 37 37 2c 32 37 37 2c 32 37 37 2c  277,277,277,277,
ad60: 32 37 37 2c 32 37 37 2c 32 37 37 2c 32 37 37 2c  277,277,277,277,
ad70: 32 37 37 2c 32 37 37 2c 32 37 37 2c 32 37 37 2c  277,277,277,277,
ad80: 32 37 37 2c 32 37 37 2c 32 37 37 2c 32 37 38 2c  277,277,277,278,
ad90: 32 37 38 2c 32 37 38 2c 32 37 38 2c 32 37 38 2c  278,278,278,278,
ada0: 32 37 38 2c 32 37 38 2c 32 37 38 2c 32 37 38 2c  278,278,278,278,
adb0: 32 37 38 2c 32 37 38 2c 32 37 38 2c 32 37 38 2c  278,278,278,278,
adc0: 32 37 38 2c 32 37 38 2c 32 37 38 2c 0a 20 20 32  278,278,278,.  2
add0: 37 39 2c 32 37 39 2c 32 37 39 2c 32 37 39 2c 32  79,279,279,279,2
ade0: 37 39 2c 32 37 39 2c 32 37 39 2c 32 37 39 2c 32  79,279,279,279,2
adf0: 37 39 2c 32 37 39 2c 32 37 39 2c 32 37 39 2c 32  79,279,279,279,2
ae00: 37 39 2c 32 37 39 2c 32 37 39 2c 32 37 39 2c 32  79,279,279,279,2
ae10: 38 30 2c 32 38 30 2c 32 38 30 2c 32 38 30 2c 32  80,280,280,280,2
ae20: 38 30 2c 32 38 30 2c 32 38 30 2c 32 38 30 2c 32  80,280,280,280,2
ae30: 38 30 2c 32 38 30 2c 32 38 30 2c 32 38 30 2c 32  80,280,280,280,2
ae40: 38 30 2c 32 38 30 2c 32 38 30 2c 32 38 30 2c 0a  80,280,280,280,.
ae50: 20 20 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38    281,281,281,28
ae60: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
ae70: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
ae80: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
ae90: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
aea0: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
aeb0: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
aec0: 31 2c 32 38 31 2c 32 38 31 2c 32 38 31 2c 32 38  1,281,281,281,28
aed0: 31 2c 0a 20 20 32 38 32 2c 32 38 32 2c 32 38 32  1,.  282,282,282
aee0: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
aef0: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af00: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af10: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af20: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af30: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af40: 2c 32 38 32 2c 32 38 32 2c 32 38 32 2c 32 38 32  ,282,282,282,282
af50: 2c 32 38 32 2c 0a 20 20 32 38 33 2c 32 38 33 2c  ,282,.  283,283,
af60: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
af70: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
af80: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
af90: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
afa0: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
afb0: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
afc0: 32 38 33 2c 32 38 33 2c 32 38 33 2c 32 38 33 2c  283,283,283,283,
afd0: 32 38 33 2c 32 38 33 2c 0a 20 20 32 38 34 2c 32  283,283,.  284,2
afe0: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
aff0: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b000: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b010: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b020: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b030: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b040: 38 34 2c 32 38 34 2c 32 38 34 2c 32 38 34 2c 32  84,284,284,284,2
b050: 38 34 2c 32 38 34 2c 32 38 35 20 7d 3b 0a 0a 73  84,284,285 };..s
b060: 74 61 74 69 63 20 63 6f 6e 73 74 20 6d 7a 5f 75  tatic const mz_u
b070: 69 6e 74 38 20 73 5f 74 64 65 66 6c 5f 6c 65 6e  int8 s_tdefl_len
b080: 5f 65 78 74 72 61 5b 32 35 36 5d 20 3d 20 7b 0a  _extra[256] = {.
b090: 20 20 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c 30 2c    0,0,0,0,0,0,0,
b0a0: 30 2c 31 2c 31 2c 31 2c 31 2c 31 2c 31 2c 31 2c  0,1,1,1,1,1,1,1,
b0b0: 31 2c 32 2c 32 2c 32 2c 32 2c 32 2c 32 2c 32 2c  1,2,2,2,2,2,2,2,
b0c0: 32 2c 32 2c 32 2c 32 2c 32 2c 32 2c 32 2c 32 2c  2,2,2,2,2,2,2,2,
b0d0: 32 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c  2,3,3,3,3,3,3,3,
b0e0: 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c  3,3,3,3,3,3,3,3,
b0f0: 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c  3,3,3,3,3,3,3,3,
b100: 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c  3,3,3,3,3,3,3,3,
b110: 33 2c 0a 20 20 34 2c 34 2c 34 2c 34 2c 34 2c 34  3,.  4,4,4,4,4,4
b120: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b130: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b140: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b150: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b160: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b170: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b180: 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34  ,4,4,4,4,4,4,4,4
b190: 2c 34 2c 34 2c 0a 20 20 35 2c 35 2c 35 2c 35 2c  ,4,4,.  5,5,5,5,
b1a0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b1b0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b1c0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b1d0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b1e0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b1f0: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b200: 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c  5,5,5,5,5,5,5,5,
b210: 35 2c 35 2c 35 2c 35 2c 0a 20 20 35 2c 35 2c 35  5,5,5,5,.  5,5,5
b220: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b230: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b240: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b250: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b260: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b270: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b280: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b290: 2c 35 2c 35 2c 35 2c 35 2c 30 20 7d 3b 0a 0a 73  ,5,5,5,5,0 };..s
b2a0: 74 61 74 69 63 20 63 6f 6e 73 74 20 6d 7a 5f 75  tatic const mz_u
b2b0: 69 6e 74 38 20 73 5f 74 64 65 66 6c 5f 73 6d 61  int8 s_tdefl_sma
b2c0: 6c 6c 5f 64 69 73 74 5f 73 79 6d 5b 35 31 32 5d  ll_dist_sym[512]
b2d0: 20 3d 20 7b 0a 20 20 30 2c 31 2c 32 2c 33 2c 34   = {.  0,1,2,3,4
b2e0: 2c 34 2c 35 2c 35 2c 36 2c 36 2c 36 2c 36 2c 37  ,4,5,5,6,6,6,6,7
b2f0: 2c 37 2c 37 2c 37 2c 38 2c 38 2c 38 2c 38 2c 38  ,7,7,7,8,8,8,8,8
b300: 2c 38 2c 38 2c 38 2c 39 2c 39 2c 39 2c 39 2c 39  ,8,8,8,9,9,9,9,9
b310: 2c 39 2c 39 2c 39 2c 31 30 2c 31 30 2c 31 30 2c  ,9,9,9,10,10,10,
b320: 31 30 2c 31 30 2c 31 30 2c 31 30 2c 31 30 2c 31  10,10,10,10,10,1
b330: 30 2c 31 30 2c 31 30 2c 31 30 2c 31 30 2c 31 30  0,10,10,10,10,10
b340: 2c 31 30 2c 31 30 2c 31 31 2c 31 31 2c 31 31 2c  ,10,10,11,11,11,
b350: 31 31 2c 31 31 2c 31 31 2c 0a 20 20 31 31 2c 31  11,11,11,.  11,1
b360: 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31  1,11,11,11,11,11
b370: 2c 31 31 2c 31 31 2c 31 31 2c 31 32 2c 31 32 2c  ,11,11,11,12,12,
b380: 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31  12,12,12,12,12,1
b390: 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32  2,12,12,12,12,12
b3a0: 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c  ,12,12,12,12,12,
b3b0: 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31  12,12,12,12,12,1
b3c0: 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32  2,12,12,12,12,12
b3d0: 2c 31 32 2c 31 32 2c 31 32 2c 31 33 2c 0a 20 20  ,12,12,12,13,.  
b3e0: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
b3f0: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
b400: 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c  ,13,13,13,13,13,
b410: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
b420: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
b430: 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 34 2c  ,13,13,13,13,14,
b440: 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31  14,14,14,14,14,1
b450: 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34  4,14,14,14,14,14
b460: 2c 0a 20 20 31 34 2c 31 34 2c 31 34 2c 31 34 2c  ,.  14,14,14,14,
b470: 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31  14,14,14,14,14,1
b480: 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34  4,14,14,14,14,14
b490: 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c  ,14,14,14,14,14,
b4a0: 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31  14,14,14,14,14,1
b4b0: 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34  4,14,14,14,14,14
b4c0: 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c  ,14,14,14,14,14,
b4d0: 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31  14,14,14,14,14,1
b4e0: 34 2c 31 34 2c 0a 20 20 31 34 2c 31 34 2c 31 34  4,14,.  14,14,14
b4f0: 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c 31 34 2c  ,14,14,14,14,14,
b500: 31 34 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31  14,15,15,15,15,1
b510: 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35  5,15,15,15,15,15
b520: 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c  ,15,15,15,15,15,
b530: 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31  15,15,15,15,15,1
b540: 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35  5,15,15,15,15,15
b550: 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c  ,15,15,15,15,15,
b560: 31 35 2c 31 35 2c 31 35 2c 0a 20 20 31 35 2c 31  15,15,15,.  15,1
b570: 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35  5,15,15,15,15,15
b580: 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c  ,15,15,15,15,15,
b590: 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31  15,15,15,15,15,1
b5a0: 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35  5,15,15,15,15,15
b5b0: 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c 31 35 2c  ,15,15,15,15,15,
b5c0: 31 35 2c 31 35 2c 31 36 2c 31 36 2c 31 36 2c 31  15,15,16,16,16,1
b5d0: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b5e0: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 0a 20 20  ,16,16,16,16,.  
b5f0: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b600: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b610: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b620: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b630: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b640: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b650: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b660: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b670: 2c 0a 20 20 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,.  16,16,16,16,
b680: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b690: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b6a0: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b6b0: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b6c0: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b6d0: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b6e0: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b6f0: 36 2c 31 36 2c 0a 20 20 31 36 2c 31 36 2c 31 36  6,16,.  16,16,16
b700: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b710: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b720: 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36  6,16,16,16,16,16
b730: 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c  ,16,16,16,16,16,
b740: 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31 36 2c 31  16,16,16,16,16,1
b750: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b760: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b770: 31 37 2c 31 37 2c 31 37 2c 0a 20 20 31 37 2c 31  17,17,17,.  17,1
b780: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b790: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b7a0: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b7b0: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b7c0: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b7d0: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b7e0: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b7f0: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 0a 20 20  ,17,17,17,17,.  
b800: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b810: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b820: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b830: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b840: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b850: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b860: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b870: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b880: 2c 0a 20 20 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,.  17,17,17,17,
b890: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b8a0: 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37  7,17,17,17,17,17
b8b0: 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c  ,17,17,17,17,17,
b8c0: 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31 37 2c 31  17,17,17,17,17,1
b8d0: 37 2c 31 37 2c 31 37 20 7d 3b 0a 0a 73 74 61 74  7,17,17 };..stat
b8e0: 69 63 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  ic const mz_uint
b8f0: 38 20 73 5f 74 64 65 66 6c 5f 73 6d 61 6c 6c 5f  8 s_tdefl_small_
b900: 64 69 73 74 5f 65 78 74 72 61 5b 35 31 32 5d 20  dist_extra[512] 
b910: 3d 20 7b 0a 20 20 30 2c 30 2c 30 2c 30 2c 31 2c  = {.  0,0,0,0,1,
b920: 31 2c 31 2c 31 2c 32 2c 32 2c 32 2c 32 2c 32 2c  1,1,1,2,2,2,2,2,
b930: 32 2c 32 2c 32 2c 33 2c 33 2c 33 2c 33 2c 33 2c  2,2,2,3,3,3,3,3,
b940: 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c 33 2c  3,3,3,3,3,3,3,3,
b950: 33 2c 33 2c 33 2c 34 2c 34 2c 34 2c 34 2c 34 2c  3,3,3,4,4,4,4,4,
b960: 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c  4,4,4,4,4,4,4,4,
b970: 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c  4,4,4,4,4,4,4,4,
b980: 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c 34 2c  4,4,4,4,4,4,4,4,
b990: 34 2c 34 2c 34 2c 35 2c 35 2c 35 2c 35 2c 35 2c  4,4,4,5,5,5,5,5,
b9a0: 35 2c 35 2c 35 2c 0a 20 20 35 2c 35 2c 35 2c 35  5,5,5,.  5,5,5,5
b9b0: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b9c0: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b9d0: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b9e0: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
b9f0: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
ba00: 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35 2c 35  ,5,5,5,5,5,5,5,5
ba10: 2c 35 2c 35 2c 35 2c 35 2c 36 2c 36 2c 36 2c 36  ,5,5,5,5,6,6,6,6
ba20: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36  ,6,6,6,6,6,6,6,6
ba30: 2c 36 2c 36 2c 36 2c 36 2c 0a 20 20 36 2c 36 2c  ,6,6,6,6,.  6,6,
ba40: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
ba50: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
ba60: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
ba70: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
ba80: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
ba90: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
baa0: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
bab0: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c  6,6,6,6,6,6,6,6,
bac0: 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 0a 20 20 36  6,6,6,6,6,6,.  6
bad0: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36  ,6,6,6,6,6,6,6,6
bae0: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36  ,6,6,6,6,6,6,6,6
baf0: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36  ,6,6,6,6,6,6,6,6
bb00: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36  ,6,6,6,6,6,6,6,6
bb10: 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 36 2c 37  ,6,6,6,6,6,6,6,7
bb20: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bb30: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bb40: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bb50: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 0a  ,7,7,7,7,7,7,7,.
bb60: 20 20 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c    7,7,7,7,7,7,7,
bb70: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bb80: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bb90: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bba0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bbb0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bbc0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bbd0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bbe0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bbf0: 37 2c 0a 20 20 37 2c 37 2c 37 2c 37 2c 37 2c 37  7,.  7,7,7,7,7,7
bc00: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc10: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc20: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc30: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc40: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc50: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc60: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc70: 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37  ,7,7,7,7,7,7,7,7
bc80: 2c 37 2c 37 2c 0a 20 20 37 2c 37 2c 37 2c 37 2c  ,7,7,.  7,7,7,7,
bc90: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bca0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bcb0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bcc0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bcd0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bce0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bcf0: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bd00: 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c 37 2c  7,7,7,7,7,7,7,7,
bd10: 37 2c 37 2c 37 2c 37 2c 0a 20 20 37 2c 37 2c 37  7,7,7,7,.  7,7,7
bd20: 2c 37 2c 37 2c 37 2c 37 2c 37 20 7d 3b 0a 0a 73  ,7,7,7,7,7 };..s
bd30: 74 61 74 69 63 20 63 6f 6e 73 74 20 6d 7a 5f 75  tatic const mz_u
bd40: 69 6e 74 38 20 73 5f 74 64 65 66 6c 5f 6c 61 72  int8 s_tdefl_lar
bd50: 67 65 5f 64 69 73 74 5f 73 79 6d 5b 31 32 38 5d  ge_dist_sym[128]
bd60: 20 3d 20 7b 0a 20 20 30 2c 30 2c 31 38 2c 31 39   = {.  0,0,18,19
bd70: 2c 32 30 2c 32 30 2c 32 31 2c 32 31 2c 32 32 2c  ,20,20,21,21,22,
bd80: 32 32 2c 32 32 2c 32 32 2c 32 33 2c 32 33 2c 32  22,22,22,23,23,2
bd90: 33 2c 32 33 2c 32 34 2c 32 34 2c 32 34 2c 32 34  3,23,24,24,24,24
bda0: 2c 32 34 2c 32 34 2c 32 34 2c 32 34 2c 32 35 2c  ,24,24,24,24,25,
bdb0: 32 35 2c 32 35 2c 32 35 2c 32 35 2c 32 35 2c 32  25,25,25,25,25,2
bdc0: 35 2c 32 35 2c 32 36 2c 32 36 2c 32 36 2c 32 36  5,25,26,26,26,26
bdd0: 2c 32 36 2c 32 36 2c 32 36 2c 32 36 2c 32 36 2c  ,26,26,26,26,26,
bde0: 32 36 2c 32 36 2c 32 36 2c 0a 20 20 32 36 2c 32  26,26,26,.  26,2
bdf0: 36 2c 32 36 2c 32 36 2c 32 37 2c 32 37 2c 32 37  6,26,26,27,27,27
be00: 2c 32 37 2c 32 37 2c 32 37 2c 32 37 2c 32 37 2c  ,27,27,27,27,27,
be10: 32 37 2c 32 37 2c 32 37 2c 32 37 2c 32 37 2c 32  27,27,27,27,27,2
be20: 37 2c 32 37 2c 32 37 2c 32 38 2c 32 38 2c 32 38  7,27,27,28,28,28
be30: 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c  ,28,28,28,28,28,
be40: 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32  28,28,28,28,28,2
be50: 38 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32 38  8,28,28,28,28,28
be60: 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32 38 2c  ,28,28,28,28,28,
be70: 0a 20 20 32 38 2c 32 38 2c 32 38 2c 32 38 2c 32  .  28,28,28,28,2
be80: 38 2c 32 38 2c 32 38 2c 32 38 2c 32 39 2c 32 39  8,28,28,28,29,29
be90: 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c  ,29,29,29,29,29,
bea0: 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32  29,29,29,29,29,2
beb0: 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39  9,29,29,29,29,29
bec0: 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c  ,29,29,29,29,29,
bed0: 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32 39 2c 32  29,29,29,29,29,2
bee0: 39 2c 32 39 2c 32 39 2c 32 39 20 7d 3b 0a 0a 73  9,29,29,29 };..s
bef0: 74 61 74 69 63 20 63 6f 6e 73 74 20 6d 7a 5f 75  tatic const mz_u
bf00: 69 6e 74 38 20 73 5f 74 64 65 66 6c 5f 6c 61 72  int8 s_tdefl_lar
bf10: 67 65 5f 64 69 73 74 5f 65 78 74 72 61 5b 31 32  ge_dist_extra[12
bf20: 38 5d 20 3d 20 7b 0a 20 20 30 2c 30 2c 38 2c 38  8] = {.  0,0,8,8
bf30: 2c 39 2c 39 2c 39 2c 39 2c 31 30 2c 31 30 2c 31  ,9,9,9,9,10,10,1
bf40: 30 2c 31 30 2c 31 30 2c 31 30 2c 31 30 2c 31 30  0,10,10,10,10,10
bf50: 2c 31 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31 2c  ,11,11,11,11,11,
bf60: 31 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31 2c 31  11,11,11,11,11,1
bf70: 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31 2c 31 31  1,11,11,11,11,11
bf80: 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c  ,12,12,12,12,12,
bf90: 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31  12,12,12,12,12,1
bfa0: 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32  2,12,12,12,12,12
bfb0: 2c 0a 20 20 31 32 2c 31 32 2c 31 32 2c 31 32 2c  ,.  12,12,12,12,
bfc0: 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31  12,12,12,12,12,1
bfd0: 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32 2c 31 32  2,12,12,12,12,12
bfe0: 2c 31 32 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c  ,12,13,13,13,13,
bff0: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
c000: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
c010: 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c  ,13,13,13,13,13,
c020: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
c030: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
c040: 2c 31 33 2c 0a 20 20 31 33 2c 31 33 2c 31 33 2c  ,13,.  13,13,13,
c050: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
c060: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
c070: 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c  ,13,13,13,13,13,
c080: 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31  13,13,13,13,13,1
c090: 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33 2c 31 33  3,13,13,13,13,13
c0a0: 2c 31 33 2c 31 33 20 7d 3b 0a 0a 2f 2f 20 52 61  ,13,13 };..// Ra
c0b0: 64 69 78 20 73 6f 72 74 73 20 74 64 65 66 6c 5f  dix sorts tdefl_
c0c0: 73 79 6d 5f 66 72 65 71 5b 5d 20 61 72 72 61 79  sym_freq[] array
c0d0: 20 62 79 20 31 36 2d 62 69 74 20 6b 65 79 20 6d   by 16-bit key m
c0e0: 5f 6b 65 79 2e 20 52 65 74 75 72 6e 73 20 70 74  _key. Returns pt
c0f0: 72 20 74 6f 20 73 6f 72 74 65 64 20 76 61 6c 75  r to sorted valu
c100: 65 73 2e 0a 74 79 70 65 64 65 66 20 73 74 72 75  es..typedef stru
c110: 63 74 20 7b 20 6d 7a 5f 75 69 6e 74 31 36 20 6d  ct { mz_uint16 m
c120: 5f 6b 65 79 2c 20 6d 5f 73 79 6d 5f 69 6e 64 65  _key, m_sym_inde
c130: 78 3b 20 7d 20 74 64 65 66 6c 5f 73 79 6d 5f 66  x; } tdefl_sym_f
c140: 72 65 71 3b 0a 73 74 61 74 69 63 20 74 64 65 66  req;.static tdef
c150: 6c 5f 73 79 6d 5f 66 72 65 71 2a 20 74 64 65 66  l_sym_freq* tdef
c160: 6c 5f 72 61 64 69 78 5f 73 6f 72 74 5f 73 79 6d  l_radix_sort_sym
c170: 73 28 6d 7a 5f 75 69 6e 74 20 6e 75 6d 5f 73 79  s(mz_uint num_sy
c180: 6d 73 2c 20 74 64 65 66 6c 5f 73 79 6d 5f 66 72  ms, tdefl_sym_fr
c190: 65 71 2a 20 70 53 79 6d 73 30 2c 20 74 64 65 66  eq* pSyms0, tdef
c1a0: 6c 5f 73 79 6d 5f 66 72 65 71 2a 20 70 53 79 6d  l_sym_freq* pSym
c1b0: 73 31 29 0a 7b 0a 20 20 6d 7a 5f 75 69 6e 74 33  s1).{.  mz_uint3
c1c0: 32 20 74 6f 74 61 6c 5f 70 61 73 73 65 73 20 3d  2 total_passes =
c1d0: 20 32 2c 20 70 61 73 73 5f 73 68 69 66 74 2c 20   2, pass_shift, 
c1e0: 70 61 73 73 2c 20 69 2c 20 68 69 73 74 5b 32 35  pass, i, hist[25
c1f0: 36 20 2a 20 32 5d 3b 20 74 64 65 66 6c 5f 73 79  6 * 2]; tdefl_sy
c200: 6d 5f 66 72 65 71 2a 20 70 43 75 72 5f 73 79 6d  m_freq* pCur_sym
c210: 73 20 3d 20 70 53 79 6d 73 30 2c 20 2a 70 4e 65  s = pSyms0, *pNe
c220: 77 5f 73 79 6d 73 20 3d 20 70 53 79 6d 73 31 3b  w_syms = pSyms1;
c230: 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a 28 68 69   MZ_CLEAR_OBJ(hi
c240: 73 74 29 3b 0a 20 20 66 6f 72 20 28 69 20 3d 20  st);.  for (i = 
c250: 30 3b 20 69 20 3c 20 6e 75 6d 5f 73 79 6d 73 3b  0; i < num_syms;
c260: 20 69 2b 2b 29 20 7b 20 6d 7a 5f 75 69 6e 74 20   i++) { mz_uint 
c270: 66 72 65 71 20 3d 20 70 53 79 6d 73 30 5b 69 5d  freq = pSyms0[i]
c280: 2e 6d 5f 6b 65 79 3b 20 68 69 73 74 5b 66 72 65  .m_key; hist[fre
c290: 71 20 26 20 30 78 46 46 5d 2b 2b 3b 20 68 69 73  q & 0xFF]++; his
c2a0: 74 5b 32 35 36 20 2b 20 28 28 66 72 65 71 20 3e  t[256 + ((freq >
c2b0: 3e 20 38 29 20 26 20 30 78 46 46 29 5d 2b 2b 3b  > 8) & 0xFF)]++;
c2c0: 20 7d 0a 20 20 77 68 69 6c 65 20 28 28 74 6f 74   }.  while ((tot
c2d0: 61 6c 5f 70 61 73 73 65 73 20 3e 20 31 29 20 26  al_passes > 1) &
c2e0: 26 20 28 6e 75 6d 5f 73 79 6d 73 20 3d 3d 20 68  & (num_syms == h
c2f0: 69 73 74 5b 28 74 6f 74 61 6c 5f 70 61 73 73 65  ist[(total_passe
c300: 73 20 2d 20 31 29 20 2a 20 32 35 36 5d 29 29 20  s - 1) * 256])) 
c310: 74 6f 74 61 6c 5f 70 61 73 73 65 73 2d 2d 3b 0a  total_passes--;.
c320: 20 20 66 6f 72 20 28 70 61 73 73 5f 73 68 69 66    for (pass_shif
c330: 74 20 3d 20 30 2c 20 70 61 73 73 20 3d 20 30 3b  t = 0, pass = 0;
c340: 20 70 61 73 73 20 3c 20 74 6f 74 61 6c 5f 70 61   pass < total_pa
c350: 73 73 65 73 3b 20 70 61 73 73 2b 2b 2c 20 70 61  sses; pass++, pa
c360: 73 73 5f 73 68 69 66 74 20 2b 3d 20 38 29 0a 20  ss_shift += 8). 
c370: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 6d 7a 5f   {.    const mz_
c380: 75 69 6e 74 33 32 2a 20 70 48 69 73 74 20 3d 20  uint32* pHist = 
c390: 26 68 69 73 74 5b 70 61 73 73 20 3c 3c 20 38 5d  &hist[pass << 8]
c3a0: 3b 0a 20 20 20 20 6d 7a 5f 75 69 6e 74 20 6f 66  ;.    mz_uint of
c3b0: 66 73 65 74 73 5b 32 35 36 5d 2c 20 63 75 72 5f  fsets[256], cur_
c3c0: 6f 66 73 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72  ofs = 0;.    for
c3d0: 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 32 35 36   (i = 0; i < 256
c3e0: 3b 20 69 2b 2b 29 20 7b 20 6f 66 66 73 65 74 73  ; i++) { offsets
c3f0: 5b 69 5d 20 3d 20 63 75 72 5f 6f 66 73 3b 20 63  [i] = cur_ofs; c
c400: 75 72 5f 6f 66 73 20 2b 3d 20 70 48 69 73 74 5b  ur_ofs += pHist[
c410: 69 5d 3b 20 7d 0a 20 20 20 20 66 6f 72 20 28 69  i]; }.    for (i
c420: 20 3d 20 30 3b 20 69 20 3c 20 6e 75 6d 5f 73 79   = 0; i < num_sy
c430: 6d 73 3b 20 69 2b 2b 29 20 70 4e 65 77 5f 73 79  ms; i++) pNew_sy
c440: 6d 73 5b 6f 66 66 73 65 74 73 5b 28 70 43 75 72  ms[offsets[(pCur
c450: 5f 73 79 6d 73 5b 69 5d 2e 6d 5f 6b 65 79 20 3e  _syms[i].m_key >
c460: 3e 20 70 61 73 73 5f 73 68 69 66 74 29 20 26 20  > pass_shift) & 
c470: 30 78 46 46 5d 2b 2b 5d 20 3d 20 70 43 75 72 5f  0xFF]++] = pCur_
c480: 73 79 6d 73 5b 69 5d 3b 0a 20 20 20 20 7b 20 74  syms[i];.    { t
c490: 64 65 66 6c 5f 73 79 6d 5f 66 72 65 71 2a 20 74  defl_sym_freq* t
c4a0: 20 3d 20 70 43 75 72 5f 73 79 6d 73 3b 20 70 43   = pCur_syms; pC
c4b0: 75 72 5f 73 79 6d 73 20 3d 20 70 4e 65 77 5f 73  ur_syms = pNew_s
c4c0: 79 6d 73 3b 20 70 4e 65 77 5f 73 79 6d 73 20 3d  yms; pNew_syms =
c4d0: 20 74 3b 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75   t; }.  }.  retu
c4e0: 72 6e 20 70 43 75 72 5f 73 79 6d 73 3b 0a 7d 0a  rn pCur_syms;.}.
c4f0: 0a 2f 2f 20 74 64 65 66 6c 5f 63 61 6c 63 75 6c  .// tdefl_calcul
c500: 61 74 65 5f 6d 69 6e 69 6d 75 6d 5f 72 65 64 75  ate_minimum_redu
c510: 6e 64 61 6e 63 79 28 29 20 6f 72 69 67 69 6e 61  ndancy() origina
c520: 6c 6c 79 20 77 72 69 74 74 65 6e 20 62 79 3a 20  lly written by: 
c530: 41 6c 69 73 74 61 69 72 20 4d 6f 66 66 61 74 2c  Alistair Moffat,
c540: 20 61 6c 69 73 74 61 69 72 40 63 73 2e 6d 75 2e   alistair@cs.mu.
c550: 6f 7a 2e 61 75 2c 20 4a 79 72 6b 69 20 4b 61 74  oz.au, Jyrki Kat
c560: 61 6a 61 69 6e 65 6e 2c 20 6a 79 72 6b 69 40 64  ajainen, jyrki@d
c570: 69 6b 75 2e 64 6b 2c 20 4e 6f 76 65 6d 62 65 72  iku.dk, November
c580: 20 31 39 39 36 2e 0a 73 74 61 74 69 63 20 76 6f   1996..static vo
c590: 69 64 20 74 64 65 66 6c 5f 63 61 6c 63 75 6c 61  id tdefl_calcula
c5a0: 74 65 5f 6d 69 6e 69 6d 75 6d 5f 72 65 64 75 6e  te_minimum_redun
c5b0: 64 61 6e 63 79 28 74 64 65 66 6c 5f 73 79 6d 5f  dancy(tdefl_sym_
c5c0: 66 72 65 71 20 2a 41 2c 20 69 6e 74 20 6e 29 0a  freq *A, int n).
c5d0: 7b 0a 20 20 69 6e 74 20 72 6f 6f 74 2c 20 6c 65  {.  int root, le
c5e0: 61 66 2c 20 6e 65 78 74 2c 20 61 76 62 6c 2c 20  af, next, avbl, 
c5f0: 75 73 65 64 2c 20 64 70 74 68 3b 0a 20 20 69 66  used, dpth;.  if
c600: 20 28 6e 3d 3d 30 29 20 72 65 74 75 72 6e 3b 20   (n==0) return; 
c610: 65 6c 73 65 20 69 66 20 28 6e 3d 3d 31 29 20 7b  else if (n==1) {
c620: 20 41 5b 30 5d 2e 6d 5f 6b 65 79 20 3d 20 31 3b   A[0].m_key = 1;
c630: 20 72 65 74 75 72 6e 3b 20 7d 0a 20 20 41 5b 30   return; }.  A[0
c640: 5d 2e 6d 5f 6b 65 79 20 2b 3d 20 41 5b 31 5d 2e  ].m_key += A[1].
c650: 6d 5f 6b 65 79 3b 20 72 6f 6f 74 20 3d 20 30 3b  m_key; root = 0;
c660: 20 6c 65 61 66 20 3d 20 32 3b 0a 20 20 66 6f 72   leaf = 2;.  for
c670: 20 28 6e 65 78 74 3d 31 3b 20 6e 65 78 74 20 3c   (next=1; next <
c680: 20 6e 2d 31 3b 20 6e 65 78 74 2b 2b 29 0a 20 20   n-1; next++).  
c690: 7b 0a 20 20 20 20 69 66 20 28 6c 65 61 66 3e 3d  {.    if (leaf>=
c6a0: 6e 20 7c 7c 20 41 5b 72 6f 6f 74 5d 2e 6d 5f 6b  n || A[root].m_k
c6b0: 65 79 3c 41 5b 6c 65 61 66 5d 2e 6d 5f 6b 65 79  ey<A[leaf].m_key
c6c0: 29 20 7b 20 41 5b 6e 65 78 74 5d 2e 6d 5f 6b 65  ) { A[next].m_ke
c6d0: 79 20 3d 20 41 5b 72 6f 6f 74 5d 2e 6d 5f 6b 65  y = A[root].m_ke
c6e0: 79 3b 20 41 5b 72 6f 6f 74 2b 2b 5d 2e 6d 5f 6b  y; A[root++].m_k
c6f0: 65 79 20 3d 20 28 6d 7a 5f 75 69 6e 74 31 36 29  ey = (mz_uint16)
c700: 6e 65 78 74 3b 20 7d 20 65 6c 73 65 20 41 5b 6e  next; } else A[n
c710: 65 78 74 5d 2e 6d 5f 6b 65 79 20 3d 20 41 5b 6c  ext].m_key = A[l
c720: 65 61 66 2b 2b 5d 2e 6d 5f 6b 65 79 3b 0a 20 20  eaf++].m_key;.  
c730: 20 20 69 66 20 28 6c 65 61 66 3e 3d 6e 20 7c 7c    if (leaf>=n ||
c740: 20 28 72 6f 6f 74 3c 6e 65 78 74 20 26 26 20 41   (root<next && A
c750: 5b 72 6f 6f 74 5d 2e 6d 5f 6b 65 79 3c 41 5b 6c  [root].m_key<A[l
c760: 65 61 66 5d 2e 6d 5f 6b 65 79 29 29 20 7b 20 41  eaf].m_key)) { A
c770: 5b 6e 65 78 74 5d 2e 6d 5f 6b 65 79 20 3d 20 28  [next].m_key = (
c780: 6d 7a 5f 75 69 6e 74 31 36 29 28 41 5b 6e 65 78  mz_uint16)(A[nex
c790: 74 5d 2e 6d 5f 6b 65 79 20 2b 20 41 5b 72 6f 6f  t].m_key + A[roo
c7a0: 74 5d 2e 6d 5f 6b 65 79 29 3b 20 41 5b 72 6f 6f  t].m_key); A[roo
c7b0: 74 2b 2b 5d 2e 6d 5f 6b 65 79 20 3d 20 28 6d 7a  t++].m_key = (mz
c7c0: 5f 75 69 6e 74 31 36 29 6e 65 78 74 3b 20 7d 20  _uint16)next; } 
c7d0: 65 6c 73 65 20 41 5b 6e 65 78 74 5d 2e 6d 5f 6b  else A[next].m_k
c7e0: 65 79 20 3d 20 28 6d 7a 5f 75 69 6e 74 31 36 29  ey = (mz_uint16)
c7f0: 28 41 5b 6e 65 78 74 5d 2e 6d 5f 6b 65 79 20 2b  (A[next].m_key +
c800: 20 41 5b 6c 65 61 66 2b 2b 5d 2e 6d 5f 6b 65 79   A[leaf++].m_key
c810: 29 3b 0a 20 20 7d 0a 20 20 41 5b 6e 2d 32 5d 2e  );.  }.  A[n-2].
c820: 6d 5f 6b 65 79 20 3d 20 30 3b 20 66 6f 72 20 28  m_key = 0; for (
c830: 6e 65 78 74 3d 6e 2d 33 3b 20 6e 65 78 74 3e 3d  next=n-3; next>=
c840: 30 3b 20 6e 65 78 74 2d 2d 29 20 41 5b 6e 65 78  0; next--) A[nex
c850: 74 5d 2e 6d 5f 6b 65 79 20 3d 20 41 5b 41 5b 6e  t].m_key = A[A[n
c860: 65 78 74 5d 2e 6d 5f 6b 65 79 5d 2e 6d 5f 6b 65  ext].m_key].m_ke
c870: 79 2b 31 3b 0a 20 20 61 76 62 6c 20 3d 20 31 3b  y+1;.  avbl = 1;
c880: 20 75 73 65 64 20 3d 20 64 70 74 68 20 3d 20 30   used = dpth = 0
c890: 3b 20 72 6f 6f 74 20 3d 20 6e 2d 32 3b 20 6e 65  ; root = n-2; ne
c8a0: 78 74 20 3d 20 6e 2d 31 3b 0a 20 20 77 68 69 6c  xt = n-1;.  whil
c8b0: 65 20 28 61 76 62 6c 3e 30 29 0a 20 20 7b 0a 20  e (avbl>0).  {. 
c8c0: 20 20 20 77 68 69 6c 65 20 28 72 6f 6f 74 3e 3d     while (root>=
c8d0: 30 20 26 26 20 28 69 6e 74 29 41 5b 72 6f 6f 74  0 && (int)A[root
c8e0: 5d 2e 6d 5f 6b 65 79 3d 3d 64 70 74 68 29 20 7b  ].m_key==dpth) {
c8f0: 20 75 73 65 64 2b 2b 3b 20 72 6f 6f 74 2d 2d 3b   used++; root--;
c900: 20 7d 0a 20 20 20 20 77 68 69 6c 65 20 28 61 76   }.    while (av
c910: 62 6c 3e 75 73 65 64 29 20 7b 20 41 5b 6e 65 78  bl>used) { A[nex
c920: 74 2d 2d 5d 2e 6d 5f 6b 65 79 20 3d 20 28 6d 7a  t--].m_key = (mz
c930: 5f 75 69 6e 74 31 36 29 28 64 70 74 68 29 3b 20  _uint16)(dpth); 
c940: 61 76 62 6c 2d 2d 3b 20 7d 0a 20 20 20 20 61 76  avbl--; }.    av
c950: 62 6c 20 3d 20 32 2a 75 73 65 64 3b 20 64 70 74  bl = 2*used; dpt
c960: 68 2b 2b 3b 20 75 73 65 64 20 3d 20 30 3b 0a 20  h++; used = 0;. 
c970: 20 7d 0a 7d 0a 0a 2f 2f 20 4c 69 6d 69 74 73 20   }.}..// Limits 
c980: 63 61 6e 6f 6e 69 63 61 6c 20 48 75 66 66 6d 61  canonical Huffma
c990: 6e 20 63 6f 64 65 20 74 61 62 6c 65 27 73 20 6d  n code table's m
c9a0: 61 78 20 63 6f 64 65 20 73 69 7a 65 2e 0a 65 6e  ax code size..en
c9b0: 75 6d 20 7b 20 54 44 45 46 4c 5f 4d 41 58 5f 53  um { TDEFL_MAX_S
c9c0: 55 50 50 4f 52 54 45 44 5f 48 55 46 46 5f 43 4f  UPPORTED_HUFF_CO
c9d0: 44 45 53 49 5a 45 20 3d 20 33 32 20 7d 3b 0a 73  DESIZE = 32 };.s
c9e0: 74 61 74 69 63 20 76 6f 69 64 20 74 64 65 66 6c  tatic void tdefl
c9f0: 5f 68 75 66 66 6d 61 6e 5f 65 6e 66 6f 72 63 65  _huffman_enforce
ca00: 5f 6d 61 78 5f 63 6f 64 65 5f 73 69 7a 65 28 69  _max_code_size(i
ca10: 6e 74 20 2a 70 4e 75 6d 5f 63 6f 64 65 73 2c 20  nt *pNum_codes, 
ca20: 69 6e 74 20 63 6f 64 65 5f 6c 69 73 74 5f 6c 65  int code_list_le
ca30: 6e 2c 20 69 6e 74 20 6d 61 78 5f 63 6f 64 65 5f  n, int max_code_
ca40: 73 69 7a 65 29 0a 7b 0a 20 20 69 6e 74 20 69 3b  size).{.  int i;
ca50: 20 6d 7a 5f 75 69 6e 74 33 32 20 74 6f 74 61 6c   mz_uint32 total
ca60: 20 3d 20 30 3b 20 69 66 20 28 63 6f 64 65 5f 6c   = 0; if (code_l
ca70: 69 73 74 5f 6c 65 6e 20 3c 3d 20 31 29 20 72 65  ist_len <= 1) re
ca80: 74 75 72 6e 3b 0a 20 20 66 6f 72 20 28 69 20 3d  turn;.  for (i =
ca90: 20 6d 61 78 5f 63 6f 64 65 5f 73 69 7a 65 20 2b   max_code_size +
caa0: 20 31 3b 20 69 20 3c 3d 20 54 44 45 46 4c 5f 4d   1; i <= TDEFL_M
cab0: 41 58 5f 53 55 50 50 4f 52 54 45 44 5f 48 55 46  AX_SUPPORTED_HUF
cac0: 46 5f 43 4f 44 45 53 49 5a 45 3b 20 69 2b 2b 29  F_CODESIZE; i++)
cad0: 20 70 4e 75 6d 5f 63 6f 64 65 73 5b 6d 61 78 5f   pNum_codes[max_
cae0: 63 6f 64 65 5f 73 69 7a 65 5d 20 2b 3d 20 70 4e  code_size] += pN
caf0: 75 6d 5f 63 6f 64 65 73 5b 69 5d 3b 0a 20 20 66  um_codes[i];.  f
cb00: 6f 72 20 28 69 20 3d 20 6d 61 78 5f 63 6f 64 65  or (i = max_code
cb10: 5f 73 69 7a 65 3b 20 69 20 3e 20 30 3b 20 69 2d  _size; i > 0; i-
cb20: 2d 29 20 74 6f 74 61 6c 20 2b 3d 20 28 28 28 6d  -) total += (((m
cb30: 7a 5f 75 69 6e 74 33 32 29 70 4e 75 6d 5f 63 6f  z_uint32)pNum_co
cb40: 64 65 73 5b 69 5d 29 20 3c 3c 20 28 6d 61 78 5f  des[i]) << (max_
cb50: 63 6f 64 65 5f 73 69 7a 65 20 2d 20 69 29 29 3b  code_size - i));
cb60: 0a 20 20 77 68 69 6c 65 20 28 74 6f 74 61 6c 20  .  while (total 
cb70: 21 3d 20 28 31 55 4c 20 3c 3c 20 6d 61 78 5f 63  != (1UL << max_c
cb80: 6f 64 65 5f 73 69 7a 65 29 29 0a 20 20 7b 0a 20  ode_size)).  {. 
cb90: 20 20 20 70 4e 75 6d 5f 63 6f 64 65 73 5b 6d 61     pNum_codes[ma
cba0: 78 5f 63 6f 64 65 5f 73 69 7a 65 5d 2d 2d 3b 0a  x_code_size]--;.
cbb0: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 6d 61 78      for (i = max
cbc0: 5f 63 6f 64 65 5f 73 69 7a 65 20 2d 20 31 3b 20  _code_size - 1; 
cbd0: 69 20 3e 20 30 3b 20 69 2d 2d 29 20 69 66 20 28  i > 0; i--) if (
cbe0: 70 4e 75 6d 5f 63 6f 64 65 73 5b 69 5d 29 20 7b  pNum_codes[i]) {
cbf0: 20 70 4e 75 6d 5f 63 6f 64 65 73 5b 69 5d 2d 2d   pNum_codes[i]--
cc00: 3b 20 70 4e 75 6d 5f 63 6f 64 65 73 5b 69 20 2b  ; pNum_codes[i +
cc10: 20 31 5d 20 2b 3d 20 32 3b 20 62 72 65 61 6b 3b   1] += 2; break;
cc20: 20 7d 0a 20 20 20 20 74 6f 74 61 6c 2d 2d 3b 0a   }.    total--;.
cc30: 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f    }.}..static vo
cc40: 69 64 20 74 64 65 66 6c 5f 6f 70 74 69 6d 69 7a  id tdefl_optimiz
cc50: 65 5f 68 75 66 66 6d 61 6e 5f 74 61 62 6c 65 28  e_huffman_table(
cc60: 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72  tdefl_compressor
cc70: 20 2a 64 2c 20 69 6e 74 20 74 61 62 6c 65 5f 6e   *d, int table_n
cc80: 75 6d 2c 20 69 6e 74 20 74 61 62 6c 65 5f 6c 65  um, int table_le
cc90: 6e 2c 20 69 6e 74 20 63 6f 64 65 5f 73 69 7a 65  n, int code_size
cca0: 5f 6c 69 6d 69 74 2c 20 69 6e 74 20 73 74 61 74  _limit, int stat
ccb0: 69 63 5f 74 61 62 6c 65 29 0a 7b 0a 20 20 69 6e  ic_table).{.  in
ccc0: 74 20 69 2c 20 6a 2c 20 6c 2c 20 6e 75 6d 5f 63  t i, j, l, num_c
ccd0: 6f 64 65 73 5b 31 20 2b 20 54 44 45 46 4c 5f 4d  odes[1 + TDEFL_M
cce0: 41 58 5f 53 55 50 50 4f 52 54 45 44 5f 48 55 46  AX_SUPPORTED_HUF
ccf0: 46 5f 43 4f 44 45 53 49 5a 45 5d 3b 20 6d 7a 5f  F_CODESIZE]; mz_
cd00: 75 69 6e 74 20 6e 65 78 74 5f 63 6f 64 65 5b 54  uint next_code[T
cd10: 44 45 46 4c 5f 4d 41 58 5f 53 55 50 50 4f 52 54  DEFL_MAX_SUPPORT
cd20: 45 44 5f 48 55 46 46 5f 43 4f 44 45 53 49 5a 45  ED_HUFF_CODESIZE
cd30: 20 2b 20 31 5d 3b 20 4d 5a 5f 43 4c 45 41 52 5f   + 1]; MZ_CLEAR_
cd40: 4f 42 4a 28 6e 75 6d 5f 63 6f 64 65 73 29 3b 0a  OBJ(num_codes);.
cd50: 20 20 69 66 20 28 73 74 61 74 69 63 5f 74 61 62    if (static_tab
cd60: 6c 65 29 0a 20 20 7b 0a 20 20 20 20 66 6f 72 20  le).  {.    for 
cd70: 28 69 20 3d 20 30 3b 20 69 20 3c 20 74 61 62 6c  (i = 0; i < tabl
cd80: 65 5f 6c 65 6e 3b 20 69 2b 2b 29 20 6e 75 6d 5f  e_len; i++) num_
cd90: 63 6f 64 65 73 5b 64 2d 3e 6d 5f 68 75 66 66 5f  codes[d->m_huff_
cda0: 63 6f 64 65 5f 73 69 7a 65 73 5b 74 61 62 6c 65  code_sizes[table
cdb0: 5f 6e 75 6d 5d 5b 69 5d 5d 2b 2b 3b 0a 20 20 7d  _num][i]]++;.  }
cdc0: 0a 20 20 65 6c 73 65 0a 20 20 7b 0a 20 20 20 20  .  else.  {.    
cdd0: 74 64 65 66 6c 5f 73 79 6d 5f 66 72 65 71 20 73  tdefl_sym_freq s
cde0: 79 6d 73 30 5b 54 44 45 46 4c 5f 4d 41 58 5f 48  yms0[TDEFL_MAX_H
cdf0: 55 46 46 5f 53 59 4d 42 4f 4c 53 5d 2c 20 73 79  UFF_SYMBOLS], sy
ce00: 6d 73 31 5b 54 44 45 46 4c 5f 4d 41 58 5f 48 55  ms1[TDEFL_MAX_HU
ce10: 46 46 5f 53 59 4d 42 4f 4c 53 5d 2c 20 2a 70 53  FF_SYMBOLS], *pS
ce20: 79 6d 73 3b 0a 20 20 20 20 69 6e 74 20 6e 75 6d  yms;.    int num
ce30: 5f 75 73 65 64 5f 73 79 6d 73 20 3d 20 30 3b 0a  _used_syms = 0;.
ce40: 20 20 20 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e      const mz_uin
ce50: 74 31 36 20 2a 70 53 79 6d 5f 63 6f 75 6e 74 20  t16 *pSym_count 
ce60: 3d 20 26 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75  = &d->m_huff_cou
ce70: 6e 74 5b 74 61 62 6c 65 5f 6e 75 6d 5d 5b 30 5d  nt[table_num][0]
ce80: 3b 0a 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30  ;.    for (i = 0
ce90: 3b 20 69 20 3c 20 74 61 62 6c 65 5f 6c 65 6e 3b  ; i < table_len;
cea0: 20 69 2b 2b 29 20 69 66 20 28 70 53 79 6d 5f 63   i++) if (pSym_c
ceb0: 6f 75 6e 74 5b 69 5d 29 20 7b 20 73 79 6d 73 30  ount[i]) { syms0
cec0: 5b 6e 75 6d 5f 75 73 65 64 5f 73 79 6d 73 5d 2e  [num_used_syms].
ced0: 6d 5f 6b 65 79 20 3d 20 28 6d 7a 5f 75 69 6e 74  m_key = (mz_uint
cee0: 31 36 29 70 53 79 6d 5f 63 6f 75 6e 74 5b 69 5d  16)pSym_count[i]
cef0: 3b 20 73 79 6d 73 30 5b 6e 75 6d 5f 75 73 65 64  ; syms0[num_used
cf00: 5f 73 79 6d 73 2b 2b 5d 2e 6d 5f 73 79 6d 5f 69  _syms++].m_sym_i
cf10: 6e 64 65 78 20 3d 20 28 6d 7a 5f 75 69 6e 74 31  ndex = (mz_uint1
cf20: 36 29 69 3b 20 7d 0a 0a 20 20 20 20 70 53 79 6d  6)i; }..    pSym
cf30: 73 20 3d 20 74 64 65 66 6c 5f 72 61 64 69 78 5f  s = tdefl_radix_
cf40: 73 6f 72 74 5f 73 79 6d 73 28 6e 75 6d 5f 75 73  sort_syms(num_us
cf50: 65 64 5f 73 79 6d 73 2c 20 73 79 6d 73 30 2c 20  ed_syms, syms0, 
cf60: 73 79 6d 73 31 29 3b 20 74 64 65 66 6c 5f 63 61  syms1); tdefl_ca
cf70: 6c 63 75 6c 61 74 65 5f 6d 69 6e 69 6d 75 6d 5f  lculate_minimum_
cf80: 72 65 64 75 6e 64 61 6e 63 79 28 70 53 79 6d 73  redundancy(pSyms
cf90: 2c 20 6e 75 6d 5f 75 73 65 64 5f 73 79 6d 73 29  , num_used_syms)
cfa0: 3b 0a 0a 20 20 20 20 66 6f 72 20 28 69 20 3d 20  ;..    for (i = 
cfb0: 30 3b 20 69 20 3c 20 6e 75 6d 5f 75 73 65 64 5f  0; i < num_used_
cfc0: 73 79 6d 73 3b 20 69 2b 2b 29 20 6e 75 6d 5f 63  syms; i++) num_c
cfd0: 6f 64 65 73 5b 70 53 79 6d 73 5b 69 5d 2e 6d 5f  odes[pSyms[i].m_
cfe0: 6b 65 79 5d 2b 2b 3b 0a 0a 20 20 20 20 74 64 65  key]++;..    tde
cff0: 66 6c 5f 68 75 66 66 6d 61 6e 5f 65 6e 66 6f 72  fl_huffman_enfor
d000: 63 65 5f 6d 61 78 5f 63 6f 64 65 5f 73 69 7a 65  ce_max_code_size
d010: 28 6e 75 6d 5f 63 6f 64 65 73 2c 20 6e 75 6d 5f  (num_codes, num_
d020: 75 73 65 64 5f 73 79 6d 73 2c 20 63 6f 64 65 5f  used_syms, code_
d030: 73 69 7a 65 5f 6c 69 6d 69 74 29 3b 0a 0a 20 20  size_limit);..  
d040: 20 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a 28 64    MZ_CLEAR_OBJ(d
d050: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69  ->m_huff_code_si
d060: 7a 65 73 5b 74 61 62 6c 65 5f 6e 75 6d 5d 29 3b  zes[table_num]);
d070: 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a 28 64 2d   MZ_CLEAR_OBJ(d-
d080: 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 73 5b 74 61  >m_huff_codes[ta
d090: 62 6c 65 5f 6e 75 6d 5d 29 3b 0a 20 20 20 20 66  ble_num]);.    f
d0a0: 6f 72 20 28 69 20 3d 20 31 2c 20 6a 20 3d 20 6e  or (i = 1, j = n
d0b0: 75 6d 5f 75 73 65 64 5f 73 79 6d 73 3b 20 69 20  um_used_syms; i 
d0c0: 3c 3d 20 63 6f 64 65 5f 73 69 7a 65 5f 6c 69 6d  <= code_size_lim
d0d0: 69 74 3b 20 69 2b 2b 29 0a 20 20 20 20 20 20 66  it; i++).      f
d0e0: 6f 72 20 28 6c 20 3d 20 6e 75 6d 5f 63 6f 64 65  or (l = num_code
d0f0: 73 5b 69 5d 3b 20 6c 20 3e 20 30 3b 20 6c 2d 2d  s[i]; l > 0; l--
d100: 29 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  ) d->m_huff_code
d110: 5f 73 69 7a 65 73 5b 74 61 62 6c 65 5f 6e 75 6d  _sizes[table_num
d120: 5d 5b 70 53 79 6d 73 5b 2d 2d 6a 5d 2e 6d 5f 73  ][pSyms[--j].m_s
d130: 79 6d 5f 69 6e 64 65 78 5d 20 3d 20 28 6d 7a 5f  ym_index] = (mz_
d140: 75 69 6e 74 38 29 28 69 29 3b 0a 20 20 7d 0a 0a  uint8)(i);.  }..
d150: 20 20 6e 65 78 74 5f 63 6f 64 65 5b 31 5d 20 3d    next_code[1] =
d160: 20 30 3b 20 66 6f 72 20 28 6a 20 3d 20 30 2c 20   0; for (j = 0, 
d170: 69 20 3d 20 32 3b 20 69 20 3c 3d 20 63 6f 64 65  i = 2; i <= code
d180: 5f 73 69 7a 65 5f 6c 69 6d 69 74 3b 20 69 2b 2b  _size_limit; i++
d190: 29 20 6e 65 78 74 5f 63 6f 64 65 5b 69 5d 20 3d  ) next_code[i] =
d1a0: 20 6a 20 3d 20 28 28 6a 20 2b 20 6e 75 6d 5f 63   j = ((j + num_c
d1b0: 6f 64 65 73 5b 69 20 2d 20 31 5d 29 20 3c 3c 20  odes[i - 1]) << 
d1c0: 31 29 3b 0a 0a 20 20 66 6f 72 20 28 69 20 3d 20  1);..  for (i = 
d1d0: 30 3b 20 69 20 3c 20 74 61 62 6c 65 5f 6c 65 6e  0; i < table_len
d1e0: 3b 20 69 2b 2b 29 0a 20 20 7b 0a 20 20 20 20 6d  ; i++).  {.    m
d1f0: 7a 5f 75 69 6e 74 20 72 65 76 5f 63 6f 64 65 20  z_uint rev_code 
d200: 3d 20 30 2c 20 63 6f 64 65 2c 20 63 6f 64 65 5f  = 0, code, code_
d210: 73 69 7a 65 3b 20 69 66 20 28 28 63 6f 64 65 5f  size; if ((code_
d220: 73 69 7a 65 20 3d 20 64 2d 3e 6d 5f 68 75 66 66  size = d->m_huff
d230: 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 74 61 62 6c  _code_sizes[tabl
d240: 65 5f 6e 75 6d 5d 5b 69 5d 29 20 3d 3d 20 30 29  e_num][i]) == 0)
d250: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 63   continue;.    c
d260: 6f 64 65 20 3d 20 6e 65 78 74 5f 63 6f 64 65 5b  ode = next_code[
d270: 63 6f 64 65 5f 73 69 7a 65 5d 2b 2b 3b 20 66 6f  code_size]++; fo
d280: 72 20 28 6c 20 3d 20 63 6f 64 65 5f 73 69 7a 65  r (l = code_size
d290: 3b 20 6c 20 3e 20 30 3b 20 6c 2d 2d 2c 20 63 6f  ; l > 0; l--, co
d2a0: 64 65 20 3e 3e 3d 20 31 29 20 72 65 76 5f 63 6f  de >>= 1) rev_co
d2b0: 64 65 20 3d 20 28 72 65 76 5f 63 6f 64 65 20 3c  de = (rev_code <
d2c0: 3c 20 31 29 20 7c 20 28 63 6f 64 65 20 26 20 31  < 1) | (code & 1
d2d0: 29 3b 0a 20 20 20 20 64 2d 3e 6d 5f 68 75 66 66  );.    d->m_huff
d2e0: 5f 63 6f 64 65 73 5b 74 61 62 6c 65 5f 6e 75 6d  _codes[table_num
d2f0: 5d 5b 69 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 31  ][i] = (mz_uint1
d300: 36 29 72 65 76 5f 63 6f 64 65 3b 0a 20 20 7d 0a  6)rev_code;.  }.
d310: 7d 0a 0a 23 64 65 66 69 6e 65 20 54 44 45 46 4c  }..#define TDEFL
d320: 5f 50 55 54 5f 42 49 54 53 28 62 2c 20 6c 29 20  _PUT_BITS(b, l) 
d330: 64 6f 20 7b 20 5c 0a 20 20 6d 7a 5f 75 69 6e 74  do { \.  mz_uint
d340: 20 62 69 74 73 20 3d 20 62 3b 20 6d 7a 5f 75 69   bits = b; mz_ui
d350: 6e 74 20 6c 65 6e 20 3d 20 6c 3b 20 4d 5a 5f 41  nt len = l; MZ_A
d360: 53 53 45 52 54 28 62 69 74 73 20 3c 3d 20 28 28  SSERT(bits <= ((
d370: 31 55 20 3c 3c 20 6c 65 6e 29 20 2d 20 31 55 29  1U << len) - 1U)
d380: 29 3b 20 5c 0a 20 20 64 2d 3e 6d 5f 62 69 74 5f  ); \.  d->m_bit_
d390: 62 75 66 66 65 72 20 7c 3d 20 28 62 69 74 73 20  buffer |= (bits 
d3a0: 3c 3c 20 64 2d 3e 6d 5f 62 69 74 73 5f 69 6e 29  << d->m_bits_in)
d3b0: 3b 20 64 2d 3e 6d 5f 62 69 74 73 5f 69 6e 20 2b  ; d->m_bits_in +
d3c0: 3d 20 6c 65 6e 3b 20 5c 0a 20 20 77 68 69 6c 65  = len; \.  while
d3d0: 20 28 64 2d 3e 6d 5f 62 69 74 73 5f 69 6e 20 3e   (d->m_bits_in >
d3e0: 3d 20 38 29 20 7b 20 5c 0a 20 20 20 20 69 66 20  = 8) { \.    if 
d3f0: 28 64 2d 3e 6d 5f 70 4f 75 74 70 75 74 5f 62 75  (d->m_pOutput_bu
d400: 66 20 3c 20 64 2d 3e 6d 5f 70 4f 75 74 70 75 74  f < d->m_pOutput
d410: 5f 62 75 66 5f 65 6e 64 29 20 5c 0a 20 20 20 20  _buf_end) \.    
d420: 20 20 2a 64 2d 3e 6d 5f 70 4f 75 74 70 75 74 5f    *d->m_pOutput_
d430: 62 75 66 2b 2b 20 3d 20 28 6d 7a 5f 75 69 6e 74  buf++ = (mz_uint
d440: 38 29 28 64 2d 3e 6d 5f 62 69 74 5f 62 75 66 66  8)(d->m_bit_buff
d450: 65 72 29 3b 20 5c 0a 20 20 20 20 20 20 64 2d 3e  er); \.      d->
d460: 6d 5f 62 69 74 5f 62 75 66 66 65 72 20 3e 3e 3d  m_bit_buffer >>=
d470: 20 38 3b 20 5c 0a 20 20 20 20 20 20 64 2d 3e 6d   8; \.      d->m
d480: 5f 62 69 74 73 5f 69 6e 20 2d 3d 20 38 3b 20 5c  _bits_in -= 8; \
d490: 0a 20 20 7d 20 5c 0a 7d 20 4d 5a 5f 4d 41 43 52  .  } \.} MZ_MACR
d4a0: 4f 5f 45 4e 44 0a 0a 23 64 65 66 69 6e 65 20 54  O_END..#define T
d4b0: 44 45 46 4c 5f 52 4c 45 5f 50 52 45 56 5f 43 4f  DEFL_RLE_PREV_CO
d4c0: 44 45 5f 53 49 5a 45 28 29 20 7b 20 69 66 20 28  DE_SIZE() { if (
d4d0: 72 6c 65 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74  rle_repeat_count
d4e0: 29 20 7b 20 5c 0a 20 20 69 66 20 28 72 6c 65 5f  ) { \.  if (rle_
d4f0: 72 65 70 65 61 74 5f 63 6f 75 6e 74 20 3c 20 33  repeat_count < 3
d500: 29 20 7b 20 5c 0a 20 20 20 20 64 2d 3e 6d 5f 68  ) { \.    d->m_h
d510: 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b 70 72 65  uff_count[2][pre
d520: 76 5f 63 6f 64 65 5f 73 69 7a 65 5d 20 3d 20 28  v_code_size] = (
d530: 6d 7a 5f 75 69 6e 74 31 36 29 28 64 2d 3e 6d 5f  mz_uint16)(d->m_
d540: 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b 70 72  huff_count[2][pr
d550: 65 76 5f 63 6f 64 65 5f 73 69 7a 65 5d 20 2b 20  ev_code_size] + 
d560: 72 6c 65 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74  rle_repeat_count
d570: 29 3b 20 5c 0a 20 20 20 20 77 68 69 6c 65 20 28  ); \.    while (
d580: 72 6c 65 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74  rle_repeat_count
d590: 2d 2d 29 20 70 61 63 6b 65 64 5f 63 6f 64 65 5f  --) packed_code_
d5a0: 73 69 7a 65 73 5b 6e 75 6d 5f 70 61 63 6b 65 64  sizes[num_packed
d5b0: 5f 63 6f 64 65 5f 73 69 7a 65 73 2b 2b 5d 20 3d  _code_sizes++] =
d5c0: 20 70 72 65 76 5f 63 6f 64 65 5f 73 69 7a 65 3b   prev_code_size;
d5d0: 20 5c 0a 20 20 7d 20 65 6c 73 65 20 7b 20 5c 0a   \.  } else { \.
d5e0: 20 20 20 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f      d->m_huff_co
d5f0: 75 6e 74 5b 32 5d 5b 31 36 5d 20 3d 20 28 6d 7a  unt[2][16] = (mz
d600: 5f 75 69 6e 74 31 36 29 28 64 2d 3e 6d 5f 68 75  _uint16)(d->m_hu
d610: 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b 31 36 5d 20  ff_count[2][16] 
d620: 2b 20 31 29 3b 20 70 61 63 6b 65 64 5f 63 6f 64  + 1); packed_cod
d630: 65 5f 73 69 7a 65 73 5b 6e 75 6d 5f 70 61 63 6b  e_sizes[num_pack
d640: 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 2b 2b 5d  ed_code_sizes++]
d650: 20 3d 20 31 36 3b 20 70 61 63 6b 65 64 5f 63 6f   = 16; packed_co
d660: 64 65 5f 73 69 7a 65 73 5b 6e 75 6d 5f 70 61 63  de_sizes[num_pac
d670: 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 2b 2b  ked_code_sizes++
d680: 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 28 72  ] = (mz_uint8)(r
d690: 6c 65 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74 20  le_repeat_count 
d6a0: 2d 20 33 29 3b 20 5c 0a 7d 20 72 6c 65 5f 72 65  - 3); \.} rle_re
d6b0: 70 65 61 74 5f 63 6f 75 6e 74 20 3d 20 30 3b 20  peat_count = 0; 
d6c0: 7d 20 7d 0a 0a 23 64 65 66 69 6e 65 20 54 44 45  } }..#define TDE
d6d0: 46 4c 5f 52 4c 45 5f 5a 45 52 4f 5f 43 4f 44 45  FL_RLE_ZERO_CODE
d6e0: 5f 53 49 5a 45 28 29 20 7b 20 69 66 20 28 72 6c  _SIZE() { if (rl
d6f0: 65 5f 7a 5f 63 6f 75 6e 74 29 20 7b 20 5c 0a 20  e_z_count) { \. 
d700: 20 69 66 20 28 72 6c 65 5f 7a 5f 63 6f 75 6e 74   if (rle_z_count
d710: 20 3c 20 33 29 20 7b 20 5c 0a 20 20 20 20 64 2d   < 3) { \.    d-
d720: 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d  >m_huff_count[2]
d730: 5b 30 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 31 36  [0] = (mz_uint16
d740: 29 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e  )(d->m_huff_coun
d750: 74 5b 32 5d 5b 30 5d 20 2b 20 72 6c 65 5f 7a 5f  t[2][0] + rle_z_
d760: 63 6f 75 6e 74 29 3b 20 77 68 69 6c 65 20 28 72  count); while (r
d770: 6c 65 5f 7a 5f 63 6f 75 6e 74 2d 2d 29 20 70 61  le_z_count--) pa
d780: 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5b  cked_code_sizes[
d790: 6e 75 6d 5f 70 61 63 6b 65 64 5f 63 6f 64 65 5f  num_packed_code_
d7a0: 73 69 7a 65 73 2b 2b 5d 20 3d 20 30 3b 20 5c 0a  sizes++] = 0; \.
d7b0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 72 6c 65    } else if (rle
d7c0: 5f 7a 5f 63 6f 75 6e 74 20 3c 3d 20 31 30 29 20  _z_count <= 10) 
d7d0: 7b 20 5c 0a 20 20 20 20 64 2d 3e 6d 5f 68 75 66  { \.    d->m_huf
d7e0: 66 5f 63 6f 75 6e 74 5b 32 5d 5b 31 37 5d 20 3d  f_count[2][17] =
d7f0: 20 28 6d 7a 5f 75 69 6e 74 31 36 29 28 64 2d 3e   (mz_uint16)(d->
d800: 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b  m_huff_count[2][
d810: 31 37 5d 20 2b 20 31 29 3b 20 70 61 63 6b 65 64  17] + 1); packed
d820: 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 6e 75 6d 5f  _code_sizes[num_
d830: 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65  packed_code_size
d840: 73 2b 2b 5d 20 3d 20 31 37 3b 20 70 61 63 6b 65  s++] = 17; packe
d850: 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 6e 75 6d  d_code_sizes[num
d860: 5f 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a  _packed_code_siz
d870: 65 73 2b 2b 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74  es++] = (mz_uint
d880: 38 29 28 72 6c 65 5f 7a 5f 63 6f 75 6e 74 20 2d  8)(rle_z_count -
d890: 20 33 29 3b 20 5c 0a 20 20 7d 20 65 6c 73 65 20   3); \.  } else 
d8a0: 7b 20 5c 0a 20 20 20 20 64 2d 3e 6d 5f 68 75 66  { \.    d->m_huf
d8b0: 66 5f 63 6f 75 6e 74 5b 32 5d 5b 31 38 5d 20 3d  f_count[2][18] =
d8c0: 20 28 6d 7a 5f 75 69 6e 74 31 36 29 28 64 2d 3e   (mz_uint16)(d->
d8d0: 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b  m_huff_count[2][
d8e0: 31 38 5d 20 2b 20 31 29 3b 20 70 61 63 6b 65 64  18] + 1); packed
d8f0: 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 6e 75 6d 5f  _code_sizes[num_
d900: 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65  packed_code_size
d910: 73 2b 2b 5d 20 3d 20 31 38 3b 20 70 61 63 6b 65  s++] = 18; packe
d920: 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 6e 75 6d  d_code_sizes[num
d930: 5f 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a  _packed_code_siz
d940: 65 73 2b 2b 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74  es++] = (mz_uint
d950: 38 29 28 72 6c 65 5f 7a 5f 63 6f 75 6e 74 20 2d  8)(rle_z_count -
d960: 20 31 31 29 3b 20 5c 0a 7d 20 72 6c 65 5f 7a 5f   11); \.} rle_z_
d970: 63 6f 75 6e 74 20 3d 20 30 3b 20 7d 20 7d 0a 0a  count = 0; } }..
d980: 73 74 61 74 69 63 20 6d 7a 5f 75 69 6e 74 38 20  static mz_uint8 
d990: 73 5f 74 64 65 66 6c 5f 70 61 63 6b 65 64 5f 63  s_tdefl_packed_c
d9a0: 6f 64 65 5f 73 69 7a 65 5f 73 79 6d 73 5f 73 77  ode_size_syms_sw
d9b0: 69 7a 7a 6c 65 5b 5d 20 3d 20 7b 20 31 36 2c 20  izzle[] = { 16, 
d9c0: 31 37 2c 20 31 38 2c 20 30 2c 20 38 2c 20 37 2c  17, 18, 0, 8, 7,
d9d0: 20 39 2c 20 36 2c 20 31 30 2c 20 35 2c 20 31 31   9, 6, 10, 5, 11
d9e0: 2c 20 34 2c 20 31 32 2c 20 33 2c 20 31 33 2c 20  , 4, 12, 3, 13, 
d9f0: 32 2c 20 31 34 2c 20 31 2c 20 31 35 20 7d 3b 0a  2, 14, 1, 15 };.
da00: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 64 65  .static void tde
da10: 66 6c 5f 73 74 61 72 74 5f 64 79 6e 61 6d 69 63  fl_start_dynamic
da20: 5f 62 6c 6f 63 6b 28 74 64 65 66 6c 5f 63 6f 6d  _block(tdefl_com
da30: 70 72 65 73 73 6f 72 20 2a 64 29 0a 7b 0a 20 20  pressor *d).{.  
da40: 69 6e 74 20 6e 75 6d 5f 6c 69 74 5f 63 6f 64 65  int num_lit_code
da50: 73 2c 20 6e 75 6d 5f 64 69 73 74 5f 63 6f 64 65  s, num_dist_code
da60: 73 2c 20 6e 75 6d 5f 62 69 74 5f 6c 65 6e 67 74  s, num_bit_lengt
da70: 68 73 3b 20 6d 7a 5f 75 69 6e 74 20 69 2c 20 74  hs; mz_uint i, t
da80: 6f 74 61 6c 5f 63 6f 64 65 5f 73 69 7a 65 73 5f  otal_code_sizes_
da90: 74 6f 5f 70 61 63 6b 2c 20 6e 75 6d 5f 70 61 63  to_pack, num_pac
daa0: 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 2c 20  ked_code_sizes, 
dab0: 72 6c 65 5f 7a 5f 63 6f 75 6e 74 2c 20 72 6c 65  rle_z_count, rle
dac0: 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74 2c 20 70  _repeat_count, p
dad0: 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73  acked_code_sizes
dae0: 5f 69 6e 64 65 78 3b 0a 20 20 6d 7a 5f 75 69 6e  _index;.  mz_uin
daf0: 74 38 20 63 6f 64 65 5f 73 69 7a 65 73 5f 74 6f  t8 code_sizes_to
db00: 5f 70 61 63 6b 5b 54 44 45 46 4c 5f 4d 41 58 5f  _pack[TDEFL_MAX_
db10: 48 55 46 46 5f 53 59 4d 42 4f 4c 53 5f 30 20 2b  HUFF_SYMBOLS_0 +
db20: 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TDEFL_MAX_HUFF_
db30: 53 59 4d 42 4f 4c 53 5f 31 5d 2c 20 70 61 63 6b  SYMBOLS_1], pack
db40: 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 54 44  ed_code_sizes[TD
db50: 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53 59 4d  EFL_MAX_HUFF_SYM
db60: 42 4f 4c 53 5f 30 20 2b 20 54 44 45 46 4c 5f 4d  BOLS_0 + TDEFL_M
db70: 41 58 5f 48 55 46 46 5f 53 59 4d 42 4f 4c 53 5f  AX_HUFF_SYMBOLS_
db80: 31 5d 2c 20 70 72 65 76 5f 63 6f 64 65 5f 73 69  1], prev_code_si
db90: 7a 65 20 3d 20 30 78 46 46 3b 0a 0a 20 20 64 2d  ze = 0xFF;..  d-
dba0: 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 30 5d  >m_huff_count[0]
dbb0: 5b 32 35 36 5d 20 3d 20 31 3b 0a 0a 20 20 74 64  [256] = 1;..  td
dbc0: 65 66 6c 5f 6f 70 74 69 6d 69 7a 65 5f 68 75 66  efl_optimize_huf
dbd0: 66 6d 61 6e 5f 74 61 62 6c 65 28 64 2c 20 30 2c  fman_table(d, 0,
dbe0: 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TDEFL_MAX_HUFF_
dbf0: 53 59 4d 42 4f 4c 53 5f 30 2c 20 31 35 2c 20 4d  SYMBOLS_0, 15, M
dc00: 5a 5f 46 41 4c 53 45 29 3b 0a 20 20 74 64 65 66  Z_FALSE);.  tdef
dc10: 6c 5f 6f 70 74 69 6d 69 7a 65 5f 68 75 66 66 6d  l_optimize_huffm
dc20: 61 6e 5f 74 61 62 6c 65 28 64 2c 20 31 2c 20 54  an_table(d, 1, T
dc30: 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53 59  DEFL_MAX_HUFF_SY
dc40: 4d 42 4f 4c 53 5f 31 2c 20 31 35 2c 20 4d 5a 5f  MBOLS_1, 15, MZ_
dc50: 46 41 4c 53 45 29 3b 0a 0a 20 20 66 6f 72 20 28  FALSE);..  for (
dc60: 6e 75 6d 5f 6c 69 74 5f 63 6f 64 65 73 20 3d 20  num_lit_codes = 
dc70: 32 38 36 3b 20 6e 75 6d 5f 6c 69 74 5f 63 6f 64  286; num_lit_cod
dc80: 65 73 20 3e 20 32 35 37 3b 20 6e 75 6d 5f 6c 69  es > 257; num_li
dc90: 74 5f 63 6f 64 65 73 2d 2d 29 20 69 66 20 28 64  t_codes--) if (d
dca0: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69  ->m_huff_code_si
dcb0: 7a 65 73 5b 30 5d 5b 6e 75 6d 5f 6c 69 74 5f 63  zes[0][num_lit_c
dcc0: 6f 64 65 73 20 2d 20 31 5d 29 20 62 72 65 61 6b  odes - 1]) break
dcd0: 3b 0a 20 20 66 6f 72 20 28 6e 75 6d 5f 64 69 73  ;.  for (num_dis
dce0: 74 5f 63 6f 64 65 73 20 3d 20 33 30 3b 20 6e 75  t_codes = 30; nu
dcf0: 6d 5f 64 69 73 74 5f 63 6f 64 65 73 20 3e 20 31  m_dist_codes > 1
dd00: 3b 20 6e 75 6d 5f 64 69 73 74 5f 63 6f 64 65 73  ; num_dist_codes
dd10: 2d 2d 29 20 69 66 20 28 64 2d 3e 6d 5f 68 75 66  --) if (d->m_huf
dd20: 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 31 5d 5b  f_code_sizes[1][
dd30: 6e 75 6d 5f 64 69 73 74 5f 63 6f 64 65 73 20 2d  num_dist_codes -
dd40: 20 31 5d 29 20 62 72 65 61 6b 3b 0a 0a 20 20 6d   1]) break;..  m
dd50: 65 6d 63 70 79 28 63 6f 64 65 5f 73 69 7a 65 73  emcpy(code_sizes
dd60: 5f 74 6f 5f 70 61 63 6b 2c 20 26 64 2d 3e 6d 5f  _to_pack, &d->m_
dd70: 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b  huff_code_sizes[
dd80: 30 5d 5b 30 5d 2c 20 6e 75 6d 5f 6c 69 74 5f 63  0][0], num_lit_c
dd90: 6f 64 65 73 29 3b 0a 20 20 6d 65 6d 63 70 79 28  odes);.  memcpy(
dda0: 63 6f 64 65 5f 73 69 7a 65 73 5f 74 6f 5f 70 61  code_sizes_to_pa
ddb0: 63 6b 20 2b 20 6e 75 6d 5f 6c 69 74 5f 63 6f 64  ck + num_lit_cod
ddc0: 65 73 2c 20 26 64 2d 3e 6d 5f 68 75 66 66 5f 63  es, &d->m_huff_c
ddd0: 6f 64 65 5f 73 69 7a 65 73 5b 31 5d 5b 30 5d 2c  ode_sizes[1][0],
dde0: 20 6e 75 6d 5f 64 69 73 74 5f 63 6f 64 65 73 29   num_dist_codes)
ddf0: 3b 0a 20 20 74 6f 74 61 6c 5f 63 6f 64 65 5f 73  ;.  total_code_s
de00: 69 7a 65 73 5f 74 6f 5f 70 61 63 6b 20 3d 20 6e  izes_to_pack = n
de10: 75 6d 5f 6c 69 74 5f 63 6f 64 65 73 20 2b 20 6e  um_lit_codes + n
de20: 75 6d 5f 64 69 73 74 5f 63 6f 64 65 73 3b 20 6e  um_dist_codes; n
de30: 75 6d 5f 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73  um_packed_code_s
de40: 69 7a 65 73 20 3d 20 30 3b 20 72 6c 65 5f 7a 5f  izes = 0; rle_z_
de50: 63 6f 75 6e 74 20 3d 20 30 3b 20 72 6c 65 5f 72  count = 0; rle_r
de60: 65 70 65 61 74 5f 63 6f 75 6e 74 20 3d 20 30 3b  epeat_count = 0;
de70: 0a 0a 20 20 6d 65 6d 73 65 74 28 26 64 2d 3e 6d  ..  memset(&d->m
de80: 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b 30  _huff_count[2][0
de90: 5d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 64 2d 3e  ], 0, sizeof(d->
dea0: 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b 32 5d 5b  m_huff_count[2][
deb0: 30 5d 29 20 2a 20 54 44 45 46 4c 5f 4d 41 58 5f  0]) * TDEFL_MAX_
dec0: 48 55 46 46 5f 53 59 4d 42 4f 4c 53 5f 32 29 3b  HUFF_SYMBOLS_2);
ded0: 0a 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69  .  for (i = 0; i
dee0: 20 3c 20 74 6f 74 61 6c 5f 63 6f 64 65 5f 73 69   < total_code_si
def0: 7a 65 73 5f 74 6f 5f 70 61 63 6b 3b 20 69 2b 2b  zes_to_pack; i++
df00: 29 0a 20 20 7b 0a 20 20 20 20 6d 7a 5f 75 69 6e  ).  {.    mz_uin
df10: 74 38 20 63 6f 64 65 5f 73 69 7a 65 20 3d 20 63  t8 code_size = c
df20: 6f 64 65 5f 73 69 7a 65 73 5f 74 6f 5f 70 61 63  ode_sizes_to_pac
df30: 6b 5b 69 5d 3b 0a 20 20 20 20 69 66 20 28 21 63  k[i];.    if (!c
df40: 6f 64 65 5f 73 69 7a 65 29 0a 20 20 20 20 7b 0a  ode_size).    {.
df50: 20 20 20 20 20 20 54 44 45 46 4c 5f 52 4c 45 5f        TDEFL_RLE_
df60: 50 52 45 56 5f 43 4f 44 45 5f 53 49 5a 45 28 29  PREV_CODE_SIZE()
df70: 3b 0a 20 20 20 20 20 20 69 66 20 28 2b 2b 72 6c  ;.      if (++rl
df80: 65 5f 7a 5f 63 6f 75 6e 74 20 3d 3d 20 31 33 38  e_z_count == 138
df90: 29 20 7b 20 54 44 45 46 4c 5f 52 4c 45 5f 5a 45  ) { TDEFL_RLE_ZE
dfa0: 52 4f 5f 43 4f 44 45 5f 53 49 5a 45 28 29 3b 20  RO_CODE_SIZE(); 
dfb0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  }.    }.    else
dfc0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 54 44 45  .    {.      TDE
dfd0: 46 4c 5f 52 4c 45 5f 5a 45 52 4f 5f 43 4f 44 45  FL_RLE_ZERO_CODE
dfe0: 5f 53 49 5a 45 28 29 3b 0a 20 20 20 20 20 20 69  _SIZE();.      i
dff0: 66 20 28 63 6f 64 65 5f 73 69 7a 65 20 21 3d 20  f (code_size != 
e000: 70 72 65 76 5f 63 6f 64 65 5f 73 69 7a 65 29 0a  prev_code_size).
e010: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
e020: 54 44 45 46 4c 5f 52 4c 45 5f 50 52 45 56 5f 43  TDEFL_RLE_PREV_C
e030: 4f 44 45 5f 53 49 5a 45 28 29 3b 0a 20 20 20 20  ODE_SIZE();.    
e040: 20 20 20 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f      d->m_huff_co
e050: 75 6e 74 5b 32 5d 5b 63 6f 64 65 5f 73 69 7a 65  unt[2][code_size
e060: 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 31 36 29 28  ] = (mz_uint16)(
e070: 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b  d->m_huff_count[
e080: 32 5d 5b 63 6f 64 65 5f 73 69 7a 65 5d 20 2b 20  2][code_size] + 
e090: 31 29 3b 20 70 61 63 6b 65 64 5f 63 6f 64 65 5f  1); packed_code_
e0a0: 73 69 7a 65 73 5b 6e 75 6d 5f 70 61 63 6b 65 64  sizes[num_packed
e0b0: 5f 63 6f 64 65 5f 73 69 7a 65 73 2b 2b 5d 20 3d  _code_sizes++] =
e0c0: 20 63 6f 64 65 5f 73 69 7a 65 3b 0a 20 20 20 20   code_size;.    
e0d0: 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 20 69    }.      else i
e0e0: 66 20 28 2b 2b 72 6c 65 5f 72 65 70 65 61 74 5f  f (++rle_repeat_
e0f0: 63 6f 75 6e 74 20 3d 3d 20 36 29 0a 20 20 20 20  count == 6).    
e100: 20 20 7b 0a 20 20 20 20 20 20 20 20 54 44 45 46    {.        TDEF
e110: 4c 5f 52 4c 45 5f 50 52 45 56 5f 43 4f 44 45 5f  L_RLE_PREV_CODE_
e120: 53 49 5a 45 28 29 3b 0a 20 20 20 20 20 20 7d 0a  SIZE();.      }.
e130: 20 20 20 20 7d 0a 20 20 20 20 70 72 65 76 5f 63      }.    prev_c
e140: 6f 64 65 5f 73 69 7a 65 20 3d 20 63 6f 64 65 5f  ode_size = code_
e150: 73 69 7a 65 3b 0a 20 20 7d 0a 20 20 69 66 20 28  size;.  }.  if (
e160: 72 6c 65 5f 72 65 70 65 61 74 5f 63 6f 75 6e 74  rle_repeat_count
e170: 29 20 7b 20 54 44 45 46 4c 5f 52 4c 45 5f 50 52  ) { TDEFL_RLE_PR
e180: 45 56 5f 43 4f 44 45 5f 53 49 5a 45 28 29 3b 20  EV_CODE_SIZE(); 
e190: 7d 20 65 6c 73 65 20 7b 20 54 44 45 46 4c 5f 52  } else { TDEFL_R
e1a0: 4c 45 5f 5a 45 52 4f 5f 43 4f 44 45 5f 53 49 5a  LE_ZERO_CODE_SIZ
e1b0: 45 28 29 3b 20 7d 0a 0a 20 20 74 64 65 66 6c 5f  E(); }..  tdefl_
e1c0: 6f 70 74 69 6d 69 7a 65 5f 68 75 66 66 6d 61 6e  optimize_huffman
e1d0: 5f 74 61 62 6c 65 28 64 2c 20 32 2c 20 54 44 45  _table(d, 2, TDE
e1e0: 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53 59 4d 42  FL_MAX_HUFF_SYMB
e1f0: 4f 4c 53 5f 32 2c 20 37 2c 20 4d 5a 5f 46 41 4c  OLS_2, 7, MZ_FAL
e200: 53 45 29 3b 0a 0a 20 20 54 44 45 46 4c 5f 50 55  SE);..  TDEFL_PU
e210: 54 5f 42 49 54 53 28 32 2c 20 32 29 3b 0a 0a 20  T_BITS(2, 2);.. 
e220: 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28   TDEFL_PUT_BITS(
e230: 6e 75 6d 5f 6c 69 74 5f 63 6f 64 65 73 20 2d 20  num_lit_codes - 
e240: 32 35 37 2c 20 35 29 3b 0a 20 20 54 44 45 46 4c  257, 5);.  TDEFL
e250: 5f 50 55 54 5f 42 49 54 53 28 6e 75 6d 5f 64 69  _PUT_BITS(num_di
e260: 73 74 5f 63 6f 64 65 73 20 2d 20 31 2c 20 35 29  st_codes - 1, 5)
e270: 3b 0a 0a 20 20 66 6f 72 20 28 6e 75 6d 5f 62 69  ;..  for (num_bi
e280: 74 5f 6c 65 6e 67 74 68 73 20 3d 20 31 38 3b 20  t_lengths = 18; 
e290: 6e 75 6d 5f 62 69 74 5f 6c 65 6e 67 74 68 73 20  num_bit_lengths 
e2a0: 3e 3d 20 30 3b 20 6e 75 6d 5f 62 69 74 5f 6c 65  >= 0; num_bit_le
e2b0: 6e 67 74 68 73 2d 2d 29 20 69 66 20 28 64 2d 3e  ngths--) if (d->
e2c0: 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65  m_huff_code_size
e2d0: 73 5b 32 5d 5b 73 5f 74 64 65 66 6c 5f 70 61 63  s[2][s_tdefl_pac
e2e0: 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 5f 73 79  ked_code_size_sy
e2f0: 6d 73 5f 73 77 69 7a 7a 6c 65 5b 6e 75 6d 5f 62  ms_swizzle[num_b
e300: 69 74 5f 6c 65 6e 67 74 68 73 5d 5d 29 20 62 72  it_lengths]]) br
e310: 65 61 6b 3b 0a 20 20 6e 75 6d 5f 62 69 74 5f 6c  eak;.  num_bit_l
e320: 65 6e 67 74 68 73 20 3d 20 4d 5a 5f 4d 41 58 28  engths = MZ_MAX(
e330: 34 2c 20 28 6e 75 6d 5f 62 69 74 5f 6c 65 6e 67  4, (num_bit_leng
e340: 74 68 73 20 2b 20 31 29 29 3b 20 54 44 45 46 4c  ths + 1)); TDEFL
e350: 5f 50 55 54 5f 42 49 54 53 28 6e 75 6d 5f 62 69  _PUT_BITS(num_bi
e360: 74 5f 6c 65 6e 67 74 68 73 20 2d 20 34 2c 20 34  t_lengths - 4, 4
e370: 29 3b 0a 20 20 66 6f 72 20 28 69 20 3d 20 30 3b  );.  for (i = 0;
e380: 20 28 69 6e 74 29 69 20 3c 20 6e 75 6d 5f 62 69   (int)i < num_bi
e390: 74 5f 6c 65 6e 67 74 68 73 3b 20 69 2b 2b 29 20  t_lengths; i++) 
e3a0: 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 64  TDEFL_PUT_BITS(d
e3b0: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69  ->m_huff_code_si
e3c0: 7a 65 73 5b 32 5d 5b 73 5f 74 64 65 66 6c 5f 70  zes[2][s_tdefl_p
e3d0: 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 5f  acked_code_size_
e3e0: 73 79 6d 73 5f 73 77 69 7a 7a 6c 65 5b 69 5d 5d  syms_swizzle[i]]
e3f0: 2c 20 33 29 3b 0a 0a 20 20 66 6f 72 20 28 70 61  , 3);..  for (pa
e400: 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5f  cked_code_sizes_
e410: 69 6e 64 65 78 20 3d 20 30 3b 20 70 61 63 6b 65  index = 0; packe
e420: 64 5f 63 6f 64 65 5f 73 69 7a 65 73 5f 69 6e 64  d_code_sizes_ind
e430: 65 78 20 3c 20 6e 75 6d 5f 70 61 63 6b 65 64 5f  ex < num_packed_
e440: 63 6f 64 65 5f 73 69 7a 65 73 3b 20 29 0a 20 20  code_sizes; ).  
e450: 7b 0a 20 20 20 20 6d 7a 5f 75 69 6e 74 20 63 6f  {.    mz_uint co
e460: 64 65 20 3d 20 70 61 63 6b 65 64 5f 63 6f 64 65  de = packed_code
e470: 5f 73 69 7a 65 73 5b 70 61 63 6b 65 64 5f 63 6f  _sizes[packed_co
e480: 64 65 5f 73 69 7a 65 73 5f 69 6e 64 65 78 2b 2b  de_sizes_index++
e490: 5d 3b 20 4d 5a 5f 41 53 53 45 52 54 28 63 6f 64  ]; MZ_ASSERT(cod
e4a0: 65 20 3c 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55  e < TDEFL_MAX_HU
e4b0: 46 46 5f 53 59 4d 42 4f 4c 53 5f 32 29 3b 0a 20  FF_SYMBOLS_2);. 
e4c0: 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54     TDEFL_PUT_BIT
e4d0: 53 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  S(d->m_huff_code
e4e0: 73 5b 32 5d 5b 63 6f 64 65 5d 2c 20 64 2d 3e 6d  s[2][code], d->m
e4f0: 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65 73  _huff_code_sizes
e500: 5b 32 5d 5b 63 6f 64 65 5d 29 3b 0a 20 20 20 20  [2][code]);.    
e510: 69 66 20 28 63 6f 64 65 20 3e 3d 20 31 36 29 20  if (code >= 16) 
e520: 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 70  TDEFL_PUT_BITS(p
e530: 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a 65 73  acked_code_sizes
e540: 5b 70 61 63 6b 65 64 5f 63 6f 64 65 5f 73 69 7a  [packed_code_siz
e550: 65 73 5f 69 6e 64 65 78 2b 2b 5d 2c 20 22 5c 30  es_index++], "\0
e560: 32 5c 30 33 5c 30 37 22 5b 63 6f 64 65 20 2d 20  2\03\07"[code - 
e570: 31 36 5d 29 3b 0a 20 20 7d 0a 7d 0a 0a 73 74 61  16]);.  }.}..sta
e580: 74 69 63 20 76 6f 69 64 20 74 64 65 66 6c 5f 73  tic void tdefl_s
e590: 74 61 72 74 5f 73 74 61 74 69 63 5f 62 6c 6f 63  tart_static_bloc
e5a0: 6b 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73  k(tdefl_compress
e5b0: 6f 72 20 2a 64 29 0a 7b 0a 20 20 6d 7a 5f 75 69  or *d).{.  mz_ui
e5c0: 6e 74 20 69 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38  nt i;.  mz_uint8
e5d0: 20 2a 70 20 3d 20 26 64 2d 3e 6d 5f 68 75 66 66   *p = &d->m_huff
e5e0: 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 30 5d 5b 30  _code_sizes[0][0
e5f0: 5d 3b 0a 0a 20 20 66 6f 72 20 28 69 20 3d 20 30  ];..  for (i = 0
e600: 3b 20 69 20 3c 3d 20 31 34 33 3b 20 2b 2b 69 29  ; i <= 143; ++i)
e610: 20 2a 70 2b 2b 20 3d 20 38 3b 0a 20 20 66 6f 72   *p++ = 8;.  for
e620: 20 28 20 3b 20 69 20 3c 3d 20 32 35 35 3b 20 2b   ( ; i <= 255; +
e630: 2b 69 29 20 2a 70 2b 2b 20 3d 20 39 3b 0a 20 20  +i) *p++ = 9;.  
e640: 66 6f 72 20 28 20 3b 20 69 20 3c 3d 20 32 37 39  for ( ; i <= 279
e650: 3b 20 2b 2b 69 29 20 2a 70 2b 2b 20 3d 20 37 3b  ; ++i) *p++ = 7;
e660: 0a 20 20 66 6f 72 20 28 20 3b 20 69 20 3c 3d 20  .  for ( ; i <= 
e670: 32 38 37 3b 20 2b 2b 69 29 20 2a 70 2b 2b 20 3d  287; ++i) *p++ =
e680: 20 38 3b 0a 0a 20 20 6d 65 6d 73 65 74 28 64 2d   8;..  memset(d-
e690: 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a  >m_huff_code_siz
e6a0: 65 73 5b 31 5d 2c 20 35 2c 20 33 32 29 3b 0a 0a  es[1], 5, 32);..
e6b0: 20 20 74 64 65 66 6c 5f 6f 70 74 69 6d 69 7a 65    tdefl_optimize
e6c0: 5f 68 75 66 66 6d 61 6e 5f 74 61 62 6c 65 28 64  _huffman_table(d
e6d0: 2c 20 30 2c 20 32 38 38 2c 20 31 35 2c 20 4d 5a  , 0, 288, 15, MZ
e6e0: 5f 54 52 55 45 29 3b 0a 20 20 74 64 65 66 6c 5f  _TRUE);.  tdefl_
e6f0: 6f 70 74 69 6d 69 7a 65 5f 68 75 66 66 6d 61 6e  optimize_huffman
e700: 5f 74 61 62 6c 65 28 64 2c 20 31 2c 20 33 32 2c  _table(d, 1, 32,
e710: 20 31 35 2c 20 4d 5a 5f 54 52 55 45 29 3b 0a 0a   15, MZ_TRUE);..
e720: 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53    TDEFL_PUT_BITS
e730: 28 31 2c 20 32 29 3b 0a 7d 0a 0a 73 74 61 74 69  (1, 2);.}..stati
e740: 63 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 20  c const mz_uint 
e750: 6d 7a 5f 62 69 74 6d 61 73 6b 73 5b 31 37 5d 20  mz_bitmasks[17] 
e760: 3d 20 7b 20 30 78 30 30 30 30 2c 20 30 78 30 30  = { 0x0000, 0x00
e770: 30 31 2c 20 30 78 30 30 30 33 2c 20 30 78 30 30  01, 0x0003, 0x00
e780: 30 37 2c 20 30 78 30 30 30 46 2c 20 30 78 30 30  07, 0x000F, 0x00
e790: 31 46 2c 20 30 78 30 30 33 46 2c 20 30 78 30 30  1F, 0x003F, 0x00
e7a0: 37 46 2c 20 30 78 30 30 46 46 2c 20 30 78 30 31  7F, 0x00FF, 0x01
e7b0: 46 46 2c 20 30 78 30 33 46 46 2c 20 30 78 30 37  FF, 0x03FF, 0x07
e7c0: 46 46 2c 20 30 78 30 46 46 46 2c 20 30 78 31 46  FF, 0x0FFF, 0x1F
e7d0: 46 46 2c 20 30 78 33 46 46 46 2c 20 30 78 37 46  FF, 0x3FFF, 0x7F
e7e0: 46 46 2c 20 30 78 46 46 46 46 20 7d 3b 0a 0a 23  FF, 0xFFFF };..#
e7f0: 69 66 20 4d 49 4e 49 5a 5f 55 53 45 5f 55 4e 41  if MINIZ_USE_UNA
e800: 4c 49 47 4e 45 44 5f 4c 4f 41 44 53 5f 41 4e 44  LIGNED_LOADS_AND
e810: 5f 53 54 4f 52 45 53 20 26 26 20 4d 49 4e 49 5a  _STORES && MINIZ
e820: 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 20 26  _LITTLE_ENDIAN &
e830: 26 20 4d 49 4e 49 5a 5f 48 41 53 5f 36 34 42 49  & MINIZ_HAS_64BI
e840: 54 5f 52 45 47 49 53 54 45 52 53 0a 73 74 61 74  T_REGISTERS.stat
e850: 69 63 20 6d 7a 5f 62 6f 6f 6c 20 74 64 65 66 6c  ic mz_bool tdefl
e860: 5f 63 6f 6d 70 72 65 73 73 5f 6c 7a 5f 63 6f 64  _compress_lz_cod
e870: 65 73 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  es(tdefl_compres
e880: 73 6f 72 20 2a 64 29 0a 7b 0a 20 20 6d 7a 5f 75  sor *d).{.  mz_u
e890: 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 6d 7a 5f  int flags;.  mz_
e8a0: 75 69 6e 74 38 20 2a 70 4c 5a 5f 63 6f 64 65 73  uint8 *pLZ_codes
e8b0: 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a 70 4f  ;.  mz_uint8 *pO
e8c0: 75 74 70 75 74 5f 62 75 66 20 3d 20 64 2d 3e 6d  utput_buf = d->m
e8d0: 5f 70 4f 75 74 70 75 74 5f 62 75 66 3b 0a 20 20  _pOutput_buf;.  
e8e0: 6d 7a 5f 75 69 6e 74 38 20 2a 70 4c 5a 5f 63 6f  mz_uint8 *pLZ_co
e8f0: 64 65 5f 62 75 66 5f 65 6e 64 20 3d 20 64 2d 3e  de_buf_end = d->
e900: 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 3b 0a  m_pLZ_code_buf;.
e910: 20 20 6d 7a 5f 75 69 6e 74 36 34 20 62 69 74 5f    mz_uint64 bit_
e920: 62 75 66 66 65 72 20 3d 20 64 2d 3e 6d 5f 62 69  buffer = d->m_bi
e930: 74 5f 62 75 66 66 65 72 3b 0a 20 20 6d 7a 5f 75  t_buffer;.  mz_u
e940: 69 6e 74 20 62 69 74 73 5f 69 6e 20 3d 20 64 2d  int bits_in = d-
e950: 3e 6d 5f 62 69 74 73 5f 69 6e 3b 0a 0a 23 64 65  >m_bits_in;..#de
e960: 66 69 6e 65 20 54 44 45 46 4c 5f 50 55 54 5f 42  fine TDEFL_PUT_B
e970: 49 54 53 5f 46 41 53 54 28 62 2c 20 6c 29 20 7b  ITS_FAST(b, l) {
e980: 20 62 69 74 5f 62 75 66 66 65 72 20 7c 3d 20 28   bit_buffer |= (
e990: 28 28 6d 7a 5f 75 69 6e 74 36 34 29 28 62 29 29  ((mz_uint64)(b))
e9a0: 20 3c 3c 20 62 69 74 73 5f 69 6e 29 3b 20 62 69   << bits_in); bi
e9b0: 74 73 5f 69 6e 20 2b 3d 20 28 6c 29 3b 20 7d 0a  ts_in += (l); }.
e9c0: 0a 20 20 66 6c 61 67 73 20 3d 20 31 3b 0a 20 20  .  flags = 1;.  
e9d0: 66 6f 72 20 28 70 4c 5a 5f 63 6f 64 65 73 20 3d  for (pLZ_codes =
e9e0: 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75   d->m_lz_code_bu
e9f0: 66 3b 20 70 4c 5a 5f 63 6f 64 65 73 20 3c 20 70  f; pLZ_codes < p
ea00: 4c 5a 5f 63 6f 64 65 5f 62 75 66 5f 65 6e 64 3b  LZ_code_buf_end;
ea10: 20 66 6c 61 67 73 20 3e 3e 3d 20 31 29 0a 20 20   flags >>= 1).  
ea20: 7b 0a 20 20 20 20 69 66 20 28 66 6c 61 67 73 20  {.    if (flags 
ea30: 3d 3d 20 31 29 0a 20 20 20 20 20 20 66 6c 61 67  == 1).      flag
ea40: 73 20 3d 20 2a 70 4c 5a 5f 63 6f 64 65 73 2b 2b  s = *pLZ_codes++
ea50: 20 7c 20 30 78 31 30 30 3b 0a 0a 20 20 20 20 69   | 0x100;..    i
ea60: 66 20 28 66 6c 61 67 73 20 26 20 31 29 0a 20 20  f (flags & 1).  
ea70: 20 20 7b 0a 20 20 20 20 20 20 6d 7a 5f 75 69 6e    {.      mz_uin
ea80: 74 20 73 30 2c 20 73 31 2c 20 6e 30 2c 20 6e 31  t s0, s1, n0, n1
ea90: 2c 20 73 79 6d 2c 20 6e 75 6d 5f 65 78 74 72 61  , sym, num_extra
eaa0: 5f 62 69 74 73 3b 0a 20 20 20 20 20 20 6d 7a 5f  _bits;.      mz_
eab0: 75 69 6e 74 20 6d 61 74 63 68 5f 6c 65 6e 20 3d  uint match_len =
eac0: 20 70 4c 5a 5f 63 6f 64 65 73 5b 30 5d 2c 20 6d   pLZ_codes[0], m
ead0: 61 74 63 68 5f 64 69 73 74 20 3d 20 2a 28 63 6f  atch_dist = *(co
eae0: 6e 73 74 20 6d 7a 5f 75 69 6e 74 31 36 20 2a 29  nst mz_uint16 *)
eaf0: 28 70 4c 5a 5f 63 6f 64 65 73 20 2b 20 31 29 3b  (pLZ_codes + 1);
eb00: 20 70 4c 5a 5f 63 6f 64 65 73 20 2b 3d 20 33 3b   pLZ_codes += 3;
eb10: 0a 0a 20 20 20 20 20 20 4d 5a 5f 41 53 53 45 52  ..      MZ_ASSER
eb20: 54 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  T(d->m_huff_code
eb30: 5f 73 69 7a 65 73 5b 30 5d 5b 73 5f 74 64 65 66  _sizes[0][s_tdef
eb40: 6c 5f 6c 65 6e 5f 73 79 6d 5b 6d 61 74 63 68 5f  l_len_sym[match_
eb50: 6c 65 6e 5d 5d 29 3b 0a 20 20 20 20 20 20 54 44  len]]);.      TD
eb60: 45 46 4c 5f 50 55 54 5f 42 49 54 53 5f 46 41 53  EFL_PUT_BITS_FAS
eb70: 54 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  T(d->m_huff_code
eb80: 73 5b 30 5d 5b 73 5f 74 64 65 66 6c 5f 6c 65 6e  s[0][s_tdefl_len
eb90: 5f 73 79 6d 5b 6d 61 74 63 68 5f 6c 65 6e 5d 5d  _sym[match_len]]
eba0: 2c 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  , d->m_huff_code
ebb0: 5f 73 69 7a 65 73 5b 30 5d 5b 73 5f 74 64 65 66  _sizes[0][s_tdef
ebc0: 6c 5f 6c 65 6e 5f 73 79 6d 5b 6d 61 74 63 68 5f  l_len_sym[match_
ebd0: 6c 65 6e 5d 5d 29 3b 0a 20 20 20 20 20 20 54 44  len]]);.      TD
ebe0: 45 46 4c 5f 50 55 54 5f 42 49 54 53 5f 46 41 53  EFL_PUT_BITS_FAS
ebf0: 54 28 6d 61 74 63 68 5f 6c 65 6e 20 26 20 6d 7a  T(match_len & mz
ec00: 5f 62 69 74 6d 61 73 6b 73 5b 73 5f 74 64 65 66  _bitmasks[s_tdef
ec10: 6c 5f 6c 65 6e 5f 65 78 74 72 61 5b 6d 61 74 63  l_len_extra[matc
ec20: 68 5f 6c 65 6e 5d 5d 2c 20 73 5f 74 64 65 66 6c  h_len]], s_tdefl
ec30: 5f 6c 65 6e 5f 65 78 74 72 61 5b 6d 61 74 63 68  _len_extra[match
ec40: 5f 6c 65 6e 5d 29 3b 0a 0a 20 20 20 20 20 20 2f  _len]);..      /
ec50: 2f 20 54 68 69 73 20 73 65 71 75 65 6e 63 65 20  / This sequence 
ec60: 63 6f 61 78 65 73 20 4d 53 56 43 20 69 6e 74 6f  coaxes MSVC into
ec70: 20 75 73 69 6e 67 20 63 6d 6f 76 27 73 20 76 73   using cmov's vs
ec80: 2e 20 6a 6d 70 27 73 2e 0a 20 20 20 20 20 20 73  . jmp's..      s
ec90: 30 20 3d 20 73 5f 74 64 65 66 6c 5f 73 6d 61 6c  0 = s_tdefl_smal
eca0: 6c 5f 64 69 73 74 5f 73 79 6d 5b 6d 61 74 63 68  l_dist_sym[match
ecb0: 5f 64 69 73 74 20 26 20 35 31 31 5d 3b 0a 20 20  _dist & 511];.  
ecc0: 20 20 20 20 6e 30 20 3d 20 73 5f 74 64 65 66 6c      n0 = s_tdefl
ecd0: 5f 73 6d 61 6c 6c 5f 64 69 73 74 5f 65 78 74 72  _small_dist_extr
ece0: 61 5b 6d 61 74 63 68 5f 64 69 73 74 20 26 20 35  a[match_dist & 5
ecf0: 31 31 5d 3b 0a 20 20 20 20 20 20 73 31 20 3d 20  11];.      s1 = 
ed00: 73 5f 74 64 65 66 6c 5f 6c 61 72 67 65 5f 64 69  s_tdefl_large_di
ed10: 73 74 5f 73 79 6d 5b 6d 61 74 63 68 5f 64 69 73  st_sym[match_dis
ed20: 74 20 3e 3e 20 38 5d 3b 0a 20 20 20 20 20 20 6e  t >> 8];.      n
ed30: 31 20 3d 20 73 5f 74 64 65 66 6c 5f 6c 61 72 67  1 = s_tdefl_larg
ed40: 65 5f 64 69 73 74 5f 65 78 74 72 61 5b 6d 61 74  e_dist_extra[mat
ed50: 63 68 5f 64 69 73 74 20 3e 3e 20 38 5d 3b 0a 20  ch_dist >> 8];. 
ed60: 20 20 20 20 20 73 79 6d 20 3d 20 28 6d 61 74 63       sym = (matc
ed70: 68 5f 64 69 73 74 20 3c 20 35 31 32 29 20 3f 20  h_dist < 512) ? 
ed80: 73 30 20 3a 20 73 31 3b 0a 20 20 20 20 20 20 6e  s0 : s1;.      n
ed90: 75 6d 5f 65 78 74 72 61 5f 62 69 74 73 20 3d 20  um_extra_bits = 
eda0: 28 6d 61 74 63 68 5f 64 69 73 74 20 3c 20 35 31  (match_dist < 51
edb0: 32 29 20 3f 20 6e 30 20 3a 20 6e 31 3b 0a 0a 20  2) ? n0 : n1;.. 
edc0: 20 20 20 20 20 4d 5a 5f 41 53 53 45 52 54 28 64       MZ_ASSERT(d
edd0: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69  ->m_huff_code_si
ede0: 7a 65 73 5b 31 5d 5b 73 79 6d 5d 29 3b 0a 20 20  zes[1][sym]);.  
edf0: 20 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49      TDEFL_PUT_BI
ee00: 54 53 5f 46 41 53 54 28 64 2d 3e 6d 5f 68 75 66  TS_FAST(d->m_huf
ee10: 66 5f 63 6f 64 65 73 5b 31 5d 5b 73 79 6d 5d 2c  f_codes[1][sym],
ee20: 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f   d->m_huff_code_
ee30: 73 69 7a 65 73 5b 31 5d 5b 73 79 6d 5d 29 3b 0a  sizes[1][sym]);.
ee40: 20 20 20 20 20 20 54 44 45 46 4c 5f 50 55 54 5f        TDEFL_PUT_
ee50: 42 49 54 53 5f 46 41 53 54 28 6d 61 74 63 68 5f  BITS_FAST(match_
ee60: 64 69 73 74 20 26 20 6d 7a 5f 62 69 74 6d 61 73  dist & mz_bitmas
ee70: 6b 73 5b 6e 75 6d 5f 65 78 74 72 61 5f 62 69 74  ks[num_extra_bit
ee80: 73 5d 2c 20 6e 75 6d 5f 65 78 74 72 61 5f 62 69  s], num_extra_bi
ee90: 74 73 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65  ts);.    }.    e
eea0: 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  lse.    {.      
eeb0: 6d 7a 5f 75 69 6e 74 20 6c 69 74 20 3d 20 2a 70  mz_uint lit = *p
eec0: 4c 5a 5f 63 6f 64 65 73 2b 2b 3b 0a 20 20 20 20  LZ_codes++;.    
eed0: 20 20 4d 5a 5f 41 53 53 45 52 54 28 64 2d 3e 6d    MZ_ASSERT(d->m
eee0: 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65 73  _huff_code_sizes
eef0: 5b 30 5d 5b 6c 69 74 5d 29 3b 0a 20 20 20 20 20  [0][lit]);.     
ef00: 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 5f   TDEFL_PUT_BITS_
ef10: 46 41 53 54 28 64 2d 3e 6d 5f 68 75 66 66 5f 63  FAST(d->m_huff_c
ef20: 6f 64 65 73 5b 30 5d 5b 6c 69 74 5d 2c 20 64 2d  odes[0][lit], d-
ef30: 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a  >m_huff_code_siz
ef40: 65 73 5b 30 5d 5b 6c 69 74 5d 29 3b 0a 0a 20 20  es[0][lit]);..  
ef50: 20 20 20 20 69 66 20 28 28 28 66 6c 61 67 73 20      if (((flags 
ef60: 26 20 32 29 20 3d 3d 20 30 29 20 26 26 20 28 70  & 2) == 0) && (p
ef70: 4c 5a 5f 63 6f 64 65 73 20 3c 20 70 4c 5a 5f 63  LZ_codes < pLZ_c
ef80: 6f 64 65 5f 62 75 66 5f 65 6e 64 29 29 0a 20 20  ode_buf_end)).  
ef90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 66 6c      {.        fl
efa0: 61 67 73 20 3e 3e 3d 20 31 3b 0a 20 20 20 20 20  ags >>= 1;.     
efb0: 20 20 20 6c 69 74 20 3d 20 2a 70 4c 5a 5f 63 6f     lit = *pLZ_co
efc0: 64 65 73 2b 2b 3b 0a 20 20 20 20 20 20 20 20 4d  des++;.        M
efd0: 5a 5f 41 53 53 45 52 54 28 64 2d 3e 6d 5f 68 75  Z_ASSERT(d->m_hu
efe0: 66 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 30 5d  ff_code_sizes[0]
eff0: 5b 6c 69 74 5d 29 3b 0a 20 20 20 20 20 20 20 20  [lit]);.        
f000: 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 5f 46  TDEFL_PUT_BITS_F
f010: 41 53 54 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f  AST(d->m_huff_co
f020: 64 65 73 5b 30 5d 5b 6c 69 74 5d 2c 20 64 2d 3e  des[0][lit], d->
f030: 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65  m_huff_code_size
f040: 73 5b 30 5d 5b 6c 69 74 5d 29 3b 0a 0a 20 20 20  s[0][lit]);..   
f050: 20 20 20 20 20 69 66 20 28 28 28 66 6c 61 67 73       if (((flags
f060: 20 26 20 32 29 20 3d 3d 20 30 29 20 26 26 20 28   & 2) == 0) && (
f070: 70 4c 5a 5f 63 6f 64 65 73 20 3c 20 70 4c 5a 5f  pLZ_codes < pLZ_
f080: 63 6f 64 65 5f 62 75 66 5f 65 6e 64 29 29 0a 20  code_buf_end)). 
f090: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
f0a0: 20 20 20 66 6c 61 67 73 20 3e 3e 3d 20 31 3b 0a     flags >>= 1;.
f0b0: 20 20 20 20 20 20 20 20 20 20 6c 69 74 20 3d 20            lit = 
f0c0: 2a 70 4c 5a 5f 63 6f 64 65 73 2b 2b 3b 0a 20 20  *pLZ_codes++;.  
f0d0: 20 20 20 20 20 20 20 20 4d 5a 5f 41 53 53 45 52          MZ_ASSER
f0e0: 54 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65  T(d->m_huff_code
f0f0: 5f 73 69 7a 65 73 5b 30 5d 5b 6c 69 74 5d 29 3b  _sizes[0][lit]);
f100: 0a 20 20 20 20 20 20 20 20 20 20 54 44 45 46 4c  .          TDEFL
f110: 5f 50 55 54 5f 42 49 54 53 5f 46 41 53 54 28 64  _PUT_BITS_FAST(d
f120: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 73 5b 30  ->m_huff_codes[0
f130: 5d 5b 6c 69 74 5d 2c 20 64 2d 3e 6d 5f 68 75 66  ][lit], d->m_huf
f140: 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 30 5d 5b  f_code_sizes[0][
f150: 6c 69 74 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d  lit]);.        }
f160: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
f170: 20 20 20 20 69 66 20 28 70 4f 75 74 70 75 74 5f      if (pOutput_
f180: 62 75 66 20 3e 3d 20 64 2d 3e 6d 5f 70 4f 75 74  buf >= d->m_pOut
f190: 70 75 74 5f 62 75 66 5f 65 6e 64 29 0a 20 20 20  put_buf_end).   
f1a0: 20 20 20 72 65 74 75 72 6e 20 4d 5a 5f 46 41 4c     return MZ_FAL
f1b0: 53 45 3b 0a 0a 20 20 20 20 2a 28 6d 7a 5f 75 69  SE;..    *(mz_ui
f1c0: 6e 74 36 34 2a 29 70 4f 75 74 70 75 74 5f 62 75  nt64*)pOutput_bu
f1d0: 66 20 3d 20 62 69 74 5f 62 75 66 66 65 72 3b 0a  f = bit_buffer;.
f1e0: 20 20 20 20 70 4f 75 74 70 75 74 5f 62 75 66 20      pOutput_buf 
f1f0: 2b 3d 20 28 62 69 74 73 5f 69 6e 20 3e 3e 20 33  += (bits_in >> 3
f200: 29 3b 0a 20 20 20 20 62 69 74 5f 62 75 66 66 65  );.    bit_buffe
f210: 72 20 3e 3e 3d 20 28 62 69 74 73 5f 69 6e 20 26  r >>= (bits_in &
f220: 20 7e 37 29 3b 0a 20 20 20 20 62 69 74 73 5f 69   ~7);.    bits_i
f230: 6e 20 26 3d 20 37 3b 0a 20 20 7d 0a 0a 23 75 6e  n &= 7;.  }..#un
f240: 64 65 66 20 54 44 45 46 4c 5f 50 55 54 5f 42 49  def TDEFL_PUT_BI
f250: 54 53 5f 46 41 53 54 0a 0a 20 20 64 2d 3e 6d 5f  TS_FAST..  d->m_
f260: 70 4f 75 74 70 75 74 5f 62 75 66 20 3d 20 70 4f  pOutput_buf = pO
f270: 75 74 70 75 74 5f 62 75 66 3b 0a 20 20 64 2d 3e  utput_buf;.  d->
f280: 6d 5f 62 69 74 73 5f 69 6e 20 3d 20 30 3b 0a 20  m_bits_in = 0;. 
f290: 20 64 2d 3e 6d 5f 62 69 74 5f 62 75 66 66 65 72   d->m_bit_buffer
f2a0: 20 3d 20 30 3b 0a 0a 20 20 77 68 69 6c 65 20 28   = 0;..  while (
f2b0: 62 69 74 73 5f 69 6e 29 0a 20 20 7b 0a 20 20 20  bits_in).  {.   
f2c0: 20 6d 7a 5f 75 69 6e 74 33 32 20 6e 20 3d 20 4d   mz_uint32 n = M
f2d0: 5a 5f 4d 49 4e 28 62 69 74 73 5f 69 6e 2c 20 31  Z_MIN(bits_in, 1
f2e0: 36 29 3b 0a 20 20 20 20 54 44 45 46 4c 5f 50 55  6);.    TDEFL_PU
f2f0: 54 5f 42 49 54 53 28 28 6d 7a 5f 75 69 6e 74 29  T_BITS((mz_uint)
f300: 62 69 74 5f 62 75 66 66 65 72 20 26 20 6d 7a 5f  bit_buffer & mz_
f310: 62 69 74 6d 61 73 6b 73 5b 6e 5d 2c 20 6e 29 3b  bitmasks[n], n);
f320: 0a 20 20 20 20 62 69 74 5f 62 75 66 66 65 72 20  .    bit_buffer 
f330: 3e 3e 3d 20 6e 3b 0a 20 20 20 20 62 69 74 73 5f  >>= n;.    bits_
f340: 69 6e 20 2d 3d 20 6e 3b 0a 20 20 7d 0a 0a 20 20  in -= n;.  }..  
f350: 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 64  TDEFL_PUT_BITS(d
f360: 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 73 5b 30  ->m_huff_codes[0
f370: 5d 5b 32 35 36 5d 2c 20 64 2d 3e 6d 5f 68 75 66  ][256], d->m_huf
f380: 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 30 5d 5b  f_code_sizes[0][
f390: 32 35 36 5d 29 3b 0a 0a 20 20 72 65 74 75 72 6e  256]);..  return
f3a0: 20 28 64 2d 3e 6d 5f 70 4f 75 74 70 75 74 5f 62   (d->m_pOutput_b
f3b0: 75 66 20 3c 20 64 2d 3e 6d 5f 70 4f 75 74 70 75  uf < d->m_pOutpu
f3c0: 74 5f 62 75 66 5f 65 6e 64 29 3b 0a 7d 0a 23 65  t_buf_end);.}.#e
f3d0: 6c 73 65 0a 73 74 61 74 69 63 20 6d 7a 5f 62 6f  lse.static mz_bo
f3e0: 6f 6c 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  ol tdefl_compres
f3f0: 73 5f 6c 7a 5f 63 6f 64 65 73 28 74 64 65 66 6c  s_lz_codes(tdefl
f400: 5f 63 6f 6d 70 72 65 73 73 6f 72 20 2a 64 29 0a  _compressor *d).
f410: 7b 0a 20 20 6d 7a 5f 75 69 6e 74 20 66 6c 61 67  {.  mz_uint flag
f420: 73 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  s;.  mz_uint8 *p
f430: 4c 5a 5f 63 6f 64 65 73 3b 0a 0a 20 20 66 6c 61  LZ_codes;..  fla
f440: 67 73 20 3d 20 31 3b 0a 20 20 66 6f 72 20 28 70  gs = 1;.  for (p
f450: 4c 5a 5f 63 6f 64 65 73 20 3d 20 64 2d 3e 6d 5f  LZ_codes = d->m_
f460: 6c 7a 5f 63 6f 64 65 5f 62 75 66 3b 20 70 4c 5a  lz_code_buf; pLZ
f470: 5f 63 6f 64 65 73 20 3c 20 64 2d 3e 6d 5f 70 4c  _codes < d->m_pL
f480: 5a 5f 63 6f 64 65 5f 62 75 66 3b 20 66 6c 61 67  Z_code_buf; flag
f490: 73 20 3e 3e 3d 20 31 29 0a 20 20 7b 0a 20 20 20  s >>= 1).  {.   
f4a0: 20 69 66 20 28 66 6c 61 67 73 20 3d 3d 20 31 29   if (flags == 1)
f4b0: 0a 20 20 20 20 20 20 66 6c 61 67 73 20 3d 20 2a  .      flags = *
f4c0: 70 4c 5a 5f 63 6f 64 65 73 2b 2b 20 7c 20 30 78  pLZ_codes++ | 0x
f4d0: 31 30 30 3b 0a 20 20 20 20 69 66 20 28 66 6c 61  100;.    if (fla
f4e0: 67 73 20 26 20 31 29 0a 20 20 20 20 7b 0a 20 20  gs & 1).    {.  
f4f0: 20 20 20 20 6d 7a 5f 75 69 6e 74 20 73 79 6d 2c      mz_uint sym,
f500: 20 6e 75 6d 5f 65 78 74 72 61 5f 62 69 74 73 3b   num_extra_bits;
f510: 0a 20 20 20 20 20 20 6d 7a 5f 75 69 6e 74 20 6d  .      mz_uint m
f520: 61 74 63 68 5f 6c 65 6e 20 3d 20 70 4c 5a 5f 63  atch_len = pLZ_c
f530: 6f 64 65 73 5b 30 5d 2c 20 6d 61 74 63 68 5f 64  odes[0], match_d
f540: 69 73 74 20 3d 20 28 70 4c 5a 5f 63 6f 64 65 73  ist = (pLZ_codes
f550: 5b 31 5d 20 7c 20 28 70 4c 5a 5f 63 6f 64 65 73  [1] | (pLZ_codes
f560: 5b 32 5d 20 3c 3c 20 38 29 29 3b 20 70 4c 5a 5f  [2] << 8)); pLZ_
f570: 63 6f 64 65 73 20 2b 3d 20 33 3b 0a 0a 20 20 20  codes += 3;..   
f580: 20 20 20 4d 5a 5f 41 53 53 45 52 54 28 64 2d 3e     MZ_ASSERT(d->
f590: 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65  m_huff_code_size
f5a0: 73 5b 30 5d 5b 73 5f 74 64 65 66 6c 5f 6c 65 6e  s[0][s_tdefl_len
f5b0: 5f 73 79 6d 5b 6d 61 74 63 68 5f 6c 65 6e 5d 5d  _sym[match_len]]
f5c0: 29 3b 0a 20 20 20 20 20 20 54 44 45 46 4c 5f 50  );.      TDEFL_P
f5d0: 55 54 5f 42 49 54 53 28 64 2d 3e 6d 5f 68 75 66  UT_BITS(d->m_huf
f5e0: 66 5f 63 6f 64 65 73 5b 30 5d 5b 73 5f 74 64 65  f_codes[0][s_tde
f5f0: 66 6c 5f 6c 65 6e 5f 73 79 6d 5b 6d 61 74 63 68  fl_len_sym[match
f600: 5f 6c 65 6e 5d 5d 2c 20 64 2d 3e 6d 5f 68 75 66  _len]], d->m_huf
f610: 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 30 5d 5b  f_code_sizes[0][
f620: 73 5f 74 64 65 66 6c 5f 6c 65 6e 5f 73 79 6d 5b  s_tdefl_len_sym[
f630: 6d 61 74 63 68 5f 6c 65 6e 5d 5d 29 3b 0a 20 20  match_len]]);.  
f640: 20 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49      TDEFL_PUT_BI
f650: 54 53 28 6d 61 74 63 68 5f 6c 65 6e 20 26 20 6d  TS(match_len & m
f660: 7a 5f 62 69 74 6d 61 73 6b 73 5b 73 5f 74 64 65  z_bitmasks[s_tde
f670: 66 6c 5f 6c 65 6e 5f 65 78 74 72 61 5b 6d 61 74  fl_len_extra[mat
f680: 63 68 5f 6c 65 6e 5d 5d 2c 20 73 5f 74 64 65 66  ch_len]], s_tdef
f690: 6c 5f 6c 65 6e 5f 65 78 74 72 61 5b 6d 61 74 63  l_len_extra[matc
f6a0: 68 5f 6c 65 6e 5d 29 3b 0a 0a 20 20 20 20 20 20  h_len]);..      
f6b0: 69 66 20 28 6d 61 74 63 68 5f 64 69 73 74 20 3c  if (match_dist <
f6c0: 20 35 31 32 29 0a 20 20 20 20 20 20 7b 0a 20 20   512).      {.  
f6d0: 20 20 20 20 20 20 73 79 6d 20 3d 20 73 5f 74 64        sym = s_td
f6e0: 65 66 6c 5f 73 6d 61 6c 6c 5f 64 69 73 74 5f 73  efl_small_dist_s
f6f0: 79 6d 5b 6d 61 74 63 68 5f 64 69 73 74 5d 3b 20  ym[match_dist]; 
f700: 6e 75 6d 5f 65 78 74 72 61 5f 62 69 74 73 20 3d  num_extra_bits =
f710: 20 73 5f 74 64 65 66 6c 5f 73 6d 61 6c 6c 5f 64   s_tdefl_small_d
f720: 69 73 74 5f 65 78 74 72 61 5b 6d 61 74 63 68 5f  ist_extra[match_
f730: 64 69 73 74 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  dist];.      }. 
f740: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
f750: 7b 0a 20 20 20 20 20 20 20 20 73 79 6d 20 3d 20  {.        sym = 
f760: 73 5f 74 64 65 66 6c 5f 6c 61 72 67 65 5f 64 69  s_tdefl_large_di
f770: 73 74 5f 73 79 6d 5b 6d 61 74 63 68 5f 64 69 73  st_sym[match_dis
f780: 74 20 3e 3e 20 38 5d 3b 20 6e 75 6d 5f 65 78 74  t >> 8]; num_ext
f790: 72 61 5f 62 69 74 73 20 3d 20 73 5f 74 64 65 66  ra_bits = s_tdef
f7a0: 6c 5f 6c 61 72 67 65 5f 64 69 73 74 5f 65 78 74  l_large_dist_ext
f7b0: 72 61 5b 6d 61 74 63 68 5f 64 69 73 74 20 3e 3e  ra[match_dist >>
f7c0: 20 38 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   8];.      }.   
f7d0: 20 20 20 4d 5a 5f 41 53 53 45 52 54 28 64 2d 3e     MZ_ASSERT(d->
f7e0: 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65  m_huff_code_size
f7f0: 73 5b 31 5d 5b 73 79 6d 5d 29 3b 0a 20 20 20 20  s[1][sym]);.    
f800: 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54 53    TDEFL_PUT_BITS
f810: 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 73  (d->m_huff_codes
f820: 5b 31 5d 5b 73 79 6d 5d 2c 20 64 2d 3e 6d 5f 68  [1][sym], d->m_h
f830: 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65 73 5b 31  uff_code_sizes[1
f840: 5d 5b 73 79 6d 5d 29 3b 0a 20 20 20 20 20 20 54  ][sym]);.      T
f850: 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 6d 61  DEFL_PUT_BITS(ma
f860: 74 63 68 5f 64 69 73 74 20 26 20 6d 7a 5f 62 69  tch_dist & mz_bi
f870: 74 6d 61 73 6b 73 5b 6e 75 6d 5f 65 78 74 72 61  tmasks[num_extra
f880: 5f 62 69 74 73 5d 2c 20 6e 75 6d 5f 65 78 74 72  _bits], num_extr
f890: 61 5f 62 69 74 73 29 3b 0a 20 20 20 20 7d 0a 20  a_bits);.    }. 
f8a0: 20 20 20 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20     else.    {.  
f8b0: 20 20 20 20 6d 7a 5f 75 69 6e 74 20 6c 69 74 20      mz_uint lit 
f8c0: 3d 20 2a 70 4c 5a 5f 63 6f 64 65 73 2b 2b 3b 0a  = *pLZ_codes++;.
f8d0: 20 20 20 20 20 20 4d 5a 5f 41 53 53 45 52 54 28        MZ_ASSERT(
f8e0: 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73  d->m_huff_code_s
f8f0: 69 7a 65 73 5b 30 5d 5b 6c 69 74 5d 29 3b 0a 20  izes[0][lit]);. 
f900: 20 20 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42       TDEFL_PUT_B
f910: 49 54 53 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f  ITS(d->m_huff_co
f920: 64 65 73 5b 30 5d 5b 6c 69 74 5d 2c 20 64 2d 3e  des[0][lit], d->
f930: 6d 5f 68 75 66 66 5f 63 6f 64 65 5f 73 69 7a 65  m_huff_code_size
f940: 73 5b 30 5d 5b 6c 69 74 5d 29 3b 0a 20 20 20 20  s[0][lit]);.    
f950: 7d 0a 20 20 7d 0a 0a 20 20 54 44 45 46 4c 5f 50  }.  }..  TDEFL_P
f960: 55 54 5f 42 49 54 53 28 64 2d 3e 6d 5f 68 75 66  UT_BITS(d->m_huf
f970: 66 5f 63 6f 64 65 73 5b 30 5d 5b 32 35 36 5d 2c  f_codes[0][256],
f980: 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 64 65 5f   d->m_huff_code_
f990: 73 69 7a 65 73 5b 30 5d 5b 32 35 36 5d 29 3b 0a  sizes[0][256]);.
f9a0: 0a 20 20 72 65 74 75 72 6e 20 28 64 2d 3e 6d 5f  .  return (d->m_
f9b0: 70 4f 75 74 70 75 74 5f 62 75 66 20 3c 20 64 2d  pOutput_buf < d-
f9c0: 3e 6d 5f 70 4f 75 74 70 75 74 5f 62 75 66 5f 65  >m_pOutput_buf_e
f9d0: 6e 64 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2f  nd);.}.#endif //
f9e0: 20 4d 49 4e 49 5a 5f 55 53 45 5f 55 4e 41 4c 49   MINIZ_USE_UNALI
f9f0: 47 4e 45 44 5f 4c 4f 41 44 53 5f 41 4e 44 5f 53  GNED_LOADS_AND_S
fa00: 54 4f 52 45 53 20 26 26 20 4d 49 4e 49 5a 5f 4c  TORES && MINIZ_L
fa10: 49 54 54 4c 45 5f 45 4e 44 49 41 4e 20 26 26 20  ITTLE_ENDIAN && 
fa20: 4d 49 4e 49 5a 5f 48 41 53 5f 36 34 42 49 54 5f  MINIZ_HAS_64BIT_
fa30: 52 45 47 49 53 54 45 52 53 0a 0a 73 74 61 74 69  REGISTERS..stati
fa40: 63 20 6d 7a 5f 62 6f 6f 6c 20 74 64 65 66 6c 5f  c mz_bool tdefl_
fa50: 63 6f 6d 70 72 65 73 73 5f 62 6c 6f 63 6b 28 74  compress_block(t
fa60: 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 20  defl_compressor 
fa70: 2a 64 2c 20 6d 7a 5f 62 6f 6f 6c 20 73 74 61 74  *d, mz_bool stat
fa80: 69 63 5f 62 6c 6f 63 6b 29 0a 7b 0a 20 20 69 66  ic_block).{.  if
fa90: 20 28 73 74 61 74 69 63 5f 62 6c 6f 63 6b 29 0a   (static_block).
faa0: 20 20 20 20 74 64 65 66 6c 5f 73 74 61 72 74 5f      tdefl_start_
fab0: 73 74 61 74 69 63 5f 62 6c 6f 63 6b 28 64 29 3b  static_block(d);
fac0: 0a 20 20 65 6c 73 65 0a 20 20 20 20 74 64 65 66  .  else.    tdef
fad0: 6c 5f 73 74 61 72 74 5f 64 79 6e 61 6d 69 63 5f  l_start_dynamic_
fae0: 62 6c 6f 63 6b 28 64 29 3b 0a 20 20 72 65 74 75  block(d);.  retu
faf0: 72 6e 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  rn tdefl_compres
fb00: 73 5f 6c 7a 5f 63 6f 64 65 73 28 64 29 3b 0a 7d  s_lz_codes(d);.}
fb10: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74 64 65  ..static int tde
fb20: 66 6c 5f 66 6c 75 73 68 5f 62 6c 6f 63 6b 28 74  fl_flush_block(t
fb30: 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 20  defl_compressor 
fb40: 2a 64 2c 20 69 6e 74 20 66 6c 75 73 68 29 0a 7b  *d, int flush).{
fb50: 0a 20 20 6d 7a 5f 75 69 6e 74 20 73 61 76 65 64  .  mz_uint saved
fb60: 5f 62 69 74 5f 62 75 66 2c 20 73 61 76 65 64 5f  _bit_buf, saved_
fb70: 62 69 74 73 5f 69 6e 3b 0a 20 20 6d 7a 5f 75 69  bits_in;.  mz_ui
fb80: 6e 74 38 20 2a 70 53 61 76 65 64 5f 6f 75 74 70  nt8 *pSaved_outp
fb90: 75 74 5f 62 75 66 3b 0a 20 20 6d 7a 5f 62 6f 6f  ut_buf;.  mz_boo
fba0: 6c 20 63 6f 6d 70 5f 62 6c 6f 63 6b 5f 73 75 63  l comp_block_suc
fbb0: 63 65 65 64 65 64 20 3d 20 4d 5a 5f 46 41 4c 53  ceeded = MZ_FALS
fbc0: 45 3b 0a 20 20 69 6e 74 20 6e 2c 20 75 73 65 5f  E;.  int n, use_
fbd0: 72 61 77 5f 62 6c 6f 63 6b 20 3d 20 28 28 64 2d  raw_block = ((d-
fbe0: 3e 6d 5f 66 6c 61 67 73 20 26 20 54 44 45 46 4c  >m_flags & TDEFL
fbf0: 5f 46 4f 52 43 45 5f 41 4c 4c 5f 52 41 57 5f 42  _FORCE_ALL_RAW_B
fc00: 4c 4f 43 4b 53 29 20 21 3d 20 30 29 20 26 26 20  LOCKS) != 0) && 
fc10: 28 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f  (d->m_lookahead_
fc20: 70 6f 73 20 2d 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f  pos - d->m_lz_co
fc30: 64 65 5f 62 75 66 5f 64 69 63 74 5f 70 6f 73 29  de_buf_dict_pos)
fc40: 20 3c 3d 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69   <= d->m_dict_si
fc50: 7a 65 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a  ze;.  mz_uint8 *
fc60: 70 4f 75 74 70 75 74 5f 62 75 66 5f 73 74 61 72  pOutput_buf_star
fc70: 74 20 3d 20 28 28 64 2d 3e 6d 5f 70 50 75 74 5f  t = ((d->m_pPut_
fc80: 62 75 66 5f 66 75 6e 63 20 3d 3d 20 4e 55 4c 4c  buf_func == NULL
fc90: 29 20 26 26 20 28 28 2a 64 2d 3e 6d 5f 70 4f 75  ) && ((*d->m_pOu
fca0: 74 5f 62 75 66 5f 73 69 7a 65 20 2d 20 64 2d 3e  t_buf_size - d->
fcb0: 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73 29 20 3e  m_out_buf_ofs) >
fcc0: 3d 20 54 44 45 46 4c 5f 4f 55 54 5f 42 55 46 5f  = TDEFL_OUT_BUF_
fcd0: 53 49 5a 45 29 29 20 3f 20 28 28 6d 7a 5f 75 69  SIZE)) ? ((mz_ui
fce0: 6e 74 38 20 2a 29 64 2d 3e 6d 5f 70 4f 75 74 5f  nt8 *)d->m_pOut_
fcf0: 62 75 66 20 2b 20 64 2d 3e 6d 5f 6f 75 74 5f 62  buf + d->m_out_b
fd00: 75 66 5f 6f 66 73 29 20 3a 20 64 2d 3e 6d 5f 6f  uf_ofs) : d->m_o
fd10: 75 74 70 75 74 5f 62 75 66 3b 0a 0a 20 20 64 2d  utput_buf;..  d-
fd20: 3e 6d 5f 70 4f 75 74 70 75 74 5f 62 75 66 20 3d  >m_pOutput_buf =
fd30: 20 70 4f 75 74 70 75 74 5f 62 75 66 5f 73 74 61   pOutput_buf_sta
fd40: 72 74 3b 0a 20 20 64 2d 3e 6d 5f 70 4f 75 74 70  rt;.  d->m_pOutp
fd50: 75 74 5f 62 75 66 5f 65 6e 64 20 3d 20 64 2d 3e  ut_buf_end = d->
fd60: 6d 5f 70 4f 75 74 70 75 74 5f 62 75 66 20 2b 20  m_pOutput_buf + 
fd70: 54 44 45 46 4c 5f 4f 55 54 5f 42 55 46 5f 53 49  TDEFL_OUT_BUF_SI
fd80: 5a 45 20 2d 20 31 36 3b 0a 0a 20 20 4d 5a 5f 41  ZE - 16;..  MZ_A
fd90: 53 53 45 52 54 28 21 64 2d 3e 6d 5f 6f 75 74 70  SSERT(!d->m_outp
fda0: 75 74 5f 66 6c 75 73 68 5f 72 65 6d 61 69 6e 69  ut_flush_remaini
fdb0: 6e 67 29 3b 0a 20 20 64 2d 3e 6d 5f 6f 75 74 70  ng);.  d->m_outp
fdc0: 75 74 5f 66 6c 75 73 68 5f 6f 66 73 20 3d 20 30  ut_flush_ofs = 0
fdd0: 3b 0a 20 20 64 2d 3e 6d 5f 6f 75 74 70 75 74 5f  ;.  d->m_output_
fde0: 66 6c 75 73 68 5f 72 65 6d 61 69 6e 69 6e 67 20  flush_remaining 
fdf0: 3d 20 30 3b 0a 0a 20 20 2a 64 2d 3e 6d 5f 70 4c  = 0;..  *d->m_pL
fe00: 5a 5f 66 6c 61 67 73 20 3d 20 28 6d 7a 5f 75 69  Z_flags = (mz_ui
fe10: 6e 74 38 29 28 2a 64 2d 3e 6d 5f 70 4c 5a 5f 66  nt8)(*d->m_pLZ_f
fe20: 6c 61 67 73 20 3e 3e 20 64 2d 3e 6d 5f 6e 75 6d  lags >> d->m_num
fe30: 5f 66 6c 61 67 73 5f 6c 65 66 74 29 3b 0a 20 20  _flags_left);.  
fe40: 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75  d->m_pLZ_code_bu
fe50: 66 20 2d 3d 20 28 64 2d 3e 6d 5f 6e 75 6d 5f 66  f -= (d->m_num_f
fe60: 6c 61 67 73 5f 6c 65 66 74 20 3d 3d 20 38 29 3b  lags_left == 8);
fe70: 0a 0a 20 20 69 66 20 28 28 64 2d 3e 6d 5f 66 6c  ..  if ((d->m_fl
fe80: 61 67 73 20 26 20 54 44 45 46 4c 5f 57 52 49 54  ags & TDEFL_WRIT
fe90: 45 5f 5a 4c 49 42 5f 48 45 41 44 45 52 29 20 26  E_ZLIB_HEADER) &
fea0: 26 20 28 21 64 2d 3e 6d 5f 62 6c 6f 63 6b 5f 69  & (!d->m_block_i
feb0: 6e 64 65 78 29 29 0a 20 20 7b 0a 20 20 20 20 54  ndex)).  {.    T
fec0: 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 30 78  DEFL_PUT_BITS(0x
fed0: 37 38 2c 20 38 29 3b 20 54 44 45 46 4c 5f 50 55  78, 8); TDEFL_PU
fee0: 54 5f 42 49 54 53 28 30 78 30 31 2c 20 38 29 3b  T_BITS(0x01, 8);
fef0: 0a 20 20 7d 0a 0a 20 20 54 44 45 46 4c 5f 50 55  .  }..  TDEFL_PU
ff00: 54 5f 42 49 54 53 28 66 6c 75 73 68 20 3d 3d 20  T_BITS(flush == 
ff10: 54 44 45 46 4c 5f 46 49 4e 49 53 48 2c 20 31 29  TDEFL_FINISH, 1)
ff20: 3b 0a 0a 20 20 70 53 61 76 65 64 5f 6f 75 74 70  ;..  pSaved_outp
ff30: 75 74 5f 62 75 66 20 3d 20 64 2d 3e 6d 5f 70 4f  ut_buf = d->m_pO
ff40: 75 74 70 75 74 5f 62 75 66 3b 20 73 61 76 65 64  utput_buf; saved
ff50: 5f 62 69 74 5f 62 75 66 20 3d 20 64 2d 3e 6d 5f  _bit_buf = d->m_
ff60: 62 69 74 5f 62 75 66 66 65 72 3b 20 73 61 76 65  bit_buffer; save
ff70: 64 5f 62 69 74 73 5f 69 6e 20 3d 20 64 2d 3e 6d  d_bits_in = d->m
ff80: 5f 62 69 74 73 5f 69 6e 3b 0a 0a 20 20 69 66 20  _bits_in;..  if 
ff90: 28 21 75 73 65 5f 72 61 77 5f 62 6c 6f 63 6b 29  (!use_raw_block)
ffa0: 0a 20 20 20 20 63 6f 6d 70 5f 62 6c 6f 63 6b 5f  .    comp_block_
ffb0: 73 75 63 63 65 65 64 65 64 20 3d 20 74 64 65 66  succeeded = tdef
ffc0: 6c 5f 63 6f 6d 70 72 65 73 73 5f 62 6c 6f 63 6b  l_compress_block
ffd0: 28 64 2c 20 28 64 2d 3e 6d 5f 66 6c 61 67 73 20  (d, (d->m_flags 
ffe0: 26 20 54 44 45 46 4c 5f 46 4f 52 43 45 5f 41 4c  & TDEFL_FORCE_AL
fff0: 4c 5f 53 54 41 54 49 43 5f 42 4c 4f 43 4b 53 29  L_STATIC_BLOCKS)
10000 20 7c 7c 20 28 64 2d 3e 6d 5f 74 6f 74 61 6c 5f   || (d->m_total_
10010 6c 7a 5f 62 79 74 65 73 20 3c 20 34 38 29 29 3b  lz_bytes < 48));
10020 0a 0a 20 20 2f 2f 20 49 66 20 74 68 65 20 62 6c  ..  // If the bl
10030 6f 63 6b 20 67 65 74 73 20 65 78 70 61 6e 64 65  ock gets expande
10040 64 2c 20 66 6f 72 67 65 74 20 74 68 65 20 63 75  d, forget the cu
10050 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 6f  rrent contents o
10060 66 20 74 68 65 20 6f 75 74 70 75 74 20 62 75 66  f the output buf
10070 66 65 72 20 61 6e 64 20 73 65 6e 64 20 61 20 72  fer and send a r
10080 61 77 20 62 6c 6f 63 6b 20 69 6e 73 74 65 61 64  aw block instead
10090 2e 0a 20 20 69 66 20 28 20 28 28 75 73 65 5f 72  ..  if ( ((use_r
100a0 61 77 5f 62 6c 6f 63 6b 29 20 7c 7c 20 28 28 64  aw_block) || ((d
100b0 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74  ->m_total_lz_byt
100c0 65 73 29 20 26 26 20 28 28 64 2d 3e 6d 5f 70 4f  es) && ((d->m_pO
100d0 75 74 70 75 74 5f 62 75 66 20 2d 20 70 53 61 76  utput_buf - pSav
100e0 65 64 5f 6f 75 74 70 75 74 5f 62 75 66 20 2b 20  ed_output_buf + 
100f0 31 55 29 20 3e 3d 20 64 2d 3e 6d 5f 74 6f 74 61  1U) >= d->m_tota
10100 6c 5f 6c 7a 5f 62 79 74 65 73 29 29 29 20 26 26  l_lz_bytes))) &&
10110 0a 20 20 20 20 20 20 20 28 28 64 2d 3e 6d 5f 6c  .       ((d->m_l
10120 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20 2d 20 64  ookahead_pos - d
10130 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75 66 5f  ->m_lz_code_buf_
10140 64 69 63 74 5f 70 6f 73 29 20 3c 3d 20 64 2d 3e  dict_pos) <= d->
10150 6d 5f 64 69 63 74 5f 73 69 7a 65 29 20 29 0a 20  m_dict_size) ). 
10160 20 7b 0a 20 20 20 20 6d 7a 5f 75 69 6e 74 20 69   {.    mz_uint i
10170 3b 20 64 2d 3e 6d 5f 70 4f 75 74 70 75 74 5f 62  ; d->m_pOutput_b
10180 75 66 20 3d 20 70 53 61 76 65 64 5f 6f 75 74 70  uf = pSaved_outp
10190 75 74 5f 62 75 66 3b 20 64 2d 3e 6d 5f 62 69 74  ut_buf; d->m_bit
101a0 5f 62 75 66 66 65 72 20 3d 20 73 61 76 65 64 5f  _buffer = saved_
101b0 62 69 74 5f 62 75 66 2c 20 64 2d 3e 6d 5f 62 69  bit_buf, d->m_bi
101c0 74 73 5f 69 6e 20 3d 20 73 61 76 65 64 5f 62 69  ts_in = saved_bi
101d0 74 73 5f 69 6e 3b 0a 20 20 20 20 54 44 45 46 4c  ts_in;.    TDEFL
101e0 5f 50 55 54 5f 42 49 54 53 28 30 2c 20 32 29 3b  _PUT_BITS(0, 2);
101f0 0a 20 20 20 20 69 66 20 28 64 2d 3e 6d 5f 62 69  .    if (d->m_bi
10200 74 73 5f 69 6e 29 20 7b 20 54 44 45 46 4c 5f 50  ts_in) { TDEFL_P
10210 55 54 5f 42 49 54 53 28 30 2c 20 38 20 2d 20 64  UT_BITS(0, 8 - d
10220 2d 3e 6d 5f 62 69 74 73 5f 69 6e 29 3b 20 7d 0a  ->m_bits_in); }.
10230 20 20 20 20 66 6f 72 20 28 69 20 3d 20 32 3b 20      for (i = 2; 
10240 69 3b 20 2d 2d 69 2c 20 64 2d 3e 6d 5f 74 6f 74  i; --i, d->m_tot
10250 61 6c 5f 6c 7a 5f 62 79 74 65 73 20 5e 3d 20 30  al_lz_bytes ^= 0
10260 78 46 46 46 46 29 0a 20 20 20 20 7b 0a 20 20 20  xFFFF).    {.   
10270 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42 49 54     TDEFL_PUT_BIT
10280 53 28 64 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f  S(d->m_total_lz_
10290 62 79 74 65 73 20 26 20 30 78 46 46 46 46 2c 20  bytes & 0xFFFF, 
102a0 31 36 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  16);.    }.    f
102b0 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 64  or (i = 0; i < d
102c0 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74  ->m_total_lz_byt
102d0 65 73 3b 20 2b 2b 69 29 0a 20 20 20 20 7b 0a 20  es; ++i).    {. 
102e0 20 20 20 20 20 54 44 45 46 4c 5f 50 55 54 5f 42       TDEFL_PUT_B
102f0 49 54 53 28 64 2d 3e 6d 5f 64 69 63 74 5b 28 64  ITS(d->m_dict[(d
10300 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75 66 5f  ->m_lz_code_buf_
10310 64 69 63 74 5f 70 6f 73 20 2b 20 69 29 20 26 20  dict_pos + i) & 
10320 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49  TDEFL_LZ_DICT_SI
10330 5a 45 5f 4d 41 53 4b 5d 2c 20 38 29 3b 0a 20 20  ZE_MASK], 8);.  
10340 20 20 7d 0a 20 20 7d 0a 20 20 2f 2f 20 43 68 65    }.  }.  // Che
10350 63 6b 20 66 6f 72 20 74 68 65 20 65 78 74 72 65  ck for the extre
10360 6d 65 6c 79 20 75 6e 6c 69 6b 65 6c 79 20 28 69  mely unlikely (i
10370 66 20 6e 6f 74 20 69 6d 70 6f 73 73 69 62 6c 65  f not impossible
10380 29 20 63 61 73 65 20 6f 66 20 74 68 65 20 63 6f  ) case of the co
10390 6d 70 72 65 73 73 65 64 20 62 6c 6f 63 6b 20 6e  mpressed block n
103a0 6f 74 20 66 69 74 74 69 6e 67 20 69 6e 74 6f 20  ot fitting into 
103b0 74 68 65 20 6f 75 74 70 75 74 20 62 75 66 66 65  the output buffe
103c0 72 20 77 68 65 6e 20 75 73 69 6e 67 20 64 79 6e  r when using dyn
103d0 61 6d 69 63 20 63 6f 64 65 73 2e 0a 20 20 65 6c  amic codes..  el
103e0 73 65 20 69 66 20 28 21 63 6f 6d 70 5f 62 6c 6f  se if (!comp_blo
103f0 63 6b 5f 73 75 63 63 65 65 64 65 64 29 0a 20 20  ck_succeeded).  
10400 7b 0a 20 20 20 20 64 2d 3e 6d 5f 70 4f 75 74 70  {.    d->m_pOutp
10410 75 74 5f 62 75 66 20 3d 20 70 53 61 76 65 64 5f  ut_buf = pSaved_
10420 6f 75 74 70 75 74 5f 62 75 66 3b 20 64 2d 3e 6d  output_buf; d->m
10430 5f 62 69 74 5f 62 75 66 66 65 72 20 3d 20 73 61  _bit_buffer = sa
10440 76 65 64 5f 62 69 74 5f 62 75 66 2c 20 64 2d 3e  ved_bit_buf, d->
10450 6d 5f 62 69 74 73 5f 69 6e 20 3d 20 73 61 76 65  m_bits_in = save
10460 64 5f 62 69 74 73 5f 69 6e 3b 0a 20 20 20 20 74  d_bits_in;.    t
10470 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 62 6c  defl_compress_bl
10480 6f 63 6b 28 64 2c 20 4d 5a 5f 54 52 55 45 29 3b  ock(d, MZ_TRUE);
10490 0a 20 20 7d 0a 0a 20 20 69 66 20 28 66 6c 75 73  .  }..  if (flus
104a0 68 29 0a 20 20 7b 0a 20 20 20 20 69 66 20 28 66  h).  {.    if (f
104b0 6c 75 73 68 20 3d 3d 20 54 44 45 46 4c 5f 46 49  lush == TDEFL_FI
104c0 4e 49 53 48 29 0a 20 20 20 20 7b 0a 20 20 20 20  NISH).    {.    
104d0 20 20 69 66 20 28 64 2d 3e 6d 5f 62 69 74 73 5f    if (d->m_bits_
104e0 69 6e 29 20 7b 20 54 44 45 46 4c 5f 50 55 54 5f  in) { TDEFL_PUT_
104f0 42 49 54 53 28 30 2c 20 38 20 2d 20 64 2d 3e 6d  BITS(0, 8 - d->m
10500 5f 62 69 74 73 5f 69 6e 29 3b 20 7d 0a 20 20 20  _bits_in); }.   
10510 20 20 20 69 66 20 28 64 2d 3e 6d 5f 66 6c 61 67     if (d->m_flag
10520 73 20 26 20 54 44 45 46 4c 5f 57 52 49 54 45 5f  s & TDEFL_WRITE_
10530 5a 4c 49 42 5f 48 45 41 44 45 52 29 20 7b 20 6d  ZLIB_HEADER) { m
10540 7a 5f 75 69 6e 74 20 69 2c 20 61 20 3d 20 64 2d  z_uint i, a = d-
10550 3e 6d 5f 61 64 6c 65 72 33 32 3b 20 66 6f 72 20  >m_adler32; for 
10560 28 69 20 3d 20 30 3b 20 69 20 3c 20 34 3b 20 69  (i = 0; i < 4; i
10570 2b 2b 29 20 7b 20 54 44 45 46 4c 5f 50 55 54 5f  ++) { TDEFL_PUT_
10580 42 49 54 53 28 28 61 20 3e 3e 20 32 34 29 20 26  BITS((a >> 24) &
10590 20 30 78 46 46 2c 20 38 29 3b 20 61 20 3c 3c 3d   0xFF, 8); a <<=
105a0 20 38 3b 20 7d 20 7d 0a 20 20 20 20 7d 0a 20 20   8; } }.    }.  
105b0 20 20 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20    else.    {.   
105c0 20 20 20 6d 7a 5f 75 69 6e 74 20 69 2c 20 7a 20     mz_uint i, z 
105d0 3d 20 30 3b 20 54 44 45 46 4c 5f 50 55 54 5f 42  = 0; TDEFL_PUT_B
105e0 49 54 53 28 30 2c 20 33 29 3b 20 69 66 20 28 64  ITS(0, 3); if (d
105f0 2d 3e 6d 5f 62 69 74 73 5f 69 6e 29 20 7b 20 54  ->m_bits_in) { T
10600 44 45 46 4c 5f 50 55 54 5f 42 49 54 53 28 30 2c  DEFL_PUT_BITS(0,
10610 20 38 20 2d 20 64 2d 3e 6d 5f 62 69 74 73 5f 69   8 - d->m_bits_i
10620 6e 29 3b 20 7d 20 66 6f 72 20 28 69 20 3d 20 32  n); } for (i = 2
10630 3b 20 69 3b 20 2d 2d 69 2c 20 7a 20 5e 3d 20 30  ; i; --i, z ^= 0
10640 78 46 46 46 46 29 20 7b 20 54 44 45 46 4c 5f 50  xFFFF) { TDEFL_P
10650 55 54 5f 42 49 54 53 28 7a 20 26 20 30 78 46 46  UT_BITS(z & 0xFF
10660 46 46 2c 20 31 36 29 3b 20 7d 0a 20 20 20 20 7d  FF, 16); }.    }
10670 0a 20 20 7d 0a 0a 20 20 4d 5a 5f 41 53 53 45 52  .  }..  MZ_ASSER
10680 54 28 64 2d 3e 6d 5f 70 4f 75 74 70 75 74 5f 62  T(d->m_pOutput_b
10690 75 66 20 3c 20 64 2d 3e 6d 5f 70 4f 75 74 70 75  uf < d->m_pOutpu
106a0 74 5f 62 75 66 5f 65 6e 64 29 3b 0a 0a 20 20 6d  t_buf_end);..  m
106b0 65 6d 73 65 74 28 26 64 2d 3e 6d 5f 68 75 66 66  emset(&d->m_huff
106c0 5f 63 6f 75 6e 74 5b 30 5d 5b 30 5d 2c 20 30 2c  _count[0][0], 0,
106d0 20 73 69 7a 65 6f 66 28 64 2d 3e 6d 5f 68 75 66   sizeof(d->m_huf
106e0 66 5f 63 6f 75 6e 74 5b 30 5d 5b 30 5d 29 20 2a  f_count[0][0]) *
106f0 20 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f   TDEFL_MAX_HUFF_
10700 53 59 4d 42 4f 4c 53 5f 30 29 3b 0a 20 20 6d 65  SYMBOLS_0);.  me
10710 6d 73 65 74 28 26 64 2d 3e 6d 5f 68 75 66 66 5f  mset(&d->m_huff_
10720 63 6f 75 6e 74 5b 31 5d 5b 30 5d 2c 20 30 2c 20  count[1][0], 0, 
10730 73 69 7a 65 6f 66 28 64 2d 3e 6d 5f 68 75 66 66  sizeof(d->m_huff
10740 5f 63 6f 75 6e 74 5b 31 5d 5b 30 5d 29 20 2a 20  _count[1][0]) * 
10750 54 44 45 46 4c 5f 4d 41 58 5f 48 55 46 46 5f 53  TDEFL_MAX_HUFF_S
10760 59 4d 42 4f 4c 53 5f 31 29 3b 0a 0a 20 20 64 2d  YMBOLS_1);..  d-
10770 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20  >m_pLZ_code_buf 
10780 3d 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62  = d->m_lz_code_b
10790 75 66 20 2b 20 31 3b 20 64 2d 3e 6d 5f 70 4c 5a  uf + 1; d->m_pLZ
107a0 5f 66 6c 61 67 73 20 3d 20 64 2d 3e 6d 5f 6c 7a  _flags = d->m_lz
107b0 5f 63 6f 64 65 5f 62 75 66 3b 20 64 2d 3e 6d 5f  _code_buf; d->m_
107c0 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d  num_flags_left =
107d0 20 38 3b 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65   8; d->m_lz_code
107e0 5f 62 75 66 5f 64 69 63 74 5f 70 6f 73 20 2b 3d  _buf_dict_pos +=
107f0 20 64 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62   d->m_total_lz_b
10800 79 74 65 73 3b 20 64 2d 3e 6d 5f 74 6f 74 61 6c  ytes; d->m_total
10810 5f 6c 7a 5f 62 79 74 65 73 20 3d 20 30 3b 20 64  _lz_bytes = 0; d
10820 2d 3e 6d 5f 62 6c 6f 63 6b 5f 69 6e 64 65 78 2b  ->m_block_index+
10830 2b 3b 0a 0a 20 20 69 66 20 28 28 6e 20 3d 20 28  +;..  if ((n = (
10840 69 6e 74 29 28 64 2d 3e 6d 5f 70 4f 75 74 70 75  int)(d->m_pOutpu
10850 74 5f 62 75 66 20 2d 20 70 4f 75 74 70 75 74 5f  t_buf - pOutput_
10860 62 75 66 5f 73 74 61 72 74 29 29 20 21 3d 20 30  buf_start)) != 0
10870 29 0a 20 20 7b 0a 20 20 20 20 69 66 20 28 64 2d  ).  {.    if (d-
10880 3e 6d 5f 70 50 75 74 5f 62 75 66 5f 66 75 6e 63  >m_pPut_buf_func
10890 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2a 64  ).    {.      *d
108a0 2d 3e 6d 5f 70 49 6e 5f 62 75 66 5f 73 69 7a 65  ->m_pIn_buf_size
108b0 20 3d 20 64 2d 3e 6d 5f 70 53 72 63 20 2d 20 28   = d->m_pSrc - (
108c0 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a  const mz_uint8 *
108d0 29 64 2d 3e 6d 5f 70 49 6e 5f 62 75 66 3b 0a 20  )d->m_pIn_buf;. 
108e0 20 20 20 20 20 69 66 20 28 21 28 2a 64 2d 3e 6d       if (!(*d->m
108f0 5f 70 50 75 74 5f 62 75 66 5f 66 75 6e 63 29 28  _pPut_buf_func)(
10900 64 2d 3e 6d 5f 6f 75 74 70 75 74 5f 62 75 66 2c  d->m_output_buf,
10910 20 6e 2c 20 64 2d 3e 6d 5f 70 50 75 74 5f 62 75   n, d->m_pPut_bu
10920 66 5f 75 73 65 72 29 29 0a 20 20 20 20 20 20 20  f_user)).       
10930 20 72 65 74 75 72 6e 20 28 64 2d 3e 6d 5f 70 72   return (d->m_pr
10940 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74 75 73  ev_return_status
10950 20 3d 20 54 44 45 46 4c 5f 53 54 41 54 55 53 5f   = TDEFL_STATUS_
10960 50 55 54 5f 42 55 46 5f 46 41 49 4c 45 44 29 3b  PUT_BUF_FAILED);
10970 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20  .    }.    else 
10980 69 66 20 28 70 4f 75 74 70 75 74 5f 62 75 66 5f  if (pOutput_buf_
10990 73 74 61 72 74 20 3d 3d 20 64 2d 3e 6d 5f 6f 75  start == d->m_ou
109a0 74 70 75 74 5f 62 75 66 29 0a 20 20 20 20 7b 0a  tput_buf).    {.
109b0 20 20 20 20 20 20 69 6e 74 20 62 79 74 65 73 5f        int bytes_
109c0 74 6f 5f 63 6f 70 79 20 3d 20 28 69 6e 74 29 4d  to_copy = (int)M
109d0 5a 5f 4d 49 4e 28 28 73 69 7a 65 5f 74 29 6e 2c  Z_MIN((size_t)n,
109e0 20 28 73 69 7a 65 5f 74 29 28 2a 64 2d 3e 6d 5f   (size_t)(*d->m_
109f0 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65 20 2d 20  pOut_buf_size - 
10a00 64 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73  d->m_out_buf_ofs
10a10 29 29 3b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  ));.      memcpy
10a20 28 28 6d 7a 5f 75 69 6e 74 38 20 2a 29 64 2d 3e  ((mz_uint8 *)d->
10a30 6d 5f 70 4f 75 74 5f 62 75 66 20 2b 20 64 2d 3e  m_pOut_buf + d->
10a40 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73 2c 20 64  m_out_buf_ofs, d
10a50 2d 3e 6d 5f 6f 75 74 70 75 74 5f 62 75 66 2c 20  ->m_output_buf, 
10a60 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 29 3b 0a  bytes_to_copy);.
10a70 20 20 20 20 20 20 64 2d 3e 6d 5f 6f 75 74 5f 62        d->m_out_b
10a80 75 66 5f 6f 66 73 20 2b 3d 20 62 79 74 65 73 5f  uf_ofs += bytes_
10a90 74 6f 5f 63 6f 70 79 3b 0a 20 20 20 20 20 20 69  to_copy;.      i
10aa0 66 20 28 28 6e 20 2d 3d 20 62 79 74 65 73 5f 74  f ((n -= bytes_t
10ab0 6f 5f 63 6f 70 79 29 20 21 3d 20 30 29 0a 20 20  o_copy) != 0).  
10ac0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 64 2d      {.        d-
10ad0 3e 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f  >m_output_flush_
10ae0 6f 66 73 20 3d 20 62 79 74 65 73 5f 74 6f 5f 63  ofs = bytes_to_c
10af0 6f 70 79 3b 0a 20 20 20 20 20 20 20 20 64 2d 3e  opy;.        d->
10b00 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f 72  m_output_flush_r
10b10 65 6d 61 69 6e 69 6e 67 20 3d 20 6e 3b 0a 20 20  emaining = n;.  
10b20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
10b30 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20 20 20  else.    {.     
10b40 20 64 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66   d->m_out_buf_of
10b50 73 20 2b 3d 20 6e 3b 0a 20 20 20 20 7d 0a 20 20  s += n;.    }.  
10b60 7d 0a 0a 20 20 72 65 74 75 72 6e 20 64 2d 3e 6d  }..  return d->m
10b70 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f 72 65  _output_flush_re
10b80 6d 61 69 6e 69 6e 67 3b 0a 7d 0a 0a 23 69 66 20  maining;.}..#if 
10b90 4d 49 4e 49 5a 5f 55 53 45 5f 55 4e 41 4c 49 47  MINIZ_USE_UNALIG
10ba0 4e 45 44 5f 4c 4f 41 44 53 5f 41 4e 44 5f 53 54  NED_LOADS_AND_ST
10bb0 4f 52 45 53 0a 23 64 65 66 69 6e 65 20 54 44 45  ORES.#define TDE
10bc0 46 4c 5f 52 45 41 44 5f 55 4e 41 4c 49 47 4e 45  FL_READ_UNALIGNE
10bd0 44 5f 57 4f 52 44 28 70 29 20 2a 28 63 6f 6e 73  D_WORD(p) *(cons
10be0 74 20 6d 7a 5f 75 69 6e 74 31 36 2a 29 28 70 29  t mz_uint16*)(p)
10bf0 0a 73 74 61 74 69 63 20 4d 5a 5f 46 4f 52 43 45  .static MZ_FORCE
10c00 49 4e 4c 49 4e 45 20 76 6f 69 64 20 74 64 65 66  INLINE void tdef
10c10 6c 5f 66 69 6e 64 5f 6d 61 74 63 68 28 74 64 65  l_find_match(tde
10c20 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 20 2a 64  fl_compressor *d
10c30 2c 20 6d 7a 5f 75 69 6e 74 20 6c 6f 6f 6b 61 68  , mz_uint lookah
10c40 65 61 64 5f 70 6f 73 2c 20 6d 7a 5f 75 69 6e 74  ead_pos, mz_uint
10c50 20 6d 61 78 5f 64 69 73 74 2c 20 6d 7a 5f 75 69   max_dist, mz_ui
10c60 6e 74 20 6d 61 78 5f 6d 61 74 63 68 5f 6c 65 6e  nt max_match_len
10c70 2c 20 6d 7a 5f 75 69 6e 74 20 2a 70 4d 61 74 63  , mz_uint *pMatc
10c80 68 5f 64 69 73 74 2c 20 6d 7a 5f 75 69 6e 74 20  h_dist, mz_uint 
10c90 2a 70 4d 61 74 63 68 5f 6c 65 6e 29 0a 7b 0a 20  *pMatch_len).{. 
10ca0 20 6d 7a 5f 75 69 6e 74 20 64 69 73 74 2c 20 70   mz_uint dist, p
10cb0 6f 73 20 3d 20 6c 6f 6f 6b 61 68 65 61 64 5f 70  os = lookahead_p
10cc0 6f 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  os & TDEFL_LZ_DI
10cd0 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 2c 20 6d 61  CT_SIZE_MASK, ma
10ce0 74 63 68 5f 6c 65 6e 20 3d 20 2a 70 4d 61 74 63  tch_len = *pMatc
10cf0 68 5f 6c 65 6e 2c 20 70 72 6f 62 65 5f 70 6f 73  h_len, probe_pos
10d00 20 3d 20 70 6f 73 2c 20 6e 65 78 74 5f 70 72 6f   = pos, next_pro
10d10 62 65 5f 70 6f 73 2c 20 70 72 6f 62 65 5f 6c 65  be_pos, probe_le
10d20 6e 3b 0a 20 20 6d 7a 5f 75 69 6e 74 20 6e 75 6d  n;.  mz_uint num
10d30 5f 70 72 6f 62 65 73 5f 6c 65 66 74 20 3d 20 64  _probes_left = d
10d40 2d 3e 6d 5f 6d 61 78 5f 70 72 6f 62 65 73 5b 6d  ->m_max_probes[m
10d50 61 74 63 68 5f 6c 65 6e 20 3e 3d 20 33 32 5d 3b  atch_len >= 32];
10d60 0a 20 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74  .  const mz_uint
10d70 31 36 20 2a 73 20 3d 20 28 63 6f 6e 73 74 20 6d  16 *s = (const m
10d80 7a 5f 75 69 6e 74 31 36 2a 29 28 64 2d 3e 6d 5f  z_uint16*)(d->m_
10d90 64 69 63 74 20 2b 20 70 6f 73 29 2c 20 2a 70 2c  dict + pos), *p,
10da0 20 2a 71 3b 0a 20 20 6d 7a 5f 75 69 6e 74 31 36   *q;.  mz_uint16
10db0 20 63 30 31 20 3d 20 54 44 45 46 4c 5f 52 45 41   c01 = TDEFL_REA
10dc0 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44  D_UNALIGNED_WORD
10dd0 28 26 64 2d 3e 6d 5f 64 69 63 74 5b 70 6f 73 20  (&d->m_dict[pos 
10de0 2b 20 6d 61 74 63 68 5f 6c 65 6e 20 2d 20 31 5d  + match_len - 1]
10df0 29 2c 20 73 30 31 20 3d 20 54 44 45 46 4c 5f 52  ), s01 = TDEFL_R
10e00 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f  EAD_UNALIGNED_WO
10e10 52 44 28 73 29 3b 0a 20 20 4d 5a 5f 41 53 53 45  RD(s);.  MZ_ASSE
10e20 52 54 28 6d 61 78 5f 6d 61 74 63 68 5f 6c 65 6e  RT(max_match_len
10e30 20 3c 3d 20 54 44 45 46 4c 5f 4d 41 58 5f 4d 41   <= TDEFL_MAX_MA
10e40 54 43 48 5f 4c 45 4e 29 3b 20 69 66 20 28 6d 61  TCH_LEN); if (ma
10e50 78 5f 6d 61 74 63 68 5f 6c 65 6e 20 3c 3d 20 6d  x_match_len <= m
10e60 61 74 63 68 5f 6c 65 6e 29 20 72 65 74 75 72 6e  atch_len) return
10e70 3b 0a 20 20 66 6f 72 20 28 20 3b 20 3b 20 29 0a  ;.  for ( ; ; ).
10e80 20 20 7b 0a 20 20 20 20 66 6f 72 20 28 20 3b 20    {.    for ( ; 
10e90 3b 20 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ; ).    {.      
10ea0 69 66 20 28 2d 2d 6e 75 6d 5f 70 72 6f 62 65 73  if (--num_probes
10eb0 5f 6c 65 66 74 20 3d 3d 20 30 29 20 72 65 74 75  _left == 0) retu
10ec0 72 6e 3b 0a 20 20 20 20 20 20 23 64 65 66 69 6e  rn;.      #defin
10ed0 65 20 54 44 45 46 4c 5f 50 52 4f 42 45 20 5c 0a  e TDEFL_PROBE \.
10ee0 20 20 20 20 20 20 20 20 6e 65 78 74 5f 70 72 6f          next_pro
10ef0 62 65 5f 70 6f 73 20 3d 20 64 2d 3e 6d 5f 6e 65  be_pos = d->m_ne
10f00 78 74 5b 70 72 6f 62 65 5f 70 6f 73 5d 3b 20 5c  xt[probe_pos]; \
10f10 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 21 6e  .        if ((!n
10f20 65 78 74 5f 70 72 6f 62 65 5f 70 6f 73 29 20 7c  ext_probe_pos) |
10f30 7c 20 28 28 64 69 73 74 20 3d 20 28 6d 7a 5f 75  | ((dist = (mz_u
10f40 69 6e 74 31 36 29 28 6c 6f 6f 6b 61 68 65 61 64  int16)(lookahead
10f50 5f 70 6f 73 20 2d 20 6e 65 78 74 5f 70 72 6f 62  _pos - next_prob
10f60 65 5f 70 6f 73 29 29 20 3e 20 6d 61 78 5f 64 69  e_pos)) > max_di
10f70 73 74 29 29 20 72 65 74 75 72 6e 3b 20 5c 0a 20  st)) return; \. 
10f80 20 20 20 20 20 20 20 70 72 6f 62 65 5f 70 6f 73         probe_pos
10f90 20 3d 20 6e 65 78 74 5f 70 72 6f 62 65 5f 70 6f   = next_probe_po
10fa0 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43  s & TDEFL_LZ_DIC
10fb0 54 5f 53 49 5a 45 5f 4d 41 53 4b 3b 20 5c 0a 20  T_SIZE_MASK; \. 
10fc0 20 20 20 20 20 20 20 69 66 20 28 54 44 45 46 4c         if (TDEFL
10fd0 5f 52 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f  _READ_UNALIGNED_
10fe0 57 4f 52 44 28 26 64 2d 3e 6d 5f 64 69 63 74 5b  WORD(&d->m_dict[
10ff0 70 72 6f 62 65 5f 70 6f 73 20 2b 20 6d 61 74 63  probe_pos + matc
11000 68 5f 6c 65 6e 20 2d 20 31 5d 29 20 3d 3d 20 63  h_len - 1]) == c
11010 30 31 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  01) break;.     
11020 20 54 44 45 46 4c 5f 50 52 4f 42 45 3b 20 54 44   TDEFL_PROBE; TD
11030 45 46 4c 5f 50 52 4f 42 45 3b 20 54 44 45 46 4c  EFL_PROBE; TDEFL
11040 5f 50 52 4f 42 45 3b 0a 20 20 20 20 7d 0a 20 20  _PROBE;.    }.  
11050 20 20 69 66 20 28 21 64 69 73 74 29 20 62 72 65    if (!dist) bre
11060 61 6b 3b 20 71 20 3d 20 28 63 6f 6e 73 74 20 6d  ak; q = (const m
11070 7a 5f 75 69 6e 74 31 36 2a 29 28 64 2d 3e 6d 5f  z_uint16*)(d->m_
11080 64 69 63 74 20 2b 20 70 72 6f 62 65 5f 70 6f 73  dict + probe_pos
11090 29 3b 20 69 66 20 28 54 44 45 46 4c 5f 52 45 41  ); if (TDEFL_REA
110a0 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44  D_UNALIGNED_WORD
110b0 28 71 29 20 21 3d 20 73 30 31 29 20 63 6f 6e 74  (q) != s01) cont
110c0 69 6e 75 65 3b 20 70 20 3d 20 73 3b 20 70 72 6f  inue; p = s; pro
110d0 62 65 5f 6c 65 6e 20 3d 20 33 32 3b 0a 20 20 20  be_len = 32;.   
110e0 20 64 6f 20 7b 20 7d 20 77 68 69 6c 65 20 28 20   do { } while ( 
110f0 28 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e 41 4c  (TDEFL_READ_UNAL
11100 49 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 70 29 20  IGNED_WORD(++p) 
11110 3d 3d 20 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e  == TDEFL_READ_UN
11120 41 4c 49 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 71  ALIGNED_WORD(++q
11130 29 29 20 26 26 20 28 54 44 45 46 4c 5f 52 45 41  )) && (TDEFL_REA
11140 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44  D_UNALIGNED_WORD
11150 28 2b 2b 70 29 20 3d 3d 20 54 44 45 46 4c 5f 52  (++p) == TDEFL_R
11160 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f  EAD_UNALIGNED_WO
11170 52 44 28 2b 2b 71 29 29 20 26 26 0a 20 20 20 20  RD(++q)) &&.    
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
11190 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e 41 4c 49  TDEFL_READ_UNALI
111a0 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 70 29 20 3d  GNED_WORD(++p) =
111b0 3d 20 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e 41  = TDEFL_READ_UNA
111c0 4c 49 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 71 29  LIGNED_WORD(++q)
111d0 29 20 26 26 20 28 54 44 45 46 4c 5f 52 45 41 44  ) && (TDEFL_READ
111e0 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44 28  _UNALIGNED_WORD(
111f0 2b 2b 70 29 20 3d 3d 20 54 44 45 46 4c 5f 52 45  ++p) == TDEFL_RE
11200 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52  AD_UNALIGNED_WOR
11210 44 28 2b 2b 71 29 29 20 26 26 20 28 2d 2d 70 72  D(++q)) && (--pr
11220 6f 62 65 5f 6c 65 6e 20 3e 20 30 29 20 29 3b 0a  obe_len > 0) );.
11230 20 20 20 20 69 66 20 28 21 70 72 6f 62 65 5f 6c      if (!probe_l
11240 65 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  en).    {.      
11250 2a 70 4d 61 74 63 68 5f 64 69 73 74 20 3d 20 64  *pMatch_dist = d
11260 69 73 74 3b 20 2a 70 4d 61 74 63 68 5f 6c 65 6e  ist; *pMatch_len
11270 20 3d 20 4d 5a 5f 4d 49 4e 28 6d 61 78 5f 6d 61   = MZ_MIN(max_ma
11280 74 63 68 5f 6c 65 6e 2c 20 54 44 45 46 4c 5f 4d  tch_len, TDEFL_M
11290 41 58 5f 4d 41 54 43 48 5f 4c 45 4e 29 3b 20 62  AX_MATCH_LEN); b
112a0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
112b0 65 6c 73 65 20 69 66 20 28 28 70 72 6f 62 65 5f  else if ((probe_
112c0 6c 65 6e 20 3d 20 28 28 6d 7a 5f 75 69 6e 74 29  len = ((mz_uint)
112d0 28 70 20 2d 20 73 29 20 2a 20 32 29 20 2b 20 28  (p - s) * 2) + (
112e0 6d 7a 5f 75 69 6e 74 29 28 2a 28 63 6f 6e 73 74  mz_uint)(*(const
112f0 20 6d 7a 5f 75 69 6e 74 38 2a 29 70 20 3d 3d 20   mz_uint8*)p == 
11300 2a 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38  *(const mz_uint8
11310 2a 29 71 29 29 20 3e 20 6d 61 74 63 68 5f 6c 65  *)q)) > match_le
11320 6e 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 2a  n).    {.      *
11330 70 4d 61 74 63 68 5f 64 69 73 74 20 3d 20 64 69  pMatch_dist = di
11340 73 74 3b 20 69 66 20 28 28 2a 70 4d 61 74 63 68  st; if ((*pMatch
11350 5f 6c 65 6e 20 3d 20 6d 61 74 63 68 5f 6c 65 6e  _len = match_len
11360 20 3d 20 4d 5a 5f 4d 49 4e 28 6d 61 78 5f 6d 61   = MZ_MIN(max_ma
11370 74 63 68 5f 6c 65 6e 2c 20 70 72 6f 62 65 5f 6c  tch_len, probe_l
11380 65 6e 29 29 20 3d 3d 20 6d 61 78 5f 6d 61 74 63  en)) == max_matc
11390 68 5f 6c 65 6e 29 20 62 72 65 61 6b 3b 0a 20 20  h_len) break;.  
113a0 20 20 20 20 63 30 31 20 3d 20 54 44 45 46 4c 5f      c01 = TDEFL_
113b0 52 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57  READ_UNALIGNED_W
113c0 4f 52 44 28 26 64 2d 3e 6d 5f 64 69 63 74 5b 70  ORD(&d->m_dict[p
113d0 6f 73 20 2b 20 6d 61 74 63 68 5f 6c 65 6e 20 2d  os + match_len -
113e0 20 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   1]);.    }.  }.
113f0 7d 0a 23 65 6c 73 65 0a 73 74 61 74 69 63 20 4d  }.#else.static M
11400 5a 5f 46 4f 52 43 45 49 4e 4c 49 4e 45 20 76 6f  Z_FORCEINLINE vo
11410 69 64 20 74 64 65 66 6c 5f 66 69 6e 64 5f 6d 61  id tdefl_find_ma
11420 74 63 68 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65  tch(tdefl_compre
11430 73 73 6f 72 20 2a 64 2c 20 6d 7a 5f 75 69 6e 74  ssor *d, mz_uint
11440 20 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 2c 20   lookahead_pos, 
11450 6d 7a 5f 75 69 6e 74 20 6d 61 78 5f 64 69 73 74  mz_uint max_dist
11460 2c 20 6d 7a 5f 75 69 6e 74 20 6d 61 78 5f 6d 61  , mz_uint max_ma
11470 74 63 68 5f 6c 65 6e 2c 20 6d 7a 5f 75 69 6e 74  tch_len, mz_uint
11480 20 2a 70 4d 61 74 63 68 5f 64 69 73 74 2c 20 6d   *pMatch_dist, m
11490 7a 5f 75 69 6e 74 20 2a 70 4d 61 74 63 68 5f 6c  z_uint *pMatch_l
114a0 65 6e 29 0a 7b 0a 20 20 6d 7a 5f 75 69 6e 74 20  en).{.  mz_uint 
114b0 64 69 73 74 2c 20 70 6f 73 20 3d 20 6c 6f 6f 6b  dist, pos = look
114c0 61 68 65 61 64 5f 70 6f 73 20 26 20 54 44 45 46  ahead_pos & TDEF
114d0 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d  L_LZ_DICT_SIZE_M
114e0 41 53 4b 2c 20 6d 61 74 63 68 5f 6c 65 6e 20 3d  ASK, match_len =
114f0 20 2a 70 4d 61 74 63 68 5f 6c 65 6e 2c 20 70 72   *pMatch_len, pr
11500 6f 62 65 5f 70 6f 73 20 3d 20 70 6f 73 2c 20 6e  obe_pos = pos, n
11510 65 78 74 5f 70 72 6f 62 65 5f 70 6f 73 2c 20 70  ext_probe_pos, p
11520 72 6f 62 65 5f 6c 65 6e 3b 0a 20 20 6d 7a 5f 75  robe_len;.  mz_u
11530 69 6e 74 20 6e 75 6d 5f 70 72 6f 62 65 73 5f 6c  int num_probes_l
11540 65 66 74 20 3d 20 64 2d 3e 6d 5f 6d 61 78 5f 70  eft = d->m_max_p
11550 72 6f 62 65 73 5b 6d 61 74 63 68 5f 6c 65 6e 20  robes[match_len 
11560 3e 3d 20 33 32 5d 3b 0a 20 20 63 6f 6e 73 74 20  >= 32];.  const 
11570 6d 7a 5f 75 69 6e 74 38 20 2a 73 20 3d 20 64 2d  mz_uint8 *s = d-
11580 3e 6d 5f 64 69 63 74 20 2b 20 70 6f 73 2c 20 2a  >m_dict + pos, *
11590 70 2c 20 2a 71 3b 0a 20 20 6d 7a 5f 75 69 6e 74  p, *q;.  mz_uint
115a0 38 20 63 30 20 3d 20 64 2d 3e 6d 5f 64 69 63 74  8 c0 = d->m_dict
115b0 5b 70 6f 73 20 2b 20 6d 61 74 63 68 5f 6c 65 6e  [pos + match_len
115c0 5d 2c 20 63 31 20 3d 20 64 2d 3e 6d 5f 64 69 63  ], c1 = d->m_dic
115d0 74 5b 70 6f 73 20 2b 20 6d 61 74 63 68 5f 6c 65  t[pos + match_le
115e0 6e 20 2d 20 31 5d 3b 0a 20 20 4d 5a 5f 41 53 53  n - 1];.  MZ_ASS
115f0 45 52 54 28 6d 61 78 5f 6d 61 74 63 68 5f 6c 65  ERT(max_match_le
11600 6e 20 3c 3d 20 54 44 45 46 4c 5f 4d 41 58 5f 4d  n <= TDEFL_MAX_M
11610 41 54 43 48 5f 4c 45 4e 29 3b 20 69 66 20 28 6d  ATCH_LEN); if (m
11620 61 78 5f 6d 61 74 63 68 5f 6c 65 6e 20 3c 3d 20  ax_match_len <= 
11630 6d 61 74 63 68 5f 6c 65 6e 29 20 72 65 74 75 72  match_len) retur
11640 6e 3b 0a 20 20 66 6f 72 20 28 20 3b 20 3b 20 29  n;.  for ( ; ; )
11650 0a 20 20 7b 0a 20 20 20 20 66 6f 72 20 28 20 3b  .  {.    for ( ;
11660 20 3b 20 29 0a 20 20 20 20 7b 0a 20 20 20 20 20   ; ).    {.     
11670 20 69 66 20 28 2d 2d 6e 75 6d 5f 70 72 6f 62 65   if (--num_probe
11680 73 5f 6c 65 66 74 20 3d 3d 20 30 29 20 72 65 74  s_left == 0) ret
11690 75 72 6e 3b 0a 20 20 20 20 20 20 23 64 65 66 69  urn;.      #defi
116a0 6e 65 20 54 44 45 46 4c 5f 50 52 4f 42 45 20 5c  ne TDEFL_PROBE \
116b0 0a 20 20 20 20 20 20 20 20 6e 65 78 74 5f 70 72  .        next_pr
116c0 6f 62 65 5f 70 6f 73 20 3d 20 64 2d 3e 6d 5f 6e  obe_pos = d->m_n
116d0 65 78 74 5b 70 72 6f 62 65 5f 70 6f 73 5d 3b 20  ext[probe_pos]; 
116e0 5c 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 21  \.        if ((!
116f0 6e 65 78 74 5f 70 72 6f 62 65 5f 70 6f 73 29 20  next_probe_pos) 
11700 7c 7c 20 28 28 64 69 73 74 20 3d 20 28 6d 7a 5f  || ((dist = (mz_
11710 75 69 6e 74 31 36 29 28 6c 6f 6f 6b 61 68 65 61  uint16)(lookahea
11720 64 5f 70 6f 73 20 2d 20 6e 65 78 74 5f 70 72 6f  d_pos - next_pro
11730 62 65 5f 70 6f 73 29 29 20 3e 20 6d 61 78 5f 64  be_pos)) > max_d
11740 69 73 74 29 29 20 72 65 74 75 72 6e 3b 20 5c 0a  ist)) return; \.
11750 20 20 20 20 20 20 20 20 70 72 6f 62 65 5f 70 6f          probe_po
11760 73 20 3d 20 6e 65 78 74 5f 70 72 6f 62 65 5f 70  s = next_probe_p
11770 6f 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  os & TDEFL_LZ_DI
11780 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 3b 20 5c 0a  CT_SIZE_MASK; \.
11790 20 20 20 20 20 20 20 20 69 66 20 28 28 64 2d 3e          if ((d->
117a0 6d 5f 64 69 63 74 5b 70 72 6f 62 65 5f 70 6f 73  m_dict[probe_pos
117b0 20 2b 20 6d 61 74 63 68 5f 6c 65 6e 5d 20 3d 3d   + match_len] ==
117c0 20 63 30 29 20 26 26 20 28 64 2d 3e 6d 5f 64 69   c0) && (d->m_di
117d0 63 74 5b 70 72 6f 62 65 5f 70 6f 73 20 2b 20 6d  ct[probe_pos + m
117e0 61 74 63 68 5f 6c 65 6e 20 2d 20 31 5d 20 3d 3d  atch_len - 1] ==
117f0 20 63 31 29 29 20 62 72 65 61 6b 3b 0a 20 20 20   c1)) break;.   
11800 20 20 20 54 44 45 46 4c 5f 50 52 4f 42 45 3b 20     TDEFL_PROBE; 
11810 54 44 45 46 4c 5f 50 52 4f 42 45 3b 20 54 44 45  TDEFL_PROBE; TDE
11820 46 4c 5f 50 52 4f 42 45 3b 0a 20 20 20 20 7d 0a  FL_PROBE;.    }.
11830 20 20 20 20 69 66 20 28 21 64 69 73 74 29 20 62      if (!dist) b
11840 72 65 61 6b 3b 0a 20 20 20 20 70 20 3d 20 73 3b  reak;.    p = s;
11850 20 71 20 3d 20 64 2d 3e 6d 5f 64 69 63 74 20 2b   q = d->m_dict +
11860 20 70 72 6f 62 65 5f 70 6f 73 3b 0a 20 20 20 20   probe_pos;.    
11870 66 6f 72 20 28 70 72 6f 62 65 5f 6c 65 6e 20 3d  for (probe_len =
11880 20 30 3b 20 70 72 6f 62 65 5f 6c 65 6e 20 3c 20   0; probe_len < 
11890 6d 61 78 5f 6d 61 74 63 68 5f 6c 65 6e 3b 20 70  max_match_len; p
118a0 72 6f 62 65 5f 6c 65 6e 2b 2b 29 0a 20 20 20 20  robe_len++).    
118b0 20 20 20 20 69 66 20 28 2a 70 2b 2b 20 21 3d 20      if (*p++ != 
118c0 2a 71 2b 2b 29 20 62 72 65 61 6b 3b 0a 20 20 20  *q++) break;.   
118d0 20 69 66 20 28 70 72 6f 62 65 5f 6c 65 6e 20 3e   if (probe_len >
118e0 20 6d 61 74 63 68 5f 6c 65 6e 29 0a 20 20 20 20   match_len).    
118f0 7b 0a 20 20 20 20 20 20 2a 70 4d 61 74 63 68 5f  {.      *pMatch_
11900 64 69 73 74 20 3d 20 64 69 73 74 3b 20 69 66 20  dist = dist; if 
11910 28 28 2a 70 4d 61 74 63 68 5f 6c 65 6e 20 3d 20  ((*pMatch_len = 
11920 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 70 72 6f 62  match_len = prob
11930 65 5f 6c 65 6e 29 20 3d 3d 20 6d 61 78 5f 6d 61  e_len) == max_ma
11940 74 63 68 5f 6c 65 6e 29 20 72 65 74 75 72 6e 3b  tch_len) return;
11950 0a 20 20 20 20 20 20 63 30 20 3d 20 64 2d 3e 6d  .      c0 = d->m
11960 5f 64 69 63 74 5b 70 6f 73 20 2b 20 6d 61 74 63  _dict[pos + matc
11970 68 5f 6c 65 6e 5d 3b 20 63 31 20 3d 20 64 2d 3e  h_len]; c1 = d->
11980 6d 5f 64 69 63 74 5b 70 6f 73 20 2b 20 6d 61 74  m_dict[pos + mat
11990 63 68 5f 6c 65 6e 20 2d 20 31 5d 3b 0a 20 20 20  ch_len - 1];.   
119a0 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20   }.  }.}.#endif 
119b0 2f 2f 20 23 69 66 20 4d 49 4e 49 5a 5f 55 53 45  // #if MINIZ_USE
119c0 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f 41 44 53  _UNALIGNED_LOADS
119d0 5f 41 4e 44 5f 53 54 4f 52 45 53 0a 0a 23 69 66  _AND_STORES..#if
119e0 20 4d 49 4e 49 5a 5f 55 53 45 5f 55 4e 41 4c 49   MINIZ_USE_UNALI
119f0 47 4e 45 44 5f 4c 4f 41 44 53 5f 41 4e 44 5f 53  GNED_LOADS_AND_S
11a00 54 4f 52 45 53 20 26 26 20 4d 49 4e 49 5a 5f 4c  TORES && MINIZ_L
11a10 49 54 54 4c 45 5f 45 4e 44 49 41 4e 0a 73 74 61  ITTLE_ENDIAN.sta
11a20 74 69 63 20 6d 7a 5f 62 6f 6f 6c 20 74 64 65 66  tic mz_bool tdef
11a30 6c 5f 63 6f 6d 70 72 65 73 73 5f 66 61 73 74 28  l_compress_fast(
11a40 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72  tdefl_compressor
11a50 20 2a 64 29 0a 7b 0a 20 20 2f 2f 20 46 61 73 74   *d).{.  // Fast
11a60 65 72 2c 20 6d 69 6e 69 6d 61 6c 6c 79 20 66 65  er, minimally fe
11a70 61 74 75 72 65 64 20 4c 5a 52 57 31 2d 73 74 79  atured LZRW1-sty
11a80 6c 65 20 6d 61 74 63 68 2b 70 61 72 73 65 20 6c  le match+parse l
11a90 6f 6f 70 20 77 69 74 68 20 62 65 74 74 65 72 20  oop with better 
11aa0 72 65 67 69 73 74 65 72 20 75 74 69 6c 69 7a 61  register utiliza
11ab0 74 69 6f 6e 2e 20 49 6e 74 65 6e 64 65 64 20 66  tion. Intended f
11ac0 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  or applications 
11ad0 77 68 65 72 65 20 72 61 77 20 74 68 72 6f 75 67  where raw throug
11ae0 68 70 75 74 20 69 73 20 76 61 6c 75 65 64 20 6d  hput is valued m
11af0 6f 72 65 20 68 69 67 68 6c 79 20 74 68 61 6e 20  ore highly than 
11b00 72 61 74 69 6f 2e 0a 20 20 6d 7a 5f 75 69 6e 74  ratio..  mz_uint
11b10 20 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20 3d   lookahead_pos =
11b20 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f   d->m_lookahead_
11b30 70 6f 73 2c 20 6c 6f 6f 6b 61 68 65 61 64 5f 73  pos, lookahead_s
11b40 69 7a 65 20 3d 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61  ize = d->m_looka
11b50 68 65 61 64 5f 73 69 7a 65 2c 20 64 69 63 74 5f  head_size, dict_
11b60 73 69 7a 65 20 3d 20 64 2d 3e 6d 5f 64 69 63 74  size = d->m_dict
11b70 5f 73 69 7a 65 2c 20 74 6f 74 61 6c 5f 6c 7a 5f  _size, total_lz_
11b80 62 79 74 65 73 20 3d 20 64 2d 3e 6d 5f 74 6f 74  bytes = d->m_tot
11b90 61 6c 5f 6c 7a 5f 62 79 74 65 73 2c 20 6e 75 6d  al_lz_bytes, num
11ba0 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20 64 2d  _flags_left = d-
11bb0 3e 6d 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66  >m_num_flags_lef
11bc0 74 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  t;.  mz_uint8 *p
11bd0 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3d 20 64 2d  LZ_code_buf = d-
11be0 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 2c  >m_pLZ_code_buf,
11bf0 20 2a 70 4c 5a 5f 66 6c 61 67 73 20 3d 20 64 2d   *pLZ_flags = d-
11c00 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 3b 0a 20 20  >m_pLZ_flags;.  
11c10 6d 7a 5f 75 69 6e 74 20 63 75 72 5f 70 6f 73 20  mz_uint cur_pos 
11c20 3d 20 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20  = lookahead_pos 
11c30 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f  & TDEFL_LZ_DICT_
11c40 53 49 5a 45 5f 4d 41 53 4b 3b 0a 0a 20 20 77 68  SIZE_MASK;..  wh
11c50 69 6c 65 20 28 28 64 2d 3e 6d 5f 73 72 63 5f 62  ile ((d->m_src_b
11c60 75 66 5f 6c 65 66 74 29 20 7c 7c 20 28 28 64 2d  uf_left) || ((d-
11c70 3e 6d 5f 66 6c 75 73 68 29 20 26 26 20 28 6c 6f  >m_flush) && (lo
11c80 6f 6b 61 68 65 61 64 5f 73 69 7a 65 29 29 29 0a  okahead_size))).
11c90 20 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 6d 7a    {.    const mz
11ca0 5f 75 69 6e 74 20 54 44 45 46 4c 5f 43 4f 4d 50  _uint TDEFL_COMP
11cb0 5f 46 41 53 54 5f 4c 4f 4f 4b 41 48 45 41 44 5f  _FAST_LOOKAHEAD_
11cc0 53 49 5a 45 20 3d 20 34 30 39 36 3b 0a 20 20 20  SIZE = 4096;.   
11cd0 20 6d 7a 5f 75 69 6e 74 20 64 73 74 5f 70 6f 73   mz_uint dst_pos
11ce0 20 3d 20 28 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f   = (lookahead_po
11cf0 73 20 2b 20 6c 6f 6f 6b 61 68 65 61 64 5f 73 69  s + lookahead_si
11d00 7a 65 29 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44  ze) & TDEFL_LZ_D
11d10 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 3b 0a 20  ICT_SIZE_MASK;. 
11d20 20 20 20 6d 7a 5f 75 69 6e 74 20 6e 75 6d 5f 62     mz_uint num_b
11d30 79 74 65 73 5f 74 6f 5f 70 72 6f 63 65 73 73 20  ytes_to_process 
11d40 3d 20 28 6d 7a 5f 75 69 6e 74 29 4d 5a 5f 4d 49  = (mz_uint)MZ_MI
11d50 4e 28 64 2d 3e 6d 5f 73 72 63 5f 62 75 66 5f 6c  N(d->m_src_buf_l
11d60 65 66 74 2c 20 54 44 45 46 4c 5f 43 4f 4d 50 5f  eft, TDEFL_COMP_
11d70 46 41 53 54 5f 4c 4f 4f 4b 41 48 45 41 44 5f 53  FAST_LOOKAHEAD_S
11d80 49 5a 45 20 2d 20 6c 6f 6f 6b 61 68 65 61 64 5f  IZE - lookahead_
11d90 73 69 7a 65 29 3b 0a 20 20 20 20 64 2d 3e 6d 5f  size);.    d->m_
11da0 73 72 63 5f 62 75 66 5f 6c 65 66 74 20 2d 3d 20  src_buf_left -= 
11db0 6e 75 6d 5f 62 79 74 65 73 5f 74 6f 5f 70 72 6f  num_bytes_to_pro
11dc0 63 65 73 73 3b 0a 20 20 20 20 6c 6f 6f 6b 61 68  cess;.    lookah
11dd0 65 61 64 5f 73 69 7a 65 20 2b 3d 20 6e 75 6d 5f  ead_size += num_
11de0 62 79 74 65 73 5f 74 6f 5f 70 72 6f 63 65 73 73  bytes_to_process
11df0 3b 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 6e 75  ;..    while (nu
11e00 6d 5f 62 79 74 65 73 5f 74 6f 5f 70 72 6f 63 65  m_bytes_to_proce
11e10 73 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ss).    {.      
11e20 6d 7a 5f 75 69 6e 74 33 32 20 6e 20 3d 20 4d 5a  mz_uint32 n = MZ
11e30 5f 4d 49 4e 28 54 44 45 46 4c 5f 4c 5a 5f 44 49  _MIN(TDEFL_LZ_DI
11e40 43 54 5f 53 49 5a 45 20 2d 20 64 73 74 5f 70 6f  CT_SIZE - dst_po
11e50 73 2c 20 6e 75 6d 5f 62 79 74 65 73 5f 74 6f 5f  s, num_bytes_to_
11e60 70 72 6f 63 65 73 73 29 3b 0a 20 20 20 20 20 20  process);.      
11e70 6d 65 6d 63 70 79 28 64 2d 3e 6d 5f 64 69 63 74  memcpy(d->m_dict
11e80 20 2b 20 64 73 74 5f 70 6f 73 2c 20 64 2d 3e 6d   + dst_pos, d->m
11e90 5f 70 53 72 63 2c 20 6e 29 3b 0a 20 20 20 20 20  _pSrc, n);.     
11ea0 20 69 66 20 28 64 73 74 5f 70 6f 73 20 3c 20 28   if (dst_pos < (
11eb0 54 44 45 46 4c 5f 4d 41 58 5f 4d 41 54 43 48 5f  TDEFL_MAX_MATCH_
11ec0 4c 45 4e 20 2d 20 31 29 29 0a 20 20 20 20 20 20  LEN - 1)).      
11ed0 20 20 6d 65 6d 63 70 79 28 64 2d 3e 6d 5f 64 69    memcpy(d->m_di
11ee0 63 74 20 2b 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  ct + TDEFL_LZ_DI
11ef0 43 54 5f 53 49 5a 45 20 2b 20 64 73 74 5f 70 6f  CT_SIZE + dst_po
11f00 73 2c 20 64 2d 3e 6d 5f 70 53 72 63 2c 20 4d 5a  s, d->m_pSrc, MZ
11f10 5f 4d 49 4e 28 6e 2c 20 28 54 44 45 46 4c 5f 4d  _MIN(n, (TDEFL_M
11f20 41 58 5f 4d 41 54 43 48 5f 4c 45 4e 20 2d 20 31  AX_MATCH_LEN - 1
11f30 29 20 2d 20 64 73 74 5f 70 6f 73 29 29 3b 0a 20  ) - dst_pos));. 
11f40 20 20 20 20 20 64 2d 3e 6d 5f 70 53 72 63 20 2b       d->m_pSrc +
11f50 3d 20 6e 3b 0a 20 20 20 20 20 20 64 73 74 5f 70  = n;.      dst_p
11f60 6f 73 20 3d 20 28 64 73 74 5f 70 6f 73 20 2b 20  os = (dst_pos + 
11f70 6e 29 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  n) & TDEFL_LZ_DI
11f80 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 3b 0a 20 20  CT_SIZE_MASK;.  
11f90 20 20 20 20 6e 75 6d 5f 62 79 74 65 73 5f 74 6f      num_bytes_to
11fa0 5f 70 72 6f 63 65 73 73 20 2d 3d 20 6e 3b 0a 20  _process -= n;. 
11fb0 20 20 20 7d 0a 0a 20 20 20 20 64 69 63 74 5f 73     }..    dict_s
11fc0 69 7a 65 20 3d 20 4d 5a 5f 4d 49 4e 28 54 44 45  ize = MZ_MIN(TDE
11fd0 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 20  FL_LZ_DICT_SIZE 
11fe0 2d 20 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65  - lookahead_size
11ff0 2c 20 64 69 63 74 5f 73 69 7a 65 29 3b 0a 20 20  , dict_size);.  
12000 20 20 69 66 20 28 28 21 64 2d 3e 6d 5f 66 6c 75    if ((!d->m_flu
12010 73 68 29 20 26 26 20 28 6c 6f 6f 6b 61 68 65 61  sh) && (lookahea
12020 64 5f 73 69 7a 65 20 3c 20 54 44 45 46 4c 5f 43  d_size < TDEFL_C
12030 4f 4d 50 5f 46 41 53 54 5f 4c 4f 4f 4b 41 48 45  OMP_FAST_LOOKAHE
12040 41 44 5f 53 49 5a 45 29 29 20 62 72 65 61 6b 3b  AD_SIZE)) break;
12050 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 6c 6f 6f  ..    while (loo
12060 6b 61 68 65 61 64 5f 73 69 7a 65 20 3e 3d 20 34  kahead_size >= 4
12070 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 6d 7a  ).    {.      mz
12080 5f 75 69 6e 74 20 63 75 72 5f 6d 61 74 63 68 5f  _uint cur_match_
12090 64 69 73 74 2c 20 63 75 72 5f 6d 61 74 63 68 5f  dist, cur_match_
120a0 6c 65 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 6d  len = 1;.      m
120b0 7a 5f 75 69 6e 74 38 20 2a 70 43 75 72 5f 64 69  z_uint8 *pCur_di
120c0 63 74 20 3d 20 64 2d 3e 6d 5f 64 69 63 74 20 2b  ct = d->m_dict +
120d0 20 63 75 72 5f 70 6f 73 3b 0a 20 20 20 20 20 20   cur_pos;.      
120e0 6d 7a 5f 75 69 6e 74 20 66 69 72 73 74 5f 74 72  mz_uint first_tr
120f0 69 67 72 61 6d 20 3d 20 28 2a 28 63 6f 6e 73 74  igram = (*(const
12100 20 6d 7a 5f 75 69 6e 74 33 32 20 2a 29 70 43 75   mz_uint32 *)pCu
12110 72 5f 64 69 63 74 29 20 26 20 30 78 46 46 46 46  r_dict) & 0xFFFF
12120 46 46 3b 0a 20 20 20 20 20 20 6d 7a 5f 75 69 6e  FF;.      mz_uin
12130 74 20 68 61 73 68 20 3d 20 28 66 69 72 73 74 5f  t hash = (first_
12140 74 72 69 67 72 61 6d 20 5e 20 28 66 69 72 73 74  trigram ^ (first
12150 5f 74 72 69 67 72 61 6d 20 3e 3e 20 28 32 34 20  _trigram >> (24 
12160 2d 20 28 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48  - (TDEFL_LZ_HASH
12170 5f 42 49 54 53 20 2d 20 38 29 29 29 29 20 26 20  _BITS - 8)))) & 
12180 54 44 45 46 4c 5f 4c 45 56 45 4c 31 5f 48 41 53  TDEFL_LEVEL1_HAS
12190 48 5f 53 49 5a 45 5f 4d 41 53 4b 3b 0a 20 20 20  H_SIZE_MASK;.   
121a0 20 20 20 6d 7a 5f 75 69 6e 74 20 70 72 6f 62 65     mz_uint probe
121b0 5f 70 6f 73 20 3d 20 64 2d 3e 6d 5f 68 61 73 68  _pos = d->m_hash
121c0 5b 68 61 73 68 5d 3b 0a 20 20 20 20 20 20 64 2d  [hash];.      d-
121d0 3e 6d 5f 68 61 73 68 5b 68 61 73 68 5d 20 3d 20  >m_hash[hash] = 
121e0 28 6d 7a 5f 75 69 6e 74 31 36 29 6c 6f 6f 6b 61  (mz_uint16)looka
121f0 68 65 61 64 5f 70 6f 73 3b 0a 0a 20 20 20 20 20  head_pos;..     
12200 20 69 66 20 28 28 28 63 75 72 5f 6d 61 74 63 68   if (((cur_match
12210 5f 64 69 73 74 20 3d 20 28 6d 7a 5f 75 69 6e 74  _dist = (mz_uint
12220 31 36 29 28 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f  16)(lookahead_po
12230 73 20 2d 20 70 72 6f 62 65 5f 70 6f 73 29 29 20  s - probe_pos)) 
12240 3c 3d 20 64 69 63 74 5f 73 69 7a 65 29 20 26 26  <= dict_size) &&
12250 20 28 28 2a 28 63 6f 6e 73 74 20 6d 7a 5f 75 69   ((*(const mz_ui
12260 6e 74 33 32 20 2a 29 28 64 2d 3e 6d 5f 64 69 63  nt32 *)(d->m_dic
12270 74 20 2b 20 28 70 72 6f 62 65 5f 70 6f 73 20 26  t + (probe_pos &
12280 3d 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f  = TDEFL_LZ_DICT_
12290 53 49 5a 45 5f 4d 41 53 4b 29 29 20 26 20 30 78  SIZE_MASK)) & 0x
122a0 46 46 46 46 46 46 29 20 3d 3d 20 66 69 72 73 74  FFFFFF) == first
122b0 5f 74 72 69 67 72 61 6d 29 29 0a 20 20 20 20 20  _trigram)).     
122c0 20 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74   {.        const
122d0 20 6d 7a 5f 75 69 6e 74 31 36 20 2a 70 20 3d 20   mz_uint16 *p = 
122e0 28 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 31 36  (const mz_uint16
122f0 20 2a 29 70 43 75 72 5f 64 69 63 74 3b 0a 20 20   *)pCur_dict;.  
12300 20 20 20 20 20 20 63 6f 6e 73 74 20 6d 7a 5f 75        const mz_u
12310 69 6e 74 31 36 20 2a 71 20 3d 20 28 63 6f 6e 73  int16 *q = (cons
12320 74 20 6d 7a 5f 75 69 6e 74 31 36 20 2a 29 28 64  t mz_uint16 *)(d
12330 2d 3e 6d 5f 64 69 63 74 20 2b 20 70 72 6f 62 65  ->m_dict + probe
12340 5f 70 6f 73 29 3b 0a 20 20 20 20 20 20 20 20 6d  _pos);.        m
12350 7a 5f 75 69 6e 74 33 32 20 70 72 6f 62 65 5f 6c  z_uint32 probe_l
12360 65 6e 20 3d 20 33 32 3b 0a 20 20 20 20 20 20 20  en = 32;.       
12370 20 64 6f 20 7b 20 7d 20 77 68 69 6c 65 20 28 20   do { } while ( 
12380 28 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e 41 4c  (TDEFL_READ_UNAL
12390 49 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 70 29 20  IGNED_WORD(++p) 
123a0 3d 3d 20 54 44 45 46 4c 5f 52 45 41 44 5f 55 4e  == TDEFL_READ_UN
123b0 41 4c 49 47 4e 45 44 5f 57 4f 52 44 28 2b 2b 71  ALIGNED_WORD(++q
123c0 29 29 20 26 26 20 28 54 44 45 46 4c 5f 52 45 41  )) && (TDEFL_REA
123d0 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44  D_UNALIGNED_WORD
123e0 28 2b 2b 70 29 20 3d 3d 20 54 44 45 46 4c 5f 52  (++p) == TDEFL_R
123f0 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f  EAD_UNALIGNED_WO
12400 52 44 28 2b 2b 71 29 29 20 26 26 0a 20 20 20 20  RD(++q)) &&.    
12410 20 20 20 20 20 20 28 54 44 45 46 4c 5f 52 45 41        (TDEFL_REA
12420 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f 52 44  D_UNALIGNED_WORD
12430 28 2b 2b 70 29 20 3d 3d 20 54 44 45 46 4c 5f 52  (++p) == TDEFL_R
12440 45 41 44 5f 55 4e 41 4c 49 47 4e 45 44 5f 57 4f  EAD_UNALIGNED_WO
12450 52 44 28 2b 2b 71 29 29 20 26 26 20 28 54 44 45  RD(++q)) && (TDE
12460 46 4c 5f 52 45 41 44 5f 55 4e 41 4c 49 47 4e 45  FL_READ_UNALIGNE
12470 44 5f 57 4f 52 44 28 2b 2b 70 29 20 3d 3d 20 54  D_WORD(++p) == T
12480 44 45 46 4c 5f 52 45 41 44 5f 55 4e 41 4c 49 47  DEFL_READ_UNALIG
12490 4e 45 44 5f 57 4f 52 44 28 2b 2b 71 29 29 20 26  NED_WORD(++q)) &
124a0 26 20 28 2d 2d 70 72 6f 62 65 5f 6c 65 6e 20 3e  & (--probe_len >
124b0 20 30 29 20 29 3b 0a 20 20 20 20 20 20 20 20 63   0) );.        c
124c0 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 28  ur_match_len = (
124d0 28 6d 7a 5f 75 69 6e 74 29 28 70 20 2d 20 28 63  (mz_uint)(p - (c
124e0 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 31 36 20 2a  onst mz_uint16 *
124f0 29 70 43 75 72 5f 64 69 63 74 29 20 2a 20 32 29  )pCur_dict) * 2)
12500 20 2b 20 28 6d 7a 5f 75 69 6e 74 29 28 2a 28 63   + (mz_uint)(*(c
12510 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 29  onst mz_uint8 *)
12520 70 20 3d 3d 20 2a 28 63 6f 6e 73 74 20 6d 7a 5f  p == *(const mz_
12530 75 69 6e 74 38 20 2a 29 71 29 3b 0a 20 20 20 20  uint8 *)q);.    
12540 20 20 20 20 69 66 20 28 21 70 72 6f 62 65 5f 6c      if (!probe_l
12550 65 6e 29 0a 20 20 20 20 20 20 20 20 20 20 63 75  en).          cu
12560 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 63 75  r_match_len = cu
12570 72 5f 6d 61 74 63 68 5f 64 69 73 74 20 3f 20 54  r_match_dist ? T
12580 44 45 46 4c 5f 4d 41 58 5f 4d 41 54 43 48 5f 4c  DEFL_MAX_MATCH_L
12590 45 4e 20 3a 20 30 3b 0a 0a 20 20 20 20 20 20 20  EN : 0;..       
125a0 20 69 66 20 28 28 63 75 72 5f 6d 61 74 63 68 5f   if ((cur_match_
125b0 6c 65 6e 20 3c 20 54 44 45 46 4c 5f 4d 49 4e 5f  len < TDEFL_MIN_
125c0 4d 41 54 43 48 5f 4c 45 4e 29 20 7c 7c 20 28 28  MATCH_LEN) || ((
125d0 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 3d  cur_match_len ==
125e0 20 54 44 45 46 4c 5f 4d 49 4e 5f 4d 41 54 43 48   TDEFL_MIN_MATCH
125f0 5f 4c 45 4e 29 20 26 26 20 28 63 75 72 5f 6d 61  _LEN) && (cur_ma
12600 74 63 68 5f 64 69 73 74 20 3e 3d 20 38 55 2a 31  tch_dist >= 8U*1
12610 30 32 34 55 29 29 29 0a 20 20 20 20 20 20 20 20  024U))).        
12620 7b 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 5f  {.          cur_
12630 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 31 3b 0a 20  match_len = 1;. 
12640 20 20 20 20 20 20 20 20 20 2a 70 4c 5a 5f 63 6f           *pLZ_co
12650 64 65 5f 62 75 66 2b 2b 20 3d 20 28 6d 7a 5f 75  de_buf++ = (mz_u
12660 69 6e 74 38 29 66 69 72 73 74 5f 74 72 69 67 72  int8)first_trigr
12670 61 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 2a 70  am;.          *p
12680 4c 5a 5f 66 6c 61 67 73 20 3d 20 28 6d 7a 5f 75  LZ_flags = (mz_u
12690 69 6e 74 38 29 28 2a 70 4c 5a 5f 66 6c 61 67 73  int8)(*pLZ_flags
126a0 20 3e 3e 20 31 29 3b 0a 20 20 20 20 20 20 20 20   >> 1);.        
126b0 20 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e    d->m_huff_coun
126c0 74 5b 30 5d 5b 28 6d 7a 5f 75 69 6e 74 38 29 66  t[0][(mz_uint8)f
126d0 69 72 73 74 5f 74 72 69 67 72 61 6d 5d 2b 2b 3b  irst_trigram]++;
126e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
126f0 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
12700 7b 0a 20 20 20 20 20 20 20 20 20 20 6d 7a 5f 75  {.          mz_u
12710 69 6e 74 33 32 20 73 30 2c 20 73 31 3b 0a 20 20  int32 s0, s1;.  
12720 20 20 20 20 20 20 20 20 63 75 72 5f 6d 61 74 63          cur_matc
12730 68 5f 6c 65 6e 20 3d 20 4d 5a 5f 4d 49 4e 28 63  h_len = MZ_MIN(c
12740 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 2c 20 6c 6f  ur_match_len, lo
12750 6f 6b 61 68 65 61 64 5f 73 69 7a 65 29 3b 0a 0a  okahead_size);..
12760 20 20 20 20 20 20 20 20 20 20 4d 5a 5f 41 53 53            MZ_ASS
12770 45 52 54 28 28 63 75 72 5f 6d 61 74 63 68 5f 6c  ERT((cur_match_l
12780 65 6e 20 3e 3d 20 54 44 45 46 4c 5f 4d 49 4e 5f  en >= TDEFL_MIN_
12790 4d 41 54 43 48 5f 4c 45 4e 29 20 26 26 20 28 63  MATCH_LEN) && (c
127a0 75 72 5f 6d 61 74 63 68 5f 64 69 73 74 20 3e 3d  ur_match_dist >=
127b0 20 31 29 20 26 26 20 28 63 75 72 5f 6d 61 74 63   1) && (cur_matc
127c0 68 5f 64 69 73 74 20 3c 3d 20 54 44 45 46 4c 5f  h_dist <= TDEFL_
127d0 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 29 29 3b 0a  LZ_DICT_SIZE));.
127e0 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 5f 6d  .          cur_m
127f0 61 74 63 68 5f 64 69 73 74 2d 2d 3b 0a 0a 20 20  atch_dist--;..  
12800 20 20 20 20 20 20 20 20 70 4c 5a 5f 63 6f 64 65          pLZ_code
12810 5f 62 75 66 5b 30 5d 20 3d 20 28 6d 7a 5f 75 69  _buf[0] = (mz_ui
12820 6e 74 38 29 28 63 75 72 5f 6d 61 74 63 68 5f 6c  nt8)(cur_match_l
12830 65 6e 20 2d 20 54 44 45 46 4c 5f 4d 49 4e 5f 4d  en - TDEFL_MIN_M
12840 41 54 43 48 5f 4c 45 4e 29 3b 0a 20 20 20 20 20  ATCH_LEN);.     
12850 20 20 20 20 20 2a 28 6d 7a 5f 75 69 6e 74 31 36       *(mz_uint16
12860 20 2a 29 28 26 70 4c 5a 5f 63 6f 64 65 5f 62 75   *)(&pLZ_code_bu
12870 66 5b 31 5d 29 20 3d 20 28 6d 7a 5f 75 69 6e 74  f[1]) = (mz_uint
12880 31 36 29 63 75 72 5f 6d 61 74 63 68 5f 64 69 73  16)cur_match_dis
12890 74 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4c 5a  t;.          pLZ
128a0 5f 63 6f 64 65 5f 62 75 66 20 2b 3d 20 33 3b 0a  _code_buf += 3;.
128b0 20 20 20 20 20 20 20 20 20 20 2a 70 4c 5a 5f 66            *pLZ_f
128c0 6c 61 67 73 20 3d 20 28 6d 7a 5f 75 69 6e 74 38  lags = (mz_uint8
128d0 29 28 28 2a 70 4c 5a 5f 66 6c 61 67 73 20 3e 3e  )((*pLZ_flags >>
128e0 20 31 29 20 7c 20 30 78 38 30 29 3b 0a 0a 20 20   1) | 0x80);..  
128f0 20 20 20 20 20 20 20 20 73 30 20 3d 20 73 5f 74          s0 = s_t
12900 64 65 66 6c 5f 73 6d 61 6c 6c 5f 64 69 73 74 5f  defl_small_dist_
12910 73 79 6d 5b 63 75 72 5f 6d 61 74 63 68 5f 64 69  sym[cur_match_di
12920 73 74 20 26 20 35 31 31 5d 3b 0a 20 20 20 20 20  st & 511];.     
12930 20 20 20 20 20 73 31 20 3d 20 73 5f 74 64 65 66       s1 = s_tdef
12940 6c 5f 6c 61 72 67 65 5f 64 69 73 74 5f 73 79 6d  l_large_dist_sym
12950 5b 63 75 72 5f 6d 61 74 63 68 5f 64 69 73 74 20  [cur_match_dist 
12960 3e 3e 20 38 5d 3b 0a 20 20 20 20 20 20 20 20 20  >> 8];.         
12970 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74   d->m_huff_count
12980 5b 31 5d 5b 28 63 75 72 5f 6d 61 74 63 68 5f 64  [1][(cur_match_d
12990 69 73 74 20 3c 20 35 31 32 29 20 3f 20 73 30 20  ist < 512) ? s0 
129a0 3a 20 73 31 5d 2b 2b 3b 0a 0a 20 20 20 20 20 20  : s1]++;..      
129b0 20 20 20 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f      d->m_huff_co
129c0 75 6e 74 5b 30 5d 5b 73 5f 74 64 65 66 6c 5f 6c  unt[0][s_tdefl_l
129d0 65 6e 5f 73 79 6d 5b 63 75 72 5f 6d 61 74 63 68  en_sym[cur_match
129e0 5f 6c 65 6e 20 2d 20 54 44 45 46 4c 5f 4d 49 4e  _len - TDEFL_MIN
129f0 5f 4d 41 54 43 48 5f 4c 45 4e 5d 5d 2b 2b 3b 0a  _MATCH_LEN]]++;.
12a00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12a10 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20  }.      else.   
12a20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 2a 70 4c     {.        *pL
12a30 5a 5f 63 6f 64 65 5f 62 75 66 2b 2b 20 3d 20 28  Z_code_buf++ = (
12a40 6d 7a 5f 75 69 6e 74 38 29 66 69 72 73 74 5f 74  mz_uint8)first_t
12a50 72 69 67 72 61 6d 3b 0a 20 20 20 20 20 20 20 20  rigram;.        
12a60 2a 70 4c 5a 5f 66 6c 61 67 73 20 3d 20 28 6d 7a  *pLZ_flags = (mz
12a70 5f 75 69 6e 74 38 29 28 2a 70 4c 5a 5f 66 6c 61  _uint8)(*pLZ_fla
12a80 67 73 20 3e 3e 20 31 29 3b 0a 20 20 20 20 20 20  gs >> 1);.      
12a90 20 20 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e    d->m_huff_coun
12aa0 74 5b 30 5d 5b 28 6d 7a 5f 75 69 6e 74 38 29 66  t[0][(mz_uint8)f
12ab0 69 72 73 74 5f 74 72 69 67 72 61 6d 5d 2b 2b 3b  irst_trigram]++;
12ac0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
12ad0 69 66 20 28 2d 2d 6e 75 6d 5f 66 6c 61 67 73 5f  if (--num_flags_
12ae0 6c 65 66 74 20 3d 3d 20 30 29 20 7b 20 6e 75 6d  left == 0) { num
12af0 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20 38 3b  _flags_left = 8;
12b00 20 70 4c 5a 5f 66 6c 61 67 73 20 3d 20 70 4c 5a   pLZ_flags = pLZ
12b10 5f 63 6f 64 65 5f 62 75 66 2b 2b 3b 20 7d 0a 0a  _code_buf++; }..
12b20 20 20 20 20 20 20 74 6f 74 61 6c 5f 6c 7a 5f 62        total_lz_b
12b30 79 74 65 73 20 2b 3d 20 63 75 72 5f 6d 61 74 63  ytes += cur_matc
12b40 68 5f 6c 65 6e 3b 0a 20 20 20 20 20 20 6c 6f 6f  h_len;.      loo
12b50 6b 61 68 65 61 64 5f 70 6f 73 20 2b 3d 20 63 75  kahead_pos += cu
12b60 72 5f 6d 61 74 63 68 5f 6c 65 6e 3b 0a 20 20 20  r_match_len;.   
12b70 20 20 20 64 69 63 74 5f 73 69 7a 65 20 3d 20 4d     dict_size = M
12b80 5a 5f 4d 49 4e 28 64 69 63 74 5f 73 69 7a 65 20  Z_MIN(dict_size 
12b90 2b 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 2c  + cur_match_len,
12ba0 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53   TDEFL_LZ_DICT_S
12bb0 49 5a 45 29 3b 0a 20 20 20 20 20 20 63 75 72 5f  IZE);.      cur_
12bc0 70 6f 73 20 3d 20 28 63 75 72 5f 70 6f 73 20 2b  pos = (cur_pos +
12bd0 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 29 20   cur_match_len) 
12be0 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f  & TDEFL_LZ_DICT_
12bf0 53 49 5a 45 5f 4d 41 53 4b 3b 0a 20 20 20 20 20  SIZE_MASK;.     
12c00 20 4d 5a 5f 41 53 53 45 52 54 28 6c 6f 6f 6b 61   MZ_ASSERT(looka
12c10 68 65 61 64 5f 73 69 7a 65 20 3e 3d 20 63 75 72  head_size >= cur
12c20 5f 6d 61 74 63 68 5f 6c 65 6e 29 3b 0a 20 20 20  _match_len);.   
12c30 20 20 20 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a     lookahead_siz
12c40 65 20 2d 3d 20 63 75 72 5f 6d 61 74 63 68 5f 6c  e -= cur_match_l
12c50 65 6e 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 70  en;..      if (p
12c60 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3e 20 26 64  LZ_code_buf > &d
12c70 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75 66 5b  ->m_lz_code_buf[
12c80 54 44 45 46 4c 5f 4c 5a 5f 43 4f 44 45 5f 42 55  TDEFL_LZ_CODE_BU
12c90 46 5f 53 49 5a 45 20 2d 20 38 5d 29 0a 20 20 20  F_SIZE - 8]).   
12ca0 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74     {.        int
12cb0 20 6e 3b 0a 20 20 20 20 20 20 20 20 64 2d 3e 6d   n;.        d->m
12cc0 5f 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20 3d  _lookahead_pos =
12cd0 20 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 3b 20   lookahead_pos; 
12ce0 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73  d->m_lookahead_s
12cf0 69 7a 65 20 3d 20 6c 6f 6f 6b 61 68 65 61 64 5f  ize = lookahead_
12d00 73 69 7a 65 3b 20 64 2d 3e 6d 5f 64 69 63 74 5f  size; d->m_dict_
12d10 73 69 7a 65 20 3d 20 64 69 63 74 5f 73 69 7a 65  size = dict_size
12d20 3b 0a 20 20 20 20 20 20 20 20 64 2d 3e 6d 5f 74  ;.        d->m_t
12d30 6f 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 20 3d 20  otal_lz_bytes = 
12d40 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 3b 20  total_lz_bytes; 
12d50 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75  d->m_pLZ_code_bu
12d60 66 20 3d 20 70 4c 5a 5f 63 6f 64 65 5f 62 75 66  f = pLZ_code_buf
12d70 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73  ; d->m_pLZ_flags
12d80 20 3d 20 70 4c 5a 5f 66 6c 61 67 73 3b 20 64 2d   = pLZ_flags; d-
12d90 3e 6d 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66  >m_num_flags_lef
12da0 74 20 3d 20 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65  t = num_flags_le
12db0 66 74 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ft;.        if (
12dc0 28 6e 20 3d 20 74 64 65 66 6c 5f 66 6c 75 73 68  (n = tdefl_flush
12dd0 5f 62 6c 6f 63 6b 28 64 2c 20 30 29 29 20 21 3d  _block(d, 0)) !=
12de0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 72 65   0).          re
12df0 74 75 72 6e 20 28 6e 20 3c 20 30 29 20 3f 20 4d  turn (n < 0) ? M
12e00 5a 5f 46 41 4c 53 45 20 3a 20 4d 5a 5f 54 52 55  Z_FALSE : MZ_TRU
12e10 45 3b 0a 20 20 20 20 20 20 20 20 74 6f 74 61 6c  E;.        total
12e20 5f 6c 7a 5f 62 79 74 65 73 20 3d 20 64 2d 3e 6d  _lz_bytes = d->m
12e30 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 3b  _total_lz_bytes;
12e40 20 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3d 20   pLZ_code_buf = 
12e50 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75  d->m_pLZ_code_bu
12e60 66 3b 20 70 4c 5a 5f 66 6c 61 67 73 20 3d 20 64  f; pLZ_flags = d
12e70 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 3b 20 6e  ->m_pLZ_flags; n
12e80 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20  um_flags_left = 
12e90 64 2d 3e 6d 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c  d->m_num_flags_l
12ea0 65 66 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eft;.      }.   
12eb0 20 7d 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 6c   }..    while (l
12ec0 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 29 0a 20  ookahead_size). 
12ed0 20 20 20 7b 0a 20 20 20 20 20 20 6d 7a 5f 75 69     {.      mz_ui
12ee0 6e 74 38 20 6c 69 74 20 3d 20 64 2d 3e 6d 5f 64  nt8 lit = d->m_d
12ef0 69 63 74 5b 63 75 72 5f 70 6f 73 5d 3b 0a 0a 20  ict[cur_pos];.. 
12f00 20 20 20 20 20 74 6f 74 61 6c 5f 6c 7a 5f 62 79       total_lz_by
12f10 74 65 73 2b 2b 3b 0a 20 20 20 20 20 20 2a 70 4c  tes++;.      *pL
12f20 5a 5f 63 6f 64 65 5f 62 75 66 2b 2b 20 3d 20 6c  Z_code_buf++ = l
12f30 69 74 3b 0a 20 20 20 20 20 20 2a 70 4c 5a 5f 66  it;.      *pLZ_f
12f40 6c 61 67 73 20 3d 20 28 6d 7a 5f 75 69 6e 74 38  lags = (mz_uint8
12f50 29 28 2a 70 4c 5a 5f 66 6c 61 67 73 20 3e 3e 20  )(*pLZ_flags >> 
12f60 31 29 3b 0a 20 20 20 20 20 20 69 66 20 28 2d 2d  1);.      if (--
12f70 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d  num_flags_left =
12f80 3d 20 30 29 20 7b 20 6e 75 6d 5f 66 6c 61 67 73  = 0) { num_flags
12f90 5f 6c 65 66 74 20 3d 20 38 3b 20 70 4c 5a 5f 66  _left = 8; pLZ_f
12fa0 6c 61 67 73 20 3d 20 70 4c 5a 5f 63 6f 64 65 5f  lags = pLZ_code_
12fb0 62 75 66 2b 2b 3b 20 7d 0a 0a 20 20 20 20 20 20  buf++; }..      
12fc0 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b  d->m_huff_count[
12fd0 30 5d 5b 6c 69 74 5d 2b 2b 3b 0a 0a 20 20 20 20  0][lit]++;..    
12fe0 20 20 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 2b    lookahead_pos+
12ff0 2b 3b 0a 20 20 20 20 20 20 64 69 63 74 5f 73 69  +;.      dict_si
13000 7a 65 20 3d 20 4d 5a 5f 4d 49 4e 28 64 69 63 74  ze = MZ_MIN(dict
13010 5f 73 69 7a 65 20 2b 20 31 2c 20 54 44 45 46 4c  _size + 1, TDEFL
13020 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 29 3b 0a  _LZ_DICT_SIZE);.
13030 20 20 20 20 20 20 63 75 72 5f 70 6f 73 20 3d 20        cur_pos = 
13040 28 63 75 72 5f 70 6f 73 20 2b 20 31 29 20 26 20  (cur_pos + 1) & 
13050 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49  TDEFL_LZ_DICT_SI
13060 5a 45 5f 4d 41 53 4b 3b 0a 20 20 20 20 20 20 6c  ZE_MASK;.      l
13070 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 2d 2d 3b  ookahead_size--;
13080 0a 0a 20 20 20 20 20 20 69 66 20 28 70 4c 5a 5f  ..      if (pLZ_
13090 63 6f 64 65 5f 62 75 66 20 3e 20 26 64 2d 3e 6d  code_buf > &d->m
130a0 5f 6c 7a 5f 63 6f 64 65 5f 62 75 66 5b 54 44 45  _lz_code_buf[TDE
130b0 46 4c 5f 4c 5a 5f 43 4f 44 45 5f 42 55 46 5f 53  FL_LZ_CODE_BUF_S
130c0 49 5a 45 20 2d 20 38 5d 29 0a 20 20 20 20 20 20  IZE - 8]).      
130d0 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e 3b  {.        int n;
130e0 0a 20 20 20 20 20 20 20 20 64 2d 3e 6d 5f 6c 6f  .        d->m_lo
130f0 6f 6b 61 68 65 61 64 5f 70 6f 73 20 3d 20 6c 6f  okahead_pos = lo
13100 6f 6b 61 68 65 61 64 5f 70 6f 73 3b 20 64 2d 3e  okahead_pos; d->
13110 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65  m_lookahead_size
13120 20 3d 20 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a   = lookahead_siz
13130 65 3b 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a  e; d->m_dict_siz
13140 65 20 3d 20 64 69 63 74 5f 73 69 7a 65 3b 0a 20  e = dict_size;. 
13150 20 20 20 20 20 20 20 64 2d 3e 6d 5f 74 6f 74 61         d->m_tota
13160 6c 5f 6c 7a 5f 62 79 74 65 73 20 3d 20 74 6f 74  l_lz_bytes = tot
13170 61 6c 5f 6c 7a 5f 62 79 74 65 73 3b 20 64 2d 3e  al_lz_bytes; d->
13180 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3d  m_pLZ_code_buf =
13190 20 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 3b 20 64   pLZ_code_buf; d
131a0 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 20 3d 20  ->m_pLZ_flags = 
131b0 70 4c 5a 5f 66 6c 61 67 73 3b 20 64 2d 3e 6d 5f  pLZ_flags; d->m_
131c0 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d  num_flags_left =
131d0 20 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 3b   num_flags_left;
131e0 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20  .        if ((n 
131f0 3d 20 74 64 65 66 6c 5f 66 6c 75 73 68 5f 62 6c  = tdefl_flush_bl
13200 6f 63 6b 28 64 2c 20 30 29 29 20 21 3d 20 30 29  ock(d, 0)) != 0)
13210 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
13220 6e 20 28 6e 20 3c 20 30 29 20 3f 20 4d 5a 5f 46  n (n < 0) ? MZ_F
13230 41 4c 53 45 20 3a 20 4d 5a 5f 54 52 55 45 3b 0a  ALSE : MZ_TRUE;.
13240 20 20 20 20 20 20 20 20 74 6f 74 61 6c 5f 6c 7a          total_lz
13250 5f 62 79 74 65 73 20 3d 20 64 2d 3e 6d 5f 74 6f  _bytes = d->m_to
13260 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 3b 20 70 4c  tal_lz_bytes; pL
13270 5a 5f 63 6f 64 65 5f 62 75 66 20 3d 20 64 2d 3e  Z_code_buf = d->
13280 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 3b 20  m_pLZ_code_buf; 
13290 70 4c 5a 5f 66 6c 61 67 73 20 3d 20 64 2d 3e 6d  pLZ_flags = d->m
132a0 5f 70 4c 5a 5f 66 6c 61 67 73 3b 20 6e 75 6d 5f  _pLZ_flags; num_
132b0 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20 64 2d 3e  flags_left = d->
132c0 6d 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74  m_num_flags_left
132d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
132e0 20 20 7d 0a 0a 20 20 64 2d 3e 6d 5f 6c 6f 6f 6b    }..  d->m_look
132f0 61 68 65 61 64 5f 70 6f 73 20 3d 20 6c 6f 6f 6b  ahead_pos = look
13300 61 68 65 61 64 5f 70 6f 73 3b 20 64 2d 3e 6d 5f  ahead_pos; d->m_
13310 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 20 3d  lookahead_size =
13320 20 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 3b   lookahead_size;
13330 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a 65 20   d->m_dict_size 
13340 3d 20 64 69 63 74 5f 73 69 7a 65 3b 0a 20 20 64  = dict_size;.  d
13350 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74  ->m_total_lz_byt
13360 65 73 20 3d 20 74 6f 74 61 6c 5f 6c 7a 5f 62 79  es = total_lz_by
13370 74 65 73 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f  tes; d->m_pLZ_co
13380 64 65 5f 62 75 66 20 3d 20 70 4c 5a 5f 63 6f 64  de_buf = pLZ_cod
13390 65 5f 62 75 66 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f  e_buf; d->m_pLZ_
133a0 66 6c 61 67 73 20 3d 20 70 4c 5a 5f 66 6c 61 67  flags = pLZ_flag
133b0 73 3b 20 64 2d 3e 6d 5f 6e 75 6d 5f 66 6c 61 67  s; d->m_num_flag
133c0 73 5f 6c 65 66 74 20 3d 20 6e 75 6d 5f 66 6c 61  s_left = num_fla
133d0 67 73 5f 6c 65 66 74 3b 0a 20 20 72 65 74 75 72  gs_left;.  retur
133e0 6e 20 4d 5a 5f 54 52 55 45 3b 0a 7d 0a 23 65 6e  n MZ_TRUE;.}.#en
133f0 64 69 66 20 2f 2f 20 4d 49 4e 49 5a 5f 55 53 45  dif // MINIZ_USE
13400 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f 41 44 53  _UNALIGNED_LOADS
13410 5f 41 4e 44 5f 53 54 4f 52 45 53 20 26 26 20 4d  _AND_STORES && M
13420 49 4e 49 5a 5f 4c 49 54 54 4c 45 5f 45 4e 44 49  INIZ_LITTLE_ENDI
13430 41 4e 0a 0a 73 74 61 74 69 63 20 4d 5a 5f 46 4f  AN..static MZ_FO
13440 52 43 45 49 4e 4c 49 4e 45 20 76 6f 69 64 20 74  RCEINLINE void t
13450 64 65 66 6c 5f 72 65 63 6f 72 64 5f 6c 69 74 65  defl_record_lite
13460 72 61 6c 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65  ral(tdefl_compre
13470 73 73 6f 72 20 2a 64 2c 20 6d 7a 5f 75 69 6e 74  ssor *d, mz_uint
13480 38 20 6c 69 74 29 0a 7b 0a 20 20 64 2d 3e 6d 5f  8 lit).{.  d->m_
13490 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 2b 2b  total_lz_bytes++
134a0 3b 0a 20 20 2a 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f  ;.  *d->m_pLZ_co
134b0 64 65 5f 62 75 66 2b 2b 20 3d 20 6c 69 74 3b 0a  de_buf++ = lit;.
134c0 20 20 2a 64 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67    *d->m_pLZ_flag
134d0 73 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 28 2a  s = (mz_uint8)(*
134e0 64 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 20 3e  d->m_pLZ_flags >
134f0 3e 20 31 29 3b 20 69 66 20 28 2d 2d 64 2d 3e 6d  > 1); if (--d->m
13500 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20  _num_flags_left 
13510 3d 3d 20 30 29 20 7b 20 64 2d 3e 6d 5f 6e 75 6d  == 0) { d->m_num
13520 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20 38 3b  _flags_left = 8;
13530 20 64 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 20   d->m_pLZ_flags 
13540 3d 20 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f  = d->m_pLZ_code_
13550 62 75 66 2b 2b 3b 20 7d 0a 20 20 64 2d 3e 6d 5f  buf++; }.  d->m_
13560 68 75 66 66 5f 63 6f 75 6e 74 5b 30 5d 5b 6c 69  huff_count[0][li
13570 74 5d 2b 2b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  t]++;.}..static 
13580 4d 5a 5f 46 4f 52 43 45 49 4e 4c 49 4e 45 20 76  MZ_FORCEINLINE v
13590 6f 69 64 20 74 64 65 66 6c 5f 72 65 63 6f 72 64  oid tdefl_record
135a0 5f 6d 61 74 63 68 28 74 64 65 66 6c 5f 63 6f 6d  _match(tdefl_com
135b0 70 72 65 73 73 6f 72 20 2a 64 2c 20 6d 7a 5f 75  pressor *d, mz_u
135c0 69 6e 74 20 6d 61 74 63 68 5f 6c 65 6e 2c 20 6d  int match_len, m
135d0 7a 5f 75 69 6e 74 20 6d 61 74 63 68 5f 64 69 73  z_uint match_dis
135e0 74 29 0a 7b 0a 20 20 6d 7a 5f 75 69 6e 74 33 32  t).{.  mz_uint32
135f0 20 73 30 2c 20 73 31 3b 0a 0a 20 20 4d 5a 5f 41   s0, s1;..  MZ_A
13600 53 53 45 52 54 28 28 6d 61 74 63 68 5f 6c 65 6e  SSERT((match_len
13610 20 3e 3d 20 54 44 45 46 4c 5f 4d 49 4e 5f 4d 41   >= TDEFL_MIN_MA
13620 54 43 48 5f 4c 45 4e 29 20 26 26 20 28 6d 61 74  TCH_LEN) && (mat
13630 63 68 5f 64 69 73 74 20 3e 3d 20 31 29 20 26 26  ch_dist >= 1) &&
13640 20 28 6d 61 74 63 68 5f 64 69 73 74 20 3c 3d 20   (match_dist <= 
13650 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49  TDEFL_LZ_DICT_SI
13660 5a 45 29 29 3b 0a 0a 20 20 64 2d 3e 6d 5f 74 6f  ZE));..  d->m_to
13670 74 61 6c 5f 6c 7a 5f 62 79 74 65 73 20 2b 3d 20  tal_lz_bytes += 
13680 6d 61 74 63 68 5f 6c 65 6e 3b 0a 0a 20 20 64 2d  match_len;..  d-
13690 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 5b  >m_pLZ_code_buf[
136a0 30 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 38 29 28  0] = (mz_uint8)(
136b0 6d 61 74 63 68 5f 6c 65 6e 20 2d 20 54 44 45 46  match_len - TDEF
136c0 4c 5f 4d 49 4e 5f 4d 41 54 43 48 5f 4c 45 4e 29  L_MIN_MATCH_LEN)
136d0 3b 0a 0a 20 20 6d 61 74 63 68 5f 64 69 73 74 20  ;..  match_dist 
136e0 2d 3d 20 31 3b 0a 20 20 64 2d 3e 6d 5f 70 4c 5a  -= 1;.  d->m_pLZ
136f0 5f 63 6f 64 65 5f 62 75 66 5b 31 5d 20 3d 20 28  _code_buf[1] = (
13700 6d 7a 5f 75 69 6e 74 38 29 28 6d 61 74 63 68 5f  mz_uint8)(match_
13710 64 69 73 74 20 26 20 30 78 46 46 29 3b 0a 20 20  dist & 0xFF);.  
13720 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75  d->m_pLZ_code_bu
13730 66 5b 32 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 38  f[2] = (mz_uint8
13740 29 28 6d 61 74 63 68 5f 64 69 73 74 20 3e 3e 20  )(match_dist >> 
13750 38 29 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f 63 6f 64  8); d->m_pLZ_cod
13760 65 5f 62 75 66 20 2b 3d 20 33 3b 0a 0a 20 20 2a  e_buf += 3;..  *
13770 64 2d 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 20 3d  d->m_pLZ_flags =
13780 20 28 6d 7a 5f 75 69 6e 74 38 29 28 28 2a 64 2d   (mz_uint8)((*d-
13790 3e 6d 5f 70 4c 5a 5f 66 6c 61 67 73 20 3e 3e 20  >m_pLZ_flags >> 
137a0 31 29 20 7c 20 30 78 38 30 29 3b 20 69 66 20 28  1) | 0x80); if (
137b0 2d 2d 64 2d 3e 6d 5f 6e 75 6d 5f 66 6c 61 67 73  --d->m_num_flags
137c0 5f 6c 65 66 74 20 3d 3d 20 30 29 20 7b 20 64 2d  _left == 0) { d-
137d0 3e 6d 5f 6e 75 6d 5f 66 6c 61 67 73 5f 6c 65 66  >m_num_flags_lef
137e0 74 20 3d 20 38 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f  t = 8; d->m_pLZ_
137f0 66 6c 61 67 73 20 3d 20 64 2d 3e 6d 5f 70 4c 5a  flags = d->m_pLZ
13800 5f 63 6f 64 65 5f 62 75 66 2b 2b 3b 20 7d 0a 0a  _code_buf++; }..
13810 20 20 73 30 20 3d 20 73 5f 74 64 65 66 6c 5f 73    s0 = s_tdefl_s
13820 6d 61 6c 6c 5f 64 69 73 74 5f 73 79 6d 5b 6d 61  mall_dist_sym[ma
13830 74 63 68 5f 64 69 73 74 20 26 20 35 31 31 5d 3b  tch_dist & 511];
13840 20 73 31 20 3d 20 73 5f 74 64 65 66 6c 5f 6c 61   s1 = s_tdefl_la
13850 72 67 65 5f 64 69 73 74 5f 73 79 6d 5b 28 6d 61  rge_dist_sym[(ma
13860 74 63 68 5f 64 69 73 74 20 3e 3e 20 38 29 20 26  tch_dist >> 8) &
13870 20 31 32 37 5d 3b 0a 20 20 64 2d 3e 6d 5f 68 75   127];.  d->m_hu
13880 66 66 5f 63 6f 75 6e 74 5b 31 5d 5b 28 6d 61 74  ff_count[1][(mat
13890 63 68 5f 64 69 73 74 20 3c 20 35 31 32 29 20 3f  ch_dist < 512) ?
138a0 20 73 30 20 3a 20 73 31 5d 2b 2b 3b 0a 0a 20 20   s0 : s1]++;..  
138b0 69 66 20 28 6d 61 74 63 68 5f 6c 65 6e 20 3e 3d  if (match_len >=
138c0 20 54 44 45 46 4c 5f 4d 49 4e 5f 4d 41 54 43 48   TDEFL_MIN_MATCH
138d0 5f 4c 45 4e 29 20 64 2d 3e 6d 5f 68 75 66 66 5f  _LEN) d->m_huff_
138e0 63 6f 75 6e 74 5b 30 5d 5b 73 5f 74 64 65 66 6c  count[0][s_tdefl
138f0 5f 6c 65 6e 5f 73 79 6d 5b 6d 61 74 63 68 5f 6c  _len_sym[match_l
13900 65 6e 20 2d 20 54 44 45 46 4c 5f 4d 49 4e 5f 4d  en - TDEFL_MIN_M
13910 41 54 43 48 5f 4c 45 4e 5d 5d 2b 2b 3b 0a 7d 0a  ATCH_LEN]]++;.}.
13920 0a 73 74 61 74 69 63 20 6d 7a 5f 62 6f 6f 6c 20  .static mz_bool 
13930 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 6e  tdefl_compress_n
13940 6f 72 6d 61 6c 28 74 64 65 66 6c 5f 63 6f 6d 70  ormal(tdefl_comp
13950 72 65 73 73 6f 72 20 2a 64 29 0a 7b 0a 20 20 63  ressor *d).{.  c
13960 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 70  onst mz_uint8 *p
13970 53 72 63 20 3d 20 64 2d 3e 6d 5f 70 53 72 63 3b  Src = d->m_pSrc;
13980 20 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66 5f   size_t src_buf_
13990 6c 65 66 74 20 3d 20 64 2d 3e 6d 5f 73 72 63 5f  left = d->m_src_
139a0 62 75 66 5f 6c 65 66 74 3b 0a 20 20 74 64 65 66  buf_left;.  tdef
139b0 6c 5f 66 6c 75 73 68 20 66 6c 75 73 68 20 3d 20  l_flush flush = 
139c0 64 2d 3e 6d 5f 66 6c 75 73 68 3b 0a 0a 20 20 77  d->m_flush;..  w
139d0 68 69 6c 65 20 28 28 73 72 63 5f 62 75 66 5f 6c  hile ((src_buf_l
139e0 65 66 74 29 20 7c 7c 20 28 28 66 6c 75 73 68 29  eft) || ((flush)
139f0 20 26 26 20 28 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68   && (d->m_lookah
13a00 65 61 64 5f 73 69 7a 65 29 29 29 0a 20 20 7b 0a  ead_size))).  {.
13a10 20 20 20 20 6d 7a 5f 75 69 6e 74 20 6c 65 6e 5f      mz_uint len_
13a20 74 6f 5f 6d 6f 76 65 2c 20 63 75 72 5f 6d 61 74  to_move, cur_mat
13a30 63 68 5f 64 69 73 74 2c 20 63 75 72 5f 6d 61 74  ch_dist, cur_mat
13a40 63 68 5f 6c 65 6e 2c 20 63 75 72 5f 70 6f 73 3b  ch_len, cur_pos;
13a50 0a 20 20 20 20 2f 2f 20 55 70 64 61 74 65 20 64  .    // Update d
13a60 69 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 68 61  ictionary and ha
13a70 73 68 20 63 68 61 69 6e 73 2e 20 4b 65 65 70 73  sh chains. Keeps
13a80 20 74 68 65 20 6c 6f 6f 6b 61 68 65 61 64 20 73   the lookahead s
13a90 69 7a 65 20 65 71 75 61 6c 20 74 6f 20 54 44 45  ize equal to TDE
13aa0 46 4c 5f 4d 41 58 5f 4d 41 54 43 48 5f 4c 45 4e  FL_MAX_MATCH_LEN
13ab0 2e 0a 20 20 20 20 69 66 20 28 28 64 2d 3e 6d 5f  ..    if ((d->m_
13ac0 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 20 2b  lookahead_size +
13ad0 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a 65 29   d->m_dict_size)
13ae0 20 3e 3d 20 28 54 44 45 46 4c 5f 4d 49 4e 5f 4d   >= (TDEFL_MIN_M
13af0 41 54 43 48 5f 4c 45 4e 20 2d 20 31 29 29 0a 20  ATCH_LEN - 1)). 
13b00 20 20 20 7b 0a 20 20 20 20 20 20 6d 7a 5f 75 69     {.      mz_ui
13b10 6e 74 20 64 73 74 5f 70 6f 73 20 3d 20 28 64 2d  nt dst_pos = (d-
13b20 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73  >m_lookahead_pos
13b30 20 2b 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61   + d->m_lookahea
13b40 64 5f 73 69 7a 65 29 20 26 20 54 44 45 46 4c 5f  d_size) & TDEFL_
13b50 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d 41 53  LZ_DICT_SIZE_MAS
13b60 4b 2c 20 69 6e 73 5f 70 6f 73 20 3d 20 64 2d 3e  K, ins_pos = d->
13b70 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20  m_lookahead_pos 
13b80 2b 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64  + d->m_lookahead
13b90 5f 73 69 7a 65 20 2d 20 32 3b 0a 20 20 20 20 20  _size - 2;.     
13ba0 20 6d 7a 5f 75 69 6e 74 20 68 61 73 68 20 3d 20   mz_uint hash = 
13bb0 28 64 2d 3e 6d 5f 64 69 63 74 5b 69 6e 73 5f 70  (d->m_dict[ins_p
13bc0 6f 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  os & TDEFL_LZ_DI
13bd0 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 5d 20 3c 3c  CT_SIZE_MASK] <<
13be0 20 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f 53   TDEFL_LZ_HASH_S
13bf0 48 49 46 54 29 20 5e 20 64 2d 3e 6d 5f 64 69 63  HIFT) ^ d->m_dic
13c00 74 5b 28 69 6e 73 5f 70 6f 73 20 2b 20 31 29 20  t[(ins_pos + 1) 
13c10 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f  & TDEFL_LZ_DICT_
13c20 53 49 5a 45 5f 4d 41 53 4b 5d 3b 0a 20 20 20 20  SIZE_MASK];.    
13c30 20 20 6d 7a 5f 75 69 6e 74 20 6e 75 6d 5f 62 79    mz_uint num_by
13c40 74 65 73 5f 74 6f 5f 70 72 6f 63 65 73 73 20 3d  tes_to_process =
13c50 20 28 6d 7a 5f 75 69 6e 74 29 4d 5a 5f 4d 49 4e   (mz_uint)MZ_MIN
13c60 28 73 72 63 5f 62 75 66 5f 6c 65 66 74 2c 20 54  (src_buf_left, T
13c70 44 45 46 4c 5f 4d 41 58 5f 4d 41 54 43 48 5f 4c  DEFL_MAX_MATCH_L
13c80 45 4e 20 2d 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68  EN - d->m_lookah
13c90 65 61 64 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20  ead_size);.     
13ca0 20 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20   const mz_uint8 
13cb0 2a 70 53 72 63 5f 65 6e 64 20 3d 20 70 53 72 63  *pSrc_end = pSrc
13cc0 20 2b 20 6e 75 6d 5f 62 79 74 65 73 5f 74 6f 5f   + num_bytes_to_
13cd0 70 72 6f 63 65 73 73 3b 0a 20 20 20 20 20 20 73  process;.      s
13ce0 72 63 5f 62 75 66 5f 6c 65 66 74 20 2d 3d 20 6e  rc_buf_left -= n
13cf0 75 6d 5f 62 79 74 65 73 5f 74 6f 5f 70 72 6f 63  um_bytes_to_proc
13d00 65 73 73 3b 0a 20 20 20 20 20 20 64 2d 3e 6d 5f  ess;.      d->m_
13d10 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 20 2b  lookahead_size +
13d20 3d 20 6e 75 6d 5f 62 79 74 65 73 5f 74 6f 5f 70  = num_bytes_to_p
13d30 72 6f 63 65 73 73 3b 0a 20 20 20 20 20 20 77 68  rocess;.      wh
13d40 69 6c 65 20 28 70 53 72 63 20 21 3d 20 70 53 72  ile (pSrc != pSr
13d50 63 5f 65 6e 64 29 0a 20 20 20 20 20 20 7b 0a 20  c_end).      {. 
13d60 20 20 20 20 20 20 20 6d 7a 5f 75 69 6e 74 38 20         mz_uint8 
13d70 63 20 3d 20 2a 70 53 72 63 2b 2b 3b 20 64 2d 3e  c = *pSrc++; d->
13d80 6d 5f 64 69 63 74 5b 64 73 74 5f 70 6f 73 5d 20  m_dict[dst_pos] 
13d90 3d 20 63 3b 20 69 66 20 28 64 73 74 5f 70 6f 73  = c; if (dst_pos
13da0 20 3c 20 28 54 44 45 46 4c 5f 4d 41 58 5f 4d 41   < (TDEFL_MAX_MA
13db0 54 43 48 5f 4c 45 4e 20 2d 20 31 29 29 20 64 2d  TCH_LEN - 1)) d-
13dc0 3e 6d 5f 64 69 63 74 5b 54 44 45 46 4c 5f 4c 5a  >m_dict[TDEFL_LZ
13dd0 5f 44 49 43 54 5f 53 49 5a 45 20 2b 20 64 73 74  _DICT_SIZE + dst
13de0 5f 70 6f 73 5d 20 3d 20 63 3b 0a 20 20 20 20 20  _pos] = c;.     
13df0 20 20 20 68 61 73 68 20 3d 20 28 28 68 61 73 68     hash = ((hash
13e00 20 3c 3c 20 54 44 45 46 4c 5f 4c 5a 5f 48 41 53   << TDEFL_LZ_HAS
13e10 48 5f 53 48 49 46 54 29 20 5e 20 63 29 20 26 20  H_SHIFT) ^ c) & 
13e20 28 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f 53  (TDEFL_LZ_HASH_S
13e30 49 5a 45 20 2d 20 31 29 3b 0a 20 20 20 20 20 20  IZE - 1);.      
13e40 20 20 64 2d 3e 6d 5f 6e 65 78 74 5b 69 6e 73 5f    d->m_next[ins_
13e50 70 6f 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44  pos & TDEFL_LZ_D
13e60 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 5d 20 3d  ICT_SIZE_MASK] =
13e70 20 64 2d 3e 6d 5f 68 61 73 68 5b 68 61 73 68 5d   d->m_hash[hash]
13e80 3b 20 64 2d 3e 6d 5f 68 61 73 68 5b 68 61 73 68  ; d->m_hash[hash
13e90 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 31 36 29 28  ] = (mz_uint16)(
13ea0 69 6e 73 5f 70 6f 73 29 3b 0a 20 20 20 20 20 20  ins_pos);.      
13eb0 20 20 64 73 74 5f 70 6f 73 20 3d 20 28 64 73 74    dst_pos = (dst
13ec0 5f 70 6f 73 20 2b 20 31 29 20 26 20 54 44 45 46  _pos + 1) & TDEF
13ed0 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d  L_LZ_DICT_SIZE_M
13ee0 41 53 4b 3b 20 69 6e 73 5f 70 6f 73 2b 2b 3b 0a  ASK; ins_pos++;.
13ef0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13f00 20 20 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20    else.    {.   
13f10 20 20 20 77 68 69 6c 65 20 28 28 73 72 63 5f 62     while ((src_b
13f20 75 66 5f 6c 65 66 74 29 20 26 26 20 28 64 2d 3e  uf_left) && (d->
13f30 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65  m_lookahead_size
13f40 20 3c 20 54 44 45 46 4c 5f 4d 41 58 5f 4d 41 54   < TDEFL_MAX_MAT
13f50 43 48 5f 4c 45 4e 29 29 0a 20 20 20 20 20 20 7b  CH_LEN)).      {
13f60 0a 20 20 20 20 20 20 20 20 6d 7a 5f 75 69 6e 74  .        mz_uint
13f70 38 20 63 20 3d 20 2a 70 53 72 63 2b 2b 3b 0a 20  8 c = *pSrc++;. 
13f80 20 20 20 20 20 20 20 6d 7a 5f 75 69 6e 74 20 64         mz_uint d
13f90 73 74 5f 70 6f 73 20 3d 20 28 64 2d 3e 6d 5f 6c  st_pos = (d->m_l
13fa0 6f 6f 6b 61 68 65 61 64 5f 70 6f 73 20 2b 20 64  ookahead_pos + d
13fb0 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69  ->m_lookahead_si
13fc0 7a 65 29 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44  ze) & TDEFL_LZ_D
13fd0 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 3b 0a 20  ICT_SIZE_MASK;. 
13fe0 20 20 20 20 20 20 20 73 72 63 5f 62 75 66 5f 6c         src_buf_l
13ff0 65 66 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 64  eft--;.        d
14000 2d 3e 6d 5f 64 69 63 74 5b 64 73 74 5f 70 6f 73  ->m_dict[dst_pos
14010 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 20 20 69  ] = c;.        i
14020 66 20 28 64 73 74 5f 70 6f 73 20 3c 20 28 54 44  f (dst_pos < (TD
14030 45 46 4c 5f 4d 41 58 5f 4d 41 54 43 48 5f 4c 45  EFL_MAX_MATCH_LE
14040 4e 20 2d 20 31 29 29 0a 20 20 20 20 20 20 20 20  N - 1)).        
14050 20 20 64 2d 3e 6d 5f 64 69 63 74 5b 54 44 45 46    d->m_dict[TDEF
14060 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 20 2b  L_LZ_DICT_SIZE +
14070 20 64 73 74 5f 70 6f 73 5d 20 3d 20 63 3b 0a 20   dst_pos] = c;. 
14080 20 20 20 20 20 20 20 69 66 20 28 28 2b 2b 64 2d         if ((++d-
14090 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a  >m_lookahead_siz
140a0 65 20 2b 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69  e + d->m_dict_si
140b0 7a 65 29 20 3e 3d 20 54 44 45 46 4c 5f 4d 49 4e  ze) >= TDEFL_MIN
140c0 5f 4d 41 54 43 48 5f 4c 45 4e 29 0a 20 20 20 20  _MATCH_LEN).    
140d0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
140e0 6d 7a 5f 75 69 6e 74 20 69 6e 73 5f 70 6f 73 20  mz_uint ins_pos 
140f0 3d 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64  = d->m_lookahead
14100 5f 70 6f 73 20 2b 20 28 64 2d 3e 6d 5f 6c 6f 6f  _pos + (d->m_loo
14110 6b 61 68 65 61 64 5f 73 69 7a 65 20 2d 20 31 29  kahead_size - 1)
14120 20 2d 20 32 3b 0a 20 20 20 20 20 20 20 20 20 20   - 2;.          
14130 6d 7a 5f 75 69 6e 74 20 68 61 73 68 20 3d 20 28  mz_uint hash = (
14140 28 64 2d 3e 6d 5f 64 69 63 74 5b 69 6e 73 5f 70  (d->m_dict[ins_p
14150 6f 73 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44 49  os & TDEFL_LZ_DI
14160 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 5d 20 3c 3c  CT_SIZE_MASK] <<
14170 20 28 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f   (TDEFL_LZ_HASH_
14180 53 48 49 46 54 20 2a 20 32 29 29 20 5e 20 28 64  SHIFT * 2)) ^ (d
14190 2d 3e 6d 5f 64 69 63 74 5b 28 69 6e 73 5f 70 6f  ->m_dict[(ins_po
141a0 73 20 2b 20 31 29 20 26 20 54 44 45 46 4c 5f 4c  s + 1) & TDEFL_L
141b0 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b  Z_DICT_SIZE_MASK
141c0 5d 20 3c 3c 20 54 44 45 46 4c 5f 4c 5a 5f 48 41  ] << TDEFL_LZ_HA
141d0 53 48 5f 53 48 49 46 54 29 20 5e 20 63 29 20 26  SH_SHIFT) ^ c) &
141e0 20 28 54 44 45 46 4c 5f 4c 5a 5f 48 41 53 48 5f   (TDEFL_LZ_HASH_
141f0 53 49 5a 45 20 2d 20 31 29 3b 0a 20 20 20 20 20  SIZE - 1);.     
14200 20 20 20 20 20 64 2d 3e 6d 5f 6e 65 78 74 5b 69       d->m_next[i
14210 6e 73 5f 70 6f 73 20 26 20 54 44 45 46 4c 5f 4c  ns_pos & TDEFL_L
14220 5a 5f 44 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b  Z_DICT_SIZE_MASK
14230 5d 20 3d 20 64 2d 3e 6d 5f 68 61 73 68 5b 68 61  ] = d->m_hash[ha
14240 73 68 5d 3b 20 64 2d 3e 6d 5f 68 61 73 68 5b 68  sh]; d->m_hash[h
14250 61 73 68 5d 20 3d 20 28 6d 7a 5f 75 69 6e 74 31  ash] = (mz_uint1
14260 36 29 28 69 6e 73 5f 70 6f 73 29 3b 0a 20 20 20  6)(ins_pos);.   
14270 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
14280 20 20 20 7d 0a 20 20 20 20 64 2d 3e 6d 5f 64 69     }.    d->m_di
14290 63 74 5f 73 69 7a 65 20 3d 20 4d 5a 5f 4d 49 4e  ct_size = MZ_MIN
142a0 28 54 44 45 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53  (TDEFL_LZ_DICT_S
142b0 49 5a 45 20 2d 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61  IZE - d->m_looka
142c0 68 65 61 64 5f 73 69 7a 65 2c 20 64 2d 3e 6d 5f  head_size, d->m_
142d0 64 69 63 74 5f 73 69 7a 65 29 3b 0a 20 20 20 20  dict_size);.    
142e0 69 66 20 28 28 21 66 6c 75 73 68 29 20 26 26 20  if ((!flush) && 
142f0 28 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f  (d->m_lookahead_
14300 73 69 7a 65 20 3c 20 54 44 45 46 4c 5f 4d 41 58  size < TDEFL_MAX
14310 5f 4d 41 54 43 48 5f 4c 45 4e 29 29 0a 20 20 20  _MATCH_LEN)).   
14320 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 2f     break;..    /
14330 2f 20 53 69 6d 70 6c 65 20 6c 61 7a 79 2f 67 72  / Simple lazy/gr
14340 65 65 64 79 20 70 61 72 73 69 6e 67 20 73 74 61  eedy parsing sta
14350 74 65 20 6d 61 63 68 69 6e 65 2e 0a 20 20 20 20  te machine..    
14360 6c 65 6e 5f 74 6f 5f 6d 6f 76 65 20 3d 20 31 3b  len_to_move = 1;
14370 20 63 75 72 5f 6d 61 74 63 68 5f 64 69 73 74 20   cur_match_dist 
14380 3d 20 30 3b 20 63 75 72 5f 6d 61 74 63 68 5f 6c  = 0; cur_match_l
14390 65 6e 20 3d 20 64 2d 3e 6d 5f 73 61 76 65 64 5f  en = d->m_saved_
143a0 6d 61 74 63 68 5f 6c 65 6e 20 3f 20 64 2d 3e 6d  match_len ? d->m
143b0 5f 73 61 76 65 64 5f 6d 61 74 63 68 5f 6c 65 6e  _saved_match_len
143c0 20 3a 20 28 54 44 45 46 4c 5f 4d 49 4e 5f 4d 41   : (TDEFL_MIN_MA
143d0 54 43 48 5f 4c 45 4e 20 2d 20 31 29 3b 20 63 75  TCH_LEN - 1); cu
143e0 72 5f 70 6f 73 20 3d 20 64 2d 3e 6d 5f 6c 6f 6f  r_pos = d->m_loo
143f0 6b 61 68 65 61 64 5f 70 6f 73 20 26 20 54 44 45  kahead_pos & TDE
14400 46 4c 5f 4c 5a 5f 44 49 43 54 5f 53 49 5a 45 5f  FL_LZ_DICT_SIZE_
14410 4d 41 53 4b 3b 0a 20 20 20 20 69 66 20 28 64 2d  MASK;.    if (d-
14420 3e 6d 5f 66 6c 61 67 73 20 26 20 28 54 44 45 46  >m_flags & (TDEF
14430 4c 5f 52 4c 45 5f 4d 41 54 43 48 45 53 20 7c 20  L_RLE_MATCHES | 
14440 54 44 45 46 4c 5f 46 4f 52 43 45 5f 41 4c 4c 5f  TDEFL_FORCE_ALL_
14450 52 41 57 5f 42 4c 4f 43 4b 53 29 29 0a 20 20 20  RAW_BLOCKS)).   
14460 20 7b 0a 20 20 20 20 20 20 69 66 20 28 28 64 2d   {.      if ((d-
14470 3e 6d 5f 64 69 63 74 5f 73 69 7a 65 29 20 26 26  >m_dict_size) &&
14480 20 28 21 28 64 2d 3e 6d 5f 66 6c 61 67 73 20 26   (!(d->m_flags &
14490 20 54 44 45 46 4c 5f 46 4f 52 43 45 5f 41 4c 4c   TDEFL_FORCE_ALL
144a0 5f 52 41 57 5f 42 4c 4f 43 4b 53 29 29 29 0a 20  _RAW_BLOCKS))). 
144b0 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6d       {.        m
144c0 7a 5f 75 69 6e 74 38 20 63 20 3d 20 64 2d 3e 6d  z_uint8 c = d->m
144d0 5f 64 69 63 74 5b 28 63 75 72 5f 70 6f 73 20 2d  _dict[(cur_pos -
144e0 20 31 29 20 26 20 54 44 45 46 4c 5f 4c 5a 5f 44   1) & TDEFL_LZ_D
144f0 49 43 54 5f 53 49 5a 45 5f 4d 41 53 4b 5d 3b 0a  ICT_SIZE_MASK];.
14500 20 20 20 20 20 20 20 20 63 75 72 5f 6d 61 74 63          cur_matc
14510 68 5f 6c 65 6e 20 3d 20 30 3b 20 77 68 69 6c 65  h_len = 0; while
14520 20 28 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20   (cur_match_len 
14530 3c 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64  < d->m_lookahead
14540 5f 73 69 7a 65 29 20 7b 20 69 66 20 28 64 2d 3e  _size) { if (d->
14550 6d 5f 64 69 63 74 5b 63 75 72 5f 70 6f 73 20 2b  m_dict[cur_pos +
14560 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 5d 20   cur_match_len] 
14570 21 3d 20 63 29 20 62 72 65 61 6b 3b 20 63 75 72  != c) break; cur
14580 5f 6d 61 74 63 68 5f 6c 65 6e 2b 2b 3b 20 7d 0a  _match_len++; }.
14590 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 5f          if (cur_
145a0 6d 61 74 63 68 5f 6c 65 6e 20 3c 20 54 44 45 46  match_len < TDEF
145b0 4c 5f 4d 49 4e 5f 4d 41 54 43 48 5f 4c 45 4e 29  L_MIN_MATCH_LEN)
145c0 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d   cur_match_len =
145d0 20 30 3b 20 65 6c 73 65 20 63 75 72 5f 6d 61 74   0; else cur_mat
145e0 63 68 5f 64 69 73 74 20 3d 20 31 3b 0a 20 20 20  ch_dist = 1;.   
145f0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65     }.    }.    e
14600 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  lse.    {.      
14610 74 64 65 66 6c 5f 66 69 6e 64 5f 6d 61 74 63 68  tdefl_find_match
14620 28 64 2c 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65  (d, d->m_lookahe
14630 61 64 5f 70 6f 73 2c 20 64 2d 3e 6d 5f 64 69 63  ad_pos, d->m_dic
14640 74 5f 73 69 7a 65 2c 20 64 2d 3e 6d 5f 6c 6f 6f  t_size, d->m_loo
14650 6b 61 68 65 61 64 5f 73 69 7a 65 2c 20 26 63 75  kahead_size, &cu
14660 72 5f 6d 61 74 63 68 5f 64 69 73 74 2c 20 26 63  r_match_dist, &c
14670 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 29 3b 0a 20  ur_match_len);. 
14680 20 20 20 7d 0a 20 20 20 20 69 66 20 28 28 28 63     }.    if (((c
14690 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 3d 20  ur_match_len == 
146a0 54 44 45 46 4c 5f 4d 49 4e 5f 4d 41 54 43 48 5f  TDEFL_MIN_MATCH_
146b0 4c 45 4e 29 20 26 26 20 28 63 75 72 5f 6d 61 74  LEN) && (cur_mat
146c0 63 68 5f 64 69 73 74 20 3e 3d 20 38 55 2a 31 30  ch_dist >= 8U*10
146d0 32 34 55 29 29 20 7c 7c 20 28 63 75 72 5f 70 6f  24U)) || (cur_po
146e0 73 20 3d 3d 20 63 75 72 5f 6d 61 74 63 68 5f 64  s == cur_match_d
146f0 69 73 74 29 20 7c 7c 20 28 28 64 2d 3e 6d 5f 66  ist) || ((d->m_f
14700 6c 61 67 73 20 26 20 54 44 45 46 4c 5f 46 49 4c  lags & TDEFL_FIL
14710 54 45 52 5f 4d 41 54 43 48 45 53 29 20 26 26 20  TER_MATCHES) && 
14720 28 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3c  (cur_match_len <
14730 3d 20 35 29 29 29 0a 20 20 20 20 7b 0a 20 20 20  = 5))).    {.   
14740 20 20 20 63 75 72 5f 6d 61 74 63 68 5f 64 69 73     cur_match_dis
14750 74 20 3d 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65  t = cur_match_le
14760 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  n = 0;.    }.   
14770 20 69 66 20 28 64 2d 3e 6d 5f 73 61 76 65 64 5f   if (d->m_saved_
14780 6d 61 74 63 68 5f 6c 65 6e 29 0a 20 20 20 20 7b  match_len).    {
14790 0a 20 20 20 20 20 20 69 66 20 28 63 75 72 5f 6d  .      if (cur_m
147a0 61 74 63 68 5f 6c 65 6e 20 3e 20 64 2d 3e 6d 5f  atch_len > d->m_
147b0 73 61 76 65 64 5f 6d 61 74 63 68 5f 6c 65 6e 29  saved_match_len)
147c0 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
147d0 20 74 64 65 66 6c 5f 72 65 63 6f 72 64 5f 6c 69   tdefl_record_li
147e0 74 65 72 61 6c 28 64 2c 20 28 6d 7a 5f 75 69 6e  teral(d, (mz_uin
147f0 74 38 29 64 2d 3e 6d 5f 73 61 76 65 64 5f 6c 69  t8)d->m_saved_li
14800 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  t);.        if (
14810 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 20 3e 3d  cur_match_len >=
14820 20 31 32 38 29 0a 20 20 20 20 20 20 20 20 7b 0a   128).        {.
14830 20 20 20 20 20 20 20 20 20 20 74 64 65 66 6c 5f            tdefl_
14840 72 65 63 6f 72 64 5f 6d 61 74 63 68 28 64 2c 20  record_match(d, 
14850 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 2c 20 63  cur_match_len, c
14860 75 72 5f 6d 61 74 63 68 5f 64 69 73 74 29 3b 0a  ur_match_dist);.
14870 20 20 20 20 20 20 20 20 20 20 64 2d 3e 6d 5f 73            d->m_s
14880 61 76 65 64 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d  aved_match_len =
14890 20 30 3b 20 6c 65 6e 5f 74 6f 5f 6d 6f 76 65 20   0; len_to_move 
148a0 3d 20 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 3b  = cur_match_len;
148b0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
148c0 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20     else.        
148d0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 2d 3e 6d  {.          d->m
148e0 5f 73 61 76 65 64 5f 6c 69 74 20 3d 20 64 2d 3e  _saved_lit = d->
148f0 6d 5f 64 69 63 74 5b 63 75 72 5f 70 6f 73 5d 3b  m_dict[cur_pos];
14900 20 64 2d 3e 6d 5f 73 61 76 65 64 5f 6d 61 74 63   d->m_saved_matc
14910 68 5f 64 69 73 74 20 3d 20 63 75 72 5f 6d 61 74  h_dist = cur_mat
14920 63 68 5f 64 69 73 74 3b 20 64 2d 3e 6d 5f 73 61  ch_dist; d->m_sa
14930 76 65 64 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 20  ved_match_len = 
14940 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 3b 0a 20  cur_match_len;. 
14950 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
14960 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20  .      else.    
14970 20 20 7b 0a 20 20 20 20 20 20 20 20 74 64 65 66    {.        tdef
14980 6c 5f 72 65 63 6f 72 64 5f 6d 61 74 63 68 28 64  l_record_match(d
14990 2c 20 64 2d 3e 6d 5f 73 61 76 65 64 5f 6d 61 74  , d->m_saved_mat
149a0 63 68 5f 6c 65 6e 2c 20 64 2d 3e 6d 5f 73 61 76  ch_len, d->m_sav
149b0 65 64 5f 6d 61 74 63 68 5f 64 69 73 74 29 3b 0a  ed_match_dist);.
149c0 20 20 20 20 20 20 20 20 6c 65 6e 5f 74 6f 5f 6d          len_to_m
149d0 6f 76 65 20 3d 20 64 2d 3e 6d 5f 73 61 76 65 64  ove = d->m_saved
149e0 5f 6d 61 74 63 68 5f 6c 65 6e 20 2d 20 31 3b 20  _match_len - 1; 
149f0 64 2d 3e 6d 5f 73 61 76 65 64 5f 6d 61 74 63 68  d->m_saved_match
14a00 5f 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  _len = 0;.      
14a10 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65  }.    }.    else
14a20 20 69 66 20 28 21 63 75 72 5f 6d 61 74 63 68 5f   if (!cur_match_
14a30 64 69 73 74 29 0a 20 20 20 20 20 20 74 64 65 66  dist).      tdef
14a40 6c 5f 72 65 63 6f 72 64 5f 6c 69 74 65 72 61 6c  l_record_literal
14a50 28 64 2c 20 64 2d 3e 6d 5f 64 69 63 74 5b 4d 5a  (d, d->m_dict[MZ
14a60 5f 4d 49 4e 28 63 75 72 5f 70 6f 73 2c 20 73 69  _MIN(cur_pos, si
14a70 7a 65 6f 66 28 64 2d 3e 6d 5f 64 69 63 74 29 20  zeof(d->m_dict) 
14a80 2d 20 31 29 5d 29 3b 0a 20 20 20 20 65 6c 73 65  - 1)]);.    else
14a90 20 69 66 20 28 28 64 2d 3e 6d 5f 67 72 65 65 64   if ((d->m_greed
14aa0 79 5f 70 61 72 73 69 6e 67 29 20 7c 7c 20 28 64  y_parsing) || (d
14ab0 2d 3e 6d 5f 66 6c 61 67 73 20 26 20 54 44 45 46  ->m_flags & TDEF
14ac0 4c 5f 52 4c 45 5f 4d 41 54 43 48 45 53 29 20 7c  L_RLE_MATCHES) |
14ad0 7c 20 28 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e  | (cur_match_len
14ae0 20 3e 3d 20 31 32 38 29 29 0a 20 20 20 20 7b 0a   >= 128)).    {.
14af0 20 20 20 20 20 20 74 64 65 66 6c 5f 72 65 63 6f        tdefl_reco
14b00 72 64 5f 6d 61 74 63 68 28 64 2c 20 63 75 72 5f  rd_match(d, cur_
14b10 6d 61 74 63 68 5f 6c 65 6e 2c 20 63 75 72 5f 6d  match_len, cur_m
14b20 61 74 63 68 5f 64 69 73 74 29 3b 0a 20 20 20 20  atch_dist);.    
14b30 20 20 6c 65 6e 5f 74 6f 5f 6d 6f 76 65 20 3d 20    len_to_move = 
14b40 63 75 72 5f 6d 61 74 63 68 5f 6c 65 6e 3b 0a 20  cur_match_len;. 
14b50 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 0a 20 20     }.    else.  
14b60 20 20 7b 0a 20 20 20 20 20 20 64 2d 3e 6d 5f 73    {.      d->m_s
14b70 61 76 65 64 5f 6c 69 74 20 3d 20 64 2d 3e 6d 5f  aved_lit = d->m_
14b80 64 69 63 74 5b 4d 5a 5f 4d 49 4e 28 63 75 72 5f  dict[MZ_MIN(cur_
14b90 70 6f 73 2c 20 73 69 7a 65 6f 66 28 64 2d 3e 6d  pos, sizeof(d->m
14ba0 5f 64 69 63 74 29 20 2d 20 31 29 5d 3b 20 64 2d  _dict) - 1)]; d-
14bb0 3e 6d 5f 73 61 76 65 64 5f 6d 61 74 63 68 5f 64  >m_saved_match_d
14bc0 69 73 74 20 3d 20 63 75 72 5f 6d 61 74 63 68 5f  ist = cur_match_
14bd0 64 69 73 74 3b 20 64 2d 3e 6d 5f 73 61 76 65 64  dist; d->m_saved
14be0 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 63 75 72  _match_len = cur
14bf0 5f 6d 61 74 63 68 5f 6c 65 6e 3b 0a 20 20 20 20  _match_len;.    
14c00 7d 0a 20 20 20 20 2f 2f 20 4d 6f 76 65 20 74 68  }.    // Move th
14c10 65 20 6c 6f 6f 6b 61 68 65 61 64 20 66 6f 72 77  e lookahead forw
14c20 61 72 64 20 62 79 20 6c 65 6e 5f 74 6f 5f 6d 6f  ard by len_to_mo
14c30 76 65 20 62 79 74 65 73 2e 0a 20 20 20 20 64 2d  ve bytes..    d-
14c40 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 70 6f 73  >m_lookahead_pos
14c50 20 2b 3d 20 6c 65 6e 5f 74 6f 5f 6d 6f 76 65 3b   += len_to_move;
14c60 0a 20 20 20 20 4d 5a 5f 41 53 53 45 52 54 28 64  .    MZ_ASSERT(d
14c70 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69  ->m_lookahead_si
14c80 7a 65 20 3e 3d 20 6c 65 6e 5f 74 6f 5f 6d 6f 76  ze >= len_to_mov
14c90 65 29 3b 0a 20 20 20 20 64 2d 3e 6d 5f 6c 6f 6f  e);.    d->m_loo
14ca0 6b 61 68 65 61 64 5f 73 69 7a 65 20 2d 3d 20 6c  kahead_size -= l
14cb0 65 6e 5f 74 6f 5f 6d 6f 76 65 3b 0a 20 20 20 20  en_to_move;.    
14cc0 64 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a 65 20 3d  d->m_dict_size =
14cd0 20 4d 5a 5f 4d 49 4e 28 64 2d 3e 6d 5f 64 69 63   MZ_MIN(d->m_dic
14ce0 74 5f 73 69 7a 65 20 2b 20 6c 65 6e 5f 74 6f 5f  t_size + len_to_
14cf0 6d 6f 76 65 2c 20 54 44 45 46 4c 5f 4c 5a 5f 44  move, TDEFL_LZ_D
14d00 49 43 54 5f 53 49 5a 45 29 3b 0a 20 20 20 20 2f  ICT_SIZE);.    /
14d10 2f 20 43 68 65 63 6b 20 69 66 20 69 74 27 73 20  / Check if it's 
14d20 74 69 6d 65 20 74 6f 20 66 6c 75 73 68 20 74 68  time to flush th
14d30 65 20 63 75 72 72 65 6e 74 20 4c 5a 20 63 6f 64  e current LZ cod
14d40 65 73 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e  es to the intern
14d50 61 6c 20 6f 75 74 70 75 74 20 62 75 66 66 65 72  al output buffer
14d60 2e 0a 20 20 20 20 69 66 20 28 20 28 64 2d 3e 6d  ..    if ( (d->m
14d70 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3e 20  _pLZ_code_buf > 
14d80 26 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75  &d->m_lz_code_bu
14d90 66 5b 54 44 45 46 4c 5f 4c 5a 5f 43 4f 44 45 5f  f[TDEFL_LZ_CODE_
14da0 42 55 46 5f 53 49 5a 45 20 2d 20 38 5d 29 20 7c  BUF_SIZE - 8]) |
14db0 7c 0a 20 20 20 20 20 20 20 20 20 28 20 28 64 2d  |.         ( (d-
14dc0 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79 74 65  >m_total_lz_byte
14dd0 73 20 3e 20 33 31 2a 31 30 32 34 29 20 26 26 20  s > 31*1024) && 
14de0 28 28 28 28 28 6d 7a 5f 75 69 6e 74 29 28 64 2d  (((((mz_uint)(d-
14df0 3e 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20  >m_pLZ_code_buf 
14e00 2d 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62  - d->m_lz_code_b
14e10 75 66 29 20 2a 20 31 31 35 29 20 3e 3e 20 37 29  uf) * 115) >> 7)
14e20 20 3e 3d 20 64 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c   >= d->m_total_l
14e30 7a 5f 62 79 74 65 73 29 20 7c 7c 20 28 64 2d 3e  z_bytes) || (d->
14e40 6d 5f 66 6c 61 67 73 20 26 20 54 44 45 46 4c 5f  m_flags & TDEFL_
14e50 46 4f 52 43 45 5f 41 4c 4c 5f 52 41 57 5f 42 4c  FORCE_ALL_RAW_BL
14e60 4f 43 4b 53 29 29 29 20 29 0a 20 20 20 20 7b 0a  OCKS))) ).    {.
14e70 20 20 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20 20        int n;.   
14e80 20 20 20 64 2d 3e 6d 5f 70 53 72 63 20 3d 20 70     d->m_pSrc = p
14e90 53 72 63 3b 20 64 2d 3e 6d 5f 73 72 63 5f 62 75  Src; d->m_src_bu
14ea0 66 5f 6c 65 66 74 20 3d 20 73 72 63 5f 62 75 66  f_left = src_buf
14eb0 5f 6c 65 66 74 3b 0a 20 20 20 20 20 20 69 66 20  _left;.      if 
14ec0 28 28 6e 20 3d 20 74 64 65 66 6c 5f 66 6c 75 73  ((n = tdefl_flus
14ed0 68 5f 62 6c 6f 63 6b 28 64 2c 20 30 29 29 20 21  h_block(d, 0)) !
14ee0 3d 20 30 29 0a 20 20 20 20 20 20 20 20 72 65 74  = 0).        ret
14ef0 75 72 6e 20 28 6e 20 3c 20 30 29 20 3f 20 4d 5a  urn (n < 0) ? MZ
14f00 5f 46 41 4c 53 45 20 3a 20 4d 5a 5f 54 52 55 45  _FALSE : MZ_TRUE
14f10 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 64  ;.    }.  }..  d
14f20 2d 3e 6d 5f 70 53 72 63 20 3d 20 70 53 72 63 3b  ->m_pSrc = pSrc;
14f30 20 64 2d 3e 6d 5f 73 72 63 5f 62 75 66 5f 6c 65   d->m_src_buf_le
14f40 66 74 20 3d 20 73 72 63 5f 62 75 66 5f 6c 65 66  ft = src_buf_lef
14f50 74 3b 0a 20 20 72 65 74 75 72 6e 20 4d 5a 5f 54  t;.  return MZ_T
14f60 52 55 45 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 74  RUE;.}..static t
14f70 64 65 66 6c 5f 73 74 61 74 75 73 20 74 64 65 66  defl_status tdef
14f80 6c 5f 66 6c 75 73 68 5f 6f 75 74 70 75 74 5f 62  l_flush_output_b
14f90 75 66 66 65 72 28 74 64 65 66 6c 5f 63 6f 6d 70  uffer(tdefl_comp
14fa0 72 65 73 73 6f 72 20 2a 64 29 0a 7b 0a 20 20 69  ressor *d).{.  i
14fb0 66 20 28 64 2d 3e 6d 5f 70 49 6e 5f 62 75 66 5f  f (d->m_pIn_buf_
14fc0 73 69 7a 65 29 0a 20 20 7b 0a 20 20 20 20 2a 64  size).  {.    *d
14fd0 2d 3e 6d 5f 70 49 6e 5f 62 75 66 5f 73 69 7a 65  ->m_pIn_buf_size
14fe0 20 3d 20 64 2d 3e 6d 5f 70 53 72 63 20 2d 20 28   = d->m_pSrc - (
14ff0 63 6f 6e 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a  const mz_uint8 *
15000 29 64 2d 3e 6d 5f 70 49 6e 5f 62 75 66 3b 0a 20  )d->m_pIn_buf;. 
15010 20 7d 0a 0a 20 20 69 66 20 28 64 2d 3e 6d 5f 70   }..  if (d->m_p
15020 4f 75 74 5f 62 75 66 5f 73 69 7a 65 29 0a 20 20  Out_buf_size).  
15030 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 20 3d  {.    size_t n =
15040 20 4d 5a 5f 4d 49 4e 28 2a 64 2d 3e 6d 5f 70 4f   MZ_MIN(*d->m_pO
15050 75 74 5f 62 75 66 5f 73 69 7a 65 20 2d 20 64 2d  ut_buf_size - d-
15060 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73 2c 20  >m_out_buf_ofs, 
15070 64 2d 3e 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73  d->m_output_flus
15080 68 5f 72 65 6d 61 69 6e 69 6e 67 29 3b 0a 20 20  h_remaining);.  
15090 20 20 6d 65 6d 63 70 79 28 28 6d 7a 5f 75 69 6e    memcpy((mz_uin
150a0 74 38 20 2a 29 64 2d 3e 6d 5f 70 4f 75 74 5f 62  t8 *)d->m_pOut_b
150b0 75 66 20 2b 20 64 2d 3e 6d 5f 6f 75 74 5f 62 75  uf + d->m_out_bu
150c0 66 5f 6f 66 73 2c 20 64 2d 3e 6d 5f 6f 75 74 70  f_ofs, d->m_outp
150d0 75 74 5f 62 75 66 20 2b 20 64 2d 3e 6d 5f 6f 75  ut_buf + d->m_ou
150e0 74 70 75 74 5f 66 6c 75 73 68 5f 6f 66 73 2c 20  tput_flush_ofs, 
150f0 6e 29 3b 0a 20 20 20 20 64 2d 3e 6d 5f 6f 75 74  n);.    d->m_out
15100 70 75 74 5f 66 6c 75 73 68 5f 6f 66 73 20 2b 3d  put_flush_ofs +=
15110 20 28 6d 7a 5f 75 69 6e 74 29 6e 3b 0a 20 20 20   (mz_uint)n;.   
15120 20 64 2d 3e 6d 5f 6f 75 74 70 75 74 5f 66 6c 75   d->m_output_flu
15130 73 68 5f 72 65 6d 61 69 6e 69 6e 67 20 2d 3d 20  sh_remaining -= 
15140 28 6d 7a 5f 75 69 6e 74 29 6e 3b 0a 20 20 20 20  (mz_uint)n;.    
15150 64 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73  d->m_out_buf_ofs
15160 20 2b 3d 20 6e 3b 0a 0a 20 20 20 20 2a 64 2d 3e   += n;..    *d->
15170 6d 5f 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65 20  m_pOut_buf_size 
15180 3d 20 64 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f  = d->m_out_buf_o
15190 66 73 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  fs;.  }..  retur
151a0 6e 20 28 64 2d 3e 6d 5f 66 69 6e 69 73 68 65 64  n (d->m_finished
151b0 20 26 26 20 21 64 2d 3e 6d 5f 6f 75 74 70 75 74   && !d->m_output
151c0 5f 66 6c 75 73 68 5f 72 65 6d 61 69 6e 69 6e 67  _flush_remaining
151d0 29 20 3f 20 54 44 45 46 4c 5f 53 54 41 54 55 53  ) ? TDEFL_STATUS
151e0 5f 44 4f 4e 45 20 3a 20 54 44 45 46 4c 5f 53 54  _DONE : TDEFL_ST
151f0 41 54 55 53 5f 4f 4b 41 59 3b 0a 7d 0a 0a 74 64  ATUS_OKAY;.}..td
15200 65 66 6c 5f 73 74 61 74 75 73 20 74 64 65 66 6c  efl_status tdefl
15210 5f 63 6f 6d 70 72 65 73 73 28 74 64 65 66 6c 5f  _compress(tdefl_
15220 63 6f 6d 70 72 65 73 73 6f 72 20 2a 64 2c 20 63  compressor *d, c
15230 6f 6e 73 74 20 76 6f 69 64 20 2a 70 49 6e 5f 62  onst void *pIn_b
15240 75 66 2c 20 73 69 7a 65 5f 74 20 2a 70 49 6e 5f  uf, size_t *pIn_
15250 62 75 66 5f 73 69 7a 65 2c 20 76 6f 69 64 20 2a  buf_size, void *
15260 70 4f 75 74 5f 62 75 66 2c 20 73 69 7a 65 5f 74  pOut_buf, size_t
15270 20 2a 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65 2c   *pOut_buf_size,
15280 20 74 64 65 66 6c 5f 66 6c 75 73 68 20 66 6c 75   tdefl_flush flu
15290 73 68 29 0a 7b 0a 20 20 69 66 20 28 21 64 29 0a  sh).{.  if (!d).
152a0 20 20 7b 0a 20 20 20 20 69 66 20 28 70 49 6e 5f    {.    if (pIn_
152b0 62 75 66 5f 73 69 7a 65 29 20 2a 70 49 6e 5f 62  buf_size) *pIn_b
152c0 75 66 5f 73 69 7a 65 20 3d 20 30 3b 0a 20 20 20  uf_size = 0;.   
152d0 20 69 66 20 28 70 4f 75 74 5f 62 75 66 5f 73 69   if (pOut_buf_si
152e0 7a 65 29 20 2a 70 4f 75 74 5f 62 75 66 5f 73 69  ze) *pOut_buf_si
152f0 7a 65 20 3d 20 30 3b 0a 20 20 20 20 72 65 74 75  ze = 0;.    retu
15300 72 6e 20 54 44 45 46 4c 5f 53 54 41 54 55 53 5f  rn TDEFL_STATUS_
15310 42 41 44 5f 50 41 52 41 4d 3b 0a 20 20 7d 0a 0a  BAD_PARAM;.  }..
15320 20 20 64 2d 3e 6d 5f 70 49 6e 5f 62 75 66 20 3d    d->m_pIn_buf =
15330 20 70 49 6e 5f 62 75 66 3b 20 64 2d 3e 6d 5f 70   pIn_buf; d->m_p
15340 49 6e 5f 62 75 66 5f 73 69 7a 65 20 3d 20 70 49  In_buf_size = pI
15350 6e 5f 62 75 66 5f 73 69 7a 65 3b 0a 20 20 64 2d  n_buf_size;.  d-
15360 3e 6d 5f 70 4f 75 74 5f 62 75 66 20 3d 20 70 4f  >m_pOut_buf = pO
15370 75 74 5f 62 75 66 3b 20 64 2d 3e 6d 5f 70 4f 75  ut_buf; d->m_pOu
15380 74 5f 62 75 66 5f 73 69 7a 65 20 3d 20 70 4f 75  t_buf_size = pOu
15390 74 5f 62 75 66 5f 73 69 7a 65 3b 0a 20 20 64 2d  t_buf_size;.  d-
153a0 3e 6d 5f 70 53 72 63 20 3d 20 28 63 6f 6e 73 74  >m_pSrc = (const
153b0 20 6d 7a 5f 75 69 6e 74 38 20 2a 29 28 70 49 6e   mz_uint8 *)(pIn
153c0 5f 62 75 66 29 3b 20 64 2d 3e 6d 5f 73 72 63 5f  _buf); d->m_src_
153d0 62 75 66 5f 6c 65 66 74 20 3d 20 70 49 6e 5f 62  buf_left = pIn_b
153e0 75 66 5f 73 69 7a 65 20 3f 20 2a 70 49 6e 5f 62  uf_size ? *pIn_b
153f0 75 66 5f 73 69 7a 65 20 3a 20 30 3b 0a 20 20 64  uf_size : 0;.  d
15400 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66 73 20  ->m_out_buf_ofs 
15410 3d 20 30 3b 0a 20 20 64 2d 3e 6d 5f 66 6c 75 73  = 0;.  d->m_flus
15420 68 20 3d 20 66 6c 75 73 68 3b 0a 0a 20 20 69 66  h = flush;..  if
15430 20 28 20 28 28 64 2d 3e 6d 5f 70 50 75 74 5f 62   ( ((d->m_pPut_b
15440 75 66 5f 66 75 6e 63 20 21 3d 20 4e 55 4c 4c 29  uf_func != NULL)
15450 20 3d 3d 20 28 28 70 4f 75 74 5f 62 75 66 20 21   == ((pOut_buf !
15460 3d 20 4e 55 4c 4c 29 20 7c 7c 20 28 70 4f 75 74  = NULL) || (pOut
15470 5f 62 75 66 5f 73 69 7a 65 20 21 3d 20 4e 55 4c  _buf_size != NUL
15480 4c 29 29 29 20 7c 7c 20 28 64 2d 3e 6d 5f 70 72  L))) || (d->m_pr
15490 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74 75 73  ev_return_status
154a0 20 21 3d 20 54 44 45 46 4c 5f 53 54 41 54 55 53   != TDEFL_STATUS
154b0 5f 4f 4b 41 59 29 20 7c 7c 0a 20 20 20 20 20 20  _OKAY) ||.      
154c0 20 20 28 64 2d 3e 6d 5f 77 61 6e 74 73 5f 74 6f    (d->m_wants_to
154d0 5f 66 69 6e 69 73 68 20 26 26 20 28 66 6c 75 73  _finish && (flus
154e0 68 20 21 3d 20 54 44 45 46 4c 5f 46 49 4e 49 53  h != TDEFL_FINIS
154f0 48 29 29 20 7c 7c 20 28 70 49 6e 5f 62 75 66 5f  H)) || (pIn_buf_
15500 73 69 7a 65 20 26 26 20 2a 70 49 6e 5f 62 75 66  size && *pIn_buf
15510 5f 73 69 7a 65 20 26 26 20 21 70 49 6e 5f 62 75  _size && !pIn_bu
15520 66 29 20 7c 7c 20 28 70 4f 75 74 5f 62 75 66 5f  f) || (pOut_buf_
15530 73 69 7a 65 20 26 26 20 2a 70 4f 75 74 5f 62 75  size && *pOut_bu
15540 66 5f 73 69 7a 65 20 26 26 20 21 70 4f 75 74 5f  f_size && !pOut_
15550 62 75 66 29 20 29 0a 20 20 7b 0a 20 20 20 20 69  buf) ).  {.    i
15560 66 20 28 70 49 6e 5f 62 75 66 5f 73 69 7a 65 29  f (pIn_buf_size)
15570 20 2a 70 49 6e 5f 62 75 66 5f 73 69 7a 65 20 3d   *pIn_buf_size =
15580 20 30 3b 0a 20 20 20 20 69 66 20 28 70 4f 75 74   0;.    if (pOut
15590 5f 62 75 66 5f 73 69 7a 65 29 20 2a 70 4f 75 74  _buf_size) *pOut
155a0 5f 62 75 66 5f 73 69 7a 65 20 3d 20 30 3b 0a 20  _buf_size = 0;. 
155b0 20 20 20 72 65 74 75 72 6e 20 28 64 2d 3e 6d 5f     return (d->m_
155c0 70 72 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74  prev_return_stat
155d0 75 73 20 3d 20 54 44 45 46 4c 5f 53 54 41 54 55  us = TDEFL_STATU
155e0 53 5f 42 41 44 5f 50 41 52 41 4d 29 3b 0a 20 20  S_BAD_PARAM);.  
155f0 7d 0a 20 20 64 2d 3e 6d 5f 77 61 6e 74 73 5f 74  }.  d->m_wants_t
15600 6f 5f 66 69 6e 69 73 68 20 7c 3d 20 28 66 6c 75  o_finish |= (flu
15610 73 68 20 3d 3d 20 54 44 45 46 4c 5f 46 49 4e 49  sh == TDEFL_FINI
15620 53 48 29 3b 0a 0a 20 20 69 66 20 28 28 64 2d 3e  SH);..  if ((d->
15630 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f 72  m_output_flush_r
15640 65 6d 61 69 6e 69 6e 67 29 20 7c 7c 20 28 64 2d  emaining) || (d-
15650 3e 6d 5f 66 69 6e 69 73 68 65 64 29 29 0a 20 20  >m_finished)).  
15660 20 20 72 65 74 75 72 6e 20 28 64 2d 3e 6d 5f 70    return (d->m_p
15670 72 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74 75  rev_return_statu
15680 73 20 3d 20 74 64 65 66 6c 5f 66 6c 75 73 68 5f  s = tdefl_flush_
15690 6f 75 74 70 75 74 5f 62 75 66 66 65 72 28 64 29  output_buffer(d)
156a0 29 3b 0a 0a 23 69 66 20 4d 49 4e 49 5a 5f 55 53  );..#if MINIZ_US
156b0 45 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c 4f 41 44  E_UNALIGNED_LOAD
156c0 53 5f 41 4e 44 5f 53 54 4f 52 45 53 20 26 26 20  S_AND_STORES && 
156d0 4d 49 4e 49 5a 5f 4c 49 54 54 4c 45 5f 45 4e 44  MINIZ_LITTLE_END
156e0 49 41 4e 0a 20 20 69 66 20 28 28 28 64 2d 3e 6d  IAN.  if (((d->m
156f0 5f 66 6c 61 67 73 20 26 20 54 44 45 46 4c 5f 4d  _flags & TDEFL_M
15700 41 58 5f 50 52 4f 42 45 53 5f 4d 41 53 4b 29 20  AX_PROBES_MASK) 
15710 3d 3d 20 31 29 20 26 26 0a 20 20 20 20 20 20 28  == 1) &&.      (
15720 28 64 2d 3e 6d 5f 66 6c 61 67 73 20 26 20 54 44  (d->m_flags & TD
15730 45 46 4c 5f 47 52 45 45 44 59 5f 50 41 52 53 49  EFL_GREEDY_PARSI
15740 4e 47 5f 46 4c 41 47 29 20 21 3d 20 30 29 20 26  NG_FLAG) != 0) &
15750 26 0a 20 20 20 20 20 20 28 28 64 2d 3e 6d 5f 66  &.      ((d->m_f
15760 6c 61 67 73 20 26 20 28 54 44 45 46 4c 5f 46 49  lags & (TDEFL_FI
15770 4c 54 45 52 5f 4d 41 54 43 48 45 53 20 7c 20 54  LTER_MATCHES | T
15780 44 45 46 4c 5f 46 4f 52 43 45 5f 41 4c 4c 5f 52  DEFL_FORCE_ALL_R
15790 41 57 5f 42 4c 4f 43 4b 53 20 7c 20 54 44 45 46  AW_BLOCKS | TDEF
157a0 4c 5f 52 4c 45 5f 4d 41 54 43 48 45 53 29 29 20  L_RLE_MATCHES)) 
157b0 3d 3d 20 30 29 29 0a 20 20 7b 0a 20 20 20 20 69  == 0)).  {.    i
157c0 66 20 28 21 74 64 65 66 6c 5f 63 6f 6d 70 72 65  f (!tdefl_compre
157d0 73 73 5f 66 61 73 74 28 64 29 29 0a 20 20 20 20  ss_fast(d)).    
157e0 20 20 72 65 74 75 72 6e 20 64 2d 3e 6d 5f 70 72    return d->m_pr
157f0 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74 75 73  ev_return_status
15800 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 0a 23 65 6e  ;.  }.  else.#en
15810 64 69 66 20 2f 2f 20 23 69 66 20 4d 49 4e 49 5a  dif // #if MINIZ
15820 5f 55 53 45 5f 55 4e 41 4c 49 47 4e 45 44 5f 4c  _USE_UNALIGNED_L
15830 4f 41 44 53 5f 41 4e 44 5f 53 54 4f 52 45 53 20  OADS_AND_STORES 
15840 26 26 20 4d 49 4e 49 5a 5f 4c 49 54 54 4c 45 5f  && MINIZ_LITTLE_
15850 45 4e 44 49 41 4e 0a 20 20 7b 0a 20 20 20 20 69  ENDIAN.  {.    i
15860 66 20 28 21 74 64 65 66 6c 5f 63 6f 6d 70 72 65  f (!tdefl_compre
15870 73 73 5f 6e 6f 72 6d 61 6c 28 64 29 29 0a 20 20  ss_normal(d)).  
15880 20 20 20 20 72 65 74 75 72 6e 20 64 2d 3e 6d 5f      return d->m_
15890 70 72 65 76 5f 72 65 74 75 72 6e 5f 73 74 61 74  prev_return_stat
158a0 75 73 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 28  us;.  }..  if ((
158b0 64 2d 3e 6d 5f 66 6c 61 67 73 20 26 20 28 54 44  d->m_flags & (TD
158c0 45 46 4c 5f 57 52 49 54 45 5f 5a 4c 49 42 5f 48  EFL_WRITE_ZLIB_H
158d0 45 41 44 45 52 20 7c 20 54 44 45 46 4c 5f 43 4f  EADER | TDEFL_CO
158e0 4d 50 55 54 45 5f 41 44 4c 45 52 33 32 29 29 20  MPUTE_ADLER32)) 
158f0 26 26 20 28 70 49 6e 5f 62 75 66 29 29 0a 20 20  && (pIn_buf)).  
15900 20 20 64 2d 3e 6d 5f 61 64 6c 65 72 33 32 20 3d    d->m_adler32 =
15910 20 28 6d 7a 5f 75 69 6e 74 33 32 29 6d 7a 5f 61   (mz_uint32)mz_a
15920 64 6c 65 72 33 32 28 64 2d 3e 6d 5f 61 64 6c 65  dler32(d->m_adle
15930 72 33 32 2c 20 28 63 6f 6e 73 74 20 6d 7a 5f 75  r32, (const mz_u
15940 69 6e 74 38 20 2a 29 70 49 6e 5f 62 75 66 2c 20  int8 *)pIn_buf, 
15950 64 2d 3e 6d 5f 70 53 72 63 20 2d 20 28 63 6f 6e  d->m_pSrc - (con
15960 73 74 20 6d 7a 5f 75 69 6e 74 38 20 2a 29 70 49  st mz_uint8 *)pI
15970 6e 5f 62 75 66 29 3b 0a 0a 20 20 69 66 20 28 28  n_buf);..  if ((
15980 66 6c 75 73 68 29 20 26 26 20 28 21 64 2d 3e 6d  flush) && (!d->m
15990 5f 6c 6f 6f 6b 61 68 65 61 64 5f 73 69 7a 65 29  _lookahead_size)
159a0 20 26 26 20 28 21 64 2d 3e 6d 5f 73 72 63 5f 62   && (!d->m_src_b
159b0 75 66 5f 6c 65 66 74 29 20 26 26 20 28 21 64 2d  uf_left) && (!d-
159c0 3e 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f  >m_output_flush_
159d0 72 65 6d 61 69 6e 69 6e 67 29 29 0a 20 20 7b 0a  remaining)).  {.
159e0 20 20 20 20 69 66 20 28 74 64 65 66 6c 5f 66 6c      if (tdefl_fl
159f0 75 73 68 5f 62 6c 6f 63 6b 28 64 2c 20 66 6c 75  ush_block(d, flu
15a00 73 68 29 20 3c 20 30 29 0a 20 20 20 20 20 20 72  sh) < 0).      r
15a10 65 74 75 72 6e 20 64 2d 3e 6d 5f 70 72 65 76 5f  eturn d->m_prev_
15a20 72 65 74 75 72 6e 5f 73 74 61 74 75 73 3b 0a 20  return_status;. 
15a30 20 20 20 64 2d 3e 6d 5f 66 69 6e 69 73 68 65 64     d->m_finished
15a40 20 3d 20 28 66 6c 75 73 68 20 3d 3d 20 54 44 45   = (flush == TDE
15a50 46 4c 5f 46 49 4e 49 53 48 29 3b 0a 20 20 20 20  FL_FINISH);.    
15a60 69 66 20 28 66 6c 75 73 68 20 3d 3d 20 54 44 45  if (flush == TDE
15a70 46 4c 5f 46 55 4c 4c 5f 46 4c 55 53 48 29 20 7b  FL_FULL_FLUSH) {
15a80 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a 28 64 2d   MZ_CLEAR_OBJ(d-
15a90 3e 6d 5f 68 61 73 68 29 3b 20 4d 5a 5f 43 4c 45  >m_hash); MZ_CLE
15aa0 41 52 5f 4f 42 4a 28 64 2d 3e 6d 5f 6e 65 78 74  AR_OBJ(d->m_next
15ab0 29 3b 20 64 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a  ); d->m_dict_siz
15ac0 65 20 3d 20 30 3b 20 7d 0a 20 20 7d 0a 0a 20 20  e = 0; }.  }..  
15ad0 72 65 74 75 72 6e 20 28 64 2d 3e 6d 5f 70 72 65  return (d->m_pre
15ae0 76 5f 72 65 74 75 72 6e 5f 73 74 61 74 75 73 20  v_return_status 
15af0 3d 20 74 64 65 66 6c 5f 66 6c 75 73 68 5f 6f 75  = tdefl_flush_ou
15b00 74 70 75 74 5f 62 75 66 66 65 72 28 64 29 29 3b  tput_buffer(d));
15b10 0a 7d 0a 0a 74 64 65 66 6c 5f 73 74 61 74 75 73  .}..tdefl_status
15b20 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f   tdefl_compress_
15b30 62 75 66 66 65 72 28 74 64 65 66 6c 5f 63 6f 6d  buffer(tdefl_com
15b40 70 72 65 73 73 6f 72 20 2a 64 2c 20 63 6f 6e 73  pressor *d, cons
15b50 74 20 76 6f 69 64 20 2a 70 49 6e 5f 62 75 66 2c  t void *pIn_buf,
15b60 20 73 69 7a 65 5f 74 20 69 6e 5f 62 75 66 5f 73   size_t in_buf_s
15b70 69 7a 65 2c 20 74 64 65 66 6c 5f 66 6c 75 73 68  ize, tdefl_flush
15b80 20 66 6c 75 73 68 29 0a 7b 0a 20 20 4d 5a 5f 41   flush).{.  MZ_A
15b90 53 53 45 52 54 28 64 2d 3e 6d 5f 70 50 75 74 5f  SSERT(d->m_pPut_
15ba0 62 75 66 5f 66 75 6e 63 29 3b 20 72 65 74 75 72  buf_func); retur
15bb0 6e 20 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73  n tdefl_compress
15bc0 28 64 2c 20 70 49 6e 5f 62 75 66 2c 20 26 69 6e  (d, pIn_buf, &in
15bd0 5f 62 75 66 5f 73 69 7a 65 2c 20 4e 55 4c 4c 2c  _buf_size, NULL,
15be0 20 4e 55 4c 4c 2c 20 66 6c 75 73 68 29 3b 0a 7d   NULL, flush);.}
15bf0 0a 0a 74 64 65 66 6c 5f 73 74 61 74 75 73 20 74  ..tdefl_status t
15c00 64 65 66 6c 5f 69 6e 69 74 28 74 64 65 66 6c 5f  defl_init(tdefl_
15c10 63 6f 6d 70 72 65 73 73 6f 72 20 2a 64 2c 20 74  compressor *d, t
15c20 64 65 66 6c 5f 70 75 74 5f 62 75 66 5f 66 75 6e  defl_put_buf_fun
15c30 63 5f 70 74 72 20 70 50 75 74 5f 62 75 66 5f 66  c_ptr pPut_buf_f
15c40 75 6e 63 2c 20 76 6f 69 64 20 2a 70 50 75 74 5f  unc, void *pPut_
15c50 62 75 66 5f 75 73 65 72 2c 20 69 6e 74 20 66 6c  buf_user, int fl
15c60 61 67 73 29 0a 7b 0a 20 20 64 2d 3e 6d 5f 70 50  ags).{.  d->m_pP
15c70 75 74 5f 62 75 66 5f 66 75 6e 63 20 3d 20 70 50  ut_buf_func = pP
15c80 75 74 5f 62 75 66 5f 66 75 6e 63 3b 20 64 2d 3e  ut_buf_func; d->
15c90 6d 5f 70 50 75 74 5f 62 75 66 5f 75 73 65 72 20  m_pPut_buf_user 
15ca0 3d 20 70 50 75 74 5f 62 75 66 5f 75 73 65 72 3b  = pPut_buf_user;
15cb0 0a 20 20 64 2d 3e 6d 5f 66 6c 61 67 73 20 3d 20  .  d->m_flags = 
15cc0 28 6d 7a 5f 75 69 6e 74 29 28 66 6c 61 67 73 29  (mz_uint)(flags)
15cd0 3b 20 64 2d 3e 6d 5f 6d 61 78 5f 70 72 6f 62 65  ; d->m_max_probe
15ce0 73 5b 30 5d 20 3d 20 31 20 2b 20 28 28 66 6c 61  s[0] = 1 + ((fla
15cf0 67 73 20 26 20 30 78 46 46 46 29 20 2b 20 32 29  gs & 0xFFF) + 2)
15d00 20 2f 20 33 3b 20 64 2d 3e 6d 5f 67 72 65 65 64   / 3; d->m_greed
15d10 79 5f 70 61 72 73 69 6e 67 20 3d 20 28 66 6c 61  y_parsing = (fla
15d20 67 73 20 26 20 54 44 45 46 4c 5f 47 52 45 45 44  gs & TDEFL_GREED
15d30 59 5f 50 41 52 53 49 4e 47 5f 46 4c 41 47 29 20  Y_PARSING_FLAG) 
15d40 21 3d 20 30 3b 0a 20 20 64 2d 3e 6d 5f 6d 61 78  != 0;.  d->m_max
15d50 5f 70 72 6f 62 65 73 5b 31 5d 20 3d 20 31 20 2b  _probes[1] = 1 +
15d60 20 28 28 28 66 6c 61 67 73 20 26 20 30 78 46 46   (((flags & 0xFF
15d70 46 29 20 3e 3e 20 32 29 20 2b 20 32 29 20 2f 20  F) >> 2) + 2) / 
15d80 33 3b 0a 20 20 69 66 20 28 21 28 66 6c 61 67 73  3;.  if (!(flags
15d90 20 26 20 54 44 45 46 4c 5f 4e 4f 4e 44 45 54 45   & TDEFL_NONDETE
15da0 52 4d 49 4e 49 53 54 49 43 5f 50 41 52 53 49 4e  RMINISTIC_PARSIN
15db0 47 5f 46 4c 41 47 29 29 20 4d 5a 5f 43 4c 45 41  G_FLAG)) MZ_CLEA
15dc0 52 5f 4f 42 4a 28 64 2d 3e 6d 5f 68 61 73 68 29  R_OBJ(d->m_hash)
15dd0 3b 0a 20 20 64 2d 3e 6d 5f 6c 6f 6f 6b 61 68 65  ;.  d->m_lookahe
15de0 61 64 5f 70 6f 73 20 3d 20 64 2d 3e 6d 5f 6c 6f  ad_pos = d->m_lo
15df0 6f 6b 61 68 65 61 64 5f 73 69 7a 65 20 3d 20 64  okahead_size = d
15e00 2d 3e 6d 5f 64 69 63 74 5f 73 69 7a 65 20 3d 20  ->m_dict_size = 
15e10 64 2d 3e 6d 5f 74 6f 74 61 6c 5f 6c 7a 5f 62 79  d->m_total_lz_by
15e20 74 65 73 20 3d 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f  tes = d->m_lz_co
15e30 64 65 5f 62 75 66 5f 64 69 63 74 5f 70 6f 73 20  de_buf_dict_pos 
15e40 3d 20 64 2d 3e 6d 5f 62 69 74 73 5f 69 6e 20 3d  = d->m_bits_in =
15e50 20 30 3b 0a 20 20 64 2d 3e 6d 5f 6f 75 74 70 75   0;.  d->m_outpu
15e60 74 5f 66 6c 75 73 68 5f 6f 66 73 20 3d 20 64 2d  t_flush_ofs = d-
15e70 3e 6d 5f 6f 75 74 70 75 74 5f 66 6c 75 73 68 5f  >m_output_flush_
15e80 72 65 6d 61 69 6e 69 6e 67 20 3d 20 64 2d 3e 6d  remaining = d->m
15e90 5f 66 69 6e 69 73 68 65 64 20 3d 20 64 2d 3e 6d  _finished = d->m
15ea0 5f 62 6c 6f 63 6b 5f 69 6e 64 65 78 20 3d 20 64  _block_index = d
15eb0 2d 3e 6d 5f 62 69 74 5f 62 75 66 66 65 72 20 3d  ->m_bit_buffer =
15ec0 20 64 2d 3e 6d 5f 77 61 6e 74 73 5f 74 6f 5f 66   d->m_wants_to_f
15ed0 69 6e 69 73 68 20 3d 20 30 3b 0a 20 20 64 2d 3e  inish = 0;.  d->
15ee0 6d 5f 70 4c 5a 5f 63 6f 64 65 5f 62 75 66 20 3d  m_pLZ_code_buf =
15ef0 20 64 2d 3e 6d 5f 6c 7a 5f 63 6f 64 65 5f 62 75   d->m_lz_code_bu
15f00 66 20 2b 20 31 3b 20 64 2d 3e 6d 5f 70 4c 5a 5f  f + 1; d->m_pLZ_
15f10 66 6c 61 67 73 20 3d 20 64 2d 3e 6d 5f 6c 7a 5f  flags = d->m_lz_
15f20 63 6f 64 65 5f 62 75 66 3b 20 64 2d 3e 6d 5f 6e  code_buf; d->m_n
15f30 75 6d 5f 66 6c 61 67 73 5f 6c 65 66 74 20 3d 20  um_flags_left = 
15f40 38 3b 0a 20 20 64 2d 3e 6d 5f 70 4f 75 74 70 75  8;.  d->m_pOutpu
15f50 74 5f 62 75 66 20 3d 20 64 2d 3e 6d 5f 6f 75 74  t_buf = d->m_out
15f60 70 75 74 5f 62 75 66 3b 20 64 2d 3e 6d 5f 70 4f  put_buf; d->m_pO
15f70 75 74 70 75 74 5f 62 75 66 5f 65 6e 64 20 3d 20  utput_buf_end = 
15f80 64 2d 3e 6d 5f 6f 75 74 70 75 74 5f 62 75 66 3b  d->m_output_buf;
15f90 20 64 2d 3e 6d 5f 70 72 65 76 5f 72 65 74 75 72   d->m_prev_retur
15fa0 6e 5f 73 74 61 74 75 73 20 3d 20 54 44 45 46 4c  n_status = TDEFL
15fb0 5f 53 54 41 54 55 53 5f 4f 4b 41 59 3b 0a 20 20  _STATUS_OKAY;.  
15fc0 64 2d 3e 6d 5f 73 61 76 65 64 5f 6d 61 74 63 68  d->m_saved_match
15fd0 5f 64 69 73 74 20 3d 20 64 2d 3e 6d 5f 73 61 76  _dist = d->m_sav
15fe0 65 64 5f 6d 61 74 63 68 5f 6c 65 6e 20 3d 20 64  ed_match_len = d
15ff0 2d 3e 6d 5f 73 61 76 65 64 5f 6c 69 74 20 3d 20  ->m_saved_lit = 
16000 30 3b 20 64 2d 3e 6d 5f 61 64 6c 65 72 33 32 20  0; d->m_adler32 
16010 3d 20 31 3b 0a 20 20 64 2d 3e 6d 5f 70 49 6e 5f  = 1;.  d->m_pIn_
16020 62 75 66 20 3d 20 4e 55 4c 4c 3b 20 64 2d 3e 6d  buf = NULL; d->m
16030 5f 70 4f 75 74 5f 62 75 66 20 3d 20 4e 55 4c 4c  _pOut_buf = NULL
16040 3b 0a 20 20 64 2d 3e 6d 5f 70 49 6e 5f 62 75 66  ;.  d->m_pIn_buf
16050 5f 73 69 7a 65 20 3d 20 4e 55 4c 4c 3b 20 64 2d  _size = NULL; d-
16060 3e 6d 5f 70 4f 75 74 5f 62 75 66 5f 73 69 7a 65  >m_pOut_buf_size
16070 20 3d 20 4e 55 4c 4c 3b 0a 20 20 64 2d 3e 6d 5f   = NULL;.  d->m_
16080 66 6c 75 73 68 20 3d 20 54 44 45 46 4c 5f 4e 4f  flush = TDEFL_NO
16090 5f 46 4c 55 53 48 3b 20 64 2d 3e 6d 5f 70 53 72  _FLUSH; d->m_pSr
160a0 63 20 3d 20 4e 55 4c 4c 3b 20 64 2d 3e 6d 5f 73  c = NULL; d->m_s
160b0 72 63 5f 62 75 66 5f 6c 65 66 74 20 3d 20 30 3b  rc_buf_left = 0;
160c0 20 64 2d 3e 6d 5f 6f 75 74 5f 62 75 66 5f 6f 66   d->m_out_buf_of
160d0 73 20 3d 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28  s = 0;.  memset(
160e0 26 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74  &d->m_huff_count
160f0 5b 30 5d 5b 30 5d 2c 20 30 2c 20 73 69 7a 65 6f  [0][0], 0, sizeo
16100 66 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e  f(d->m_huff_coun
16110 74 5b 30 5d 5b 30 5d 29 20 2a 20 54 44 45 46 4c  t[0][0]) * TDEFL
16120 5f 4d 41 58 5f 48 55 46 46 5f 53 59 4d 42 4f 4c  _MAX_HUFF_SYMBOL
16130 53 5f 30 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  S_0);.  memset(&
16140 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74 5b  d->m_huff_count[
16150 31 5d 5b 30 5d 2c 20 30 2c 20 73 69 7a 65 6f 66  1][0], 0, sizeof
16160 28 64 2d 3e 6d 5f 68 75 66 66 5f 63 6f 75 6e 74  (d->m_huff_count
16170 5b 31 5d 5b 30 5d 29 20 2a 20 54 44 45 46 4c 5f  [1][0]) * TDEFL_
16180 4d 41 58 5f 48 55 46 46 5f 53 59 4d 42 4f 4c 53  MAX_HUFF_SYMBOLS
16190 5f 31 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 44  _1);.  return TD
161a0 45 46 4c 5f 53 54 41 54 55 53 5f 4f 4b 41 59 3b  EFL_STATUS_OKAY;
161b0 0a 7d 0a 0a 74 64 65 66 6c 5f 73 74 61 74 75 73  .}..tdefl_status
161c0 20 74 64 65 66 6c 5f 67 65 74 5f 70 72 65 76 5f   tdefl_get_prev_
161d0 72 65 74 75 72 6e 5f 73 74 61 74 75 73 28 74 64  return_status(td
161e0 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72 20 2a  efl_compressor *
161f0 64 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 64 2d  d).{.  return d-
16200 3e 6d 5f 70 72 65 76 5f 72 65 74 75 72 6e 5f 73  >m_prev_return_s
16210 74 61 74 75 73 3b 0a 7d 0a 0a 6d 7a 5f 75 69 6e  tatus;.}..mz_uin
16220 74 33 32 20 74 64 65 66 6c 5f 67 65 74 5f 61 64  t32 tdefl_get_ad
16230 6c 65 72 33 32 28 74 64 65 66 6c 5f 63 6f 6d 70  ler32(tdefl_comp
16240 72 65 73 73 6f 72 20 2a 64 29 0a 7b 0a 20 20 72  ressor *d).{.  r
16250 65 74 75 72 6e 20 64 2d 3e 6d 5f 61 64 6c 65 72  eturn d->m_adler
16260 33 32 3b 0a 7d 0a 0a 6d 7a 5f 62 6f 6f 6c 20 74  32;.}..mz_bool t
16270 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 6d 65  defl_compress_me
16280 6d 5f 74 6f 5f 6f 75 74 70 75 74 28 63 6f 6e 73  m_to_output(cons
16290 74 20 76 6f 69 64 20 2a 70 42 75 66 2c 20 73 69  t void *pBuf, si
162a0 7a 65 5f 74 20 62 75 66 5f 6c 65 6e 2c 20 74 64  ze_t buf_len, td
162b0 65 66 6c 5f 70 75 74 5f 62 75 66 5f 66 75 6e 63  efl_put_buf_func
162c0 5f 70 74 72 20 70 50 75 74 5f 62 75 66 5f 66 75  _ptr pPut_buf_fu
162d0 6e 63 2c 20 76 6f 69 64 20 2a 70 50 75 74 5f 62  nc, void *pPut_b
162e0 75 66 5f 75 73 65 72 2c 20 69 6e 74 20 66 6c 61  uf_user, int fla
162f0 67 73 29 0a 7b 0a 20 20 74 64 65 66 6c 5f 63 6f  gs).{.  tdefl_co
16300 6d 70 72 65 73 73 6f 72 20 2a 70 43 6f 6d 70 3b  mpressor *pComp;
16310 20 6d 7a 5f 62 6f 6f 6c 20 73 75 63 63 65 65 64   mz_bool succeed
16320 65 64 3b 20 69 66 20 28 28 28 62 75 66 5f 6c 65  ed; if (((buf_le
16330 6e 29 20 26 26 20 28 21 70 42 75 66 29 29 20 7c  n) && (!pBuf)) |
16340 7c 20 28 21 70 50 75 74 5f 62 75 66 5f 66 75 6e  | (!pPut_buf_fun
16350 63 29 29 20 72 65 74 75 72 6e 20 4d 5a 5f 46 41  c)) return MZ_FA
16360 4c 53 45 3b 0a 20 20 70 43 6f 6d 70 20 3d 20 28  LSE;.  pComp = (
16370 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 6f 72  tdefl_compressor
16380 2a 29 4d 5a 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65  *)MZ_MALLOC(size
16390 6f 66 28 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73  of(tdefl_compres
163a0 73 6f 72 29 29 3b 20 69 66 20 28 21 70 43 6f 6d  sor)); if (!pCom
163b0 70 29 20 72 65 74 75 72 6e 20 4d 5a 5f 46 41 4c  p) return MZ_FAL
163c0 53 45 3b 0a 20 20 73 75 63 63 65 65 64 65 64 20  SE;.  succeeded 
163d0 3d 20 28 74 64 65 66 6c 5f 69 6e 69 74 28 70 43  = (tdefl_init(pC
163e0 6f 6d 70 2c 20 70 50 75 74 5f 62 75 66 5f 66 75  omp, pPut_buf_fu
163f0 6e 63 2c 20 70 50 75 74 5f 62 75 66 5f 75 73 65  nc, pPut_buf_use
16400 72 2c 20 66 6c 61 67 73 29 20 3d 3d 20 54 44 45  r, flags) == TDE
16410 46 4c 5f 53 54 41 54 55 53 5f 4f 4b 41 59 29 3b  FL_STATUS_OKAY);
16420 0a 20 20 73 75 63 63 65 65 64 65 64 20 3d 20 73  .  succeeded = s
16430 75 63 63 65 65 64 65 64 20 26 26 20 28 74 64 65  ucceeded && (tde
16440 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 62 75 66 66  fl_compress_buff
16450 65 72 28 70 43 6f 6d 70 2c 20 70 42 75 66 2c 20  er(pComp, pBuf, 
16460 62 75 66 5f 6c 65 6e 2c 20 54 44 45 46 4c 5f 46  buf_len, TDEFL_F
16470 49 4e 49 53 48 29 20 3d 3d 20 54 44 45 46 4c 5f  INISH) == TDEFL_
16480 53 54 41 54 55 53 5f 44 4f 4e 45 29 3b 0a 20 20  STATUS_DONE);.  
16490 4d 5a 5f 46 52 45 45 28 70 43 6f 6d 70 29 3b 20  MZ_FREE(pComp); 
164a0 72 65 74 75 72 6e 20 73 75 63 63 65 65 64 65 64  return succeeded
164b0 3b 0a 7d 0a 0a 74 79 70 65 64 65 66 20 73 74 72  ;.}..typedef str
164c0 75 63 74 0a 7b 0a 20 20 73 69 7a 65 5f 74 20 6d  uct.{.  size_t m
164d0 5f 73 69 7a 65 2c 20 6d 5f 63 61 70 61 63 69 74  _size, m_capacit
164e0 79 3b 0a 20 20 6d 7a 5f 75 69 6e 74 38 20 2a 6d  y;.  mz_uint8 *m
164f0 5f 70 42 75 66 3b 0a 20 20 6d 7a 5f 62 6f 6f 6c  _pBuf;.  mz_bool
16500 20 6d 5f 65 78 70 61 6e 64 61 62 6c 65 3b 0a 7d   m_expandable;.}
16510 20 74 64 65 66 6c 5f 6f 75 74 70 75 74 5f 62 75   tdefl_output_bu
16520 66 66 65 72 3b 0a 0a 73 74 61 74 69 63 20 6d 7a  ffer;..static mz
16530 5f 62 6f 6f 6c 20 74 64 65 66 6c 5f 6f 75 74 70  _bool tdefl_outp
16540 75 74 5f 62 75 66 66 65 72 5f 70 75 74 74 65 72  ut_buffer_putter
16550 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 75  (const void *pBu
16560 66 2c 20 69 6e 74 20 6c 65 6e 2c 20 76 6f 69 64  f, int len, void
16570 20 2a 70 55 73 65 72 29 0a 7b 0a 20 20 74 64 65   *pUser).{.  tde
16580 66 6c 5f 6f 75 74 70 75 74 5f 62 75 66 66 65 72  fl_output_buffer
16590 20 2a 70 20 3d 20 28 74 64 65 66 6c 5f 6f 75 74   *p = (tdefl_out
165a0 70 75 74 5f 62 75 66 66 65 72 20 2a 29 70 55 73  put_buffer *)pUs
165b0 65 72 3b 0a 20 20 73 69 7a 65 5f 74 20 6e 65 77  er;.  size_t new
165c0 5f 73 69 7a 65 20 3d 20 70 2d 3e 6d 5f 73 69 7a  _size = p->m_siz
165d0 65 20 2b 20 6c 65 6e 3b 0a 20 20 69 66 20 28 6e  e + len;.  if (n
165e0 65 77 5f 73 69 7a 65 20 3e 20 70 2d 3e 6d 5f 63  ew_size > p->m_c
165f0 61 70 61 63 69 74 79 29 0a 20 20 7b 0a 20 20 20  apacity).  {.   
16600 20 73 69 7a 65 5f 74 20 6e 65 77 5f 63 61 70 61   size_t new_capa
16610 63 69 74 79 20 3d 20 70 2d 3e 6d 5f 63 61 70 61  city = p->m_capa
16620 63 69 74 79 3b 20 6d 7a 5f 75 69 6e 74 38 20 2a  city; mz_uint8 *
16630 70 4e 65 77 5f 62 75 66 3b 20 69 66 20 28 21 70  pNew_buf; if (!p
16640 2d 3e 6d 5f 65 78 70 61 6e 64 61 62 6c 65 29 20  ->m_expandable) 
16650 72 65 74 75 72 6e 20 4d 5a 5f 46 41 4c 53 45 3b  return MZ_FALSE;
16660 0a 20 20 20 20 64 6f 20 7b 20 6e 65 77 5f 63 61  .    do { new_ca
16670 70 61 63 69 74 79 20 3d 20 4d 5a 5f 4d 41 58 28  pacity = MZ_MAX(
16680 31 32 38 55 2c 20 6e 65 77 5f 63 61 70 61 63 69  128U, new_capaci
16690 74 79 20 3c 3c 20 31 55 29 3b 20 7d 20 77 68 69  ty << 1U); } whi
166a0 6c 65 20 28 6e 65 77 5f 73 69 7a 65 20 3e 20 6e  le (new_size > n
166b0 65 77 5f 63 61 70 61 63 69 74 79 29 3b 0a 20 20  ew_capacity);.  
166c0 20 20 70 4e 65 77 5f 62 75 66 20 3d 20 28 6d 7a    pNew_buf = (mz
166d0 5f 75 69 6e 74 38 2a 29 4d 5a 5f 52 45 41 4c 4c  _uint8*)MZ_REALL
166e0 4f 43 28 70 2d 3e 6d 5f 70 42 75 66 2c 20 6e 65  OC(p->m_pBuf, ne
166f0 77 5f 63 61 70 61 63 69 74 79 29 3b 20 69 66 20  w_capacity); if 
16700 28 21 70 4e 65 77 5f 62 75 66 29 20 72 65 74 75  (!pNew_buf) retu
16710 72 6e 20 4d 5a 5f 46 41 4c 53 45 3b 0a 20 20 20  rn MZ_FALSE;.   
16720 20 70 2d 3e 6d 5f 70 42 75 66 20 3d 20 70 4e 65   p->m_pBuf = pNe
16730 77 5f 62 75 66 3b 20 70 2d 3e 6d 5f 63 61 70 61  w_buf; p->m_capa
16740 63 69 74 79 20 3d 20 6e 65 77 5f 63 61 70 61 63  city = new_capac
16750 69 74 79 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  ity;.  }.  memcp
16760 79 28 28 6d 7a 5f 75 69 6e 74 38 2a 29 70 2d 3e  y((mz_uint8*)p->
16770 6d 5f 70 42 75 66 20 2b 20 70 2d 3e 6d 5f 73 69  m_pBuf + p->m_si
16780 7a 65 2c 20 70 42 75 66 2c 20 6c 65 6e 29 3b 20  ze, pBuf, len); 
16790 70 2d 3e 6d 5f 73 69 7a 65 20 3d 20 6e 65 77 5f  p->m_size = new_
167a0 73 69 7a 65 3b 0a 20 20 72 65 74 75 72 6e 20 4d  size;.  return M
167b0 5a 5f 54 52 55 45 3b 0a 7d 0a 0a 76 6f 69 64 20  Z_TRUE;.}..void 
167c0 2a 74 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f  *tdefl_compress_
167d0 6d 65 6d 5f 74 6f 5f 68 65 61 70 28 63 6f 6e 73  mem_to_heap(cons
167e0 74 20 76 6f 69 64 20 2a 70 53 72 63 5f 62 75 66  t void *pSrc_buf
167f0 2c 20 73 69 7a 65 5f 74 20 73 72 63 5f 62 75 66  , size_t src_buf
16800 5f 6c 65 6e 2c 20 73 69 7a 65 5f 74 20 2a 70 4f  _len, size_t *pO
16810 75 74 5f 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67  ut_len, int flag
16820 73 29 0a 7b 0a 20 20 74 64 65 66 6c 5f 6f 75 74  s).{.  tdefl_out
16830 70 75 74 5f 62 75 66 66 65 72 20 6f 75 74 5f 62  put_buffer out_b
16840 75 66 3b 20 4d 5a 5f 43 4c 45 41 52 5f 4f 42 4a  uf; MZ_CLEAR_OBJ
16850 28 6f 75 74 5f 62 75 66 29 3b 0a 20 20 69 66 20  (out_buf);.  if 
16860 28 21 70 4f 75 74 5f 6c 65 6e 29 20 72 65 74 75  (!pOut_len) retu
16870 72 6e 20 4d 5a 5f 46 41 4c 53 45 3b 20 65 6c 73  rn MZ_FALSE; els
16880 65 20 2a 70 4f 75 74 5f 6c 65 6e 20 3d 20 30 3b  e *pOut_len = 0;
16890 0a 20 20 6f 75 74 5f 62 75 66 2e 6d 5f 65 78 70  .  out_buf.m_exp
168a0 61 6e 64 61 62 6c 65 20 3d 20 4d 5a 5f 54 52 55  andable = MZ_TRU
168b0 45 3b 0a 20 20 69 66 20 28 21 74 64 65 66 6c 5f  E;.  if (!tdefl_
168c0 63 6f 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f  compress_mem_to_
168d0 6f 75 74 70 75 74 28 70 53 72 63 5f 62 75 66 2c  output(pSrc_buf,
168e0 20 73 72 63 5f 62 75 66 5f 6c 65 6e 2c 20 74 64   src_buf_len, td
168f0 65 66 6c 5f 6f 75 74 70 75 74 5f 62 75 66 66 65  efl_output_buffe
16900 72 5f 70 75 74 74 65 72 2c 20 26 6f 75 74 5f 62  r_putter, &out_b
16910 75 66 2c 20 66 6c 61 67 73 29 29 20 72 65 74 75  uf, flags)) retu
16920 72 6e 20 4e 55 4c 4c 3b 0a 20 20 2a 70 4f 75 74  rn NULL;.  *pOut
16930 5f 6c 65 6e 20 3d 20 6f 75 74 5f 62 75 66 2e 6d  _len = out_buf.m
16940 5f 73 69 7a 65 3b 20 72 65 74 75 72 6e 20 6f 75  _size; return ou
16950 74 5f 62 75 66 2e 6d 5f 70 42 75 66 3b 0a 7d 0a  t_buf.m_pBuf;.}.
16960 0a 73 69 7a 65 5f 74 20 74 64 65 66 6c 5f 63 6f  .size_t tdefl_co
16970 6d 70 72 65 73 73 5f 6d 65 6d 5f 74 6f 5f 6d 65  mpress_mem_to_me
16980 6d 28 76 6f 69 64 20 2a 70 4f 75 74 5f 62 75 66  m(void *pOut_buf
16990 2c 20 73 69 7a 65 5f 74 20 6f 75 74 5f 62 75 66  , size_t out_buf
169a0 5f 6c 65 6e 2c 20 63 6f 6e 73 74 20 76 6f 69 64  _len, const void
169b0 20 2a 70 53 72 63 5f 62 75 66 2c 20 73 69 7a 65   *pSrc_buf, size
169c0 5f 74 20 73 72 63 5f 62 75 66 5f 6c 65 6e 2c 20  _t src_buf_len, 
169d0 69 6e 74 20 66 6c 61 67 73 29 0a 7b 0a 20 20 74  int flags).{.  t
169e0 64 65 66 6c 5f 6f 75 74 70 75 74 5f 62 75 66 66  defl_output_buff
169f0 65 72 20 6f 75 74 5f 62 75 66 3b 20 4d 5a 5f 43  er out_buf; MZ_C
16a00 4c 45 41 52 5f 4f 42 4a 28 6f 75 74 5f 62 75 66  LEAR_OBJ(out_buf
16a10 29 3b 0a 20 20 69 66 20 28 21 70 4f 75 74 5f 62  );.  if (!pOut_b
16a20 75 66 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20  uf) return 0;.  
16a30 6f 75 74 5f 62 75 66 2e 6d 5f 70 42 75 66 20 3d  out_buf.m_pBuf =
16a40 20 28 6d 7a 5f 75 69 6e 74 38 2a 29 70 4f 75 74   (mz_uint8*)pOut
16a50 5f 62 75 66 3b 20 6f 75 74 5f 62 75 66 2e 6d 5f  _buf; out_buf.m_
16a60 63 61 70 61 63 69 74 79 20 3d 20 6f 75 74 5f 62  capacity = out_b
16a70 75 66 5f 6c 65 6e 3b 0a 20 20 69 66 20 28 21 74  uf_len;.  if (!t
16a80 64 65 66 6c 5f 63 6f 6d 70 72 65 73 73 5f 6d 65  defl_compress_me
16a90 6d 5f 74 6f 5f 6f 75 74 70 75 74 28 70 53 72 63  m_to_output(pSrc
16aa0 5f 62 75 66 2c 20 73 72 63 5f 62 75 66 5f 6c 65  _buf, src_buf_le
16ab0 6e 2c 20 74 64 65 66 6c 5f 6f 75 74 70 75 74 5f  n, tdefl_output_
16ac0 62 75 66 66 65 72 5f 70 75 74 74 65 72 2c 20 26  buffer_putter, &
16ad0 6f 75 74 5f 62 75 66 2c 20 66 6c 61 67 73 29 29  out_buf, flags))
16ae0 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
16af0 75 72 6e 20 6f 75 74 5f 62 75 66 2e 6d 5f 73 69  urn out_buf.m_si
16b00 7a 65 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 5f 5f  ze;.}..#ifdef __
16b10 63 70 6c 75 73 70 6c 75 73 0a 7d 0a 23 65 6e 64  cplusplus.}.#end
16b20 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2f 20 4d 49  if..#endif // MI
16b30 4e 49 5a 5f 48 45 41 44 45 52 5f 46 49 4c 45 5f  NIZ_HEADER_FILE_
16b40 4f 4e 4c 59 0a 0a 2f 2a 0a 20 20 54 68 69 73 20  ONLY../*.  This 
16b50 69 73 20 66 72 65 65 20 61 6e 64 20 75 6e 65 6e  is free and unen
16b60 63 75 6d 62 65 72 65 64 20 73 6f 66 74 77 61 72  cumbered softwar
16b70 65 20 72 65 6c 65 61 73 65 64 20 69 6e 74 6f 20  e released into 
16b80 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69  the public domai
16b90 6e 2e 0a 0a 20 20 41 6e 79 6f 6e 65 20 69 73 20  n...  Anyone is 
16ba0 66 72 65 65 20 74 6f 20 63 6f 70 79 2c 20 6d 6f  free to copy, mo
16bb0 64 69 66 79 2c 20 70 75 62 6c 69 73 68 2c 20 75  dify, publish, u
16bc0 73 65 2c 20 63 6f 6d 70 69 6c 65 2c 20 73 65 6c  se, compile, sel
16bd0 6c 2c 20 6f 72 0a 20 20 64 69 73 74 72 69 62 75  l, or.  distribu
16be0 74 65 20 74 68 69 73 20 73 6f 66 74 77 61 72 65  te this software
16bf0 2c 20 65 69 74 68 65 72 20 69 6e 20 73 6f 75 72  , either in sour
16c00 63 65 20 63 6f 64 65 20 66 6f 72 6d 20 6f 72 20  ce code form or 
16c10 61 73 20 61 20 63 6f 6d 70 69 6c 65 64 0a 20 20  as a compiled.  
16c20 62 69 6e 61 72 79 2c 20 66 6f 72 20 61 6e 79 20  binary, for any 
16c30 70 75 72 70 6f 73 65 2c 20 63 6f 6d 6d 65 72 63  purpose, commerc
16c40 69 61 6c 20 6f 72 20 6e 6f 6e 2d 63 6f 6d 6d 65  ial or non-comme
16c50 72 63 69 61 6c 2c 20 61 6e 64 20 62 79 20 61 6e  rcial, and by an
16c60 79 0a 20 20 6d 65 61 6e 73 2e 0a 0a 20 20 49 6e  y.  means...  In
16c70 20 6a 75 72 69 73 64 69 63 74 69 6f 6e 73 20 74   jurisdictions t
16c80 68 61 74 20 72 65 63 6f 67 6e 69 7a 65 20 63 6f  hat recognize co
16c90 70 79 72 69 67 68 74 20 6c 61 77 73 2c 20 74 68  pyright laws, th
16ca0 65 20 61 75 74 68 6f 72 20 6f 72 20 61 75 74 68  e author or auth
16cb0 6f 72 73 0a 20 20 6f 66 20 74 68 69 73 20 73 6f  ors.  of this so
16cc0 66 74 77 61 72 65 20 64 65 64 69 63 61 74 65 20  ftware dedicate 
16cd0 61 6e 79 20 61 6e 64 20 61 6c 6c 20 63 6f 70 79  any and all copy
16ce0 72 69 67 68 74 20 69 6e 74 65 72 65 73 74 20 69  right interest i
16cf0 6e 20 74 68 65 0a 20 20 73 6f 66 74 77 61 72 65  n the.  software
16d00 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64   to the public d
16d10 6f 6d 61 69 6e 2e 20 57 65 20 6d 61 6b 65 20 74  omain. We make t
16d20 68 69 73 20 64 65 64 69 63 61 74 69 6f 6e 20 66  his dedication f
16d30 6f 72 20 74 68 65 20 62 65 6e 65 66 69 74 0a 20  or the benefit. 
16d40 20 6f 66 20 74 68 65 20 70 75 62 6c 69 63 20 61   of the public a
16d50 74 20 6c 61 72 67 65 20 61 6e 64 20 74 6f 20 74  t large and to t
16d60 68 65 20 64 65 74 72 69 6d 65 6e 74 20 6f 66 20  he detriment of 
16d70 6f 75 72 20 68 65 69 72 73 20 61 6e 64 0a 20 20  our heirs and.  
16d80 73 75 63 63 65 73 73 6f 72 73 2e 20 57 65 20 69  successors. We i
16d90 6e 74 65 6e 64 20 74 68 69 73 20 64 65 64 69 63  ntend this dedic
16da0 61 74 69 6f 6e 20 74 6f 20 62 65 20 61 6e 20 6f  ation to be an o
16db0 76 65 72 74 20 61 63 74 20 6f 66 0a 20 20 72 65  vert act of.  re
16dc0 6c 69 6e 71 75 69 73 68 6d 65 6e 74 20 69 6e 20  linquishment in 
16dd0 70 65 72 70 65 74 75 69 74 79 20 6f 66 20 61 6c  perpetuity of al
16de0 6c 20 70 72 65 73 65 6e 74 20 61 6e 64 20 66 75  l present and fu
16df0 74 75 72 65 20 72 69 67 68 74 73 20 74 6f 20 74  ture rights to t
16e00 68 69 73 0a 20 20 73 6f 66 74 77 61 72 65 20 75  his.  software u
16e10 6e 64 65 72 20 63 6f 70 79 72 69 67 68 74 20 6c  nder copyright l
16e20 61 77 2e 0a 0a 20 20 54 48 45 20 53 4f 46 54 57  aw...  THE SOFTW
16e30 41 52 45 20 49 53 20 50 52 4f 56 49 44 45 44 20  ARE IS PROVIDED 
16e40 22 41 53 20 49 53 22 2c 20 57 49 54 48 4f 55 54  "AS IS", WITHOUT
16e50 20 57 41 52 52 41 4e 54 59 20 4f 46 20 41 4e 59   WARRANTY OF ANY
16e60 20 4b 49 4e 44 2c 0a 20 20 45 58 50 52 45 53 53   KIND,.  EXPRESS
16e70 20 4f 52 20 49 4d 50 4c 49 45 44 2c 20 49 4e 43   OR IMPLIED, INC
16e80 4c 55 44 49 4e 47 20 42 55 54 20 4e 4f 54 20 4c  LUDING BUT NOT L
16e90 49 4d 49 54 45 44 20 54 4f 20 54 48 45 20 57 41  IMITED TO THE WA
16ea0 52 52 41 4e 54 49 45 53 20 4f 46 0a 20 20 4d 45  RRANTIES OF.  ME
16eb0 52 43 48 41 4e 54 41 42 49 4c 49 54 59 2c 20 46  RCHANTABILITY, F
16ec0 49 54 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52  ITNESS FOR A PAR
16ed0 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 20  TICULAR PURPOSE 
16ee0 41 4e 44 20 4e 4f 4e 49 4e 46 52 49 4e 47 45 4d  AND NONINFRINGEM
16ef0 45 4e 54 2e 0a 20 20 49 4e 20 4e 4f 20 45 56 45  ENT..  IN NO EVE
16f00 4e 54 20 53 48 41 4c 4c 20 54 48 45 20 41 55 54  NT SHALL THE AUT
16f10 48 4f 52 53 20 42 45 20 4c 49 41 42 4c 45 20 46  HORS BE LIABLE F
16f20 4f 52 20 41 4e 59 20 43 4c 41 49 4d 2c 20 44 41  OR ANY CLAIM, DA
16f30 4d 41 47 45 53 20 4f 52 0a 20 20 4f 54 48 45 52  MAGES OR.  OTHER
16f40 20 4c 49 41 42 49 4c 49 54 59 2c 20 57 48 45 54   LIABILITY, WHET
16f50 48 45 52 20 49 4e 20 41 4e 20 41 43 54 49 4f 4e  HER IN AN ACTION
16f60 20 4f 46 20 43 4f 4e 54 52 41 43 54 2c 20 54 4f   OF CONTRACT, TO
16f70 52 54 20 4f 52 20 4f 54 48 45 52 57 49 53 45 2c  RT OR OTHERWISE,
16f80 0a 20 20 41 52 49 53 49 4e 47 20 46 52 4f 4d 2c  .  ARISING FROM,
16f90 20 4f 55 54 20 4f 46 20 4f 52 20 49 4e 20 43 4f   OUT OF OR IN CO
16fa0 4e 4e 45 43 54 49 4f 4e 20 57 49 54 48 20 54 48  NNECTION WITH TH
16fb0 45 20 53 4f 46 54 57 41 52 45 20 4f 52 20 54 48  E SOFTWARE OR TH
16fc0 45 20 55 53 45 20 4f 52 0a 20 20 4f 54 48 45 52  E USE OR.  OTHER
16fd0 20 44 45 41 4c 49 4e 47 53 20 49 4e 20 54 48 45   DEALINGS IN THE
16fe0 20 53 4f 46 54 57 41 52 45 2e 0a 0a 20 20 46 6f   SOFTWARE...  Fo
16ff0 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
17000 6f 6e 2c 20 70 6c 65 61 73 65 20 72 65 66 65 72  on, please refer
17010 20 74 6f 20 3c 68 74 74 70 3a 2f 2f 75 6e 6c 69   to <http://unli
17020 63 65 6e 73 65 2e 6f 72 67 2f 3e 0a 2a 2f 0a     cense.org/>.*/.