Function at 0x70109ea0
Capabilities:
Contain obfuscated stackstrings

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
lea esi, [ebp - 0x3c]
sub esp, 0xcc
mov ebx, ecx
mov edi, dword [ebp + 8]
mov dword [edi + 8], 0
mov dword [esp + 4], esi
mov dword [esp], edi
call sym.__ZN3mpt14mpt_libopenmpt2IO10FileReader4ReadIN7OpenMPT3UMX10FileHeaderENS4_6detail10FileReaderINS1_24FileCursorTraitsFileDataE
test al, al
jne 0x70109ed7
mov byte [ebp - 0xa9], 0
jmp 0x7010a237
mov ecx, esi
call method.OpenMPT::UMX::FileHeader.IsValid___const
test al, al
je 0x70109ecb
mov dword [esp + 8], str.sound
mov dword [esp + 4], esi
mov dword [esp], edi
call sym.__ZN7OpenMPT3UMX18FindNameTableEntryERNS_6detail10FileReaderIN3mpt14mpt_libopenmpt2IO24FileCursorTraitsFileDataENS5_24FileCurs
test al, al
je 0x70109ecb
mov ecx, esi
call method.OpenMPT::UMX::FileHeader.GetMinimumAdditionalFileSize___const
mov ecx, edi
mov dword [esp], eax
call fcn.7015bbf8
mov byte [ebp - 0xa9], al
test al, al
push edx
je 0x70109ecb
cmp dword [ebp + 0xc], 0x40
je 0x7010a237
lea edx, [ebp - 0x9c]
mov dword [esp + 8], esi
mov dword [esp], edx
mov dword [esp + 4], edi
call sym.__ZN7OpenMPT3UMX13ReadNameTableB5cxx11ERNS_6detail10FileReaderIN3mpt14mpt_libopenmpt2IO24FileCursorTraitsFileDataENS5_24FileCu
lea eax, [ebp - 0x90]
lea edx, [ebp - 0x9c]
mov dword [esp + 8], esi
mov dword [esp + 0xc], edx
mov dword [esp + 4], edi
mov dword [esp], eax
call sym.__ZN7OpenMPT3UMX15ReadImportTableERNS_6detail10FileReaderIN3mpt14mpt_libopenmpt2IO24FileCursorTraitsFileDataENS5_24FileCursorF
mov dword [esp], 0
mov ecx, ebx
call method.OpenMPT::CSoundFile.InitializeGlobals_OpenMPT::MODTYPE_
push eax
lea ecx, [ebp - 0x54]
lea eax, [ebp - 0x4c]
mov byte [esp + 8], 0
mov dword [esp + 4], 0x702b4542
mov dword [esp], str.Unreal_Package_v
mov dword [ebp - 0x54], eax
call sym.__ZNSt7__cxx1112basic_stringIcN3mpt14mpt_libopenmpt20encoding_char_traitsILNS2_15common_encodingE0ES4_EESaIcEE12_M_constructIP
sub esp, 0xc
lea eax, [ebp - 0x54]
lea esi, [ebp - 0x84]
mov dword [esp], eax
mov ecx, esi
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::basic_string_std::__cxx11::basic_string_char__mpt::mpt_libopenmpt::enc
lea ecx, [ebp - 0x54]
push eax
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::_M_dispose__
lea eax, [ebp - 0x38]
mov dword [esp], esi
mov dword [esp + 4], eax
lea ecx, [ebp - 0x6c]
call fcn.7015a740
push eax
lea ecx, [ebx + 0x13cff0]
push eax
lea eax, [ebp - 0x6c]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::operator_std::__cxx11::basic_string_char__mpt::mpt_libopenmpt::encodi
lea ecx, [ebp - 0x6c]
push eax
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::_M_dispose__
mov ecx, esi
lea esi, [ebp - 0x54]
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::_M_dispose__
lea eax, [ebp - 0x4c]
mov byte [esp + 8], 0
mov dword [esp + 4], 0x702b4546
mov dword [esp], 0x702b4543
mov ecx, esi
mov dword [ebp - 0x54], eax
call sym.__ZNSt7__cxx1112basic_stringIcN3mpt14mpt_libopenmpt20encoding_char_traitsILNS2_15common_encodingE0ES4_EESaIcEE12_M_constructIP
sub esp, 0xc
lea ecx, [ebx + 0x13d008]
mov dword [esp], esi
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::operator_std::__cxx11::basic_string_char__mpt::mpt_libopenmpt::encodi
mov ecx, esi
push eax
call method.std::__cxx11::basic_string_char__mpt::mpt_libopenmpt.encoding_char_traits__mpt::mpt_libopenmpt::common_encoding_0__mpt::mpt_libopenmpt::common_encoding___std::allocator_char___::_M_dispose__
mov dword [ebx + 0x13d068], 0x16
mov esi, dword [ebp - 0x24]
cmp esi, dword [edi + 8]
ja 0x7010a039
mov dword [edi + 8], esi
mov dword [ebp - 0xb0], 0
jmp 0x7010a0b4
mov ecx, dword [edi]
mov eax, dword [ecx]
mov dword [esp + 4], esi
mov dword [esp], 0
call dword [eax + 0x20]
push ecx
test al, al
push ecx
je 0x7010a02d
jmp 0x7010a02a
mov dword [esp], 8
mov ecx, edi
call fcn.7015bbf8
test al, al
push edx
je 0x7010a0c5
lea edx, [ebp - 0x90]
lea eax, [ebp - 0x54]
mov dword [esp + 0xc], edx
lea edx, [ebp - 0x3c]
mov dword [esp + 0x14], str.sound
mov dword [esp + 0x10], esi
mov dword [esp + 8], edx
mov dword [esp + 4], edi
mov dword [esp], eax
call sym.__ZN7OpenMPT3UMX20ReadExportTableEntryERNS_6detail10FileReaderIN3mpt14mpt_libopenmpt2IO24FileCursorTraitsFileDataENS5_24FileCu
mov ecx, dword [ebp - 0x54]
mov eax, dword [ecx]
call dword [eax + 8]
test al, al
jne 0x7010a0df
lea ecx, [ebp - 0x44]
call fcn.701da9e8
lea ecx, [ebp - 0x50]
call fcn.701da9e8
inc dword [ebp - 0xb0]
mov eax, dword [ebp - 0xb0]
lea esi, [ebp - 0x9c]
cmp eax, dword [ebp - 0x28]
jb 0x7010a053
cmp word [ebx + 0x753be], 0
jne 0x7010a167
mov byte [ebp - 0xa9], 0
jmp 0x7010a1d2
mov ax, word [ebx + 0x753be]
cmp ax, 0xf9e
ja 0x7010a09e
inc eax
lea edx, [ebp - 0x54]
movzx eax, ax
mov dword [esp + 0xc], 1
mov dword [esp + 8], 1
mov dword [esp + 4], edx
mov dword [esp], eax
mov ecx, ebx
call sym.__ZN7OpenMPT10CSoundFile18ReadSampleFromFileEtRNS_6detail10FileReaderIN3mpt14mpt_libopenmpt2IO24FileCursorTraitsFileDataENS5_2
sub esp, 0x10
test al, al
je 0x7010a09e
mov eax, dword [ebp - 0x40]
test eax, eax
jle 0x7010a09e
mov edx, dword [ebp - 0x9c]
mov ecx, dword [ebp - 0x98]
sub ecx, edx
sar ecx, 3
imul ecx, ecx, 0xaaaaaaab
cmp eax, ecx
jae 0x7010a09e
imul eax, eax, 0x18
movzx ecx, word [ebx + 0x753be]
add ecx, 0x7384
add eax, edx
shl ecx, 5
mov dword [esp], eax
add ecx, ebx
call method.mpt::mpt_libopenmpt::charbuf_32u_.operator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
push esi
jmp 0x7010a09e
mov ecx, ebx
call method.OpenMPT::CSoundFile.InitializeChannels__
mov dword [esp], 0x1000000
mov ecx, ebx
call method.OpenMPT::CSoundFile.SetType_OpenMPT::MODTYPE_
push ecx
mov dword [ebx + 0x753b8], 6
mov word [ebx + 0x753bc], 4
lea ecx, [ebx + 0x763f8]
mov dword [esp + 4], 0x40
mov dword [esp], 0
call method.OpenMPT::CPatternContainer.Insert_unsigned_short__unsigned_int_
push edx
push edx
movzx ecx, byte [ebx + 0x76418]
imul ecx, ecx, 0x2c
add ecx, dword [ebx + 0x76408]
mov dword [esp + 4], 0
mov dword [esp], 1
call method.OpenMPT::ModSequence.assign_unsigned_short__unsigned_short_
push eax
push eax
mov eax, dword [ebp - 0x90]
test eax, eax
je 0x7010a1e4
mov dword [esp], eax
call sym.operator_delete_void_
mov ecx, esi
call fcn.701f1a0c
jmp 0x7010a237
mov al, byte [ebp - 0xa9]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret 8