home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 October / CMCD1004.ISO / Software / Shareware / Utilitare / pec / pec2setup.exe / lzma / pec2codec / decodef.asm < prev    next >
Encoding:
Assembly Source File  |  2004-05-17  |  27.5 KB  |  1,377 lines

  1. ;;
  2. ;; PECompact v2 LZMA CODEC
  3. ;; Copyright (C) 2004 Joergen Ibsen (www.ibsensoftware.com)
  4. ;;
  5. ;; This library is free software; you can redistribute it and/or
  6. ;; modify it under the terms of the GNU Lesser General Public
  7. ;; License as published by the Free Software Foundation; either
  8. ;; version 2.1 of the License, or (at your option) any later version.
  9. ;;
  10. ;; This library is distributed in the hope that it will be useful,
  11. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. ;; Lesser General Public License for more details.
  14. ;;
  15. ;; You should have received a copy of the GNU Lesser General Public
  16. ;; License along with this library; if not, write to the Free Software
  17. ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. ;;
  19.  
  20. .386
  21. include listing.inc
  22. .model flat
  23.  
  24. option casemap:none
  25. option proc:private
  26.  
  27. public _GetDecodeFastFuncSize@0
  28. public _DecodeFast@12
  29.  
  30. _TEXT segment
  31.  
  32. _GetDecodeFastFuncSize@0:
  33.  
  34.     mov    eax, _DecodeFast@12_end - _DecodeFast@12
  35.     ret
  36.  
  37. align 4
  38.  
  39. _DecodeFast@12:
  40.  
  41.     _src$ = 4 + 4*4
  42.     _dst$ = 4 + 4*4 + 4
  43.     _ext$ = 4 + 4*4 + 8
  44.  
  45.     push   esi
  46.     push   edi
  47.     push   ebx
  48.     push   ebp
  49.  
  50.     ; header format:
  51.     ;
  52.     ;   DWORD  lzmaInternalSize
  53.     ;   DWORD  orgSize
  54.     ;   DWORD  cmpSize
  55.     ;   BYTE   pb
  56.     ;   BYTE   lp
  57.     ;   BYTE   lc
  58.     ;   <compressed lzma data>
  59.  
  60.     mov    ebx, [esp + _ext$]
  61.  
  62.     test   ebx, ebx
  63.     jz     _ret_failure
  64.  
  65.     call   @F
  66.     db     "kernel32.dll",0
  67.   @@:
  68.     call   dword ptr [ebx]
  69.  
  70.     test   eax, eax
  71.     jz     _ret_failure
  72.  
  73.     mov    esi, eax           ; esi = hKernel32
  74.  
  75.     call   @F
  76.     db     "VirtualFree",0
  77.   @@:
  78.     push   esi
  79.     call   dword ptr [ebx + 4]
  80.  
  81.     test   eax, eax
  82.     jz     _ret_failure
  83.  
  84.     mov    ebp, eax           ; ebp -> VirtualFree
  85.  
  86.     call   @F
  87.     db     "VirtualAlloc",0
  88.   @@:
  89.     push   esi
  90.     call   dword ptr [ebx + 4]
  91.  
  92.     test   eax, eax
  93.     jz     _ret_failure
  94.  
  95.     mov    esi, [esp + _src$] ; esi -> lpvSource
  96.     mov    edi, [esp + _dst$] ; edi -> lpvDestination
  97.  
  98.     push   4                  ; PAGE_READWRITE
  99.     push   4096               ; MEM_COMMIT
  100.     push   dword ptr [esi]    ; lzmaInternalSize
  101.     push   0                  ; NULL
  102.     call   eax                ; VirtualAlloc
  103.  
  104.     test   eax, eax
  105.     jz     _ret_failure
  106.  
  107.     mov    ebx, eax           ; ebx -> lzmaInternalData
  108.  
  109.     ; LzmaDecode(lzmaInternalData, lzmaInternalSize,
  110.     ;            lc, lp, pb,
  111.     ;            (unsigned char *)lpvSource + 8 + 13, cmpSize - 13,
  112.     ;            lpvDest, orgSize,
  113.     ;            &outSizeProcessed);
  114.  
  115.     push   eax                      ; &outSizeProcessed
  116.     push   esp                      ;
  117.     push   dword ptr [esi + 4]      ; orgSize
  118.     push   edi                      ; lpvDest
  119.     push   dword ptr [esi + 8]      ; cmpSize
  120.     lea    eax, [esi + 15]          ; lpvSource
  121.     push   eax                      ;
  122.     movzx  eax, byte ptr [esi + 12] ; pb
  123.     push   eax                      ;
  124.     movzx  eax, byte ptr [esi + 13] ; lp
  125.     push   eax                      ;
  126.     movzx  eax, byte ptr [esi + 14] ; lc
  127.     push   eax                      ;
  128.     push   dword ptr [esi]          ; lzmaInternalSize
  129.     push   ebx                      ; lzmaInternalData
  130.     call   _LzmaDecode
  131.     add    esp, 10*4
  132.  
  133.     test   eax, eax
  134.  
  135.     pop    eax                ; eax = outSizeProcessed
  136.  
  137.     jz     @F
  138.  
  139.     xor    eax, eax
  140.     dec    eax
  141.  
  142.   @@:
  143.     push   eax
  144.  
  145.     push   16384              ; MEM_DECOMMIT
  146.     push   dword ptr [esi]    ; lzmaInternalSize
  147.     push   ebx                ; lzmaInternalData
  148.     call   ebp                ; VirtualFree
  149.  
  150.     pop    eax
  151.  
  152.     jmp    _ret_eax
  153.  
  154.   _ret_failure:
  155.     xor    eax, eax
  156.     dec    eax
  157.  
  158.   _ret_eax:
  159.     pop    ebp
  160.     pop    ebx
  161.     pop    edi
  162.     pop    esi
  163.  
  164.     ret    12
  165.  
  166. ; =================================================================
  167.  
  168. ; LzmaDecode.c
  169. ; LZMA Decoder
  170. ; LZMA SDK 4.01 Copyright (c) 1999-2004 Igor Pavlov (2004-02-15)
  171.  
  172. ; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.3052
  173.  
  174. _RangeDecoderReadByte PROC NEAR
  175. ; _rd$ = edx
  176. ; Line 136
  177.     mov    ecx, DWORD PTR [edx]
  178.     cmp    ecx, DWORD PTR [edx+4]
  179.     jne    SHORT $L73280
  180. ; Line 145
  181.     mov    DWORD PTR [edx+16], 1
  182. ; Line 146
  183.     or    al, 255                    ; 000000ffH
  184. ; Line 150
  185.     ret    0
  186. $L73280:
  187. ; Line 149
  188.     mov    al, BYTE PTR [ecx]
  189.     inc    ecx
  190.     mov    DWORD PTR [edx], ecx
  191. ; Line 150
  192.     ret    0
  193. _RangeDecoderReadByte ENDP
  194. ; Function compile flags: /Ogty
  195. _RangeDecoderInit PROC NEAR
  196. ; _rd$ = eax
  197. ; _stream$ = ecx
  198. ; _bufferSize$ = edx
  199. ; Line 162
  200.     push    esi
  201. ; Line 169
  202.     lea    esi, DWORD PTR [ecx+edx]
  203. ; Line 171
  204.     xor    edx, edx
  205. ; Line 175
  206.     cmp    ecx, esi
  207.     push    edi
  208.     mov    DWORD PTR [eax], ecx
  209.     mov    DWORD PTR [eax+4], esi
  210.     mov    DWORD PTR [eax+16], edx
  211.     mov    DWORD PTR [eax+12], edx
  212.     mov    DWORD PTR [eax+8], -1
  213.     mov    edi, 1
  214.     jne    SHORT $L73520
  215.     mov    DWORD PTR [eax+16], edi
  216.     or    dl, 255                    ; 000000ffH
  217.     jmp    SHORT $L73519
  218. $L73520:
  219.     mov    dl, BYTE PTR [ecx]
  220.     inc    ecx
  221.     mov    DWORD PTR [eax], ecx
  222. $L73519:
  223.     movzx    ecx, dl
  224.     mov    DWORD PTR [eax+12], ecx
  225.     mov    ecx, DWORD PTR [eax]
  226.     cmp    ecx, esi
  227.     jne    SHORT $L73526
  228.     mov    DWORD PTR [eax+16], edi
  229.     or    dl, 255                    ; 000000ffH
  230.     jmp    SHORT $L73527
  231. $L73526:
  232.     mov    dl, BYTE PTR [ecx]
  233.     inc    ecx
  234.     mov    DWORD PTR [eax], ecx
  235. $L73527:
  236.     mov    ecx, DWORD PTR [eax+12]
  237.     shl    ecx, 8
  238.     movzx    edx, dl
  239.     or    ecx, edx
  240.     mov    DWORD PTR [eax+12], ecx
  241.     mov    ecx, DWORD PTR [eax]
  242.     cmp    ecx, esi
  243.     jne    SHORT $L73529
  244.     mov    DWORD PTR [eax+16], edi
  245.     or    dl, 255                    ; 000000ffH
  246.     jmp    SHORT $L73530
  247. $L73529:
  248.     mov    dl, BYTE PTR [ecx]
  249.     inc    ecx
  250.     mov    DWORD PTR [eax], ecx
  251. $L73530:
  252.     mov    ecx, DWORD PTR [eax+12]
  253.     shl    ecx, 8
  254.     movzx    edx, dl
  255.     or    ecx, edx
  256.     mov    DWORD PTR [eax+12], ecx
  257.     mov    ecx, DWORD PTR [eax]
  258.     cmp    ecx, esi
  259.     jne    SHORT $L73532
  260.     mov    DWORD PTR [eax+16], edi
  261.     or    dl, 255                    ; 000000ffH
  262.     jmp    SHORT $L73533
  263. $L73532:
  264.     mov    dl, BYTE PTR [ecx]
  265.     inc    ecx
  266.     mov    DWORD PTR [eax], ecx
  267. $L73533:
  268.     mov    ecx, DWORD PTR [eax+12]
  269.     shl    ecx, 8
  270.     movzx    edx, dl
  271.     or    ecx, edx
  272.     mov    DWORD PTR [eax+12], ecx
  273.     mov    ecx, DWORD PTR [eax]
  274.     cmp    ecx, esi
  275.     jne    SHORT $L73535
  276.     mov    ecx, DWORD PTR [eax+12]
  277.     or    dl, 255                    ; 000000ffH
  278.     movzx    edx, dl
  279.     shl    ecx, 8
  280.     mov    DWORD PTR [eax+16], edi
  281.     or    ecx, edx
  282.     pop    edi
  283.     mov    DWORD PTR [eax+12], ecx
  284.     pop    esi
  285. ; Line 176
  286.     ret    0
  287. ; Line 175
  288. $L73535:
  289.     mov    dl, BYTE PTR [ecx]
  290.     inc    ecx
  291.     mov    DWORD PTR [eax], ecx
  292.     mov    ecx, DWORD PTR [eax+12]
  293.     movzx    edx, dl
  294.     shl    ecx, 8
  295.     or    ecx, edx
  296.     pop    edi
  297.     mov    DWORD PTR [eax+12], ecx
  298.     pop    esi
  299. ; Line 176
  300.     ret    0
  301. _RangeDecoderInit ENDP
  302. ; Function compile flags: /Ogty
  303. tv71 = -4                        ; size = 4
  304. _RangeDecoderDecodeDirectBits PROC NEAR
  305. ; _rd$ = ecx
  306. ; _numTotalBits$ = eax
  307. ; Line 183
  308.     push    ecx
  309. ; Line 184
  310.     mov    edx, DWORD PTR [ecx+8]
  311.     push    esi
  312.     mov    esi, eax
  313. ; Line 185
  314.     xor    eax, eax
  315. ; Line 187
  316.     test    esi, esi
  317.     push    edi
  318.     mov    edi, DWORD PTR [ecx+12]
  319.     jle    SHORT $L73305
  320.     mov    DWORD PTR tv71[esp+12], esi
  321.     push    ebx
  322. $L73303:
  323. ; Line 190
  324.     shr    edx, 1
  325. ; Line 192
  326.     shl    eax, 1
  327. ; Line 193
  328.     cmp    edi, edx
  329.     jb    SHORT $L73306
  330. ; Line 195
  331.     sub    edi, edx
  332. ; Line 196
  333.     or    eax, 1
  334. $L73306:
  335. ; Line 204
  336.     cmp    edx, 16777216                ; 01000000H
  337.     jae    SHORT $L73304
  338.     mov    esi, DWORD PTR [ecx]
  339.     mov    ebx, DWORD PTR [ecx+4]
  340.     shl    edx, 8
  341.     cmp    esi, ebx
  342.     jne    SHORT $L73540
  343.     mov    DWORD PTR [ecx+16], 1
  344.     or    bl, 255                    ; 000000ffH
  345.     jmp    SHORT $L73539
  346. $L73540:
  347.     mov    bl, BYTE PTR [esi]
  348.     inc    esi
  349.     mov    DWORD PTR [ecx], esi
  350. $L73539:
  351.     movzx    esi, bl
  352.     shl    edi, 8
  353.     or    edi, esi
  354. $L73304:
  355.     dec    DWORD PTR tv71[esp+16]
  356.     jne    SHORT $L73303
  357.     pop    ebx
  358. $L73305:
  359. ; Line 206
  360.     mov    DWORD PTR [ecx+12], edi
  361.     pop    edi
  362.     mov    DWORD PTR [ecx+8], edx
  363.     pop    esi
  364. ; Line 208
  365.     pop    ecx
  366.     ret    0
  367. _RangeDecoderDecodeDirectBits ENDP
  368. ; Function compile flags: /Ogty
  369. _RangeDecoderBitDecode PROC NEAR
  370. ; _prob$ = edi
  371. ; _rd$ = eax
  372. ; Line 212
  373.     mov    edx, DWORD PTR [eax+8]
  374.     mov    ecx, edx
  375.     shr    ecx, 11                    ; 0000000bH
  376.     imul    ecx, DWORD PTR [edi]
  377.     push    esi
  378. ; Line 213
  379.     mov    esi, DWORD PTR [eax+12]
  380.     cmp    esi, ecx
  381.     jae    SHORT $L73316
  382. ; Line 215
  383.     mov    DWORD PTR [eax+8], ecx
  384. ; Line 216
  385.     mov    ecx, DWORD PTR [edi]
  386.     mov    edx, 2048                ; 00000800H
  387.     sub    edx, ecx
  388.     shr    edx, 5
  389.     add    edx, ecx
  390.     mov    DWORD PTR [edi], edx
  391. ; Line 217
  392.     mov    ecx, DWORD PTR [eax+8]
  393.     cmp    ecx, 16777216                ; 01000000H
  394.     jae    SHORT $L73318
  395. ; Line 219
  396.     mov    esi, DWORD PTR [eax]
  397.     cmp    esi, DWORD PTR [eax+4]
  398.     jne    SHORT $L73548
  399.     mov    DWORD PTR [eax+16], 1
  400.     or    dl, 255                    ; 000000ffH
  401.     jmp    SHORT $L73547
  402. $L73548:
  403.     mov    dl, BYTE PTR [esi]
  404.     inc    esi
  405.     mov    DWORD PTR [eax], esi
  406. $L73547:
  407.     mov    esi, DWORD PTR [eax+12]
  408.     movzx    edx, dl
  409.     shl    esi, 8
  410.     or    esi, edx
  411. ; Line 220
  412.     shl    ecx, 8
  413.     mov    DWORD PTR [eax+12], esi
  414.     mov    DWORD PTR [eax+8], ecx
  415. $L73318:
  416. ; Line 222
  417.     xor    eax, eax
  418.     pop    esi
  419. ; Line 236
  420.     ret    0
  421. $L73316:
  422. ; Line 226
  423.     sub    edx, ecx
  424. ; Line 227
  425.     sub    esi, ecx
  426.     mov    DWORD PTR [eax+8], edx
  427.     mov    DWORD PTR [eax+12], esi
  428. ; Line 228
  429.     mov    ecx, DWORD PTR [edi]
  430.     mov    edx, ecx
  431.     shr    edx, 5
  432.     sub    ecx, edx
  433.     mov    DWORD PTR [edi], ecx
  434. ; Line 229
  435.     mov    ecx, DWORD PTR [eax+8]
  436.     cmp    ecx, 16777216                ; 01000000H
  437.     jae    SHORT $L73321
  438. ; Line 231
  439.     mov    esi, DWORD PTR [eax]
  440.     cmp    esi, DWORD PTR [eax+4]
  441.     jne    SHORT $L73553
  442.     mov    DWORD PTR [eax+16], 1
  443.     or    dl, 255                    ; 000000ffH
  444.     jmp    SHORT $L73552
  445. $L73553:
  446.     mov    dl, BYTE PTR [esi]
  447.     inc    esi
  448.     mov    DWORD PTR [eax], esi
  449. $L73552:
  450.     mov    esi, DWORD PTR [eax+12]
  451.     movzx    edx, dl
  452.     shl    esi, 8
  453.     or    esi, edx
  454. ; Line 232
  455.     shl    ecx, 8
  456.     mov    DWORD PTR [eax+12], esi
  457.     mov    DWORD PTR [eax+8], ecx
  458. $L73321:
  459. ; Line 234
  460.     mov    eax, 1
  461.     pop    esi
  462. ; Line 236
  463.     ret    0
  464. _RangeDecoderBitDecode ENDP
  465. ; Function compile flags: /Ogty
  466. tv84 = -4                        ; size = 4
  467. _numLevels$ = 8                        ; size = 4
  468. _RangeDecoderBitTreeDecode PROC NEAR
  469. ; _probs$ = ecx
  470. ; _rd$ = ebx
  471. ; Line 249
  472.     push    ecx
  473. ; Line 255
  474.     mov    edx, DWORD PTR _numLevels$[esp]
  475.     test    edx, edx
  476.     push    ebp
  477.     mov    ebp, DWORD PTR [ebx+12]
  478.     push    esi
  479.     push    edi
  480.     mov    edi, DWORD PTR [ebx+8]
  481.     mov    eax, 1
  482.     jle    SHORT $L73336
  483. ; Line 250
  484.     mov    DWORD PTR tv84[esp+16], edx
  485.     npad    5
  486. $L73334:
  487. ; Line 259
  488.     mov    edx, DWORD PTR [ecx+eax*4]
  489.     mov    esi, edi
  490.     shr    esi, 11                    ; 0000000bH
  491.     imul    esi, edx
  492.     cmp    ebp, esi
  493.     jae    SHORT $L73339
  494.     mov    edi, esi
  495.     mov    esi, 2048                ; 00000800H
  496.     sub    esi, edx
  497.     shr    esi, 5
  498.     add    esi, edx
  499.     mov    DWORD PTR [ecx+eax*4], esi
  500.     shl    eax, 1
  501.     jmp    SHORT $L73340
  502. $L73339:
  503.     sub    edi, esi
  504.     sub    ebp, esi
  505.     mov    esi, edx
  506.     shr    esi, 5
  507.     sub    edx, esi
  508.     mov    DWORD PTR [ecx+eax*4], edx
  509.     lea    eax, DWORD PTR [eax+eax+1]
  510. $L73340:
  511.     cmp    edi, 16777216                ; 01000000H
  512.     jae    SHORT $L73335
  513.     mov    esi, DWORD PTR [ebx]
  514.     mov    edx, DWORD PTR [ebx+4]
  515.     shl    edi, 8
  516.     cmp    esi, edx
  517.     jne    SHORT $L73559
  518.     mov    DWORD PTR [ebx+16], 1
  519.     or    dl, 255                    ; 000000ffH
  520.     jmp    SHORT $L73558
  521. $L73559:
  522.     mov    dl, BYTE PTR [esi]
  523.     inc    esi
  524.     mov    DWORD PTR [ebx], esi
  525. $L73558:
  526.     movzx    edx, dl
  527.     shl    ebp, 8
  528.     or    ebp, edx
  529. $L73335:
  530.     dec    DWORD PTR tv84[esp+16]
  531.     jne    SHORT $L73334
  532. ; Line 255
  533.     mov    edx, DWORD PTR _numLevels$[esp+12]
  534. $L73336:
  535. ; Line 267
  536.     mov    esi, 1
  537.     mov    ecx, edx
  538.     shl    esi, cl
  539.     mov    DWORD PTR [ebx+8], edi
  540.     pop    edi
  541.     mov    DWORD PTR [ebx+12], ebp
  542.     sub    eax, esi
  543.     pop    esi
  544.     pop    ebp
  545. ; Line 268
  546.     pop    ecx
  547.     ret    0
  548. _RangeDecoderBitTreeDecode ENDP
  549. ; Function compile flags: /Ogty
  550. _i$ = -8                        ; size = 4
  551. _symbol$ = -4                        ; size = 4
  552. _probs$ = 8                        ; size = 4
  553. _numLevels$ = 12                    ; size = 4
  554. _rd$ = 16                        ; size = 4
  555. _RangeDecoderReverseBitTreeDecode PROC NEAR
  556. ; Line 271
  557.     sub    esp, 8
  558.     mov    eax, DWORD PTR _rd$[esp+4]
  559.     mov    ecx, DWORD PTR _probs$[esp+4]
  560.     push    ebx
  561. ; Line 276
  562.     mov    ebx, DWORD PTR [eax+8]
  563.     push    ebp
  564.     mov    ebp, DWORD PTR [eax+12]
  565.     push    esi
  566. ; Line 278
  567.     mov    esi, DWORD PTR _numLevels$[esp+16]
  568.     xor    edx, edx
  569.     cmp    esi, edx
  570.     push    edi
  571.     mov    edi, 1
  572.     mov    DWORD PTR _symbol$[esp+24], edx
  573.     mov    DWORD PTR _i$[esp+24], edx
  574.     jle    $L73358
  575. $L73356:
  576. ; Line 282
  577.     mov    edx, DWORD PTR [ecx+edi*4]
  578.     mov    esi, ebx
  579.     shr    esi, 11                    ; 0000000bH
  580.     imul    esi, edx
  581.     cmp    ebp, esi
  582.     jae    SHORT $L73361
  583.     mov    ebx, esi
  584.     mov    esi, 2048                ; 00000800H
  585.     sub    esi, edx
  586.     shr    esi, 5
  587.     add    esi, edx
  588.     mov    DWORD PTR [ecx+edi*4], esi
  589.     shl    edi, 1
  590.     jmp    SHORT $L73362
  591. $L73361:
  592.     mov    ecx, DWORD PTR _i$[esp+24]
  593.     mov    eax, 1
  594.     shl    eax, cl
  595.     mov    ecx, DWORD PTR _symbol$[esp+24]
  596.     sub    ebx, esi
  597.     sub    ebp, esi
  598.     or    ecx, eax
  599.     mov    eax, DWORD PTR _rd$[esp+20]
  600.     mov    DWORD PTR _symbol$[esp+24], ecx
  601.     mov    ecx, edx
  602.     shr    ecx, 5
  603.     sub    edx, ecx
  604.     mov    ecx, DWORD PTR _probs$[esp+20]
  605.     mov    DWORD PTR [ecx+edi*4], edx
  606.     lea    edi, DWORD PTR [edi+edi+1]
  607. $L73362:
  608.     cmp    ebx, 16777216                ; 01000000H
  609.     jae    SHORT $L73357
  610.     mov    esi, DWORD PTR [eax]
  611.     mov    edx, DWORD PTR [eax+4]
  612.     shl    ebx, 8
  613.     cmp    esi, edx
  614.     jne    SHORT $L73567
  615.     mov    DWORD PTR [eax+16], 1
  616.     or    dl, 255                    ; 000000ffH
  617.     jmp    SHORT $L73566
  618. $L73567:
  619.     mov    dl, BYTE PTR [esi]
  620.     inc    esi
  621.     mov    DWORD PTR [eax], esi
  622. $L73566:
  623.     movzx    edx, dl
  624.     shl    ebp, 8
  625.     or    ebp, edx
  626. $L73357:
  627.     mov    edx, DWORD PTR _i$[esp+24]
  628.     mov    esi, DWORD PTR _numLevels$[esp+20]
  629.     inc    edx
  630.     cmp    edx, esi
  631.     mov    DWORD PTR _i$[esp+24], edx
  632.     jl    $L73356
  633. $L73358:
  634.     pop    edi
  635.     pop    esi
  636. ; Line 290
  637.     mov    DWORD PTR [eax+12], ebp
  638.     mov    DWORD PTR [eax+8], ebx
  639. ; Line 292
  640.     mov    eax, DWORD PTR _symbol$[esp+16]
  641.     pop    ebp
  642.     pop    ebx
  643. ; Line 293
  644.     add    esp, 8
  645.     ret    0
  646. _RangeDecoderReverseBitTreeDecode ENDP
  647. ; Function compile flags: /Ogty
  648. _rd$ = 8                        ; size = 4
  649. _LzmaLiteralDecode PROC NEAR
  650. ; _probs$ = ebx
  651. ; Line 296
  652.     push    ebp
  653.     mov    ebp, DWORD PTR _rd$[esp]
  654.     push    esi
  655. ; Line 299
  656.     mov    esi, DWORD PTR [ebp+8]
  657.     push    edi
  658.     mov    edi, DWORD PTR [ebp+12]
  659.     mov    eax, 1
  660. $L73374:
  661. ; Line 305
  662.     mov    ecx, DWORD PTR [ebx+eax*4]
  663.     mov    edx, esi
  664.     shr    edx, 11                    ; 0000000bH
  665.     imul    edx, ecx
  666.     cmp    edi, edx
  667.     jae    SHORT $L73379
  668.     mov    esi, edx
  669.     mov    edx, 2048                ; 00000800H
  670.     sub    edx, ecx
  671.     shr    edx, 5
  672.     add    edx, ecx
  673.     mov    DWORD PTR [ebx+eax*4], edx
  674.     shl    eax, 1
  675.     jmp    SHORT $L73380
  676. $L73379:
  677.     sub    esi, edx
  678.     sub    edi, edx
  679.     mov    edx, ecx
  680.     shr    edx, 5
  681.     sub    ecx, edx
  682.     mov    DWORD PTR [ebx+eax*4], ecx
  683.     lea    eax, DWORD PTR [eax+eax+1]
  684. $L73380:
  685.     cmp    esi, 16777216                ; 01000000H
  686.     jae    SHORT $L73375
  687.     mov    ecx, DWORD PTR [ebp]
  688.     mov    edx, DWORD PTR [ebp+4]
  689.     shl    esi, 8
  690.     cmp    ecx, edx
  691.     jne    SHORT $L73575
  692.     mov    DWORD PTR [ebp+16], 1
  693.     or    dl, 255                    ; 000000ffH
  694.     jmp    SHORT $L73574
  695. $L73575:
  696.     mov    dl, BYTE PTR [ecx]
  697.     inc    ecx
  698.     mov    DWORD PTR [ebp], ecx
  699. $L73574:
  700.     movzx    ecx, dl
  701.     shl    edi, 8
  702.     or    edi, ecx
  703. $L73375:
  704. ; Line 310
  705.     cmp    eax, 256                ; 00000100H
  706.     jl    SHORT $L73374
  707. ; Line 312
  708.     mov    DWORD PTR [ebp+12], edi
  709.     pop    edi
  710.     mov    DWORD PTR [ebp+8], esi
  711.     pop    esi
  712.     pop    ebp
  713. ; Line 315
  714.     ret    0
  715. _LzmaLiteralDecode ENDP
  716. ; Function compile flags: /Ogty
  717. _code$ = -8                        ; size = 4
  718. _bit$73397 = -4                        ; size = 4
  719. _probs$ = 8                        ; size = 4
  720. _rd$ = 12                        ; size = 4
  721. _matchByte$ = 16                    ; size = 1
  722. _LzmaLiteralDecodeMatch PROC NEAR
  723. ; Line 318
  724.     sub    esp, 8
  725.     mov    ecx, DWORD PTR _rd$[esp+4]
  726.     push    ebx
  727. ; Line 321
  728.     mov    ebx, DWORD PTR [ecx+12]
  729.     push    ebp
  730.     push    esi
  731.     mov    esi, DWORD PTR [ecx+8]
  732.     push    edi
  733.     mov    eax, 1
  734.     mov    DWORD PTR _code$[esp+24], ebx
  735.     npad    6
  736. $L73394:
  737. ; Line 326
  738.     mov    cl, BYTE PTR _matchByte$[esp+20]
  739. ; Line 330
  740.     mov    edx, DWORD PTR _probs$[esp+20]
  741.     movzx    ebp, cl
  742.     shl    cl, 1
  743.     mov    BYTE PTR _matchByte$[esp+20], cl
  744.     shr    ebp, 7
  745.     lea    ecx, DWORD PTR [ebp+1]
  746.     shl    ecx, 8
  747.     add    ecx, eax
  748.     lea    edi, DWORD PTR [edx+ecx*4]
  749. ; Line 331
  750.     mov    edx, DWORD PTR [edi]
  751.     mov    ecx, esi
  752.     shr    ecx, 11                    ; 0000000bH
  753.     imul    ecx, edx
  754.     cmp    ebx, ecx
  755.     jae    SHORT $L73401
  756.     mov    esi, ecx
  757.     mov    ecx, 2048                ; 00000800H
  758.     sub    ecx, edx
  759.     shr    ecx, 5
  760.     add    ecx, edx
  761.     mov    DWORD PTR _bit$73397[esp+24], 0
  762.     mov    DWORD PTR [edi], ecx
  763.     shl    eax, 1
  764.     jmp    SHORT $L73402
  765. $L73401:
  766.     mov    ebx, DWORD PTR _code$[esp+24]
  767.     sub    ebx, ecx
  768.     sub    esi, ecx
  769.     mov    ecx, edx
  770.     shr    ecx, 5
  771.     sub    edx, ecx
  772.     mov    DWORD PTR _bit$73397[esp+24], 1
  773.     mov    DWORD PTR _code$[esp+24], ebx
  774.     mov    DWORD PTR [edi], edx
  775.     lea    eax, DWORD PTR [eax+eax+1]
  776. $L73402:
  777.     cmp    esi, 16777216                ; 01000000H
  778.     mov    edi, DWORD PTR _rd$[esp+20]
  779.     jae    SHORT $L73404
  780.     mov    ecx, DWORD PTR [edi]
  781.     mov    edx, DWORD PTR [edi+4]
  782.     shl    esi, 8
  783.     cmp    ecx, edx
  784.     jne    SHORT $L73582
  785.     mov    DWORD PTR [edi+16], 1
  786.     or    dl, 255                    ; 000000ffH
  787.     jmp    SHORT $L73581
  788. $L73582:
  789.     mov    dl, BYTE PTR [ecx]
  790.     inc    ecx
  791.     mov    DWORD PTR [edi], ecx
  792. $L73581:
  793.     movzx    edx, dl
  794.     shl    ebx, 8
  795.     or    ebx, edx
  796.     mov    DWORD PTR _code$[esp+24], ebx
  797. $L73404:
  798. ; Line 337
  799.     cmp    ebp, DWORD PTR _bit$73397[esp+24]
  800.     jne    SHORT $L73591
  801. ; Line 351
  802.     cmp    eax, 256                ; 00000100H
  803.     jl    $L73394
  804. ; Line 353
  805.     mov    DWORD PTR [edi+8], esi
  806.     mov    DWORD PTR [edi+12], ebx
  807.     pop    edi
  808.     pop    esi
  809.     pop    ebp
  810.     pop    ebx
  811. ; Line 356
  812.     add    esp, 8
  813.     ret    0
  814. $L73591:
  815. ; Line 339
  816.     cmp    eax, 256                ; 00000100H
  817.     jge    SHORT $L73396
  818. $L73407:
  819. ; Line 343
  820.     mov    ebp, DWORD PTR _probs$[esp+20]
  821.     mov    ecx, DWORD PTR [ebp+eax*4]
  822.     mov    edx, esi
  823.     shr    edx, 11                    ; 0000000bH
  824.     imul    edx, ecx
  825.     cmp    ebx, edx
  826.     jae    SHORT $L73411
  827.     mov    esi, edx
  828.     mov    edx, 2048                ; 00000800H
  829.     sub    edx, ecx
  830.     shr    edx, 5
  831.     add    edx, ecx
  832.     mov    DWORD PTR [ebp+eax*4], edx
  833.     shl    eax, 1
  834.     jmp    SHORT $L73412
  835. $L73411:
  836.     sub    esi, edx
  837.     sub    ebx, edx
  838.     mov    edx, ecx
  839.     shr    edx, 5
  840.     sub    ecx, edx
  841.     mov    DWORD PTR [ebp+eax*4], ecx
  842.     lea    eax, DWORD PTR [eax+eax+1]
  843. $L73412:
  844.     cmp    esi, 16777216                ; 01000000H
  845.     jae    SHORT $L73414
  846.     mov    ebp, DWORD PTR [edi]
  847.     mov    ecx, DWORD PTR [edi+4]
  848.     shl    esi, 8
  849.     cmp    ebp, ecx
  850.     jne    SHORT $L73587
  851.     mov    DWORD PTR [edi+16], 1
  852.     or    cl, 255                    ; 000000ffH
  853.     jmp    SHORT $L73586
  854. $L73587:
  855.     mov    cl, BYTE PTR [ebp]
  856.     inc    ebp
  857.     mov    DWORD PTR [edi], ebp
  858. $L73586:
  859.     movzx    ecx, cl
  860.     shl    ebx, 8
  861.     or    ebx, ecx
  862. $L73414:
  863. ; Line 339
  864.     cmp    eax, 256                ; 00000100H
  865.     jl    SHORT $L73407
  866. $L73396:
  867. ; Line 353
  868.     mov    DWORD PTR [edi+8], esi
  869.     mov    DWORD PTR [edi+12], ebx
  870.     pop    edi
  871.     pop    esi
  872.     pop    ebp
  873.     pop    ebx
  874. ; Line 356
  875.     add    esp, 8
  876.     ret    0
  877. _LzmaLiteralDecodeMatch ENDP
  878. ; Function compile flags: /Ogty
  879. _p$ = 8                        ; size = 4
  880. _LzmaLenDecode PROC NEAR
  881. ; _rd$ = ecx
  882. ; _posState$ = eax
  883. ; Line 376
  884.     push    ebx
  885.     push    ebp
  886.     mov    ebp, DWORD PTR _p$[esp+4]
  887.     push    esi
  888.     mov    ebx, ecx
  889.     push    edi
  890.     mov    esi, eax
  891. ; Line 377
  892.     mov    eax, ebx
  893.     mov    edi, ebp
  894.     call    _RangeDecoderBitDecode
  895.     test    eax, eax
  896.     jne    SHORT $L73423
  897. ; Line 379
  898.     shl    esi, 5
  899.     push    3
  900.     lea    ecx, DWORD PTR [esi+ebp+8]
  901.     call    _RangeDecoderBitTreeDecode
  902.     add    esp, 4
  903.     pop    edi
  904.     pop    esi
  905.     pop    ebp
  906.     pop    ebx
  907. ; Line 385
  908.     ret    0
  909. $L73423:
  910. ; Line 380
  911.     lea    edi, DWORD PTR [ebp+4]
  912.     mov    eax, ebx
  913.     call    _RangeDecoderBitDecode
  914.     test    eax, eax
  915.     jne    SHORT $L73424
  916. ; Line 382
  917.     shl    esi, 5
  918.     push    3
  919.     lea    ecx, DWORD PTR [esi+ebp+520]
  920.     call    _RangeDecoderBitTreeDecode
  921.     add    esp, 4
  922.     pop    edi
  923.     pop    esi
  924.     pop    ebp
  925.     add    eax, 8
  926.     pop    ebx
  927. ; Line 385
  928.     ret    0
  929. $L73424:
  930. ; Line 384
  931.     push    8
  932.     lea    ecx, DWORD PTR [ebp+1032]
  933.     call    _RangeDecoderBitTreeDecode
  934.     add    esp, 4
  935.     pop    edi
  936.     pop    esi
  937.     pop    ebp
  938.     add    eax, 16                    ; 00000010H
  939.     pop    ebx
  940. ; Line 385
  941.     ret    0
  942. _LzmaLenDecode ENDP
  943. _rep2$ = -44                        ; size = 4
  944. _rep1$ = -40                        ; size = 4
  945. _previousIsMatch$ = -36                    ; size = 4
  946. _rep3$ = -32                        ; size = 4
  947. _posStateMask$ = -28                    ; size = 4
  948. _literalPosMask$ = -24                    ; size = 4
  949. _rd$ = -20                        ; size = 20
  950. _buffer$ = 8                        ; size = 4
  951. _matchByte$73481 = 12                    ; size = 1
  952. _bufferSize$ = 12                    ; size = 4
  953. _lc$ = 16                        ; size = 4
  954. _state$ = 20                        ; size = 4
  955. _lp$ = 20                        ; size = 4
  956. _posState$73471 = 24                    ; size = 4
  957. _pb$ = 24                        ; size = 4
  958. _inStream$ = 28                        ; size = 4
  959. _inSize$ = 32                        ; size = 4
  960. _outStream$ = 36                    ; size = 4
  961. _outSize$ = 40                        ; size = 4
  962. _outSizeProcessed$ = 44                    ; size = 4
  963. _LzmaDecode PROC NEAR
  964. ; Line 531
  965.     sub    esp, 44                    ; 0000002cH
  966. ; Line 532
  967.     mov    eax, DWORD PTR _lc$[esp+40]
  968.     push    ebx
  969.     push    ebp
  970.     push    esi
  971.     push    edi
  972.     mov    edi, DWORD PTR _lp$[esp+56]
  973.     lea    ecx, DWORD PTR [eax+edi]
  974. ; Line 539
  975.     mov    edx, 1
  976.     mov    esi, edx
  977.     mov    DWORD PTR _rep1$[esp+60], edx
  978.     mov    DWORD PTR _rep2$[esp+60], edx
  979.     mov    DWORD PTR _rep3$[esp+60], edx
  980.     mov    eax, 768                ; 00000300H
  981.     shl    eax, cl
  982. ; Line 541
  983.     mov    ecx, DWORD PTR _pb$[esp+56]
  984.     shl    edx, cl
  985.     xor    ebp, ebp
  986.     add    eax, 1846                ; 00000736H
  987.     xor    bl, bl
  988.     dec    edx
  989.     mov    DWORD PTR _posStateMask$[esp+60], edx
  990. ; Line 542
  991.     mov    ecx, edi
  992.     mov    edx, esi
  993.     shl    edx, cl
  994. ; Line 544
  995.     lea    ecx, DWORD PTR [eax*4]
  996.     mov    DWORD PTR _state$[esp+56], ebp
  997.     mov    DWORD PTR _previousIsMatch$[esp+60], ebp
  998.     dec    edx
  999.     mov    DWORD PTR _literalPosMask$[esp+60], edx
  1000.     cmp    DWORD PTR _bufferSize$[esp+56], ecx
  1001.     jae    SHORT $L73464
  1002.     pop    edi
  1003.     pop    esi
  1004.     pop    ebp
  1005. ; Line 545
  1006.     mov    eax, 2
  1007.     pop    ebx
  1008. ; Line 749
  1009.     add    esp, 44                    ; 0000002cH
  1010.     ret    0
  1011. $L73464:
  1012. ; Line 546
  1013.     test    eax, eax
  1014.     jbe    SHORT $L73465
  1015.     mov    edi, DWORD PTR _buffer$[esp+56]
  1016.     mov    ecx, eax
  1017.     mov    eax, 1024                ; 00000400H
  1018.     rep stosd
  1019. $L73465:
  1020. ; Line 554
  1021.     mov    edx, DWORD PTR _inSize$[esp+56]
  1022.     mov    ecx, DWORD PTR _inStream$[esp+56]
  1023.     lea    eax, DWORD PTR _rd$[esp+60]
  1024.     call    _RangeDecoderInit
  1025. ; Line 558
  1026.     mov    eax, DWORD PTR _outSize$[esp+56]
  1027.     test    eax, eax
  1028.     mov    edx, DWORD PTR _outSizeProcessed$[esp+56]
  1029.     mov    DWORD PTR [edx], 0
  1030.     jbe    $L73609
  1031. $L73469:
  1032. ; Line 566
  1033.     mov    eax, DWORD PTR _posStateMask$[esp+60]
  1034. ; Line 571
  1035.     mov    ecx, DWORD PTR _rd$[esp+76]
  1036.     and    eax, ebp
  1037.     test    ecx, ecx
  1038.     mov    DWORD PTR _posState$73471[esp+56], eax
  1039.     jne    $L73604
  1040. ; Line 573
  1041.     mov    ecx, DWORD PTR _state$[esp+56]
  1042.     mov    edx, DWORD PTR _buffer$[esp+56]
  1043.     shl    ecx, 4
  1044.     add    ecx, eax
  1045.     lea    edi, DWORD PTR [edx+ecx*4]
  1046.     lea    eax, DWORD PTR _rd$[esp+60]
  1047.     call    _RangeDecoderBitDecode
  1048.     test    eax, eax
  1049.     jne    $L73474
  1050. ; Line 582
  1051.     mov    edx, DWORD PTR _lc$[esp+56]
  1052.     mov    edi, DWORD PTR _literalPosMask$[esp+60]
  1053.     xor    ecx, ecx
  1054.     mov    cl, 8
  1055.     sub    cl, dl
  1056.     movzx    eax, bl
  1057.     shr    eax, cl
  1058.     and    edi, ebp
  1059.     mov    ecx, edx
  1060.     shl    edi, cl
  1061.     mov    ecx, DWORD PTR _buffer$[esp+56]
  1062.     add    eax, edi
  1063.     lea    eax, DWORD PTR [eax+eax*2]
  1064.     shl    eax, 10                    ; 0000000aH
  1065.     lea    ebx, DWORD PTR [eax+ecx+7384]
  1066. ; Line 584
  1067.     mov    eax, DWORD PTR _state$[esp+56]
  1068.     cmp    eax, 4
  1069.     jge    SHORT $L73476
  1070.     mov    DWORD PTR _state$[esp+56], 0
  1071. ; Line 585
  1072.     jmp    SHORT $L73479
  1073. $L73476:
  1074.     cmp    eax, 10                    ; 0000000aH
  1075.     jge    SHORT $L73478
  1076.     sub    eax, 3
  1077. ; Line 586
  1078.     jmp    SHORT $L73610
  1079. $L73478:
  1080.     sub    eax, 6
  1081. $L73610:
  1082.     mov    DWORD PTR _state$[esp+56], eax
  1083. $L73479:
  1084. ; Line 587
  1085.     mov    eax, DWORD PTR _previousIsMatch$[esp+60]
  1086.     test    eax, eax
  1087.     je    SHORT $L73480
  1088. ; Line 596
  1089.     mov    eax, DWORD PTR _outStream$[esp+56]
  1090.     mov    edx, ebp
  1091.     sub    edx, esi
  1092.     mov    cl, BYTE PTR [edx+eax]
  1093.     mov    BYTE PTR _matchByte$73481[esp+56], cl
  1094. ; Line 598
  1095.     mov    edx, DWORD PTR _matchByte$73481[esp+56]
  1096.     push    edx
  1097.     lea    eax, DWORD PTR _rd$[esp+64]
  1098.     push    eax
  1099.     push    ebx
  1100.     call    _LzmaLiteralDecodeMatch
  1101.     add    esp, 12                    ; 0000000cH
  1102. ; Line 599
  1103.     mov    DWORD PTR _previousIsMatch$[esp+60], 0
  1104. ; Line 601
  1105.     jmp    SHORT $L73611
  1106. $L73480:
  1107. ; Line 602
  1108.     lea    ecx, DWORD PTR _rd$[esp+60]
  1109.     push    ecx
  1110.     call    _LzmaLiteralDecode
  1111.     add    esp, 4
  1112. $L73611:
  1113. ; Line 603
  1114.     mov    edx, DWORD PTR _outStream$[esp+56]
  1115.     mov    bl, al
  1116.     mov    BYTE PTR [edx+ebp], bl
  1117. $L73612:
  1118.     inc    ebp
  1119. $L73507:
  1120. ; Line 558
  1121.     cmp    ebp, DWORD PTR _outSize$[esp+56]
  1122.     jb    $L73469
  1123. $L73609:
  1124. ; Line 747
  1125.     mov    eax, DWORD PTR _outSizeProcessed$[esp+56]
  1126.     pop    edi
  1127.     pop    esi
  1128.     mov    DWORD PTR [eax], ebp
  1129.     pop    ebp
  1130. ; Line 748
  1131.     xor    eax, eax
  1132.     pop    ebx
  1133. ; Line 749
  1134.     add    esp, 44                    ; 0000002cH
  1135.     ret    0
  1136. $L73474:
  1137. ; Line 613
  1138.     mov    eax, DWORD PTR _buffer$[esp+56]
  1139.     mov    ebx, DWORD PTR _state$[esp+56]
  1140.     lea    edi, DWORD PTR [eax+ebx*4+768]
  1141.     lea    eax, DWORD PTR _rd$[esp+60]
  1142.     mov    DWORD PTR _previousIsMatch$[esp+60], 1
  1143.     call    _RangeDecoderBitDecode
  1144.     cmp    eax, 1
  1145.     jne    $L73484
  1146. ; Line 615
  1147.     mov    ecx, DWORD PTR _buffer$[esp+56]
  1148.     lea    edi, DWORD PTR [ecx+ebx*4+816]
  1149.     lea    eax, DWORD PTR _rd$[esp+60]
  1150.     call    _RangeDecoderBitDecode
  1151.     test    eax, eax
  1152. ; Line 617
  1153.     mov    eax, DWORD PTR _buffer$[esp+56]
  1154.     jne    SHORT $L73485
  1155.     mov    edi, DWORD PTR _posState$73471[esp+56]
  1156.     lea    edx, DWORD PTR [ebx+15]
  1157.     shl    edx, 4
  1158.     add    edx, edi
  1159.     lea    edi, DWORD PTR [eax+edx*4]
  1160.     lea    eax, DWORD PTR _rd$[esp+60]
  1161.     call    _RangeDecoderBitDecode
  1162.     test    eax, eax
  1163.     jne    SHORT $L73488
  1164. ; Line 628
  1165.     test    ebp, ebp
  1166.     je    $L73604
  1167. ; Line 640
  1168.     mov    eax, DWORD PTR _outStream$[esp+56]
  1169.     xor    ecx, ecx
  1170.     cmp    ebx, 7
  1171.     setge    cl
  1172.     mov    edx, ebp
  1173.     sub    edx, esi
  1174.     mov    bl, BYTE PTR [edx+eax]
  1175. ; Line 642
  1176.     mov    BYTE PTR [eax+ebp], bl
  1177.     lea    ecx, DWORD PTR [ecx+ecx+9]
  1178.     mov    DWORD PTR _state$[esp+56], ecx
  1179. ; Line 643
  1180.     jmp    $L73612
  1181. $L73485:
  1182. ; Line 649
  1183.     lea    edi, DWORD PTR [eax+ebx*4+864]
  1184.     lea    eax, DWORD PTR _rd$[esp+60]
  1185.     call    _RangeDecoderBitDecode
  1186.     test    eax, eax
  1187.     jne    SHORT $L73490
  1188. ; Line 650
  1189.     mov    eax, DWORD PTR _rep1$[esp+60]
  1190. ; Line 651
  1191.     jmp    SHORT $L73491
  1192. $L73490:
  1193. ; Line 653
  1194.     mov    ecx, DWORD PTR _buffer$[esp+56]
  1195.     lea    edi, DWORD PTR [ecx+ebx*4+912]
  1196.     lea    eax, DWORD PTR _rd$[esp+60]
  1197.     call    _RangeDecoderBitDecode
  1198.     test    eax, eax
  1199.     jne    SHORT $L73492
  1200. ; Line 654
  1201.     mov    eax, DWORD PTR _rep2$[esp+60]
  1202. ; Line 655
  1203.     jmp    SHORT $L73493
  1204. $L73492:
  1205. ; Line 658
  1206.     mov    edx, DWORD PTR _rep2$[esp+60]
  1207.     mov    eax, DWORD PTR _rep3$[esp+60]
  1208.     mov    DWORD PTR _rep3$[esp+60], edx
  1209. $L73493:
  1210. ; Line 660
  1211.     mov    ecx, DWORD PTR _rep1$[esp+60]
  1212.     mov    DWORD PTR _rep2$[esp+60], ecx
  1213. $L73491:
  1214. ; Line 662
  1215.     mov    DWORD PTR _rep1$[esp+60], esi
  1216. ; Line 663
  1217.     mov    esi, eax
  1218. $L73488:
  1219. ; Line 665
  1220.     mov    edx, DWORD PTR _buffer$[esp+56]
  1221.     mov    eax, DWORD PTR _posState$73471[esp+56]
  1222.     add    edx, 5328                ; 000014d0H
  1223.     push    edx
  1224.     lea    ecx, DWORD PTR _rd$[esp+64]
  1225.     call    _LzmaLenDecode
  1226.     mov    edi, eax
  1227. ; Line 666
  1228.     xor    eax, eax
  1229.     add    esp, 4
  1230.     cmp    ebx, 7
  1231.     setge    al
  1232.     dec    eax
  1233.     and    eax, -3                    ; fffffffdH
  1234.     add    eax, 11                    ; 0000000bH
  1235.     mov    DWORD PTR _state$[esp+56], eax
  1236. ; Line 668
  1237.     jmp    $L73494
  1238. $L73484:
  1239. ; Line 672
  1240.     mov    edx, DWORD PTR _rep1$[esp+60]
  1241.     mov    ecx, DWORD PTR _rep2$[esp+60]
  1242. ; Line 674
  1243.     xor    eax, eax
  1244.     cmp    ebx, 7
  1245.     setge    al
  1246.     mov    DWORD PTR _rep3$[esp+60], ecx
  1247.     mov    DWORD PTR _rep1$[esp+60], esi
  1248. ; Line 675
  1249.     mov    esi, DWORD PTR _buffer$[esp+56]
  1250.     lea    ecx, DWORD PTR [esi+3272]
  1251.     push    ecx
  1252.     lea    ecx, DWORD PTR _rd$[esp+64]
  1253.     dec    eax
  1254.     and    eax, -3                    ; fffffffdH
  1255.     add    eax, 10                    ; 0000000aH
  1256.     mov    DWORD PTR _state$[esp+60], eax
  1257.     mov    eax, DWORD PTR _posState$73471[esp+60]
  1258.     mov    DWORD PTR _rep2$[esp+64], edx
  1259.     call    _LzmaLenDecode
  1260.     mov    edi, eax
  1261.     add    esp, 4
  1262. ; Line 678
  1263.     cmp    edi, 4
  1264.     jl    SHORT $L73596
  1265.     mov    eax, 3
  1266. $L73596:
  1267.     shl    eax, 8
  1268.     push    6
  1269.     lea    ecx, DWORD PTR [eax+esi+1728]
  1270.     lea    ebx, DWORD PTR _rd$[esp+64]
  1271.     call    _RangeDecoderBitTreeDecode
  1272.     add    esp, 4
  1273. ; Line 679
  1274.     cmp    eax, 4
  1275. ; Line 682
  1276.     mov    esi, eax
  1277.     jl    SHORT $L73501
  1278.     mov    ecx, eax
  1279.     and    esi, 1
  1280.     sar    ecx, 1
  1281.     dec    ecx
  1282.     or    esi, 2
  1283.     shl    esi, cl
  1284. ; Line 683
  1285.     cmp    eax, 14                    ; 0000000eH
  1286.     jge    SHORT $L73499
  1287. ; Line 686
  1288.     mov    edx, ebx
  1289.     push    edx
  1290.     mov    edx, DWORD PTR _buffer$[esp+60]
  1291.     push    ecx
  1292.     mov    ecx, esi
  1293.     sub    ecx, eax
  1294.     lea    eax, DWORD PTR [edx+ecx*4+2748]
  1295.     push    eax
  1296. ; Line 688
  1297.     jmp    SHORT $L73613
  1298. $L73499:
  1299. ; Line 691
  1300.     lea    eax, DWORD PTR [ecx-4]
  1301.     lea    ecx, DWORD PTR _rd$[esp+60]
  1302.     call    _RangeDecoderDecodeDirectBits
  1303. ; Line 692
  1304.     mov    edx, DWORD PTR _buffer$[esp+56]
  1305.     shl    eax, 4
  1306.     lea    ecx, DWORD PTR _rd$[esp+60]
  1307.     push    ecx
  1308.     add    esi, eax
  1309.     push    4
  1310.     add    edx, 3208                ; 00000c88H
  1311.     push    edx
  1312. $L73613:
  1313.     call    _RangeDecoderReverseBitTreeDecode
  1314.     add    esp, 12                    ; 0000000cH
  1315.     add    esi, eax
  1316. $L73501:
  1317. ; Line 697
  1318.     inc    esi
  1319. $L73494:
  1320. ; Line 699
  1321.     test    esi, esi
  1322.     je    $L73609
  1323. ; Line 709
  1324.     cmp    esi, ebp
  1325.     ja    SHORT $L73604
  1326. ; Line 713
  1327.     mov    ecx, DWORD PTR _outStream$[esp+56]
  1328.     mov    eax, ebp
  1329.     sub    eax, esi
  1330.     add    edi, 2
  1331.     add    eax, ecx
  1332. $L73505:
  1333. ; Line 725
  1334.     mov    bl, BYTE PTR [eax]
  1335. ; Line 727
  1336.     inc    ebp
  1337.     mov    BYTE PTR [ecx+ebp-1], bl
  1338.     inc    eax
  1339. ; Line 728
  1340.     dec    edi
  1341. ; Line 730
  1342.     test    edi, edi
  1343.     jle    $L73507
  1344.     cmp    ebp, DWORD PTR _outSize$[esp+56]
  1345.     jb    SHORT $L73505
  1346. ; Line 747
  1347.     mov    eax, DWORD PTR _outSizeProcessed$[esp+56]
  1348.     pop    edi
  1349.     pop    esi
  1350.     mov    DWORD PTR [eax], ebp
  1351.     pop    ebp
  1352. ; Line 748
  1353.     xor    eax, eax
  1354.     pop    ebx
  1355. ; Line 749
  1356.     add    esp, 44                    ; 0000002cH
  1357.     ret    0
  1358. $L73604:
  1359.     pop    edi
  1360.     pop    esi
  1361.     pop    ebp
  1362. ; Line 711
  1363.     mov    eax, 1
  1364.     pop    ebx
  1365. ; Line 749
  1366.     add    esp, 44                    ; 0000002cH
  1367.     ret    0
  1368. _LzmaDecode ENDP
  1369.  
  1370. ; =================================================================
  1371.  
  1372. _DecodeFast@12_end:
  1373.  
  1374. _TEXT ENDS
  1375.  
  1376. END
  1377.