Function at 0x5135c0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x44
push ebx
mov ebx, dword [ebp + 8]
mov dword [ebp - 0xc], 0
mov dword [ebp - 0x20], 1
push esi
push edi
mov edi, ecx
mov dword [ebp - 0x14], edi
lea ecx, [edi + 0x16c]
mov dword [ebp - 0x10], ecx
mov esi, ecx
mov edx, ecx
lea eax, [esi + 0xfd6]
mov dword [ebp - 0x34], eax
test ebx, ebx
je 0x513c42
mov eax, dword [ebp + 0xc]
test eax, eax
je 0x513c42
mov dword [edi + 0x116c], 0
mov dword [ebp - 8], 0
jle 0x513c2a
nop
cmp esi, dword [ebp - 0x34]
ja 0x513c16
mov cl, byte [ebx]
movsx eax, cl
add eax, 0xffffffdc
mov dword [ebp - 0x1c], esi
cmp eax, 0x3a
ja case.0x513644.37
movzx eax, byte [eax + 0x513c78]
jmp dword [eax*4 + 0x513c5c]
mov byte [esi], 2
inc esi
jmp 0x513ad3
cmp ebx, dword [ebp + 8]
jne 0x513662
mov byte [esi], 4
inc esi
jmp 0x513ad3
mov byte [esi], 1
inc esi
mov al, byte [ebx]
mov byte [esi], al
inc esi
jmp 0x513ad3
cmp byte [ebx + 1], 0
jne 0x513662
mov byte [esi], 5
inc esi
jmp 0x513ad3
mov ecx, dword [ebp - 8]
inc ebx
mov byte [esi], 3
xor edi, edi
inc esi
mov dword [ebp - 0x18], edi
mov dword [ebp - 0x3c], esi
mov al, byte [ebx]
cmp al, 0x5e
jne 0x5136a0
mov al, byte [ebx + 1]
inc ebx
mov byte [ebp - 1], 0xff
inc ecx
jmp 0x5136a4
mov byte [ebp - 1], 0
inc ecx
mov dword [ebp - 8], ecx
cmp al, 0x2d
jne 0x5136c8
inc ecx
mov edi, 0x2d
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0x14]
push edi
mov dword [ebp - 0x18], edi
call fcn.00513de0
mov al, byte [ebx + 1]
inc ebx
mov ecx, dword [ebp - 8]
cmp al, 0x5d
jne 0x5136e5
inc ecx
mov edi, 0x5d
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0x14]
push edi
mov dword [ebp - 0x18], edi
call fcn.00513de0
mov al, byte [ebx + 1]
inc ebx
test al, al
je 0x5137be
mov byte [ebp - 0x2c], al
mov edx, ebx
cmp al, 0x5d
je 0x513829
cmp al, 0x2d
jne 0x5137d2
test edi, edi
jns 0x51371c
mov ecx, dword [ebp - 0x14]
mov edi, 0x2d
push edi
mov dword [ebp - 0x18], edi
call fcn.00513de0
jmp 0x5137a9
mov al, byte [ebx + 1]
test al, al
je 0x513b26
cmp al, 0x5d
je 0x513706
inc dword [ebp - 8]
inc ebx
movzx eax, al
inc edi
mov dword [ebp - 0x28], ebx
mov dword [ebp - 0x24], eax
cmp eax, 0x5c
jne 0x513780
cmp byte [edx + 2], 0
lea ebx, [edx + 2]
je 0x513b12
mov ecx, dword [ebp - 0x14]
lea eax, [ebp - 0x38]
push eax
push ebx
call fcn.00513e80
mov edx, dword [ebp - 8]
mov ecx, eax
add ebx, dword [ebp - 0x38]
inc edx
add edx, dword [ebp - 0x38]
mov dword [ebp - 0x24], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 0x28], ebx
test ecx, ecx
js 0x513706
push ecx
mov ecx, dword [ebp - 0x14]
call fcn.00513de0
mov eax, dword [ebp - 0x24]
mov dword [ebp - 0x18], eax
cmp edi, eax
jg 0x5137a6
mov ebx, dword [ebp - 0x24]
mov esi, dword [ebp - 0x14]
nop word [eax + eax]
push dword [ebp + 0x10]
mov ecx, esi
push edi
call fcn.00513e10
inc edi
cmp edi, ebx
jle 0x513790
mov esi, dword [ebp - 0x3c]
mov ebx, dword [ebp - 0x28]
mov edi, dword [ebp - 0x18]
mov eax, dword [ebp - 8]
inc ebx
inc eax
mov dword [ebp - 8], eax
mov al, byte [ebx]
mov byte [ebp - 0x2c], al
test al, al
jne 0x5136f0
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Missing__
mov esp, ebp
pop ebp
ret 0x10
cmp al, 0x5c
jne 0x513813
cmp byte [ebx + 1], 0
je 0x513813
mov ecx, dword [ebp - 0x14]
lea eax, [ebp - 0x40]
push eax
inc ebx
push ebx
call fcn.00513e80
add ebx, dword [ebp - 0x40]
mov edi, eax
mov eax, dword [ebp - 8]
inc eax
mov dword [ebp - 0x18], edi
add eax, dword [ebp - 0x40]
mov dword [ebp - 8], eax
test edi, edi
js 0x51380b
mov ecx, dword [ebp - 0x14]
push edi
call fcn.00513de0
jmp 0x5137a9
or edi, 0xffffffff
mov dword [ebp - 0x18], edi
jmp 0x5137ac
push dword [ebp + 0x10]
mov ecx, dword [ebp - 0x14]
push dword [ebp - 0x2c]
movzx edi, al
mov dword [ebp - 0x18], edi
call fcn.00513e10
jmp 0x5137a9
mov edi, dword [ebp - 0x14]
mov edx, 0x20
mov ah, byte [ebp - 1]
lea ecx, [edi + 0x1170]
nop word [eax + eax]
mov al, byte [ecx]
lea ecx, [ecx + 1]
xor al, ah
mov byte [esi], al
inc esi
mov byte [ecx - 1], 0
sub edx, 1
jne 0x513840
jmp 0x513ad3
cmp ebx, dword [ebp + 8]
je 0x513b4e
mov al, byte [edx]
mov dword [ebp - 0x1c], edx
cmp al, 0xb
je 0x513ad3
cmp al, 0xd
je 0x513ad3
movsx eax, al
add eax, 0xfffffffc
cmp eax, 6
ja case.0x513888.5
movzx eax, byte [eax + 0x513cbc]
jmp dword [eax*4 + 0x513cb4]
cmp cl, 0x2b
jne 0x5138ad
mov edx, dword [ebp - 0x1c]
mov ecx, esi
cmp edx, esi
jae 0x5138ad
nop dword [eax]
mov al, byte [edx]
inc edx
mov byte [esi], al
inc esi
cmp edx, ecx
jb 0x5138a0
mov dword [ebp - 0x1c], edx
mov byte [esi], 0
inc esi
lea edx, [esi + 1]
mov byte [esi], 0
cmp esi, dword [ebp - 0x1c]
jbe 0x5138cd
mov edi, dword [ebp - 0x1c]
nop
mov al, byte [esi - 1]
mov byte [esi], al
dec esi
cmp esi, edi
ja 0x5138c0
mov edi, dword [ebp - 0x14]
cmp byte [ebx], 0x3f
jne 0x5138dc
mov byte [esi], 0xc
mov esi, edx
jmp 0x513ad3
cmp byte [ebx + 1], 0x3f
sete al
lea eax, [eax*2 + 0xb]
mov byte [esi], al
mov esi, edx
jmp 0x513ad3
mov cl, byte [ebx + 1]
inc ebx
inc dword [ebp - 8]
movsx eax, cl
mov dword [ebp - 0x3c], eax
add eax, 0xffffffcf
cmp eax, 0xd
ja case.0x51390f.58
movzx eax, byte [eax + 0x513cd4]
jmp dword [eax*4 + 0x513cc4]
mov byte [esi], 8
inc esi
jmp 0x513ad3
cmp byte [edx], 8
je 0x513b62
mov byte [esi], 9
inc esi
jmp 0x513ad3
mov eax, dword [ebp - 0x3c]
mov ecx, dword [ebp - 0xc]
add eax, 0xffffffd0
test ecx, ecx
jle 0x51394b
cmp dword [edi + ecx*4 + 0x144], eax
je 0x513b76
cmp dword [ebp - 0x20], eax
jle 0x513b8a
mov byte [esi], 0xa
jmp 0x513acd
cmp byte [ebp + 0x14], 0
jne 0x5139c8
cmp cl, 0x28
jne 0x513993
mov ecx, dword [ebp - 0x20]
cmp ecx, 0xa
jge 0x513b9e
mov eax, dword [ebp - 0xc]
inc eax
mov dword [ebp - 0xc], eax
mov dword [edi + eax*4 + 0x144], ecx
mov byte [esi], 6
mov byte [esi + 1], cl
add esi, 2
inc ecx
mov dword [ebp - 0x20], ecx
jmp 0x513ad6
cmp cl, 0x29
jne 0x5139c8
cmp byte [edx], 6
je 0x513bc6
mov eax, dword [ebp - 0xc]
test eax, eax
jle 0x513bb2
mov byte [esi], 7
mov al, byte [edi + eax*4 + 0x144]
mov byte [esi + 1], al
add esi, 2
mov eax, dword [ebp - 0xc]
dec eax
mov dword [ebp - 0xc], eax
jmp 0x513ad6
lea eax, [ebp - 0x44]
mov ecx, edi
push eax
push ebx
call fcn.00513e80
mov ecx, dword [ebp - 0x44]
add ebx, ecx
add dword [ebp - 8], ecx
test eax, eax
jns 0x513aca
mov byte [esi], 3
lea ecx, [edi + 0x1170]
inc esi
mov edx, 0x20
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [esi], al
inc esi
mov byte [ecx - 1], 0
sub edx, 1
jne 0x5139f3
jmp 0x513ad3
cmp byte [ebp + 0x14], 0
je 0x513a72
cmp cl, 0x28
jne 0x513a40
mov ecx, dword [ebp - 0x20]
cmp ecx, 0xa
jge 0x513bda
mov eax, dword [ebp - 0xc]
inc eax
mov dword [ebp - 0xc], eax
mov dword [edi + eax*4 + 0x144], ecx
mov byte [esi], 6
mov byte [esi + 1], cl
add esi, 2
inc ecx
mov dword [ebp - 0x20], ecx
jmp 0x513ad6
cmp cl, 0x29
jne 0x513a72
cmp byte [edx], 6
je 0x513c02
mov eax, dword [ebp - 0xc]
test eax, eax
jle 0x513bee
mov byte [esi], 7
mov al, byte [edi + eax*4 + 0x144]
mov byte [esi + 1], al
add esi, 2
mov eax, dword [ebp - 0xc]
dec eax
mov dword [ebp - 0xc], eax
jmp 0x513ad6
test cl, cl
movzx eax, cl
mov ecx, 0x5c
cmove eax, ecx
cmp byte [ebp + 0x10], 0
mov dword [ebp - 0x3c], eax
mov byte [ebp - 0x30], al
jne 0x513aca
push dword [ebp - 0x30]
mov ecx, edi
call fcn.005145a0
test al, al
je 0x513ac7
push 0
push dword [ebp - 0x30]
mov byte [esi], 3
mov ecx, edi
inc esi
call fcn.00513e10
lea ecx, [edi + 0x1170]
mov edx, 0x20
mov al, byte [ecx]
lea ecx, [ecx + 1]
mov byte [esi], al
inc esi
mov byte [ecx - 1], 0
sub edx, 1
jne 0x513ab4
jmp 0x513ad3
mov eax, dword [ebp - 0x3c]
mov byte [esi], 1
mov byte [esi + 1], al
add esi, 2
mov eax, dword [ebp - 0xc]
mov ecx, dword [ebp - 8]
inc ebx
mov edx, dword [ebp - 0x1c]
inc ecx
mov dword [ebp - 8], ecx
cmp ecx, dword [ebp + 0xc]
jl 0x513620
test eax, eax
jle 0x513c2a
mov eax, dword [ebp - 0x10]
mov ecx, str.Unmatched__
cmp byte [ebp + 0x14], 0
pop edi
pop esi
mov byte [eax], 0
mov eax, 0x5bbc00
cmove eax, ecx
pop ebx
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbafc
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbb08
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Illegal_closure
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Empty_closure
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbb40
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Cyclical_reference
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Undetermined_reference
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbb88
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbbb8
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbb9c
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Too_many____pairs
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, 0x5bbbf4
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Null_pattern_inside___
mov esp, ebp
pop ebp
ret 0x10
mov eax, dword [ebp - 0x10]
pop edi
pop esi
pop ebx
mov byte [eax], 0
mov eax, str.Pattern_too_long
mov esp, ebp
pop ebp
ret 0x10
mov byte [esi], 0
mov dword [edi + 0x116c], 1
pop edi
pop esi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret 0x10
cmp dword [edi + 0x116c], 0
jne 0x513c37
pop edi
pop esi
mov byte [ecx], 0
mov eax, str.No_previous_regular_expression
pop ebx
mov esp, ebp
pop ebp
ret 0x10