Disassembly: 
  L1: 8b ff ?? mov edi, edi
   55 ?? push ebp
   8b ec ?? mov ebp, esp
   83 ec 30 ?? sub esp, 0x30<48>
   a1 44 44 44 00 ?? mov eax, dword ds:[0x00444444]
   33 c5 ?? xor eax, ebp
   89 45 fc ?? mov dword ss:[ebp + 0xfc<252,-4>], eax
   8b 45 08 ?? mov eax, dword ss:[ebp + 8]
   33 c9 ?? xor ecx, ecx
   53 ?? push ebx
   8b 5d 0c ?? mov ebx, dword ss:[ebp + 12]
   0f b7 53 0a ?? movzx edx, word ds:[ebx + 10]
   56 ?? push esi
   89 4d d4 ?? mov dword ss:[ebp + 0xd4<212,-44>], ecx
   89 4d f0 ?? mov dword ss:[ebp + 0xf0<240,-16>], ecx
   89 4d f4 ?? mov dword ss:[ebp + 0xf4<244,-12>], ecx
   89 4d f8 ?? mov dword ss:[ebp + 0xf8<248,-8>], ecx
   0f b7 48 0a ?? movzx ecx, word ds:[eax + 10]
   8b f2 ?? mov esi, edx
   33 f1 ?? xor esi, ecx
   81 e6 00 80 00 00 ?? and esi, 0x00008000<32768>
   89 75 e0 ?? mov dword ss:[ebp + 0xe0<224,-32>], esi
   be ff 7f 00 00 ?? mov esi, 0x00007fff<32767>
   23 ce ?? and ecx, esi
   23 d6 ?? and edx, esi
   8d 34 0a ?? lea esi, ds:[edx + ecx]
   57 ?? push edi
   0f b7 f6 ?? movzx esi, si
   bf ff 7f 00 00 ?? mov edi, 0x00007fff<32767>
   89 75 d0 ?? mov dword ss:[ebp + 0xd0<208,-48>], esi
   66 3b cf ?? cmp cx, di
   0f 83 ee 01 00 00 ?? jae basic block L50
  
  L2: 66 3b d7 ?? cmp dx, di
   0f 83 e5 01 00 00 ?? jae basic block L50
  
  L3: bf fd bf 00 00 ?? mov edi, 0x0000bffd<49149>
   66 3b f7 ?? cmp si, di
   0f 87 d7 01 00 00 ?? ja basic block L50
  
  L4: bf bf 3f 00 00 ?? mov edi, 0x00003fbf<16319>
   66 3b f7 ?? cmp si, di
   77 0a ?? ja basic block L7
  
  L5: 33 c9 ?? xor ecx, ecx
  
  L6: 89 48 08 ?? mov dword ds:[eax + 8], ecx
   e9 de 01 00 00 ?? jmp basic block L51
  
  L7: bf ff ff ff 7f ?? mov edi, 0x7fffffff
   66 85 c9 ?? test cx, cx
   75 1d ?? jne basic block L12
  
  L8: 46 ?? inc esi
   89 75 d0 ?? mov dword ss:[ebp + 0xd0<208,-48>], esi
   85 78 08 ?? test dword ds:[eax + 8], edi
   75 14 ?? jne basic block L12
  
  L9: 33 c9 ?? xor ecx, ecx
   39 48 04 ?? cmp dword ds:[eax + 4], ecx
   75 0f ?? jne basic block L13
  
  L10: 39 08 ?? cmp dword ds:[eax], ecx
   75 0b ?? jne basic block L13
  
  L11: 66 89 48 0a ?? mov word ds:[eax + 10], cx
   e9 bc 01 00 00 ?? jmp basic block L52
  
  L12: 33 c9 ?? xor ecx, ecx
  
  L13: 66 3b d1 ?? cmp dx, cx
   75 12 ?? jne basic block L17
  
  L14: 46 ?? inc esi
   89 75 d0 ?? mov dword ss:[ebp + 0xd0<208,-48>], esi
   85 7b 08 ?? test dword ds:[ebx + 8], edi
   75 09 ?? jne basic block L17
  
  L15: 39 4b 04 ?? cmp dword ds:[ebx + 4], ecx
   75 04 ?? jne basic block L17
  
  L16: 39 0b ?? cmp dword ds:[ebx], ecx
   74 b8 ?? je basic block L6
  
  L17: 89 4d e4 ?? mov dword ss:[ebp + 0xe4<228,-28>], ecx
   8d 7d f4 ?? lea edi, ss:[ebp + 0xf4<244,-12>]
   c7 45 e8 05 00 00 00 ?? mov dword ss:[ebp + 0xe8<232,-24>], 5
  
  L18: 8b 4d e4 ?? mov ecx, dword ss:[ebp + 0xe4<228,-28>]
   8b 55 e8 ?? mov edx, dword ss:[ebp + 0xe8<232,-24>]
   03 c9 ?? add ecx, ecx
   89 55 d8 ?? mov dword ss:[ebp + 0xd8<216,-40>], edx
   85 d2 ?? test edx, edx
   7e 4f ?? jle basic block L27
  
  L19: 83 c3 08 ?? add ebx, 8
   89 5d dc ?? mov dword ss:[ebp + 0xdc<220,-36>], ebx
   8d 1c 08 ?? lea ebx, ds:[eax + ecx]
  
  L20: 8b 55 dc ?? mov edx, dword ss:[ebp + 0xdc<220,-36>]
   0f b7 12 ?? movzx edx, word ds:[edx]
   0f b7 0b ?? movzx ecx, word ds:[ebx]
   83 65 ec 00 ?? and dword ss:[ebp + 0xec<236,-20>], 0
   0f af ca ?? imul ecx, edx
   8b 57 fc ?? mov edx, dword ds:[edi + 0xfc<252,-4>]
   8d 34 0a ?? lea esi, ds:[edx + ecx]
   3b f2 ?? cmp esi, edx
   72 04 ?? jb basic block L22
  
  L21: 3b f1 ?? cmp esi, ecx
   73 07 ?? jae basic block L23
  
  L22: c7 45 ec 01 00 00 00 ?? mov dword ss:[ebp + 0xec<236,-20>], 1
  
  L23: 83 7d ec 00 ?? cmp dword ss:[ebp + 0xec<236,-20>], 0
   89 77 fc ?? mov dword ds:[edi + 0xfc<252,-4>], esi
   74 03 ?? je basic block L25
  
  L24: 66 ff 07 ?? inc word ds:[edi]
  
  L25: 83 6d dc 02 ?? sub dword ss:[ebp + 0xdc<220,-36>], 2
   43 ?? inc ebx
   43 ?? inc ebx
   ff 4d d8 ?? dec dword ss:[ebp + 0xd8<216,-40>]
   83 7d d8 00 ?? cmp dword ss:[ebp + 0xd8<216,-40>], 0
   7f c0 ?? jg basic block L20
  
  L26: 8b 5d 0c ?? mov ebx, dword ss:[ebp + 12]
   8b 75 d0 ?? mov esi, dword ss:[ebp + 0xd0<208,-48>]
  
  L27: 47 ?? inc edi
   47 ?? inc edi
   ff 45 e4 ?? inc dword ss:[ebp + 0xe4<228,-28>]
   ff 4d e8 ?? dec dword ss:[ebp + 0xe8<232,-24>]
   83 7d e8 00 ?? cmp dword ss:[ebp + 0xe8<232,-24>], 0
   7f 94 ?? jg basic block L18
  
  L28: 81 c6 02 c0 00 00 ?? add esi, 0x0000c002<49154>
   bf ff ff 00 00 ?? mov edi, 0x0000ffff
   66 85 f6 ?? test si, si
   7e 38 ?? jle basic block L32
  
  L29: f7 45 f8 00 00 00 80 ?? test dword ss:[ebp + 0xf8<248,-8>], 0x80000000
   75 2a ?? jne basic block L31
  
  L30: 8b 4d f0 ?? mov ecx, dword ss:[ebp + 0xf0<240,-16>]
   8b 5d f4 ?? mov ebx, dword ss:[ebp + 0xf4<244,-12>]
   8b 55 f4 ?? mov edx, dword ss:[ebp + 0xf4<244,-12>]
   d1 65 f0 ?? shl dword ss:[ebp + 0xf0<240,-16>], 1
   c1 e9 1f ?? shr ecx, 0x1f<31>
   03 db ?? add ebx, ebx
   0b d9 ?? or ebx, ecx
   8b 4d f8 ?? mov ecx, dword ss:[ebp + 0xf8<248,-8>]
   c1 ea 1f ?? shr edx, 0x1f<31>
   03 c9 ?? add ecx, ecx
   0b ca ?? or ecx, edx
   03 f7 ?? add esi, edi
   89 5d f4 ?? mov dword ss:[ebp + 0xf4<244,-12>], ebx
   89 4d f8 ?? mov dword ss:[ebp + 0xf8<248,-8>], ecx
   66 85 f6 ?? test si, si
   7f cd ?? jg basic block L29
  
  L31: 66 85 f6 ?? test si, si
   7f 4f ?? jg basic block L39
  
  L32: 03 f7 ?? add esi, edi
   66 85 f6 ?? test si, si
   7d 48 ?? jge basic block L39
  
  L33: 8b ce ?? mov ecx, esi
   f7 d9 ?? neg ecx
   0f b7 c9 ?? movzx ecx, cx
   89 4d ec ?? mov dword ss:[ebp + 0xec<236,-20>], ecx
   03 f1 ?? add esi, ecx
  
  L34: f6 45 f0 01 ?? test byte ss:[ebp + 0xf0<240,-16>], 1
   74 03 ?? je basic block L36
  
  L35: ff 45 d4 ?? inc dword ss:[ebp + 0xd4<212,-44>]
  
  L36: 8b 4d f8 ?? mov ecx, dword ss:[ebp + 0xf8<248,-8>]
   8b 5d f4 ?? mov ebx, dword ss:[ebp + 0xf4<244,-12>]
   8b 55 f4 ?? mov edx, dword ss:[ebp + 0xf4<244,-12>]
   d1 6d f8 ?? shr dword ss:[ebp + 0xf8<248,-8>], 1
   c1 e1 1f ?? shl ecx, 0x1f<31>
   d1 eb ?? shr ebx, 1
   0b d9 ?? or ebx, ecx
   8b 4d f0 ?? mov ecx, dword ss:[ebp + 0xf0<240,-16>]
   c1 e2 1f ?? shl edx, 0x1f<31>
   d1 e9 ?? shr ecx, 1
   0b ca ?? or ecx, edx
   ff 4d ec ?? dec dword ss:[ebp + 0xec<236,-20>]
   89 5d f4 ?? mov dword ss:[ebp + 0xf4<244,-12>], ebx
   89 4d f0 ?? mov dword ss:[ebp + 0xf0<240,-16>], ecx
   75 cf ?? jne basic block L34
  
  L37: 83 7d d4 00 ?? cmp dword ss:[ebp + 0xd4<212,-44>], 0
   74 05 ?? je basic block L39
  
  L38: 66 83 4d f0 01 ?? or word ss:[ebp + 0xf0<240,-16>], 1
  
  L39: b9 00 80 00 00 ?? mov ecx, 0x00008000<32768>
   8b d1 ?? mov edx, ecx
   66 39 55 f0 ?? cmp word ss:[ebp + 0xf0<240,-16>], dx
   77 11 ?? ja basic block L41
  
  L40: 8b 55 f0 ?? mov edx, dword ss:[ebp + 0xf0<240,-16>]
   81 e2 ff ff 01 00 ?? and edx, 0x0001ffff
   81 fa 00 80 01 00 ?? cmp edx, 0x00018000
   75 2f ?? jne basic block L48
  
  L41: 83 7d f2 ff ?? cmp dword ss:[ebp + 0xf2<242,-14>], 0xff<255,-1>
   75 26 ?? jne basic block L47
  
  L42: 83 65 f2 00 ?? and dword ss:[ebp + 0xf2<242,-14>], 0
   83 7d f6 ff ?? cmp dword ss:[ebp + 0xf6<246,-10>], 0xff<255,-1>
   75 17 ?? jne basic block L46
  
  L43: 83 65 f6 00 ?? and dword ss:[ebp + 0xf6<246,-10>], 0
   66 39 7d fa ?? cmp word ss:[ebp + 0xfa<250,-6>], di
   75 07 ?? jne basic block L45
  
  L44: 66 89 4d fa ?? mov word ss:[ebp + 0xfa<250,-6>], cx
   46 ?? inc esi
   eb 0e ?? jmp basic block L48
  
  L45: 66 ff 45 fa ?? inc word ss:[ebp + 0xfa<250,-6>]
   eb 08 ?? jmp basic block L48
  
  L46: ff 45 f6 ?? inc dword ss:[ebp + 0xf6<246,-10>]
   eb 03 ?? jmp basic block L48
  
  L47: ff 45 f2 ?? inc dword ss:[ebp + 0xf2<242,-14>]
  
  L48: b9 ff 7f 00 00 ?? mov ecx, 0x00007fff<32767>
   66 3b f1 ?? cmp si, cx
   73 1c ?? jae basic block L50
  
  L49: 66 8b 4d f2 ?? mov cx, word ss:[ebp + 0xf2<242,-14>]
   0b 75 e0 ?? or esi, dword ss:[ebp + 0xe0<224,-32>]
   66 89 08 ?? mov word ds:[eax], cx
   8b 4d f4 ?? mov ecx, dword ss:[ebp + 0xf4<244,-12>]
   89 48 02 ?? mov dword ds:[eax + 2], ecx
   8b 4d f8 ?? mov ecx, dword ss:[ebp + 0xf8<248,-8>]
   89 48 06 ?? mov dword ds:[eax + 6], ecx
   66 89 70 0a ?? mov word ds:[eax + 10], si
   eb 20 ?? jmp basic block L52
  
  L50: 33 d2 ?? xor edx, edx
   33 c9 ?? xor ecx, ecx
   66 39 4d e0 ?? cmp word ss:[ebp + 0xe0<224,-32>], cx
   0f 94 c2 ?? sete dl
   4a ?? dec edx
   81 e2 00 00 00 80 ?? and edx, 0x80000000
   81 c2 00 80 ff 7f ?? add edx, 0x7fff8000
   89 50 08 ?? mov dword ds:[eax + 8], edx
  
  L51: 89 08 ?? mov dword ds:[eax], ecx
   89 48 04 ?? mov dword ds:[eax + 4], ecx
  
  L52: 8b 4d fc ?? mov ecx, dword ss:[ebp + 0xfc<252,-4>]
   5f ?? pop edi
   5e ?? pop esi
   33 cd ?? xor ecx, ebp
   5b ?? pop ebx
   e8 47 03 fe ff ?? call function 0x00409b4c
  
  L53: c9 ?? leave
   c3 ?? ret
  
  