Re: Why Is Houdini Not Entered In The WCCC??
Posted: Tue Aug 10, 2010 3:13 am
It's actually not that funny. First of all, I have not seen code snippets posted by Lance. Further more, would you be willing to let me examine the source code of the initial release of Houdini? If not me, would you allow BB+, Zach Wegner, or anyone else? I have no dog in the fight, call things as they are, and would glady appologize should the findings exonerate you. More modified code below:
RobboLito 0.09 w32
Aug 4 2010 19:40:41
basic windows version by kranium, improved by sentinel
Houdini w32 1_CPU
build 2010-05-15
by Robert Houdart*
RobboLito 009 Source Code move_gen.h
*Modified
RobboLito 0.09 w32
Aug 4 2010 19:40:41
basic windows version by kranium, improved by sentinel
Code: Select all
.text:0040AC20 ; =============== S U B R O U T I N E =======================================
.text:0040AC20
.text:0040AC20 ; Attributes: bp-based frame
.text:0040AC20
.text:0040AC20 sub_40AC20 proc near ; CODE XREF: sub_411840+51p
.text:0040AC20 ; sub_411840+1CCp ...
.text:0040AC20
.text:0040AC20 var_10 = dword ptr -10h
.text:0040AC20 var_C = dword ptr -0Ch
.text:0040AC20 var_8 = qword ptr -8
.text:0040AC20 arg_0 = dword ptr 8
.text:0040AC20 arg_4 = dword ptr 0Ch
.text:0040AC20
.text:0040AC20 push ebp
.text:0040AC21 mov ebp, esp
.text:0040AC23 sub esp, 10h
.text:0040AC26 push ebx
.text:0040AC27 mov ebx, dword_73E940
.text:0040AC2D movzx eax, byte ptr [ebx+1Ah]
.text:0040AC31 push esi
.text:0040AC32 mov esi, dword ptr qword_780EA8+4
.text:0040AC38 push edi
.text:0040AC39 test eax, eax
.text:0040AC3B jz loc_40ACCD
.text:0040AC41 mov edx, dword ptr qword_780EA8
.text:0040AC47 mov edi, esi
.text:0040AC49 shrd edx, edi, 9
.text:0040AC4D and edx, dword_5F5FC0[eax*8]
.text:0040AC54 shr edi, 9
.text:0040AC57 and edi, dword_5F5FC4[eax*8]
.text:0040AC5E and edx, 7F7F7F7Fh
.text:0040AC64 and edi, 7F7F7Fh
.text:0040AC6A or edx, edi
.text:0040AC6C jz short loc_40AC87
.text:0040AC6E lea edx, [eax+9]
.text:0040AC71 shl edx, 6
.text:0040AC74 or edx, dword_44919C
.text:0040AC7A or edx, eax
.text:0040AC7C or edx, 3000h
.text:0040AC82 mov [ecx], edx
.text:0040AC84 add ecx, 4
.text:0040AC87
.text:0040AC87 loc_40AC87: ; CODE XREF: sub_40AC20+4Cj
.text:0040AC87 mov edx, dword ptr qword_780EA8
.text:0040AC8D mov edi, esi
.text:0040AC8F shrd edx, edi, 7
.text:0040AC93 and edx, dword_5F5FC0[eax*8]
.text:0040AC9A shr edi, 7
.text:0040AC9D and edi, dword_5F5FC4[eax*8]
.text:0040ACA4 and edx, 0FEFEFEFEh
.text:0040ACAA and edi, 0FEFEFEh
.text:0040ACB0 or edx, edi
.text:0040ACB2 jz short loc_40ACCD
.text:0040ACB4 lea edx, [eax+7]
.text:0040ACB7 shl edx, 6
.text:0040ACBA or edx, dword_44919C
.text:0040ACC0 or edx, eax
.text:0040ACC2 or edx, 3000h
.text:0040ACC8 mov [ecx], edx
.text:0040ACCA add ecx, 4
.text:0040ACCD
.text:0040ACCD loc_40ACCD: ; CODE XREF: sub_40AC20+1Bj
.text:0040ACCD ; sub_40AC20+92j
.text:0040ACCD mov edx, [ebx+28h]
.text:0040ACD0 mov edi, [ebx+2Ch]
.text:0040ACD3 mov eax, [ebp+arg_0]
.text:0040ACD6 mov ebx, [ebp+arg_4]
.text:0040ACD9 and edx, eax
.text:0040ACDB and edi, ebx
.text:0040ACDD or edx, edi
.text:0040ACDF jz loc_40B29C
.text:0040ACE5 mov edi, dword ptr qword_780EA8
.text:0040ACEB mov edx, esi
.text:0040ACED shrd edi, edx, 9
.text:0040ACF1 shr edx, 9
.text:0040ACF4 and edi, eax
.text:0040ACF6 and edi, 7F7F7F00h
.text:0040ACFC and edx, ebx
.text:0040ACFE and edx, 7F7F7Fh
.text:0040AD04 mov eax, edi
.text:0040AD06 or eax, edx
.text:0040AD08 mov [ebp+var_10], edi
.text:0040AD0B mov [ebp+var_C], edx
.text:0040AD0E jz short loc_40AD63
.text:0040AD10
.text:0040AD10 loc_40AD10: ; CODE XREF: sub_40AC20+13Bj
.text:0040AD10 mov eax, [ebp+var_10]
.text:0040AD13 test eax, eax
.text:0040AD15 jz short loc_40AD1C
.text:0040AD17 bsf eax, eax
.text:0040AD1A jmp short loc_40AD23
.text:0040AD1C ; ---------------------------------------------------------------------------
.text:0040AD1C
.text:0040AD1C loc_40AD1C: ; CODE XREF: sub_40AC20+F5j
.text:0040AD1C bsf eax, [ebp+var_C]
.text:0040AD20 add eax, 20h
.text:0040AD23
.text:0040AD23 loc_40AD23: ; CODE XREF: sub_40AC20+FAj
.text:0040AD23 movzx esi, byte_780E20[eax]
.text:0040AD2A mov dword ptr [ebp+var_8+4], eax
.text:0040AD2D add eax, 9
.text:0040AD30 shl eax, 6
.text:0040AD33 or eax, dword_449198[esi*4]
.text:0040AD3A add ecx, 4
.text:0040AD3D or eax, dword ptr [ebp+var_8+4]
.text:0040AD40 mov esi, edx
.text:0040AD42 mov [ecx-4], eax
.text:0040AD45 mov eax, edi
.text:0040AD47 add eax, 0FFFFFFFFh
.text:0040AD4A adc esi, 0FFFFFFFFh
.text:0040AD4D and edi, eax
.text:0040AD4F and edx, esi
.text:0040AD51 mov eax, edi
.text:0040AD53 or eax, edx
.text:0040AD55 mov [ebp+var_10], edi
.text:0040AD58 mov [ebp+var_C], edx
.text:0040AD5B jnz short loc_40AD10
.text:0040AD5D mov esi, dword ptr qword_780EA8+4
.text:0040AD63
.text:0040AD63 loc_40AD63: ; CODE XREF: sub_40AC20+EEj
.text:0040AD63 mov edx, dword ptr qword_780EA8
.text:0040AD69 shrd edx, esi, 7
.text:0040AD6D and edx, [ebp+arg_0]
.text:0040AD70 shr esi, 7
.text:0040AD73 and edx, 0FEFEFE00h
.text:0040AD79 and esi, ebx
.text:0040AD7B and esi, 0FEFEFEh
.text:0040AD81 mov eax, edx
.text:0040AD83 or eax, esi
.text:0040AD85 mov [ebp+var_10], edx
.text:0040AD88 mov [ebp+var_C], esi
.text:0040AD8B jz short loc_40ADDD
.text:0040AD8D lea ecx, [ecx+0]
.text:0040AD90
.text:0040AD90 loc_40AD90: ; CODE XREF: sub_40AC20+1BBj
.text:0040AD90 mov eax, [ebp+var_10]
.text:0040AD93 test eax, eax
.text:0040AD95 jz short loc_40AD9C
.text:0040AD97 bsf eax, eax
.text:0040AD9A jmp short loc_40ADA3
.text:0040AD9C ; ---------------------------------------------------------------------------
.text:0040AD9C
.text:0040AD9C loc_40AD9C: ; CODE XREF: sub_40AC20+175j
.text:0040AD9C bsf eax, [ebp+var_C]
.text:0040ADA0 add eax, 20h
.text:0040ADA3
.text:0040ADA3 loc_40ADA3: ; CODE XREF: sub_40AC20+17Aj
.text:0040ADA3 movzx edi, byte_780E20[eax]
.text:0040ADAA mov dword ptr [ebp+var_8+4], eax
.text:0040ADAD add eax, 7
.text:0040ADB0 shl eax, 6
.text:0040ADB3 or eax, dword_449198[edi*4]
.text:0040ADBA add ecx, 4
.text:0040ADBD or eax, dword ptr [ebp+var_8+4]
.text:0040ADC0 mov edi, esi
.text:0040ADC2 mov [ecx-4], eax
.text:0040ADC5 mov eax, edx
.text:0040ADC7 add eax, 0FFFFFFFFh
.text:0040ADCA adc edi, 0FFFFFFFFh
.text:0040ADCD and edx, eax
.text:0040ADCF and esi, edi
.text:0040ADD1 mov eax, edx
.text:0040ADD3 or eax, esi
.text:0040ADD5 mov [ebp+var_10], edx
.text:0040ADD8 mov [ebp+var_C], esi
.text:0040ADDB jnz short loc_40AD90
.text:0040ADDD
.text:0040ADDD loc_40ADDD: ; CODE XREF: sub_40AC20+16Bj
.text:0040ADDD mov eax, dword ptr qword_780EB0
.text:0040ADE2 mov edx, dword ptr qword_780EB0+4
.text:0040ADE8 mov dword ptr [ebp+var_8], eax
.text:0040ADEB or eax, edx
.text:0040ADED mov dword ptr [ebp+var_8+4], edx
.text:0040ADF0 jz loc_40AE99
.text:0040ADF6
.text:0040ADF6 loc_40ADF6: ; CODE XREF: sub_40AC20+273j
.text:0040ADF6 mov eax, dword ptr [ebp+var_8]
.text:0040ADF9 test eax, eax
.text:0040ADFB jz short loc_40AE02
.text:0040ADFD bsf eax, eax
.text:0040AE00 jmp short loc_40AE09
.text:0040AE02 ; ---------------------------------------------------------------------------
.text:0040AE02
.text:0040AE02 loc_40AE02: ; CODE XREF: sub_40AC20+1DBj
.text:0040AE02 bsf eax, dword ptr [ebp+var_8+4]
.text:0040AE06 add eax, 20h
.text:0040AE09
.text:0040AE09 loc_40AE09: ; CODE XREF: sub_40AC20+1E0j
.text:0040AE09 mov edx, dword_5F7720[eax*8]
.text:0040AE10 and edx, [ebp+arg_0]
.text:0040AE13 mov esi, dword_5F7724[eax*8]
.text:0040AE1A and esi, ebx
.text:0040AE1C mov edi, edx
.text:0040AE1E or edi, esi
.text:0040AE20 mov [ebp+var_10], edx
.text:0040AE23 mov [ebp+var_C], esi
.text:0040AE26 jz short loc_40AE77
.text:0040AE28 mov edi, eax
.text:0040AE2A shl edi, 6
.text:0040AE2D lea ecx, [ecx+0]
.text:0040AE30
.text:0040AE30 loc_40AE30: ; CODE XREF: sub_40AC20+252j
.text:0040AE30 mov eax, [ebp+var_10]
.text:0040AE33 test eax, eax
.text:0040AE35 jz short loc_40AE3C
.text:0040AE37 bsf eax, eax
.text:0040AE3A jmp short loc_40AE43
.text:0040AE3C ; ---------------------------------------------------------------------------
.text:0040AE3C
.text:0040AE3C loc_40AE3C: ; CODE XREF: sub_40AC20+215j
.text:0040AE3C bsf eax, [ebp+var_C]
.text:0040AE40 add eax, 20h
.text:0040AE43
.text:0040AE43 loc_40AE43: ; CODE XREF: sub_40AC20+21Aj
.text:0040AE43 movzx ebx, byte_780E20[eax]
.text:0040AE4A mov ebx, dword_4491D8[ebx*4]
.text:0040AE51 or ebx, edi
.text:0040AE53 or ebx, eax
.text:0040AE55 mov [ecx], ebx
.text:0040AE57 mov eax, edx
.text:0040AE59 add ecx, 4
.text:0040AE5C add eax, 0FFFFFFFFh
.text:0040AE5F mov ebx, esi
.text:0040AE61 adc ebx, 0FFFFFFFFh
.text:0040AE64 and edx, eax
.text:0040AE66 and esi, ebx
.text:0040AE68 mov eax, edx
.text:0040AE6A or eax, esi
.text:0040AE6C mov [ebp+var_10], edx
.text:0040AE6F mov [ebp+var_C], esi
.text:0040AE72 jnz short loc_40AE30
.text:0040AE74 mov ebx, [ebp+arg_4]
.text:0040AE77
.text:0040AE77 loc_40AE77: ; CODE XREF: sub_40AC20+206j
.text:0040AE77 mov eax, dword ptr [ebp+var_8]
.text:0040AE7A mov edx, dword ptr [ebp+var_8+4]
.text:0040AE7D mov esi, eax
.text:0040AE7F add esi, 0FFFFFFFFh
.text:0040AE82 mov edi, edx
.text:0040AE84 adc edi, 0FFFFFFFFh
.text:0040AE87 and eax, esi
.text:0040AE89 and edx, edi
.text:0040AE8B mov dword ptr [ebp+var_8], eax
.text:0040AE8E or eax, edx
.text:0040AE90 mov dword ptr [ebp+var_8+4], edx
.text:0040AE93 jnz loc_40ADF6
.text:0040AE99
.text:0040AE99 loc_40AE99: ; CODE XREF: sub_40AC20+1D0j
.text:0040AE99 mov eax, dword ptr qword_780EC8
.text:0040AE9E or eax, dword ptr qword_780EC0
.text:0040AEA4 mov edx, dword ptr qword_780EC8+4
.text:0040AEAA or edx, dword ptr qword_780EC0+4
.text:0040AEB0 mov dword ptr [ebp+var_8], eax
.text:0040AEB3 or eax, edx
.text:0040AEB5 mov dword ptr [ebp+var_8+4], edx
.text:0040AEB8 jz loc_40AFAF
.text:0040AEBE mov edi, edi
.text:0040AEC0
.text:0040AEC0 loc_40AEC0: ; CODE XREF: sub_40AC20+389j
.text:0040AEC0 mov eax, dword ptr [ebp+var_8]
.text:0040AEC3 test eax, eax
.text:0040AEC5 jz short loc_40AECC
.text:0040AEC7 bsf eax, eax
.text:0040AECA jmp short loc_40AED3
.text:0040AECC ; ---------------------------------------------------------------------------
.text:0040AECC
.text:0040AECC loc_40AECC: ; CODE XREF: sub_40AC20+2A5j
.text:0040AECC bsf eax, dword ptr [ebp+var_8+4]
.text:0040AED0 add eax, 20h
.text:0040AED3
.text:0040AED3 loc_40AED3: ; CODE XREF: sub_40AC20+2AAj
.text:0040AED3 movd xmm1, dword_73F120[eax*4]
.text:0040AEDC movq xmm0, qword_780EF8
.text:0040AEE4 psrlq xmm0, xmm1
.text:0040AEE8 movd xmm1, dword_73F020[eax*4]
.text:0040AEF1 movd esi, xmm0
.text:0040AEF5 movq xmm0, qword_780EF0
.text:0040AEFD and esi, 3Fh
.text:0040AF00 mov edx, eax
.text:0040AF02 shl edx, 6
.text:0040AF05 add esi, edx
.text:0040AF07 psrlq xmm0, xmm1
.text:0040AF0B movd edi, xmm0
.text:0040AF0F and edi, 3Fh
.text:0040AF12 add edi, edx
.text:0040AF14 mov edx, dword_723C80[esi*8]
.text:0040AF1B or edx, dword_71BC80[edi*8]
.text:0040AF22 mov esi, dword_723C84[esi*8]
.text:0040AF29 or esi, dword_71BC84[edi*8]
.text:0040AF30 and edx, [ebp+arg_0]
.text:0040AF33 and esi, ebx
.text:0040AF35 mov edi, edx
.text:0040AF37 or edi, esi
.text:0040AF39 mov [ebp+var_10], edx
.text:0040AF3C mov [ebp+var_C], esi
.text:0040AF3F jz short loc_40AF8D
.text:0040AF41 mov edi, eax
.text:0040AF43 shl edi, 6
.text:0040AF46
.text:0040AF46 loc_40AF46: ; CODE XREF: sub_40AC20+368j
.text:0040AF46 mov eax, [ebp+var_10]
.text:0040AF49 test eax, eax
.text:0040AF4B jz short loc_40AF52
.text:0040AF4D bsf eax, eax
.text:0040AF50 jmp short loc_40AF59
.text:0040AF52 ; ---------------------------------------------------------------------------
.text:0040AF52
.text:0040AF52 loc_40AF52: ; CODE XREF: sub_40AC20+32Bj
.text:0040AF52 bsf eax, [ebp+var_C]
.text:0040AF56 add eax, 20h
.text:0040AF59
.text:0040AF59 loc_40AF59: ; CODE XREF: sub_40AC20+330j
.text:0040AF59 movzx ebx, byte_780E20[eax]
.text:0040AF60 mov ebx, dword_449258[ebx*4]
.text:0040AF67 or ebx, edi
.text:0040AF69 or ebx, eax
.text:0040AF6B mov [ecx], ebx
.text:0040AF6D mov eax, edx
.text:0040AF6F add ecx, 4
.text:0040AF72 add eax, 0FFFFFFFFh
.text:0040AF75 mov ebx, esi
.text:0040AF77 adc ebx, 0FFFFFFFFh
.text:0040AF7A and edx, eax
.text:0040AF7C and esi, ebx
.text:0040AF7E mov eax, edx
.text:0040AF80 or eax, esi
.text:0040AF82 mov [ebp+var_10], edx
.text:0040AF85 mov [ebp+var_C], esi
.text:0040AF88 jnz short loc_40AF46
.text:0040AF8A mov ebx, [ebp+arg_4]
.text:0040AF8D
.text:0040AF8D loc_40AF8D: ; CODE XREF: sub_40AC20+31Fj
.text:0040AF8D mov eax, dword ptr [ebp+var_8]
.text:0040AF90 mov edx, dword ptr [ebp+var_8+4]
.text:0040AF93 mov esi, eax
.text:0040AF95 add esi, 0FFFFFFFFh
.text:0040AF98 mov edi, edx
.text:0040AF9A adc edi, 0FFFFFFFFh
.text:0040AF9D and eax, esi
.text:0040AF9F and edx, edi
.text:0040AFA1 mov dword ptr [ebp+var_8], eax
.text:0040AFA4 or eax, edx
.text:0040AFA6 mov dword ptr [ebp+var_8+4], edx
.text:0040AFA9 jnz loc_40AEC0
.text:0040AFAF
.text:0040AFAF loc_40AFAF: ; CODE XREF: sub_40AC20+298j
.text:0040AFAF mov eax, dword ptr qword_780ED0
.text:0040AFB4 mov edx, dword ptr qword_780ED0+4
.text:0040AFBA mov dword ptr [ebp+var_8], eax
.text:0040AFBD or eax, edx
.text:0040AFBF mov dword ptr [ebp+var_8+4], edx
.text:0040AFC2 jz loc_40B0B9
.text:0040AFC8
.text:0040AFC8 loc_40AFC8: ; CODE XREF: sub_40AC20+493j
.text:0040AFC8 mov eax, dword ptr [ebp+var_8]
.text:0040AFCB test eax, eax
.text:0040AFCD jz short loc_40AFD4
.text:0040AFCF bsf eax, eax
.text:0040AFD2 jmp short loc_40AFDB
.text:0040AFD4 ; ---------------------------------------------------------------------------
.text:0040AFD4
.text:0040AFD4 loc_40AFD4: ; CODE XREF: sub_40AC20+3ADj
.text:0040AFD4 bsf eax, dword ptr [ebp+var_8+4]
.text:0040AFD8 add eax, 20h
.text:0040AFDB
.text:0040AFDB loc_40AFDB: ; CODE XREF: sub_40AC20+3B2j
.text:0040AFDB movd xmm1, dword_73F320[eax*4]
.text:0040AFE4 movq xmm0, qword_780EE8
.text:0040AFEC psrlq xmm0, xmm1
.text:0040AFF0 movd xmm1, dword_73F220[eax*4]
.text:0040AFF9 movd esi, xmm0
.text:0040AFFD movq xmm0, qword_780EE0
.text:0040B005 and esi, 3Fh
.text:0040B008 mov edx, eax
.text:0040B00A shl edx, 6
.text:0040B00D add esi, edx
.text:0040B00F psrlq xmm0, xmm1
.text:0040B013 movd edi, xmm0
.text:0040B017 and edi, 3Fh
.text:0040B01A add edi, edx
.text:0040B01C mov edx, dword_733C80[esi*8]
.text:0040B023 or edx, dword_72BC80[edi*8]
.text:0040B02A mov esi, dword_733C84[esi*8]
.text:0040B031 or esi, dword_72BC84[edi*8]
.text:0040B038 and edx, [ebp+arg_0]
.text:0040B03B and esi, ebx
.text:0040B03D mov edi, edx
.text:0040B03F or edi, esi
.text:0040B041 mov [ebp+var_10], edx
.text:0040B044 mov [ebp+var_C], esi
.text:0040B047 jz short loc_40B097
.text:0040B049 mov edi, eax
.text:0040B04B shl edi, 6
.text:0040B04E mov edi, edi
.text:0040B050
.text:0040B050 loc_40B050: ; CODE XREF: sub_40AC20+472j
.text:0040B050 mov eax, [ebp+var_10]
.text:0040B053 test eax, eax
.text:0040B055 jz short loc_40B05C
.text:0040B057 bsf eax, eax
.text:0040B05A jmp short loc_40B063
.text:0040B05C ; ---------------------------------------------------------------------------
.text:0040B05C
.text:0040B05C loc_40B05C: ; CODE XREF: sub_40AC20+435j
.text:0040B05C bsf eax, [ebp+var_C]
.text:0040B060 add eax, 20h
.text:0040B063
.text:0040B063 loc_40B063: ; CODE XREF: sub_40AC20+43Aj
.text:0040B063 movzx ebx, byte_780E20[eax]
.text:0040B06A mov ebx, dword_4492D8[ebx*4]
.text:0040B071 or ebx, edi
.text:0040B073 or ebx, eax
.text:0040B075 mov [ecx], ebx
.text:0040B077 mov eax, edx
.text:0040B079 add ecx, 4
.text:0040B07C add eax, 0FFFFFFFFh
.text:0040B07F mov ebx, esi
.text:0040B081 adc ebx, 0FFFFFFFFh
.text:0040B084 and edx, eax
.text:0040B086 and esi, ebx
.text:0040B088 mov eax, edx
.text:0040B08A or eax, esi
.text:0040B08C mov [ebp+var_10], edx
.text:0040B08F mov [ebp+var_C], esi
.text:0040B092 jnz short loc_40B050
.text:0040B094 mov ebx, [ebp+arg_4]
.text:0040B097
.text:0040B097 loc_40B097: ; CODE XREF: sub_40AC20+427j
.text:0040B097 mov eax, dword ptr [ebp+var_8]
.text:0040B09A mov edx, dword ptr [ebp+var_8+4]
.text:0040B09D mov esi, eax
.text:0040B09F add esi, 0FFFFFFFFh
.text:0040B0A2 mov edi, edx
.text:0040B0A4 adc edi, 0FFFFFFFFh
.text:0040B0A7 and eax, esi
.text:0040B0A9 and edx, edi
.text:0040B0AB mov dword ptr [ebp+var_8], eax
.text:0040B0AE or eax, edx
.text:0040B0B0 mov dword ptr [ebp+var_8+4], edx
.text:0040B0B3 jnz loc_40AFC8
.text:0040B0B9
.text:0040B0B9 loc_40B0B9: ; CODE XREF: sub_40AC20+3A2j
.text:0040B0B9 mov eax, dword ptr qword_780ED8
.text:0040B0BE mov edx, dword ptr qword_780ED8+4
.text:0040B0C4 mov dword ptr [ebp+var_8], eax
.text:0040B0C7 or eax, edx
.text:0040B0C9 mov dword ptr [ebp+var_8+4], edx
.text:0040B0CC jz loc_40B21C
.text:0040B0D2
.text:0040B0D2 loc_40B0D2: ; CODE XREF: sub_40AC20+5F6j
.text:0040B0D2 mov eax, dword ptr [ebp+var_8]
.text:0040B0D5 test eax, eax
.text:0040B0D7 jz short loc_40B0DE
.text:0040B0D9 bsf eax, eax
.text:0040B0DC jmp short loc_40B0E5
.text:0040B0DE ; ---------------------------------------------------------------------------
.text:0040B0DE
.text:0040B0DE loc_40B0DE: ; CODE XREF: sub_40AC20+4B7j
.text:0040B0DE bsf eax, dword ptr [ebp+var_8+4]
.text:0040B0E2 add eax, 20h
.text:0040B0E5
.text:0040B0E5 loc_40B0E5: ; CODE XREF: sub_40AC20+4BCj
.text:0040B0E5 movd xmm1, dword_73F320[eax*4]
.text:0040B0EE movq xmm0, qword_780EE8
.text:0040B0F6 psrlq xmm0, xmm1
.text:0040B0FA movd xmm1, dword_73F220[eax*4]
.text:0040B103 movd esi, xmm0
.text:0040B107 movq xmm0, qword_780EE0
.text:0040B10F and esi, 3Fh
.text:0040B112 psrlq xmm0, xmm1
.text:0040B116 movd xmm1, dword_73F120[eax*4]
.text:0040B11F mov edi, eax
.text:0040B121 shl edi, 6
.text:0040B124 add esi, edi
.text:0040B126 mov edx, dword_733C80[esi*8]
.text:0040B12D mov esi, dword_733C84[esi*8]
.text:0040B134 movd ebx, xmm0
.text:0040B138 movq xmm0, qword_780EF8
.text:0040B140 and ebx, 3Fh
.text:0040B143 add ebx, edi
.text:0040B145 or edx, dword_72BC80[ebx*8]
.text:0040B14C or esi, dword_72BC84[ebx*8]
.text:0040B153 psrlq xmm0, xmm1
.text:0040B157 movd xmm1, dword_73F020[eax*4]
.text:0040B160 movd ebx, xmm0
.text:0040B164 movq xmm0, qword_780EF0
.text:0040B16C and ebx, 3Fh
.text:0040B16F add ebx, edi
.text:0040B171 or edx, dword_723C80[ebx*8]
.text:0040B178 or esi, dword_723C84[ebx*8]
.text:0040B17F psrlq xmm0, xmm1
.text:0040B183 movd ebx, xmm0
.text:0040B187 and ebx, 3Fh
.text:0040B18A add ebx, edi
.text:0040B18C or edx, dword_71BC80[ebx*8]
.text:0040B193 or esi, dword_71BC84[ebx*8]
.text:0040B19A and edx, [ebp+arg_0]
.text:0040B19D mov ebx, [ebp+arg_4]
.text:0040B1A0 and esi, ebx
.text:0040B1A2 mov edi, edx
.text:0040B1A4 or edi, esi
.text:0040B1A6 mov [ebp+var_10], edx
.text:0040B1A9 mov [ebp+var_C], esi
.text:0040B1AC jz short loc_40B1FA
.text:0040B1AE mov edi, eax
.text:0040B1B0 shl edi, 6
.text:0040B1B3
.text:0040B1B3 loc_40B1B3: ; CODE XREF: sub_40AC20+5D5j
.text:0040B1B3 mov eax, [ebp+var_10]
.text:0040B1B6 test eax, eax
.text:0040B1B8 jz short loc_40B1BF
.text:0040B1BA bsf eax, eax
.text:0040B1BD jmp short loc_40B1C6
.text:0040B1BF ; ---------------------------------------------------------------------------
.text:0040B1BF
.text:0040B1BF loc_40B1BF: ; CODE XREF: sub_40AC20+598j
.text:0040B1BF bsf eax, [ebp+var_C]
.text:0040B1C3 add eax, 20h
.text:0040B1C6
.text:0040B1C6 loc_40B1C6: ; CODE XREF: sub_40AC20+59Dj
.text:0040B1C6 movzx ebx, byte_780E20[eax]
.text:0040B1CD mov ebx, dword_449318[ebx*4]
.text:0040B1D4 or ebx, edi
.text:0040B1D6 or ebx, eax
.text:0040B1D8 mov [ecx], ebx
.text:0040B1DA mov eax, edx
.text:0040B1DC add ecx, 4
.text:0040B1DF add eax, 0FFFFFFFFh
.text:0040B1E2 mov ebx, esi
.text:0040B1E4 adc ebx, 0FFFFFFFFh
.text:0040B1E7 and edx, eax
.text:0040B1E9 and esi, ebx
.text:0040B1EB mov eax, edx
.text:0040B1ED or eax, esi
.text:0040B1EF mov [ebp+var_10], edx
.text:0040B1F2 mov [ebp+var_C], esi
.text:0040B1F5 jnz short loc_40B1B3
.text:0040B1F7 mov ebx, [ebp+arg_4]
.text:0040B1FA
.text:0040B1FA loc_40B1FA: ; CODE XREF: sub_40AC20+58Cj
.text:0040B1FA mov eax, dword ptr [ebp+var_8]
.text:0040B1FD mov edx, dword ptr [ebp+var_8+4]
.text:0040B200 mov esi, eax
.text:0040B202 add esi, 0FFFFFFFFh
.text:0040B205 mov edi, edx
.text:0040B207 adc edi, 0FFFFFFFFh
.text:0040B20A and eax, esi
.text:0040B20C and edx, edi
.text:0040B20E mov dword ptr [ebp+var_8], eax
.text:0040B211 or eax, edx
.text:0040B213 mov dword ptr [ebp+var_8+4], edx
.text:0040B216 jnz loc_40B0D2
.text:0040B21C
.text:0040B21C loc_40B21C: ; CODE XREF: sub_40AC20+4ACj
.text:0040B21C mov eax, dword_780EB8
.text:0040B221 test eax, eax
.text:0040B223 jz short loc_40B22A
.text:0040B225 bsf eax, eax
.text:0040B228 jmp short loc_40B234
.text:0040B22A ; ---------------------------------------------------------------------------
.text:0040B22A
.text:0040B22A loc_40B22A: ; CODE XREF: sub_40AC20+603j
.text:0040B22A bsf eax, dword_780EBC
.text:0040B231 add eax, 20h
.text:0040B234
.text:0040B234 loc_40B234: ; CODE XREF: sub_40AC20+608j
.text:0040B234 mov edx, dword_73C700[eax*8]
.text:0040B23B and edx, [ebp+arg_0]
.text:0040B23E mov esi, dword_73C704[eax*8]
.text:0040B245 and esi, ebx
.text:0040B247 mov edi, edx
.text:0040B249 or edi, esi
.text:0040B24B mov [ebp+var_10], edx
.text:0040B24E mov [ebp+var_C], esi
.text:0040B251 jz short loc_40B29C
.text:0040B253 mov edi, eax
.text:0040B255 shl edi, 6
.text:0040B258
.text:0040B258 loc_40B258: ; CODE XREF: sub_40AC20+67Aj
.text:0040B258 mov eax, [ebp+var_10]
.text:0040B25B test eax, eax
.text:0040B25D jz short loc_40B264
.text:0040B25F bsf eax, eax
.text:0040B262 jmp short loc_40B26B
.text:0040B264 ; ---------------------------------------------------------------------------
.text:0040B264
.text:0040B264 loc_40B264: ; CODE XREF: sub_40AC20+63Dj
.text:0040B264 bsf eax, [ebp+var_C]
.text:0040B268 add eax, 20h
.text:0040B26B
.text:0040B26B loc_40B26B: ; CODE XREF: sub_40AC20+642j
.text:0040B26B movzx ebx, byte_780E20[eax]
.text:0040B272 mov ebx, dword_449218[ebx*4]
.text:0040B279 or ebx, edi
.text:0040B27B or ebx, eax
.text:0040B27D mov [ecx], ebx
.text:0040B27F mov eax, edx
.text:0040B281 add ecx, 4
.text:0040B284 add eax, 0FFFFFFFFh
.text:0040B287 mov ebx, esi
.text:0040B289 adc ebx, 0FFFFFFFFh
.text:0040B28C and edx, eax
.text:0040B28E and esi, ebx
.text:0040B290 mov eax, edx
.text:0040B292 or eax, esi
.text:0040B294 mov [ebp+var_10], edx
.text:0040B297 mov [ebp+var_C], esi
.text:0040B29A jnz short loc_40B258
.text:0040B29C
.text:0040B29C loc_40B29C: ; CODE XREF: sub_40AC20+BFj
.text:0040B29C ; sub_40AC20+631j
.text:0040B29C mov eax, dword ptr qword_780EA8
.text:0040B2A1 and eax, 0FF00h
.text:0040B2A6 xor edx, edx
.text:0040B2A8 mov dword ptr [ebp+var_8], eax
.text:0040B2AB or eax, edx
.text:0040B2AD mov dword ptr [ebp+var_8+4], edx
.text:0040B2B0 jz loc_40B44C
.text:0040B2B6
.text:0040B2B6 loc_40B2B6: ; CODE XREF: sub_40AC20+826j
.text:0040B2B6 mov eax, dword ptr [ebp+var_8]
.text:0040B2B9 test eax, eax
.text:0040B2BB jz short loc_40B2C2
.text:0040B2BD bsf eax, eax
.text:0040B2C0 jmp short loc_40B2C9
.text:0040B2C2 ; ---------------------------------------------------------------------------
.text:0040B2C2
.text:0040B2C2 loc_40B2C2: ; CODE XREF: sub_40AC20+69Bj
.text:0040B2C2 bsf eax, dword ptr [ebp+var_8+4]
.text:0040B2C6 add eax, 20h
.text:0040B2C9
.text:0040B2C9 loc_40B2C9: ; CODE XREF: sub_40AC20+6A0j
.text:0040B2C9 lea esi, [eax-8]
.text:0040B2CC cmp byte_780E20[esi], 0
.text:0040B2D3 jnz short loc_40B317
.text:0040B2D5 mov edx, eax
.text:0040B2D7 or edx, 0FF6001C0h
.text:0040B2DD shl edx, 6
.text:0040B2E0 or edx, esi
.text:0040B2E2 mov [ecx], edx
.text:0040B2E4 mov edx, dword_5F7720[esi*8]
.text:0040B2EB mov edi, dword_5F7724[esi*8]
.text:0040B2F2 and edx, dword_780E78
.text:0040B2F8 and edi, dword_780E7C
.text:0040B2FE add ecx, 4
.text:0040B301 or edx, edi
.text:0040B303 jz short loc_40B317
.text:0040B305 mov edx, eax
.text:0040B307 or edx, 0FF080100h
.text:0040B30D shl edx, 6
.text:0040B310 or edx, esi
.text:0040B312 mov [ecx], edx
.text:0040B314 add ecx, 4
.text:0040B317
.text:0040B317 loc_40B317: ; CODE XREF: sub_40AC20+6B3j
.text:0040B317 ; sub_40AC20+6E3j
.text:0040B317 lea esi, [eax-9]
.text:0040B31A cmp eax, 8
.text:0040B31D jz loc_40B3A2
.text:0040B323 mov edx, dword_5F5FC0[esi*8]
.text:0040B32A mov edi, dword_5F5FC4[esi*8]
.text:0040B331 and edx, [ebp+arg_0]
.text:0040B334 and edi, [ebp+arg_4]
.text:0040B337 or edx, edi
.text:0040B339 jz short loc_40B3A2
.text:0040B33B movzx ebx, byte_780E20[esi]
.text:0040B342 mov edi, dword_449198[ebx*4]
.text:0040B349 mov edx, eax
.text:0040B34B or edx, 1C0h
.text:0040B351 shl edx, 6
.text:0040B354 add edi, 28000000h
.text:0040B35A or edx, edi
.text:0040B35C or edx, esi
.text:0040B35E mov [ecx], edx
.text:0040B360 mov edx, dword_5F7720[esi*8]
.text:0040B367 mov edi, dword_5F7724[esi*8]
.text:0040B36E and edx, dword_780E78
.text:0040B374 and edi, dword_780E7C
.text:0040B37A add ecx, 4
.text:0040B37D or edx, edi
.text:0040B37F jz short loc_40B3A2
.text:0040B381 mov edi, dword_449198[ebx*4]
.text:0040B388 mov edx, eax
.text:0040B38A or edx, 100h
.text:0040B390 shl edx, 6
.text:0040B393 add edi, 1A000000h
.text:0040B399 or edx, edi
.text:0040B39B or edx, esi
.text:0040B39D mov [ecx], edx
.text:0040B39F add ecx, 4
.text:0040B3A2
.text:0040B3A2 loc_40B3A2: ; CODE XREF: sub_40AC20+6FDj
.text:0040B3A2 ; sub_40AC20+719j ...
.text:0040B3A2 lea esi, [eax-7]
.text:0040B3A5 cmp eax, 0Fh
.text:0040B3A8 jz loc_40B42A
.text:0040B3AE mov edx, dword_5F5FC0[esi*8]
.text:0040B3B5 mov edi, dword_5F5FC4[esi*8]
.text:0040B3BC and edx, [ebp+arg_0]
.text:0040B3BF and edi, [ebp+arg_4]
.text:0040B3C2 or edx, edi
.text:0040B3C4 jz short loc_40B42A
.text:0040B3C6 movzx ebx, byte_780E20[esi]
.text:0040B3CD mov edi, dword_449198[ebx*4]
.text:0040B3D4 mov edx, eax
.text:0040B3D6 or edx, 1C0h
.text:0040B3DC shl edx, 6
.text:0040B3DF add edi, 28000000h
.text:0040B3E5 or edx, edi
.text:0040B3E7 or edx, esi
.text:0040B3E9 mov [ecx], edx
.text:0040B3EB mov edx, dword_5F7720[esi*8]
.text:0040B3F2 mov edi, dword_5F7724[esi*8]
.text:0040B3F9 and edx, dword_780E78
.text:0040B3FF and edi, dword_780E7C
.text:0040B405 add ecx, 4
.text:0040B408 or edx, edi
.text:0040B40A jz short loc_40B42A
.text:0040B40C mov edx, dword_449198[ebx*4]
.text:0040B413 or eax, 100h
.text:0040B418 shl eax, 6
.text:0040B41B add edx, 1A000000h
.text:0040B421 or eax, edx
.text:0040B423 or eax, esi
.text:0040B425 mov [ecx], eax
.text:0040B427 add ecx, 4
.text:0040B42A
.text:0040B42A loc_40B42A: ; CODE XREF: sub_40AC20+788j
.text:0040B42A ; sub_40AC20+7A4j ...
.text:0040B42A mov eax, dword ptr [ebp+var_8]
.text:0040B42D mov edx, dword ptr [ebp+var_8+4]
.text:0040B430 mov esi, eax
.text:0040B432 add esi, 0FFFFFFFFh
.text:0040B435 mov edi, edx
.text:0040B437 adc edi, 0FFFFFFFFh
.text:0040B43A and eax, esi
.text:0040B43C and edx, edi
.text:0040B43E mov dword ptr [ebp+var_8], eax
.text:0040B441 or eax, edx
.text:0040B443 mov dword ptr [ebp+var_8+4], edx
.text:0040B446 jnz loc_40B2B6
.text:0040B44C
.text:0040B44C loc_40B44C: ; CODE XREF: sub_40AC20+690j
.text:0040B44C pop edi
.text:0040B44D pop esi
.text:0040B44E mov eax, ecx
.text:0040B450 mov dword ptr [ecx], 0
.text:0040B456 pop ebx
.text:0040B457 mov esp, ebp
.text:0040B459 pop ebp
.text:0040B45A retn
.text:0040B45A sub_40AC20 endp
build 2010-05-15
by Robert Houdart*
Code: Select all
.text:0040A6E0 sub_40A6E0 proc near ; CODE XREF: sub_411C80+5Bp
.text:0040A6E0 ; sub_411C80+24Dp ...
.text:0040A6E0
.text:0040A6E0 var_18 = dword ptr -18h
.text:0040A6E0 var_C = dword ptr -0Ch
.text:0040A6E0 var_8 = dword ptr -8
.text:0040A6E0 arg_0 = dword ptr 4
.text:0040A6E0 arg_4 = dword ptr 8
.text:0040A6E0
.text:0040A6E0 mov ecx, dword_5854F0
.text:0040A6E6 movzx ecx, byte ptr [ecx+1Ah]
.text:0040A6EA sub esp, 18h
.text:0040A6ED push ebx
.text:0040A6EE push ebp
.text:0040A6EF push esi
.text:0040A6F0 mov esi, dword ptr qword_585468
.text:0040A6F6 push edi
.text:0040A6F7 test ecx, ecx
.text:0040A6F9 jz loc_40A797
.text:0040A6FF mov edi, dword ptr qword_585468+4
.text:0040A705 mov edx, esi
.text:0040A707 and edx, 0FEFEFEFEh
.text:0040A70D and edi, 0FEFEFEh
.text:0040A713 shld edi, edx, 7
.text:0040A717 and edi, dword ptr (qword_828A78+4)[ecx*8]
.text:0040A71E shl edx, 7
.text:0040A721 and edx, dword ptr qword_828A78[ecx*8]
.text:0040A728 or edx, edi
.text:0040A72A jz short loc_40A74B
.text:0040A72C lea edx, [ecx-7]
.text:0040A72F shl edx, 6
.text:0040A732 add edx, ecx
.text:0040A734 or edx, dword_9313F4
.text:0040A73A or edx, 3000h
.text:0040A740 mov [eax], edx
.text:0040A742 mov esi, dword ptr qword_585468
.text:0040A748 add eax, 4
.text:0040A74B
.text:0040A74B loc_40A74B: ; CODE XREF: sub_40A6E0+4Aj
.text:0040A74B mov edi, dword ptr qword_585468+4
.text:0040A751 mov edx, esi
.text:0040A753 and edx, 7F7F7F7Fh
.text:0040A759 and edi, 0FFFF7F7Fh
.text:0040A75F shld edi, edx, 9
.text:0040A763 and edi, dword ptr (qword_828A78+4)[ecx*8]
.text:0040A76A shl edx, 9
.text:0040A76D and edx, dword ptr qword_828A78[ecx*8]
.text:0040A774 or edx, edi
.text:0040A776 jz short loc_40A797
.text:0040A778 lea edx, [ecx-9]
.text:0040A77B shl edx, 6
.text:0040A77E add edx, ecx
.text:0040A780 or edx, dword_9313F4
.text:0040A786 or edx, 3000h
.text:0040A78C mov [eax], edx
.text:0040A78E mov esi, dword ptr qword_585468
.text:0040A794 add eax, 4
.text:0040A797
.text:0040A797 loc_40A797: ; CODE XREF: sub_40A6E0+19j
.text:0040A797 ; sub_40A6E0+96j
.text:0040A797 mov edx, dword_5854F0
.text:0040A79D mov ecx, [edx+20h]
.text:0040A7A0 mov edx, [edx+24h]
.text:0040A7A3 and ecx, [esp+28h+arg_0]
.text:0040A7A7 and edx, [esp+28h+arg_4]
.text:0040A7AB or ecx, edx
.text:0040A7AD jz loc_40AC0C
.text:0040A7B3 mov edi, dword ptr qword_585468+4
.text:0040A7B9 mov ebp, [esp+28h+arg_0]
.text:0040A7BD mov ecx, esi
.text:0040A7BF and ecx, 0FEFEFEFEh
.text:0040A7C5 and edi, 0FEFEh
.text:0040A7CB shld edi, ecx, 7
.text:0040A7CF shl ecx, 7
.text:0040A7D2 mov edx, ecx
.text:0040A7D4 mov ecx, edi
.text:0040A7D6 and ecx, [esp+28h+arg_4]
.text:0040A7DA and edx, ebp
.text:0040A7DC mov edi, edx
.text:0040A7DE or edi, ecx
.text:0040A7E0 jz short loc_40A826
.text:0040A7E2
.text:0040A7E2 loc_40A7E2: ; CODE XREF: sub_40A6E0+13Ej
.text:0040A7E2 bsf esi, edx
.text:0040A7E5 jnz short loc_40A7F1
.text:0040A7E7 bsf esi, ecx
.text:0040A7EA mov [esp+28h+var_18], esi
.text:0040A7EE add esi, 20h
.text:0040A7F1
.text:0040A7F1 loc_40A7F1: ; CODE XREF: sub_40A6E0+105j
.text:0040A7F1 mov edi, edx
.text:0040A7F3 add edi, 0FFFFFFFFh
.text:0040A7F6 mov ebx, ecx
.text:0040A7F8 adc ebx, 0FFFFFFFFh
.text:0040A7FB and ecx, ebx
.text:0040A7FD lea ebx, [esi-7]
.text:0040A800 and edx, edi
.text:0040A802 movzx edi, byte_585380[esi]
.text:0040A809 shl ebx, 6
.text:0040A80C add ebx, esi
.text:0040A80E or ebx, dword_9313D0[edi*4]
.text:0040A815 mov esi, edx
.text:0040A817 mov [eax], ebx
.text:0040A819 add eax, 4
.text:0040A81C or esi, ecx
.text:0040A81E jnz short loc_40A7E2
.text:0040A820 mov esi, dword ptr qword_585468
.text:0040A826
.text:0040A826 loc_40A826: ; CODE XREF: sub_40A6E0+100j
.text:0040A826 mov ecx, dword ptr qword_585468+4
.text:0040A82C and esi, 7F7F7F7Fh
.text:0040A832 and ecx, 7F7Fh
.text:0040A838 shld ecx, esi, 9
.text:0040A83C and ecx, [esp+28h+arg_4]
.text:0040A840 shl esi, 9
.text:0040A843 mov edx, esi
.text:0040A845 and edx, ebp
.text:0040A847 mov esi, edx
.text:0040A849 or esi, ecx
.text:0040A84B jz short loc_40A88B
.text:0040A84D
.text:0040A84D loc_40A84D: ; CODE XREF: sub_40A6E0+1A9j
.text:0040A84D bsf esi, edx
.text:0040A850 jnz short loc_40A85C
.text:0040A852 bsf esi, ecx
.text:0040A855 mov [esp+28h+var_18], esi
.text:0040A859 add esi, 20h
.text:0040A85C
.text:0040A85C loc_40A85C: ; CODE XREF: sub_40A6E0+170j
.text:0040A85C mov edi, edx
.text:0040A85E add edi, 0FFFFFFFFh
.text:0040A861 mov ebx, ecx
.text:0040A863 adc ebx, 0FFFFFFFFh
.text:0040A866 and ecx, ebx
.text:0040A868 lea ebx, [esi-9]
.text:0040A86B and edx, edi
.text:0040A86D movzx edi, byte_585380[esi]
.text:0040A874 shl ebx, 6
.text:0040A877 add ebx, esi
.text:0040A879 or ebx, dword_9313D0[edi*4]
.text:0040A880 mov esi, edx
.text:0040A882 mov [eax], ebx
.text:0040A884 add eax, 4
.text:0040A887 or esi, ecx
.text:0040A889 jnz short loc_40A84D
.text:0040A88B
.text:0040A88B loc_40A88B: ; CODE XREF: sub_40A6E0+16Bj
.text:0040A88B cmp byte_585401, 0FFh
.text:0040A892 mov edi, offset byte_585401
.text:0040A897 jz short loc_40A90C
.text:0040A899 lea esp, [esp+0]
.text:0040A8A0
.text:0040A8A0 loc_40A8A0: ; CODE XREF: sub_40A6E0+22Aj
.text:0040A8A0 movzx esi, byte ptr [edi]
.text:0040A8A3 mov edx, dword_8F2178[esi*8]
.text:0040A8AA mov ecx, dword_8F217C[esi*8]
.text:0040A8B1 and ecx, [esp+28h+arg_4]
.text:0040A8B5 and edx, ebp
.text:0040A8B7 inc edi
.text:0040A8B8 mov ebx, edx
.text:0040A8BA or ebx, ecx
.text:0040A8BC mov [esp+28h+var_C], edi
.text:0040A8C0 jz short loc_40A907
.text:0040A8C2 shl esi, 6
.text:0040A8C5 mov edi, esi
.text:0040A8C7
.text:0040A8C7 loc_40A8C7: ; CODE XREF: sub_40A6E0+21Dj
.text:0040A8C7 bsf esi, edx
.text:0040A8CA jnz short loc_40A8D6
.text:0040A8CC bsf esi, ecx
.text:0040A8CF mov [esp+28h+var_18], esi
.text:0040A8D3 add esi, 20h
.text:0040A8D6
.text:0040A8D6 loc_40A8D6: ; CODE XREF: sub_40A6E0+1EAj
.text:0040A8D6 mov ebx, edx
.text:0040A8D8 add ebx, 0FFFFFFFFh
.text:0040A8DB mov ebp, ecx
.text:0040A8DD adc ebp, 0FFFFFFFFh
.text:0040A8E0 and edx, ebx
.text:0040A8E2 movzx ebx, byte_585380[esi]
.text:0040A8E9 add esi, edi
.text:0040A8EB or esi, dword_931410[ebx*4]
.text:0040A8F2 and ecx, ebp
.text:0040A8F4 mov [eax], esi
.text:0040A8F6 mov esi, edx
.text:0040A8F8 add eax, 4
.text:0040A8FB or esi, ecx
.text:0040A8FD jnz short loc_40A8C7
.text:0040A8FF mov ebp, [esp+28h+arg_0]
.text:0040A903 mov edi, [esp+28h+var_C]
.text:0040A907
.text:0040A907 loc_40A907: ; CODE XREF: sub_40A6E0+1E0j
.text:0040A907 cmp byte ptr [edi], 0FFh
.text:0040A90A jnz short loc_40A8A0
.text:0040A90C
.text:0040A90C loc_40A90C: ; CODE XREF: sub_40A6E0+1B7j
.text:0040A90C cmp byte_58540C, 0FFh
.text:0040A913 mov ebx, offset byte_58540C
.text:0040A918 jz loc_40A9CC
.text:0040A91E mov edi, edi
.text:0040A920
.text:0040A920 loc_40A920: ; CODE XREF: sub_40A6E0+2E6j
.text:0040A920 movzx esi, byte ptr [ebx]
.text:0040A923 mov ecx, dword_926270[esi*8]
.text:0040A92A and ecx, dword ptr qword_5854E0
.text:0040A930 mov edx, dword_926274[esi*8]
.text:0040A937 and edx, dword ptr qword_5854E0+4
.text:0040A93D mov edi, ds:dword_438B00[esi*8]
.text:0040A944 imul edx, ds:dword_438B04[esi*8]
.text:0040A94C imul edi, ecx
.text:0040A94F mov ecx, ds:dword_438F00[esi*4]
.text:0040A956 xor edx, edi
.text:0040A958 shr edx, cl
.text:0040A95A inc ebx
.text:0040A95B add edx, dword_8F2378[esi*4]
.text:0040A962 mov edi, dword_926D00[edx*8]
.text:0040A969 mov ecx, dword_926D04[edx*8]
.text:0040A970 and ecx, [esp+28h+arg_4]
.text:0040A974 and edi, ebp
.text:0040A976 mov edx, edi
.text:0040A978 or edx, ecx
.text:0040A97A jz short loc_40A9C3
.text:0040A97C shl esi, 6
.text:0040A97F mov [esp+28h+var_18], esi
.text:0040A983
.text:0040A983 loc_40A983: ; CODE XREF: sub_40A6E0+2DDj
.text:0040A983 bsf edx, edi
.text:0040A986 jnz short loc_40A992
.text:0040A988 bsf edx, ecx
.text:0040A98B mov [esp+28h+var_C], edx
.text:0040A98F add edx, 20h
.text:0040A992
.text:0040A992 loc_40A992: ; CODE XREF: sub_40A6E0+2A6j
.text:0040A992 mov esi, edi
.text:0040A994 add esi, 0FFFFFFFFh
.text:0040A997 mov ebp, ecx
.text:0040A999 adc ebp, 0FFFFFFFFh
.text:0040A99C and ecx, ebp
.text:0040A99E mov ebp, [esp+28h+var_18]
.text:0040A9A2 and edi, esi
.text:0040A9A4 movzx esi, byte_585380[edx]
.text:0040A9AB add ebp, edx
.text:0040A9AD or ebp, dword_931490[esi*4]
.text:0040A9B4 mov edx, edi
.text:0040A9B6 mov [eax], ebp
.text:0040A9B8 add eax, 4
.text:0040A9BB or edx, ecx
.text:0040A9BD jnz short loc_40A983
.text:0040A9BF mov ebp, [esp+28h+arg_0]
.text:0040A9C3
.text:0040A9C3 loc_40A9C3: ; CODE XREF: sub_40A6E0+29Aj
.text:0040A9C3 cmp byte ptr [ebx], 0FFh
.text:0040A9C6 jnz loc_40A920
.text:0040A9CC
.text:0040A9CC loc_40A9CC: ; CODE XREF: sub_40A6E0+238j
.text:0040A9CC cmp byte_585417, 0FFh
.text:0040A9D3 mov ebx, offset byte_585417
.text:0040A9D8 jz loc_40AA8C
.text:0040A9DE mov edi, edi
.text:0040A9E0
.text:0040A9E0 loc_40A9E0: ; CODE XREF: sub_40A6E0+3A6j
.text:0040A9E0 movzx esi, byte ptr [ebx]
.text:0040A9E3 mov ecx, dword_829CB8[esi*8]
.text:0040A9EA and ecx, dword ptr qword_5854E0
.text:0040A9F0 mov edx, dword_829CBC[esi*8]
.text:0040A9F7 and edx, dword ptr qword_5854E0+4
.text:0040A9FD mov edi, ds:dword_438D00[esi*8]
.text:0040AA04 imul edx, ds:dword_438D04[esi*8]
.text:0040AA0C imul edi, ecx
.text:0040AA0F mov ecx, ds:dword_439000[esi*4]
.text:0040AA16 xor edx, edi
.text:0040AA18 shr edx, cl
.text:0040AA1A inc ebx
.text:0040AA1B add edx, dword_8FBB68[esi*4]
.text:0040AA22 mov edi, dword_829EF8[edx*8]
.text:0040AA29 mov ecx, dword_829EFC[edx*8]
.text:0040AA30 and ecx, [esp+28h+arg_4]
.text:0040AA34 and edi, ebp
.text:0040AA36 mov edx, edi
.text:0040AA38 or edx, ecx
.text:0040AA3A jz short loc_40AA83
.text:0040AA3C shl esi, 6
.text:0040AA3F mov [esp+28h+var_18], esi
.text:0040AA43
.text:0040AA43 loc_40AA43: ; CODE XREF: sub_40A6E0+39Dj
.text:0040AA43 bsf edx, edi
.text:0040AA46 jnz short loc_40AA52
.text:0040AA48 bsf edx, ecx
.text:0040AA4B mov [esp+28h+var_C], edx
.text:0040AA4F add edx, 20h
.text:0040AA52
.text:0040AA52 loc_40AA52: ; CODE XREF: sub_40A6E0+366j
.text:0040AA52 mov esi, edi
.text:0040AA54 add esi, 0FFFFFFFFh
.text:0040AA57 mov ebp, ecx
.text:0040AA59 adc ebp, 0FFFFFFFFh
.text:0040AA5C and ecx, ebp
.text:0040AA5E mov ebp, [esp+28h+var_18]
.text:0040AA62 and edi, esi
.text:0040AA64 movzx esi, byte_585380[edx]
.text:0040AA6B add ebp, edx
.text:0040AA6D or ebp, dword_931510[esi*4]
.text:0040AA74 mov edx, edi
.text:0040AA76 mov [eax], ebp
.text:0040AA78 add eax, 4
.text:0040AA7B or edx, ecx
.text:0040AA7D jnz short loc_40AA43
.text:0040AA7F mov ebp, [esp+28h+arg_0]
.text:0040AA83
.text:0040AA83 loc_40AA83: ; CODE XREF: sub_40A6E0+35Aj
.text:0040AA83 cmp byte ptr [ebx], 0FFh
.text:0040AA86 jnz loc_40A9E0
.text:0040AA8C
.text:0040AA8C loc_40AA8C: ; CODE XREF: sub_40A6E0+2F8j
.text:0040AA8C cmp byte_585422, 0FFh
.text:0040AA93 mov ebx, offset byte_585422
.text:0040AA98 jz loc_40AB9C
.text:0040AA9E
.text:0040AA9E loc_40AA9E: ; CODE XREF: sub_40A6E0+4B6j
.text:0040AA9E movzx edx, byte ptr [ebx]
.text:0040AAA1 mov ecx, dword_926270[edx*8]
.text:0040AAA8 and ecx, dword ptr qword_5854E0
.text:0040AAAE mov edi, dword_926274[edx*8]
.text:0040AAB5 and edi, dword ptr qword_5854E0+4
.text:0040AABB mov ebp, dword_829CB8[edx*8]
.text:0040AAC2 imul edi, ds:dword_438B04[edx*8]
.text:0040AACA and ebp, dword ptr qword_5854E0
.text:0040AAD0 mov esi, dword_829CBC[edx*8]
.text:0040AAD7 and esi, dword ptr qword_5854E0+4
.text:0040AADD mov [esp+28h+var_8], ecx
.text:0040AAE1 mov ecx, ds:dword_438B00[edx*8]
.text:0040AAE8 imul esi, ds:dword_438D04[edx*8]
.text:0040AAF0 imul ecx, [esp+28h+var_8]
.text:0040AAF5 xor edi, ecx
.text:0040AAF7 mov ecx, ds:dword_438F00[edx*4]
.text:0040AAFE shr edi, cl
.text:0040AB00 mov ecx, ds:dword_438D00[edx*8]
.text:0040AB07 imul ecx, ebp
.text:0040AB0A add edi, dword_8F2378[edx*4]
.text:0040AB11 xor esi, ecx
.text:0040AB13 mov ecx, ds:dword_439000[edx*4]
.text:0040AB1A mov ebp, dword_926D00[edi*8]
.text:0040AB21 shr esi, cl
.text:0040AB23 mov ecx, dword_926D04[edi*8]
.text:0040AB2A inc ebx
.text:0040AB2B add esi, dword_8FBB68[edx*4]
.text:0040AB32 or ebp, dword_829EF8[esi*8]
.text:0040AB39 or ecx, dword_829EFC[esi*8]
.text:0040AB40 and ebp, [esp+28h+arg_0]
.text:0040AB44 and ecx, [esp+28h+arg_4]
.text:0040AB48 mov esi, ebp
.text:0040AB4A or esi, ecx
.text:0040AB4C jz short loc_40AB93
.text:0040AB4E shl edx, 6
.text:0040AB51 mov [esp+28h+var_18], edx
.text:0040AB55
.text:0040AB55 loc_40AB55: ; CODE XREF: sub_40A6E0+4B1j
.text:0040AB55 bsf esi, ebp
.text:0040AB58 jnz short loc_40AB66
.text:0040AB5A bsf edx, ecx
.text:0040AB5D mov esi, edx
.text:0040AB5F mov [esp+28h+var_C], edx
.text:0040AB63 add esi, 20h
.text:0040AB66
.text:0040AB66 loc_40AB66: ; CODE XREF: sub_40A6E0+478j
.text:0040AB66 mov edx, ebp
.text:0040AB68 add edx, 0FFFFFFFFh
.text:0040AB6B mov edi, ecx
.text:0040AB6D adc edi, 0FFFFFFFFh
.text:0040AB70 and ecx, edi
.text:0040AB72 mov edi, [esp+28h+var_18]
.text:0040AB76 and ebp, edx
.text:0040AB78 movzx edx, byte_585380[esi]
.text:0040AB7F add edi, esi
.text:0040AB81 or edi, dword_931550[edx*4]
.text:0040AB88 mov edx, ebp
.text:0040AB8A mov [eax], edi
.text:0040AB8C add eax, 4
.text:0040AB8F or edx, ecx
.text:0040AB91 jnz short loc_40AB55
.text:0040AB93
.text:0040AB93 loc_40AB93: ; CODE XREF: sub_40A6E0+46Cj
.text:0040AB93 cmp byte ptr [ebx], 0FFh
.text:0040AB96 jnz loc_40AA9E
.text:0040AB9C
.text:0040AB9C loc_40AB9C: ; CODE XREF: sub_40A6E0+3B8j
.text:0040AB9C mov ecx, dword_5854F0
.text:0040ABA2 mov edx, [ecx+28h]
.text:0040ABA5 movzx esi, byte_5854E8
.text:0040ABAC mov ecx, [ecx+2Ch]
.text:0040ABAF not edx
.text:0040ABB1 and edx, dword_926678[esi*8]
.text:0040ABB8 not ecx
.text:0040ABBA and ecx, dword_92667C[esi*8]
.text:0040ABC1 and edx, [esp+28h+arg_0]
.text:0040ABC5 and ecx, [esp+28h+arg_4]
.text:0040ABC9 mov edi, edx
.text:0040ABCB or edi, ecx
.text:0040ABCD jz short loc_40AC0C
.text:0040ABCF shl esi, 6
.text:0040ABD2 mov edi, esi
.text:0040ABD4
.text:0040ABD4 loc_40ABD4: ; CODE XREF: sub_40A6E0+52Aj
.text:0040ABD4 bsf esi, edx
.text:0040ABD7 jnz short loc_40ABE3
.text:0040ABD9 bsf esi, ecx
.text:0040ABDC mov [esp+28h+var_C], esi
.text:0040ABE0 add esi, 20h
.text:0040ABE3
.text:0040ABE3 loc_40ABE3: ; CODE XREF: sub_40A6E0+4F7j
.text:0040ABE3 mov ebx, edx
.text:0040ABE5 add ebx, 0FFFFFFFFh
.text:0040ABE8 mov ebp, ecx
.text:0040ABEA adc ebp, 0FFFFFFFFh
.text:0040ABED and edx, ebx
.text:0040ABEF movzx ebx, byte_585380[esi]
.text:0040ABF6 add esi, edi
.text:0040ABF8 or esi, dword_931450[ebx*4]
.text:0040ABFF and ecx, ebp
.text:0040AC01 mov [eax], esi
.text:0040AC03 mov esi, edx
.text:0040AC05 add eax, 4
.text:0040AC08 or esi, ecx
.text:0040AC0A jnz short loc_40ABD4
.text:0040AC0C
.text:0040AC0C loc_40AC0C: ; CODE XREF: sub_40A6E0+CDj
.text:0040AC0C ; sub_40A6E0+4EDj
.text:0040AC0C mov ebx, dword ptr qword_585468+4
.text:0040AC12 xor ebp, ebp
.text:0040AC14 and ebx, 0FF0000h
.text:0040AC1A mov ecx, ebp
.text:0040AC1C or ecx, ebx
.text:0040AC1E jz loc_40ADB1
.text:0040AC24
.text:0040AC24 loc_40AC24: ; CODE XREF: sub_40A6E0+6C1j
.text:0040AC24 bsf ecx, ebp
.text:0040AC27 jnz short loc_40AC35
.text:0040AC29 bsf edx, ebx
.text:0040AC2C mov ecx, edx
.text:0040AC2E mov [esp+28h+var_C], edx
.text:0040AC32 add ecx, 20h
.text:0040AC35
.text:0040AC35 loc_40AC35: ; CODE XREF: sub_40A6E0+547j
.text:0040AC35 mov edx, ebp
.text:0040AC37 add edx, 0FFFFFFFFh
.text:0040AC3A mov esi, ebx
.text:0040AC3C adc esi, 0FFFFFFFFh
.text:0040AC3F and ebp, edx
.text:0040AC41 and ebx, esi
.text:0040AC43 cmp byte ptr dword_585388[ecx], 0
.text:0040AC4A mov [esp+28h+var_18], ebp
.text:0040AC4E jnz short loc_40AC8F
.text:0040AC50 mov edx, ecx
.text:0040AC52 shl edx, 6
.text:0040AC55 lea edi, [edx+ecx+8]
.text:0040AC59 mov edx, edi
.text:0040AC5B or edx, 0D8007000h
.text:0040AC61 mov [eax], edx
.text:0040AC63 mov edx, dword_8F21B8[ecx*8]
.text:0040AC6A mov esi, dword_8F21BC[ecx*8]
.text:0040AC71 and edx, dword ptr qword_5854B8
.text:0040AC77 and esi, dword ptr qword_5854B8+4
.text:0040AC7D add eax, 4
.text:0040AC80 or edx, esi
.text:0040AC82 jz short loc_40AC8F
.text:0040AC84 or edi, 0C2004000h
.text:0040AC8A mov [eax], edi
.text:0040AC8C add eax, 4
.text:0040AC8F
.text:0040AC8F loc_40AC8F: ; CODE XREF: sub_40A6E0+56Ej
.text:0040AC8F ; sub_40A6E0+5A2j
.text:0040AC8F cmp ecx, 30h
.text:0040AC92 jz loc_40AD18
.text:0040AC98 mov edx, dword ptr qword_828AB0[ecx*8]
.text:0040AC9F mov esi, dword ptr (qword_828AB0+4)[ecx*8]
.text:0040ACA6 and edx, [esp+28h+arg_0]
.text:0040ACAA and esi, [esp+28h+arg_4]
.text:0040ACAE or edx, esi
.text:0040ACB0 jz short loc_40AD18
.text:0040ACB2 movzx edi, byte_585387[ecx]
.text:0040ACB9 mov edx, ecx
.text:0040ACBB shl edx, 6
.text:0040ACBE lea ebp, [edx+ecx+7]
.text:0040ACC2 mov edx, dword_9313D0[edi*4]
.text:0040ACC9 add edx, 28000000h
.text:0040ACCF or edx, ebp
.text:0040ACD1 or edx, 7000h
.text:0040ACD7 mov [eax], edx
.text:0040ACD9 mov edx, dword_8F21B0[ecx*8]
.text:0040ACE0 mov esi, dword_8F21B4[ecx*8]
.text:0040ACE7 and edx, dword ptr qword_5854B8
.text:0040ACED and esi, dword ptr qword_5854B8+4
.text:0040ACF3 add eax, 4
.text:0040ACF6 or edx, esi
.text:0040ACF8 jz short loc_40AD14
.text:0040ACFA mov edx, dword_9313D0[edi*4]
.text:0040AD01 add edx, 1A000000h
.text:0040AD07 or edx, ebp
.text:0040AD09 or edx, 4000h
.text:0040AD0F mov [eax], edx
.text:0040AD11 add eax, 4
.text:0040AD14
.text:0040AD14 loc_40AD14: ; CODE XREF: sub_40A6E0+618j
.text:0040AD14 mov ebp, [esp+28h+var_18]
.text:0040AD18
.text:0040AD18 loc_40AD18: ; CODE XREF: sub_40A6E0+5B2j
.text:0040AD18 ; sub_40A6E0+5D0j
.text:0040AD18 cmp ecx, 37h
.text:0040AD1B jz loc_40AD9D
.text:0040AD21 mov edx, dword ptr qword_828AC0[ecx*8]
.text:0040AD28 mov esi, dword ptr (qword_828AC0+4)[ecx*8]
.text:0040AD2F and edx, [esp+28h+arg_0]
.text:0040AD33 and esi, [esp+28h+arg_4]
.text:0040AD37 or edx, esi
.text:0040AD39 jz short loc_40AD9D
.text:0040AD3B movzx esi, byte ptr (dword_585388+1)[ecx]
.text:0040AD42 mov edx, ecx
.text:0040AD44 shl edx, 6
.text:0040AD47 lea edi, [edx+ecx+9]
.text:0040AD4B mov edx, dword_9313D0[esi*4]
.text:0040AD52 add edx, 28000000h
.text:0040AD58 or edx, edi
.text:0040AD5A or edx, 7000h
.text:0040AD60 mov [eax], edx
.text:0040AD62 mov edx, dword_8F21C0[ecx*8]
.text:0040AD69 mov ecx, dword_8F21C4[ecx*8]
.text:0040AD70 and edx, dword ptr qword_5854B8
.text:0040AD76 and ecx, dword ptr qword_5854B8+4
.text:0040AD7C add eax, 4
.text:0040AD7F or edx, ecx
.text:0040AD81 jz short loc_40AD9D
.text:0040AD83 mov ecx, dword_9313D0[esi*4]
.text:0040AD8A add ecx, 1A000000h
.text:0040AD90 or ecx, edi
.text:0040AD92 or ecx, 4000h
.text:0040AD98 mov [eax], ecx
.text:0040AD9A add eax, 4
.text:0040AD9D
.text:0040AD9D loc_40AD9D: ; CODE XREF: sub_40A6E0+63Bj
.text:0040AD9D ; sub_40A6E0+659j ...
.text:0040AD9D mov edx, ebp
.text:0040AD9F or edx, ebx
.text:0040ADA1 jnz loc_40AC24
.text:0040ADA7 mov [eax], edx
.text:0040ADA9 pop edi
.text:0040ADAA pop esi
.text:0040ADAB pop ebp
.text:0040ADAC pop ebx
.text:0040ADAD add esp, 18h
.text:0040ADB0 retn
.text:0040ADB1 ; ---------------------------------------------------------------------------
.text:0040ADB1
.text:0040ADB1 loc_40ADB1: ; CODE XREF: sub_40A6E0+53Ej
.text:0040ADB1 pop edi
.text:0040ADB2 pop esi
.text:0040ADB3 mov [eax], ebp
.text:0040ADB5 pop ebp
.text:0040ADB6 pop ebx
.text:0040ADB7 add esp, 18h
.text:0040ADBA retn
.text:0040ADBA sub_40A6E0 endp
.text:0040ADBA
.text:0040ADBA ; ---------------------------------------------------------------------------
.text:0040ADBB align 10h
.text:0040ADC0
.text:0040ADC0 ; =============== S U B R O U T I N E =======================================
.text:0040ADC0
.text:0040ADC0
.text:0040ADC0 sub_40ADC0 proc near ; CODE XREF: sub_4120A0+5Bp
.text:0040ADC0 ; sub_4120A0+24Dp ...
.text:0040ADC0
.text:0040ADC0 var_18 = dword ptr -18h
.text:0040ADC0 var_C = dword ptr -0Ch
.text:0040ADC0 var_8 = dword ptr -8
.text:0040ADC0 arg_0 = qword ptr 4
.text:0040ADC0
.text:0040ADC0 mov ecx, dword_5854F0
.text:0040ADC6 movzx edx, byte ptr [ecx+1Ah]
.text:0040ADCA mov ecx, dword ptr qword_5854A8+4
.text:0040ADD0 sub esp, 18h
.text:0040ADD3 push ebx
.text:0040ADD4 push ebp
.text:0040ADD5 push esi
.text:0040ADD6 push edi
.text:0040ADD7 test edx, edx
.text:0040ADD9 jz loc_40AE7F
.text:0040ADDF mov esi, dword ptr qword_5854A8
.text:0040ADE5 mov edi, ecx
.text:0040ADE7 shrd esi, edi, 9
.text:0040ADEB and esi, dword ptr qword_828A78[edx*8]
.text:0040ADF2 shr edi, 9
.text:0040ADF5 and edi, dword ptr (qword_828A78+4)[edx*8]
.text:0040ADFC and esi, 7F7F7F7Fh
.text:0040AE02 and edi, offset byte_7F7F7F
.text:0040AE08 or esi, edi
.text:0040AE0A jz short loc_40AE2F
.text:0040AE0C mov ecx, edx
.text:0040AE0E shl ecx, 6
.text:0040AE11 lea ecx, [ecx+edx+240h]
.text:0040AE18 or ecx, dword_9315D4
.text:0040AE1E or ecx, 3000h
.text:0040AE24 mov [eax], ecx
.text:0040AE26 mov ecx, dword ptr qword_5854A8+4
.text:0040AE2C add eax, 4
.text:0040AE2F
.text:0040AE2F loc_40AE2F: ; CODE XREF: sub_40ADC0+4Aj
.text:0040AE2F mov esi, dword ptr qword_5854A8
.text:0040AE35 mov edi, ecx
.text:0040AE37 shrd esi, edi, 7
.text:0040AE3B and esi, dword ptr qword_828A78[edx*8]
.text:0040AE42 shr edi, 7
.text:0040AE45 and edi, dword ptr (qword_828A78+4)[edx*8]
.text:0040AE4C and esi, 0FEFEFEFEh
.text:0040AE52 and edi, 0FEFEFEh
.text:0040AE58 or esi, edi
.text:0040AE5A jz short loc_40AE7F
.text:0040AE5C mov ecx, edx
.text:0040AE5E shl ecx, 6
.text:0040AE61 lea edx, [ecx+edx+1C0h]
.text:0040AE68 or edx, dword_9315D4
.text:0040AE6E or edx, 3000h
.text:0040AE74 mov [eax], edx
.text:0040AE76 mov ecx, dword ptr qword_5854A8+4
.text:0040AE7C add eax, 4
.text:0040AE7F
.text:0040AE7F loc_40AE7F: ; CODE XREF: sub_40ADC0+19j
.text:0040AE7F ; sub_40ADC0+9Aj
.text:0040AE7F mov esi, dword_5854F0
.text:0040AE85 mov edx, [esi+28h]
.text:0040AE88 mov esi, [esi+2Ch]
.text:0040AE8B and edx, dword ptr [esp+28h+arg_0]
.text:0040AE8F and esi, dword ptr [esp+28h+arg_0+4]
.text:0040AE93 or edx, esi
.text:0040AE95 jz loc_40B2FC
.text:0040AE9B mov esi, dword ptr qword_5854A8
.text:0040AEA1 mov ebp, dword ptr [esp+28h+arg_0]
.text:0040AEA5 mov edx, ecx
.text:0040AEA7 shrd esi, edx, 9
.text:0040AEAB shr edx, 9
.text:0040AEAE and edx, dword ptr [esp+28h+arg_0+4]
.text:0040AEB2 and esi, ebp
.text:0040AEB4 and esi, 7F7F7F00h
.text:0040AEBA and edx, offset byte_7F7F7F
.text:0040AEC0 mov edi, esi
.text:0040AEC2 or edi, edx
.text:0040AEC4 jz short loc_40AF0F
.text:0040AEC6
.text:0040AEC6 loc_40AEC6: ; CODE XREF: sub_40ADC0+147j
.text:0040AEC6 bsf ecx, esi
.text:0040AEC9 jnz short loc_40AED5
.text:0040AECB bsf ecx, edx
.text:0040AECE mov [esp+28h+var_18], ecx
.text:0040AED2 add ecx, 20h
.text:0040AED5
.text:0040AED5 loc_40AED5: ; CODE XREF: sub_40ADC0+109j
.text:0040AED5 mov edi, esi
.text:0040AED7 add edi, 0FFFFFFFFh
.text:0040AEDA mov ebx, edx
.text:0040AEDC adc ebx, 0FFFFFFFFh
.text:0040AEDF and edx, ebx
.text:0040AEE1 mov ebx, ecx
.text:0040AEE3 and esi, edi
.text:0040AEE5 movzx edi, byte_585380[ecx]
.text:0040AEEC shl ebx, 6
.text:0040AEEF lea ecx, [ebx+ecx+240h]
.text:0040AEF6 or ecx, dword_9315D0[edi*4]
.text:0040AEFD add eax, 4
.text:0040AF00 mov [eax-4], ecx
.text:0040AF03 mov ecx, esi
.text:0040AF05 or ecx, edx
.text:0040AF07 jnz short loc_40AEC6
.text:0040AF09 mov ecx, dword ptr qword_5854A8+4
.text:0040AF0F
.text:0040AF0F loc_40AF0F: ; CODE XREF: sub_40ADC0+104j
.text:0040AF0F mov edx, dword ptr qword_5854A8
.text:0040AF15 shrd edx, ecx, 7
.text:0040AF19 shr ecx, 7
.text:0040AF1C and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040AF20 and edx, ebp
.text:0040AF22 and edx, 0FEFEFE00h
.text:0040AF28 and ecx, 0FEFEFEh
.text:0040AF2E mov esi, edx
.text:0040AF30 or esi, ecx
.text:0040AF32 jz short loc_40AF77
.text:0040AF34
.text:0040AF34 loc_40AF34: ; CODE XREF: sub_40ADC0+1B5j
.text:0040AF34 bsf esi, edx
.text:0040AF37 jnz short loc_40AF43
.text:0040AF39 bsf esi, ecx
.text:0040AF3C mov [esp+28h+var_18], esi
.text:0040AF40 add esi, 20h
.text:0040AF43
.text:0040AF43 loc_40AF43: ; CODE XREF: sub_40ADC0+177j
.text:0040AF43 mov edi, edx
.text:0040AF45 add edi, 0FFFFFFFFh
.text:0040AF48 mov ebx, ecx
.text:0040AF4A adc ebx, 0FFFFFFFFh
.text:0040AF4D and ecx, ebx
.text:0040AF4F mov ebx, esi
.text:0040AF51 and edx, edi
.text:0040AF53 movzx edi, byte_585380[esi]
.text:0040AF5A shl ebx, 6
.text:0040AF5D lea esi, [ebx+esi+1C0h]
.text:0040AF64 or esi, dword_9315D0[edi*4]
.text:0040AF6B add eax, 4
.text:0040AF6E mov [eax-4], esi
.text:0040AF71 mov esi, edx
.text:0040AF73 or esi, ecx
.text:0040AF75 jnz short loc_40AF34
.text:0040AF77
.text:0040AF77 loc_40AF77: ; CODE XREF: sub_40ADC0+172j
.text:0040AF77 cmp byte_58542C, 0FFh
.text:0040AF7E mov edi, offset byte_58542C
.text:0040AF83 jz short loc_40AFF1
.text:0040AF85
.text:0040AF85 loc_40AF85: ; CODE XREF: sub_40ADC0+22Fj
.text:0040AF85 movzx esi, byte ptr [edi]
.text:0040AF88 mov edx, dword_8F2178[esi*8]
.text:0040AF8F mov ecx, dword_8F217C[esi*8]
.text:0040AF96 and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040AF9A and edx, ebp
.text:0040AF9C inc edi
.text:0040AF9D mov ebx, edx
.text:0040AF9F or ebx, ecx
.text:0040AFA1 mov [esp+28h+var_C], edi
.text:0040AFA5 jz short loc_40AFEC
.text:0040AFA7 shl esi, 6
.text:0040AFAA mov edi, esi
.text:0040AFAC
.text:0040AFAC loc_40AFAC: ; CODE XREF: sub_40ADC0+222j
.text:0040AFAC bsf esi, edx
.text:0040AFAF jnz short loc_40AFBB
.text:0040AFB1 bsf esi, ecx
.text:0040AFB4 mov [esp+28h+var_18], esi
.text:0040AFB8 add esi, 20h
.text:0040AFBB
.text:0040AFBB loc_40AFBB: ; CODE XREF: sub_40ADC0+1EFj
.text:0040AFBB mov ebx, edx
.text:0040AFBD add ebx, 0FFFFFFFFh
.text:0040AFC0 mov ebp, ecx
.text:0040AFC2 adc ebp, 0FFFFFFFFh
.text:0040AFC5 and edx, ebx
.text:0040AFC7 movzx ebx, byte_585380[esi]
.text:0040AFCE add esi, edi
.text:0040AFD0 or esi, dword_931610[ebx*4]
.text:0040AFD7 and ecx, ebp
.text:0040AFD9 mov [eax], esi
.text:0040AFDB mov esi, edx
.text:0040AFDD add eax, 4
.text:0040AFE0 or esi, ecx
.text:0040AFE2 jnz short loc_40AFAC
.text:0040AFE4 mov ebp, dword ptr [esp+28h+arg_0]
.text:0040AFE8 mov edi, [esp+28h+var_C]
.text:0040AFEC
.text:0040AFEC loc_40AFEC: ; CODE XREF: sub_40ADC0+1E5j
.text:0040AFEC cmp byte ptr [edi], 0FFh
.text:0040AFEF jnz short loc_40AF85
.text:0040AFF1
.text:0040AFF1 loc_40AFF1: ; CODE XREF: sub_40ADC0+1C3j
.text:0040AFF1 cmp byte_585437, 0FFh
.text:0040AFF8 mov ebx, offset byte_585437
.text:0040AFFD jz loc_40B0BC
.text:0040B003 jmp short loc_40B010
.text:0040B003 ; ---------------------------------------------------------------------------
.text:0040B005 align 10h
.text:0040B010
.text:0040B010 loc_40B010: ; CODE XREF: sub_40ADC0+243j
.text:0040B010 ; sub_40ADC0+2F6j
.text:0040B010 movzx esi, byte ptr [ebx]
.text:0040B013 mov ecx, dword_926270[esi*8]
.text:0040B01A and ecx, dword ptr qword_5854E0
.text:0040B020 mov edx, dword_926274[esi*8]
.text:0040B027 and edx, dword ptr qword_5854E0+4
.text:0040B02D mov edi, ds:dword_438B00[esi*8]
.text:0040B034 imul edx, ds:dword_438B04[esi*8]
.text:0040B03C imul edi, ecx
.text:0040B03F mov ecx, ds:dword_438F00[esi*4]
.text:0040B046 xor edx, edi
.text:0040B048 shr edx, cl
.text:0040B04A inc ebx
.text:0040B04B add edx, dword_8F2378[esi*4]
.text:0040B052 mov edi, dword_926D00[edx*8]
.text:0040B059 mov ecx, dword_926D04[edx*8]
.text:0040B060 and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040B064 and edi, ebp
.text:0040B066 mov edx, edi
.text:0040B068 or edx, ecx
.text:0040B06A jz short loc_40B0B3
.text:0040B06C shl esi, 6
.text:0040B06F mov [esp+28h+var_18], esi
.text:0040B073
.text:0040B073 loc_40B073: ; CODE XREF: sub_40ADC0+2EDj
.text:0040B073 bsf edx, edi
.text:0040B076 jnz short loc_40B082
.text:0040B078 bsf edx, ecx
.text:0040B07B mov [esp+28h+var_C], edx
.text:0040B07F add edx, 20h
.text:0040B082
.text:0040B082 loc_40B082: ; CODE XREF: sub_40ADC0+2B6j
.text:0040B082 mov esi, edi
.text:0040B084 add esi, 0FFFFFFFFh
.text:0040B087 mov ebp, ecx
.text:0040B089 adc ebp, 0FFFFFFFFh
.text:0040B08C and ecx, ebp
.text:0040B08E mov ebp, [esp+28h+var_18]
.text:0040B092 and edi, esi
.text:0040B094 movzx esi, byte_585380[edx]
.text:0040B09B add ebp, edx
.text:0040B09D or ebp, dword_931690[esi*4]
.text:0040B0A4 mov edx, edi
.text:0040B0A6 mov [eax], ebp
.text:0040B0A8 add eax, 4
.text:0040B0AB or edx, ecx
.text:0040B0AD jnz short loc_40B073
.text:0040B0AF mov ebp, dword ptr [esp+28h+arg_0]
.text:0040B0B3
.text:0040B0B3 loc_40B0B3: ; CODE XREF: sub_40ADC0+2AAj
.text:0040B0B3 cmp byte ptr [ebx], 0FFh
.text:0040B0B6 jnz loc_40B010
.text:0040B0BC
.text:0040B0BC loc_40B0BC: ; CODE XREF: sub_40ADC0+23Dj
.text:0040B0BC cmp byte_585442, 0FFh
.text:0040B0C3 mov ebx, offset byte_585442
.text:0040B0C8 jz loc_40B17C
.text:0040B0CE mov edi, edi
.text:0040B0D0
.text:0040B0D0 loc_40B0D0: ; CODE XREF: sub_40ADC0+3B6j
.text:0040B0D0 movzx esi, byte ptr [ebx]
.text:0040B0D3 mov ecx, dword_829CB8[esi*8]
.text:0040B0DA and ecx, dword ptr qword_5854E0
.text:0040B0E0 mov edx, dword_829CBC[esi*8]
.text:0040B0E7 and edx, dword ptr qword_5854E0+4
.text:0040B0ED mov edi, ds:dword_438D00[esi*8]
.text:0040B0F4 imul edx, ds:dword_438D04[esi*8]
.text:0040B0FC imul edi, ecx
.text:0040B0FF mov ecx, ds:dword_439000[esi*4]
.text:0040B106 xor edx, edi
.text:0040B108 shr edx, cl
.text:0040B10A inc ebx
.text:0040B10B add edx, dword_8FBB68[esi*4]
.text:0040B112 mov edi, dword_829EF8[edx*8]
.text:0040B119 mov ecx, dword_829EFC[edx*8]
.text:0040B120 and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040B124 and edi, ebp
.text:0040B126 mov edx, edi
.text:0040B128 or edx, ecx
.text:0040B12A jz short loc_40B173
.text:0040B12C shl esi, 6
.text:0040B12F mov [esp+28h+var_18], esi
.text:0040B133
.text:0040B133 loc_40B133: ; CODE XREF: sub_40ADC0+3ADj
.text:0040B133 bsf edx, edi
.text:0040B136 jnz short loc_40B142
.text:0040B138 bsf edx, ecx
.text:0040B13B mov [esp+28h+var_C], edx
.text:0040B13F add edx, 20h
.text:0040B142
.text:0040B142 loc_40B142: ; CODE XREF: sub_40ADC0+376j
.text:0040B142 mov esi, edi
.text:0040B144 add esi, 0FFFFFFFFh
.text:0040B147 mov ebp, ecx
.text:0040B149 adc ebp, 0FFFFFFFFh
.text:0040B14C and ecx, ebp
.text:0040B14E mov ebp, [esp+28h+var_18]
.text:0040B152 and edi, esi
.text:0040B154 movzx esi, byte_585380[edx]
.text:0040B15B add ebp, edx
.text:0040B15D or ebp, dword_931710[esi*4]
.text:0040B164 mov edx, edi
.text:0040B166 mov [eax], ebp
.text:0040B168 add eax, 4
.text:0040B16B or edx, ecx
.text:0040B16D jnz short loc_40B133
.text:0040B16F mov ebp, dword ptr [esp+28h+arg_0]
.text:0040B173
.text:0040B173 loc_40B173: ; CODE XREF: sub_40ADC0+36Aj
.text:0040B173 cmp byte ptr [ebx], 0FFh
.text:0040B176 jnz loc_40B0D0
.text:0040B17C
.text:0040B17C loc_40B17C: ; CODE XREF: sub_40ADC0+308j
.text:0040B17C cmp byte_58544D, 0FFh
.text:0040B183 mov ebx, offset byte_58544D
.text:0040B188 jz loc_40B28C
.text:0040B18E
.text:0040B18E loc_40B18E: ; CODE XREF: sub_40ADC0+4C6j
.text:0040B18E movzx edx, byte ptr [ebx]
.text:0040B191 mov ecx, dword_926270[edx*8]
.text:0040B198 and ecx, dword ptr qword_5854E0
.text:0040B19E mov edi, dword_926274[edx*8]
.text:0040B1A5 and edi, dword ptr qword_5854E0+4
.text:0040B1AB mov ebp, dword_829CB8[edx*8]
.text:0040B1B2 imul edi, ds:dword_438B04[edx*8]
.text:0040B1BA and ebp, dword ptr qword_5854E0
.text:0040B1C0 mov esi, dword_829CBC[edx*8]
.text:0040B1C7 and esi, dword ptr qword_5854E0+4
.text:0040B1CD mov [esp+28h+var_8], ecx
.text:0040B1D1 mov ecx, ds:dword_438B00[edx*8]
.text:0040B1D8 imul esi, ds:dword_438D04[edx*8]
.text:0040B1E0 imul ecx, [esp+28h+var_8]
.text:0040B1E5 xor edi, ecx
.text:0040B1E7 mov ecx, ds:dword_438F00[edx*4]
.text:0040B1EE shr edi, cl
.text:0040B1F0 mov ecx, ds:dword_438D00[edx*8]
.text:0040B1F7 imul ecx, ebp
.text:0040B1FA add edi, dword_8F2378[edx*4]
.text:0040B201 xor esi, ecx
.text:0040B203 mov ecx, ds:dword_439000[edx*4]
.text:0040B20A mov ebp, dword_926D00[edi*8]
.text:0040B211 shr esi, cl
.text:0040B213 mov ecx, dword_926D04[edi*8]
.text:0040B21A inc ebx
.text:0040B21B add esi, dword_8FBB68[edx*4]
.text:0040B222 or ebp, dword_829EF8[esi*8]
.text:0040B229 or ecx, dword_829EFC[esi*8]
.text:0040B230 and ebp, dword ptr [esp+28h+arg_0]
.text:0040B234 and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040B238 mov esi, ebp
.text:0040B23A or esi, ecx
.text:0040B23C jz short loc_40B283
.text:0040B23E shl edx, 6
.text:0040B241 mov [esp+28h+var_18], edx
.text:0040B245
.text:0040B245 loc_40B245: ; CODE XREF: sub_40ADC0+4C1j
.text:0040B245 bsf esi, ebp
.text:0040B248 jnz short loc_40B256
.text:0040B24A bsf edx, ecx
.text:0040B24D mov esi, edx
.text:0040B24F mov [esp+28h+var_C], edx
.text:0040B253 add esi, 20h
.text:0040B256
.text:0040B256 loc_40B256: ; CODE XREF: sub_40ADC0+488j
.text:0040B256 mov edx, ebp
.text:0040B258 add edx, 0FFFFFFFFh
.text:0040B25B mov edi, ecx
.text:0040B25D adc edi, 0FFFFFFFFh
.text:0040B260 and ecx, edi
.text:0040B262 mov edi, [esp+28h+var_18]
.text:0040B266 and ebp, edx
.text:0040B268 movzx edx, byte_585380[esi]
.text:0040B26F add edi, esi
.text:0040B271 or edi, dword_931750[edx*4]
.text:0040B278 mov edx, ebp
.text:0040B27A mov [eax], edi
.text:0040B27C add eax, 4
.text:0040B27F or edx, ecx
.text:0040B281 jnz short loc_40B245
.text:0040B283
.text:0040B283 loc_40B283: ; CODE XREF: sub_40ADC0+47Cj
.text:0040B283 cmp byte ptr [ebx], 0FFh
.text:0040B286 jnz loc_40B18E
.text:0040B28C
.text:0040B28C loc_40B28C: ; CODE XREF: sub_40ADC0+3C8j
.text:0040B28C mov ecx, dword_5854F0
.text:0040B292 mov edx, [ecx+20h]
.text:0040B295 movzx esi, byte_5854E9
.text:0040B29C mov ecx, [ecx+24h]
.text:0040B29F not edx
.text:0040B2A1 and edx, dword_926678[esi*8]
.text:0040B2A8 not ecx
.text:0040B2AA and ecx, dword_92667C[esi*8]
.text:0040B2B1 and edx, dword ptr [esp+28h+arg_0]
.text:0040B2B5 and ecx, dword ptr [esp+28h+arg_0+4]
.text:0040B2B9 mov edi, edx
.text:0040B2BB or edi, ecx
.text:0040B2BD jz short loc_40B2FC
.text:0040B2BF shl esi, 6
.text:0040B2C2 mov edi, esi
.text:0040B2C4
.text:0040B2C4 loc_40B2C4: ; CODE XREF: sub_40ADC0+53Aj
.text:0040B2C4 bsf esi, edx
.text:0040B2C7 jnz short loc_40B2D3
.text:0040B2C9 bsf esi, ecx
.text:0040B2CC mov [esp+28h+var_C], esi
.text:0040B2D0 add esi, 20h
.text:0040B2D3
.text:0040B2D3 loc_40B2D3: ; CODE XREF: sub_40ADC0+507j
.text:0040B2D3 mov ebx, edx
.text:0040B2D5 add ebx, 0FFFFFFFFh
.text:0040B2D8 mov ebp, ecx
.text:0040B2DA adc ebp, 0FFFFFFFFh
.text:0040B2DD and edx, ebx
.text:0040B2DF movzx ebx, byte_585380[esi]
.text:0040B2E6 add esi, edi
.text:0040B2E8 or esi, dword_931650[ebx*4]
.text:0040B2EF and ecx, ebp
.text:0040B2F1 mov [eax], esi
.text:0040B2F3 mov esi, edx
.text:0040B2F5 add eax, 4
.text:0040B2F8 or esi, ecx
.text:0040B2FA jnz short loc_40B2C4
.text:0040B2FC
.text:0040B2FC loc_40B2FC: ; CODE XREF: sub_40ADC0+D5j
.text:0040B2FC ; sub_40ADC0+4FDj
.text:0040B2FC mov ebp, dword ptr qword_5854A8
.text:0040B302 and ebp, 0FF00h
.text:0040B308 xor ebx, ebx
.text:0040B30A mov ecx, ebp
.text:0040B30C or ecx, ebx
.text:0040B30E jz loc_40B4A1
.text:0040B314
.text:0040B314 loc_40B314: ; CODE XREF: sub_40ADC0+6D1j
.text:0040B314 bsf ecx, ebp
.text:0040B317 jnz short loc_40B325
.text:0040B319 bsf edx, ebx
.text:0040B31C mov ecx, edx
.text:0040B31E mov [esp+28h+var_C], edx
.text:0040B322 add ecx, 20h
.text:0040B325
.text:0040B325 loc_40B325: ; CODE XREF: sub_40ADC0+557j
.text:0040B325 mov edx, ebp
.text:0040B327 add edx, 0FFFFFFFFh
.text:0040B32A mov esi, ebx
.text:0040B32C adc esi, 0FFFFFFFFh
.text:0040B32F and ebp, edx
.text:0040B331 and ebx, esi
.text:0040B333 cmp byte_585378[ecx], 0
.text:0040B33A mov [esp+28h+var_18], ebp
.text:0040B33E jnz short loc_40B37F
.text:0040B340 mov edx, ecx
.text:0040B342 shl edx, 6
.text:0040B345 lea edi, [edx+ecx-8]
.text:0040B349 mov edx, edi
.text:0040B34B or edx, 0D8007000h
.text:0040B351 mov [eax], edx
.text:0040B353 mov edx, dword_8F2138[ecx*8]
.text:0040B35A mov esi, dword_8F213C[ecx*8]
.text:0040B361 and edx, dword ptr qword_585478
.text:0040B367 and esi, dword ptr qword_585478+4
.text:0040B36D add eax, 4
.text:0040B370 or edx, esi
.text:0040B372 jz short loc_40B37F
.text:0040B374 or edi, 0C2004000h
.text:0040B37A mov [eax], edi
.text:0040B37C add eax, 4
.text:0040B37F
.text:0040B37F loc_40B37F: ; CODE XREF: sub_40ADC0+57Ej
.text:0040B37F ; sub_40ADC0+5B2j
.text:0040B37F cmp ecx, 8
.text:0040B382 jz loc_40B408
.text:0040B388 mov edx, dword_828A30[ecx*8]
.text:0040B38F mov esi, dword_828A34[ecx*8]
.text:0040B396 and edx, dword ptr [esp+28h+arg_0]
.text:0040B39A and esi, dword ptr [esp+28h+arg_0+4]
.text:0040B39E or edx, esi
.text:0040B3A0 jz short loc_40B408
.text:0040B3A2 movzx edi, byte_585377[ecx]
.text:0040B3A9 mov edx, ecx
.text:0040B3AB shl edx, 6
.text:0040B3AE lea ebp, [edx+ecx-9]
.text:0040B3B2 mov edx, dword_9315D0[edi*4]
.text:0040B3B9 add edx, 28000000h
.text:0040B3BF or edx, ebp
.text:0040B3C1 or edx, 7000h
.text:0040B3C7 mov [eax], edx
.text:0040B3C9 mov edx, dword_8F2130[ecx*8]
.text:0040B3D0 mov esi, dword_8F2134[ecx*8]
.text:0040B3D7 and edx, dword ptr qword_585478
.text:0040B3DD and esi, dword ptr qword_585478+4
.text:0040B3E3 add eax, 4
.text:0040B3E6 or edx, esi
.text:0040B3E8 jz short loc_40B404
.text:0040B3EA mov edx, dword_9315D0[edi*4]
.text:0040B3F1 add edx, 1A000000h
.text:0040B3F7 or edx, ebp
.text:0040B3F9 or edx, 4000h
.text:0040B3FF mov [eax], edx
.text:0040B401 add eax, 4
.text:0040B404
.text:0040B404 loc_40B404: ; CODE XREF: sub_40ADC0+628j
.text:0040B404 mov ebp, [esp+28h+var_18]
.text:0040B408
.text:0040B408 loc_40B408: ; CODE XREF: sub_40ADC0+5C2j
.text:0040B408 ; sub_40ADC0+5E0j
.text:0040B408 cmp ecx, 0Fh
.text:0040B40B jz loc_40B48D
.text:0040B411 mov edx, dword_828A40[ecx*8]
.text:0040B418 mov esi, dword_828A44[ecx*8]
.text:0040B41F and edx, dword ptr [esp+28h+arg_0]
.text:0040B423 and esi, dword ptr [esp+28h+arg_0+4]
.text:0040B427 or edx, esi
.text:0040B429 jz short loc_40B48D
.text:0040B42B movzx esi, byte_585379[ecx]
.text:0040B432 mov edx, ecx
.text:0040B434 shl edx, 6
.text:0040B437 lea edi, [edx+ecx-7]
.text:0040B43B mov edx, dword_9315D0[esi*4]
.text:0040B442 add edx, 28000000h
.text:0040B448 or edx, edi
.text:0040B44A or edx, 7000h
.text:0040B450 mov [eax], edx
.text:0040B452 mov edx, dword_8F2140[ecx*8]
.text:0040B459 mov ecx, dword_8F2144[ecx*8]
.text:0040B460 and edx, dword ptr qword_585478
.text:0040B466 and ecx, dword ptr qword_585478+4
.text:0040B46C add eax, 4
.text:0040B46F or edx, ecx
.text:0040B471 jz short loc_40B48D
.text:0040B473 mov ecx, dword_9315D0[esi*4]
.text:0040B47A add ecx, 1A000000h
.text:0040B480 or ecx, edi
.text:0040B482 or ecx, 4000h
.text:0040B488 mov [eax], ecx
.text:0040B48A add eax, 4
.text:0040B48D
.text:0040B48D loc_40B48D: ; CODE XREF: sub_40ADC0+64Bj
.text:0040B48D ; sub_40ADC0+669j ...
.text:0040B48D mov edx, ebp
.text:0040B48F or edx, ebx
.text:0040B491 jnz loc_40B314
.text:0040B497 mov [eax], edx
.text:0040B499 pop edi
.text:0040B49A pop esi
.text:0040B49B pop ebp
.text:0040B49C pop ebx
.text:0040B49D add esp, 18h
.text:0040B4A0 retn
.text:0040B4A1 ; ---------------------------------------------------------------------------
.text:0040B4A1
.text:0040B4A1 loc_40B4A1: ; CODE XREF: sub_40ADC0+54Ej
.text:0040B4A1 pop edi
.text:0040B4A2 pop esi
.text:0040B4A3 pop ebp
.text:0040B4A4 mov [eax], ebx
.text:0040B4A6 pop ebx
.text:0040B4A7 add esp, 18h
.text:0040B4AA retn
.text:0040B4AA sub_40ADC0 endp
Code: Select all
type_move_list *capture_black(type_move_list *LIST, uint64 cel)
{
uint64 U, T;
int square, ai;
if ((cel &DYNAMIC->black_attacks) == 0)
goto TAG_NOT;
T = ((bitboard_black_pawn & ~FILEa) >> 9) & (~RANK1) &cel;
while (T)
{
ai = LSB(T);
ADD(LIST, ((ai + 9) << 6) | ai);
bit_free(ai, T);
}
T = ((bitboard_black_pawn & ~FILEh) >> 7) & (~RANK1) &cel;
while (T)
{
ai = LSB(T);
ADD(LIST, ((ai + 7) << 6) | ai);
bit_free(ai, T);
}
for (U = bitboard_black_knight; U; bit_free(square, U))
{
square = LSB(U);
T = attack_knight[square] & cel;
ANNEX_AI(T);
}
for (U = bitboard_black_bishop; U; bit_free(square, U))
{
square = LSB(U);
T = attack_bishop(square) & cel;
ANNEX_AI(T);
}
for (U = bitboard_black_rook; U; bit_free(square, U))
{
square = LSB(U);
T = attack_rook(square) & cel;
ANNEX_AI(T);
}
for (U = bitboard_black_queen; U; bit_free(square, U))
{
square = LSB(U);
T = attack_queen(square) & cel;
ANNEX_AI(T);
}
square = LSB(bitboard_black_king);
T = attack_king[square] & cel & ~DYNAMIC->white_attacks;
ANNEX_AI(T);
TAG_NOT:
for (U = bitboard_black_pawn & RANK2; U; bit_free(square, U))
{
square = LSB(U);
ai = square - 8;
if (SQUARE[ai] == 0)
ADD(LIST, flag_promotion_queen | (square << 6) | ai);
ai = square - 9;
if (square != A2 && square_fixed[ai] & cel)
ADD(LIST, flag_promotion_queen | (square << 6) | ai);
ai = square - 7;
if (square != H2 && square_fixed[ai] & cel)
ADD(LIST, flag_promotion_queen | (square << 6) | ai);
}
LIST->move = 0;
return LIST;
}