Function at 0x473b30
Capabilities:
Read file on windows

Disassembly:
sub esp, 0x390
push ebx
push esi
push edi
push 0x40
mov esi, edx
mov edi, ecx
push 0
push 0x53db40
movzx ebx, si
call fcn.00484320
push 0x387
lea eax, [esp + 0x24]
push 0
push eax
call fcn.00484320
push edi
push 1
lea eax, [esp + 0x30]
push 4
push eax
call fcn.0048a465
push 1
push 0xfffffffffffffffc
push edi
call fcn.00489d25
mov eax, dword [esp + 0x44]
add esp, 0x34
test eax, eax
je 0x473ba8
cmp eax, 0x107
ja 0x473ba8
test eax, eax
jns 0x473bb1
push str.Error_loading_XM:_This_file_is_corrupt_
call dword [0x54e480]
add esp, 4
xor al, al
pop edi
pop esi
pop ebx
add esp, 0x390
ret
mov eax, 0x107
mov dword [esp + 0x10], eax
push edi
push 1
push eax
lea eax, [esp + 0x20]
push eax
call fcn.0048a465
mov eax, dword [esp + 0x24]
add esp, 0x10
cmp eax, 0x107
jbe 0x473bde
push 1
add eax, 0xfffffef9
push eax
push edi
call fcn.00489d25
add esp, 0xc
mov edx, dword [esp + 0x2f]
cmp dx, 0x20
ja 0x473ee8
mov eax, 0x80
mov dword [esp + 0xc], ebx
cmp si, ax
ja 0x473c1b
movups xmm0, xmmword [esp + 0x18]
mov eax, dword [esp + 0x28]
imul ecx, ebx, 0x17
add ecx, 0x5511f8
movups xmmword [ecx], xmm0
mov dword [ecx + 0x10], eax
mov ax, word [esp + 0x2c]
mov word [ecx + 0x14], ax
lea eax, [edx - 1]
push ebp
cmp ax, 0x1f
ja 0x473edb
mov ecx, esi
call fcn.00420710
test al, al
jne 0x473c4f
push str.Not_enough_memory_
call dword [0x54e480]
add esp, 4
xor al, al
pop ebp
pop edi
pop esi
pop ebx
add esp, 0x390
ret
mov ecx, dword [ebx*4 + 0x550bc0]
movups xmm0, xmmword [esp + 0x39]
push edi
push 1
movups xmmword [ecx + 3], xmm0
movups xmm0, xmmword [esp + 0x51]
movups xmmword [ecx + 0x13], xmm0
movups xmm0, xmmword [esp + 0x61]
movups xmmword [ecx + 0x23], xmm0
movups xmm0, xmmword [esp + 0x71]
movups xmmword [ecx + 0x33], xmm0
movups xmm0, xmmword [esp + 0x81]
movups xmmword [ecx + 0x43], xmm0
movups xmm0, xmmword [esp + 0x91]
movups xmmword [ecx + 0x53], xmm0
movups xmm0, xmmword [esp + 0xa1]
movups xmmword [ecx + 0x74], xmm0
movups xmm0, xmmword [esp + 0xb1]
movups xmmword [ecx + 0x84], xmm0
movups xmm0, xmmword [esp + 0xc1]
movups xmmword [ecx + 0x94], xmm0
movups xmm0, xmmword [esp + 0xd1]
movups xmmword [ecx + 0xa4], xmm0
movups xmm0, xmmword [esp + 0xe1]
movups xmmword [ecx + 0xb4], xmm0
movups xmm0, xmmword [esp + 0xf1]
movups xmmword [ecx + 0xc4], xmm0
mov al, byte [esp + 0x101]
mov byte [ecx + 0x63], al
mov al, byte [esp + 0x102]
mov byte [ecx + 0x64], al
mov al, byte [esp + 0x103]
mov byte [ecx + 0x65], al
mov al, byte [esp + 0x104]
mov byte [ecx + 0x66], al
mov al, byte [esp + 0x105]
mov byte [ecx + 0x67], al
mov al, byte [esp + 0x106]
mov byte [ecx + 0x68], al
mov al, byte [esp + 0x107]
mov byte [ecx + 0x69], al
mov al, byte [esp + 0x108]
mov byte [ecx + 0x6a], al
mov al, byte [esp + 0x109]
mov byte [ecx + 0x6b], al
mov al, byte [esp + 0x10a]
mov byte [ecx + 0x6c], al
mov al, byte [esp + 0x10b]
mov byte [ecx + 0x6d], al
mov al, byte [esp + 0x10c]
mov byte [ecx + 0x6e], al
mov al, byte [esp + 0x10d]
mov byte [ecx + 0x6f], al
mov al, byte [esp + 0x10e]
mov byte [ecx + 0x70], al
movzx eax, word [esp + 0x10f]
mov word [ecx + 0x72], ax
cmp byte [esp + 0x111], 1
sete al
mov byte [ecx], al
mov al, byte [esp + 0x112]
mov byte [ecx + 2], al
movzx eax, word [esp + 0x113]
mov word [ecx + 0xd4], ax
movzx eax, word [esp + 0x115]
mov word [ecx + 0xd6], ax
cmp byte [esp + 0x117], 1
sete al
mov byte [ecx + 1], al
movzx eax, word [esp + 0x3b]
mov word [ecx + 0xd8], ax
mov eax, 0x10
movsx ebp, word [esp + 0x3b]
cmp ebp, eax
cmovg ebp, eax
lea eax, [ebp*4]
add eax, ebp
shl eax, 3
push eax
lea eax, [esp + 0x12b]
push eax
call fcn.0048a465
add esp, 0x10
cmp eax, 1
je 0x473e0e
push str.General_I_O_error_during_loading_
jmp 0x473c39
mov eax, dword [esp + 0x33]
cmp ax, 0x10
jle 0x473e4b
movsx ebx, ax
sub ebx, 0x10
test ebx, ebx
jle 0x473e47
mov esi, 0x53db40
push edi
push 1
push 4
push esi
call fcn.0048a465
push 1
push 0x24
push edi
call fcn.00489d25
add esp, 0x1c
add esi, 4
sub ebx, 1
jne 0x473e27
mov ebx, dword [esp + 0x10]
test ebp, ebp
jle 0x473edb
xor esi, esi
lea eax, [esp + 0x127]
nop dword [eax]
mov edx, dword [ebx*4 + 0x550bc0]
mov ecx, dword [eax - 8]
add edx, 0xdc
add edx, esi
mov dword [edx + 0x28], ecx
mov ecx, dword [eax - 4]
mov dword [edx + 0x2c], ecx
mov ecx, dword [eax]
mov dword [edx + 0x30], ecx
movzx ecx, byte [eax + 4]
mov byte [edx + 0x24], cl
movzx ecx, byte [eax + 5]
mov byte [edx + 0x18], cl
mov bl, byte [eax + 6]
mov byte [edx + 0x25], bl
movzx ecx, byte [eax + 7]
mov byte [edx + 0x26], cl
movzx ecx, byte [eax + 8]
mov byte [edx + 0x19], cl
cmp byte [eax + 9], 0xad
jne 0x473eb4
test byte [eax + 6], 0x30
jne 0x473eb4
or bl, 0x40
mov byte [edx + 0x25], bl
movups xmm0, xmmword [eax + 0xa]
mov ebx, dword [esp + 0x10]
add esi, 0xd8
movups xmmword [edx], xmm0
mov ecx, dword [eax + 0x1a]
mov dword [edx + 0x10], ecx
mov cx, word [eax + 0x1e]
add eax, 0x28
mov word [edx + 0x14], cx
sub ebp, 1
jne 0x473e60
pop ebp
pop edi
pop esi
mov al, 1
pop ebx
add esp, 0x390
ret
push str.Error_loading_XM:_This_file_is_corrupt__or_not_supported__
call dword [0x54e480]
add esp, 4
xor al, al
pop edi
pop esi
pop ebx
add esp, 0x390
ret