; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x473920 */ | #include | ; (fcn) method.std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t____BloombergLP::bdldfp::DecimalNumPut_wchar_t__std::__1::ostreambuf_iterator_wchar_t__std::__1::char_traits_wchar_t_____::do_put_impl_BloombergLP::bdldfp.Decimal_Type64__std::__1 () | uint64_t method_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_BloombergLP::bdldfp::DecimalNumPut_wchar_t_std::_1::ostreambuf_iterator_wchar_t_std::_1::char_traits_wchar_t_::do_put_impl_BloombergLP::bdldfp_Decimal_Type64_std::_1 (int64_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | int64_t var_8h; | int32_t var_10h; | int64_t var_14h; | int64_t var_18h; | int32_t var_24h; | uint32_t var_28h; | uint32_t var_30h; | int64_t var_38h; | int64_t var_40h; | int64_t var_48h; | int64_t var_50h; | int64_t var_58h; | int64_t var_5ch; | uint32_t var_60h; | int64_t var_68h; | int64_t var_70h; | char * var_78h; | int64_t var_80h; | int64_t var_81h; | int64_t var_82h; | int64_t var_84h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | /* std::__1::ostreambuf_iterator > BloombergLP::bdldfp::DecimalNumPut > >::do_put_impl(std::__1::ostreambuf_iterator >, std::__1::ios_base&, wchar_t, BloombergLP::bdldfp::Decimal_Type64) const */ 0x00473920 push rbp | 0x00473921 push r15 | 0x00473923 push r14 | 0x00473925 push r13 | 0x00473927 push r12 | 0x00473929 push rbx | 0x0047392a sub rsp, 0x88 | 0x00473931 mov rbp, r8 | 0x00473934 mov dword [rsp + 0x14], ecx | *((rsp + 0x14)) = ecx; 0x00473938 mov rbx, rsi | rbx = rsi; 0x0047393b mov r13, qword [rdx + 0x10] | r13 = *((rdx + 0x10)); 0x0047393f cmp r13, 0x18e | 0x00473946 mov ecx, 0x18e | ecx = 0x18e; | if (r13 < 0x18e) { 0x0047394b cmovl rcx, r13 | rcx = r13; | } 0x0047394f mov eax, dword [rdx + 0x18] | eax = *((rdx + 0x18)); 0x00473952 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x00473956 mov qword [rsp + 0x50], rcx | *((rsp + 0x50)) = rcx; 0x0047395b mov dword [rsp + 0x58], ecx | *((rsp + 0x58)) = ecx; 0x0047395f mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x00473968 mov qword [rsp + 0x68], 0x50a7ac | *((rsp + 0x68)) = 0x50a7ac; 0x00473971 mov qword [rsp + 0x70], 0x50a579 | *((rsp + 0x70)) = 0x50a579; 0x0047397a mov qword [rsp + 0x78], 0x50a578 | *((rsp + 0x78)) = "snan"; 0x00473983 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x0047398d mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x00473998 mov qword [rsp + 0x18], rdx | *((rsp + 0x18)) = rdx; 0x0047399d mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x004739a0 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x004739a5 je 0x4739b5 | 0x004739a7 xor ecx, ecx | ecx = 0; 0x004739a9 test eax, 0x100 | 0x004739ae sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x004739b1 mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x004739b5 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x004739ba je 0x4739c4 | 0x004739bc mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x004739c4 mov ecx, eax | ecx = eax; 0x004739c6 shr ecx, 0xa | ecx >>= 0xa; 0x004739c9 and cl, 1 | cl &= 1; 0x004739cc mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x004739d3 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x004739d8 je 0x4739fd | 0x004739da mov qword [rsp + 0x68], 0x50a57d | *((rsp + 0x68)) = 0x50a57d; 0x004739e3 mov qword [rsp + 0x70], 0x50a582 | *((rsp + 0x70)) = 0x50a582; 0x004739ec mov qword [rsp + 0x78], 0x50a581 | *((rsp + 0x78)) = "SNAN"; 0x004739f5 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x004739fd mov r14, qword [rip + 0x4e69d4] | r14 = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473a04 test r14, r14 | | if (r14 == 0) { 0x00473a07 jne 0x473a11 | 0x00473a09 call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473a0e mov r14, rax | r14 = rax; | } 0x00473a11 mov rax, qword [r14] | rax = *(r14); 0x00473a14 mov esi, 0x311 | esi = 0x311; 0x00473a19 mov rdi, r14 | rdi = r14; 0x00473a1c call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00473a1f mov r12, rax | r12 = rax; 0x00473a22 lea rcx, [rsp + 0x58] | 0x00473a27 mov rdi, rax | rdi = rax; 0x00473a2a mov esi, 0x311 | 0x00473a2f mov qword [rsp + 0x28], rbp | *((rsp + 0x28)) = rbp; 0x00473a34 mov rdx, rbp | 0x00473a37 mov qword [rsp + 0x40], r14 | *((rsp + 0x40)) = r14; 0x00473a3c mov qword [rsp + 0x38], rax | *((rsp + 0x38)) = rax; 0x00473a41 call 0x477900 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0x311, rbp, rsp + 0x58); 0x00473a46 mov ebp, eax | 0x00473a48 mov rdi, rsp | rdi = rsp; 0x00473a4b mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00473a50 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00473a55 mov rdi, qword [rip + 0x4e697c] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473a5c test rdi, rdi | | if (rdi == 0) { 0x00473a5f jne 0x473a69 | 0x00473a61 call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473a66 mov rdi, rax | rdi = rax; | } 0x00473a69 movsxd rax, ebp | rax = (int64_t) ebp; 0x00473a6c mov qword [rsp + 0x48], rax | *((rsp + 0x48)) = rax; 0x00473a71 lea r15, [rax*4] | r15 = rax*4; 0x00473a79 mov rax, qword [rdi] | rax = *(rdi); 0x00473a7c mov rsi, r15 | rsi = r15; 0x00473a7f call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00473a82 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x00473a87 mov rdi, rsp | rdi = rsp; 0x00473a8a mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x00473a8f call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473a94 mov rdx, r12 | rdx = r12; 0x00473a97 add rdx, qword [rsp + 0x48] | rdx += *((rsp + 0x48)); 0x00473a9c mov rbp, qword [rax] | rbp = *(rax); 0x00473a9f mov rdi, rax | rdi = rax; 0x00473aa2 mov rsi, r12 | rsi = r12; 0x00473aa5 mov rcx, qword [rsp + 8] | rcx = *((rsp + 8)); 0x00473aaa call qword [rbp + 0x60] | uint64_t (*rbp + 0x60)() (); 0x00473aad mov ebp, r13d | 0x00473ab0 sub ebp, dword [rsp + 0x50] | ebp -= *((rsp + 0x50)); 0x00473ab4 mov rdi, rsp | rdi = rsp; 0x00473ab7 call 0x404be0 | std::_1::locale::~locale() (); 0x00473abc mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00473ac1 mov r14, qword [rsp + 0x48] | r14 = *((rsp + 0x48)); 0x00473ac6 lea rcx, [rsi + r14*4] | rcx = rsi + r14*4; 0x00473aca mov eax, dword [rsp + 0x10] | eax = *((rsp + 0x10)); 0x00473ace sub eax, ebp | eax -= ebp; 0x00473ad0 xor r12d, r12d | r12d = 0; 0x00473ad3 sub eax, r14d | eax -= r14d; 0x00473ad6 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x00473ada cmovns r12d, eax | __asm ("cmovns r12d, eax"); 0x00473ade mov eax, r12d | eax = r12d; 0x00473ae1 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00473ae3 je 0x473b7b | goto label_12; | } 0x00473ae9 mov qword [rsp + 0x30], rcx | *((rsp + 0x30)) = rcx; 0x00473aee mov r14, rcx | r14 = rcx; 0x00473af1 mov dword [rsp + 0x24], ebp | *((rsp + 0x24)) = ebp; 0x00473af5 test ebp, ebp | | if (ebp == 0) { 0x00473af7 je 0x473be8 | goto label_13; | } 0x00473afd mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00473b02 test byte [rax + 9], 1 | 0x00473b06 mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); | if ((*((rax + 9)) & 1) == 0) { 0x00473b0b je 0x473be8 | goto label_13; | } 0x00473b11 mov rdi, rsp | rdi = rsp; 0x00473b14 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00473b19 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00473b1e mov rdi, rsp | rdi = rsp; 0x00473b21 mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x00473b26 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473b2b mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); 0x00473b30 movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x00473b38 mov rcx, qword [rax] | rcx = *(rax); 0x00473b3b mov rdi, rax | rdi = rax; 0x00473b3e call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x00473b41 mov ebp, eax | 0x00473b43 mov rdi, rsp | rdi = rsp; 0x00473b46 call 0x404be0 | std::_1::locale::~locale() (); 0x00473b4b mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00473b50 cmp r14, rax | | if (r14 == rax) { 0x00473b53 je 0x473be2 | goto label_14; | } 0x00473b59 mov r14, rax | r14 = rax; 0x00473b5c nop dword [rax] | | do { 0x00473b60 cmp dword [r14], ebp | | if (*(r14) == ebp) { 0x00473b63 je 0x473b74 | goto label_15; | } 0x00473b65 add r14, 4 | r14 += 4; 0x00473b69 add r15, 0xfffffffffffffffc | r15 += 0xfffffffffffffffc; 0x00473b6d jne 0x473b60 | | } while (r15 != 0); 0x00473b6f mov r14, qword [rsp + 0x30] | r14 = *((rsp + 0x30)); | label_15: 0x00473b74 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00473b79 jmp 0x473be8 | goto label_13; | label_12: 0x00473b7b cmp rcx, rsi | | if (rcx == rsi) { 0x00473b7e je 0x473e74 | goto label_16; | } 0x00473b84 shl r14, 2 | r14 <<= 2; 0x00473b88 xor ebp, ebp | ebp = 0; 0x00473b8a jmp 0x473b9f | | while (rbx == 0) { | label_0: 0x00473b90 xor ebx, ebx | ebx = 0; | label_1: 0x00473b92 add rbp, 4 | rbp += 4; 0x00473b96 cmp r14, rbp | | if (r14 == rbp) { 0x00473b99 je 0x473e74 | goto label_16; | } 0x00473b9f test rbx, rbx | 0x00473ba2 je 0x473b90 | | } 0x00473ba4 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00473ba9 mov eax, dword [rax + rbp] | eax = *((rax + rbp)); 0x00473bac mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473bb0 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473bb4 je 0x473bd0 | 0x00473bb6 lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473bba mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473bbe mov dword [rcx], eax | *(rcx) = eax; 0x00473bc0 jmp 0x473bdb | | } else { 0x00473bd0 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473bd3 mov rdi, rbx | rdi = rbx; 0x00473bd6 mov esi, eax | esi = eax; 0x00473bd8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473bdb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473bde je 0x473b90 | goto label_0; | } 0x00473be0 jmp 0x473b92 | goto label_1; | label_14: 0x00473be2 mov r14, rax | r14 = rax; 0x00473be5 mov rsi, rax | rsi = rax; | label_13: 0x00473be8 cmp qword [rsp + 0x28], 0 | 0x00473bee setns al | __asm ("setns al"); 0x00473bf1 cmp dword [rsp + 0x60], 1 | 0x00473bf6 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x00473bf9 mov r15d, 0xb0 | r15d = 0xb0; 0x00473bff mov rdx, qword [rsp + 0x18] | rdx = *((rsp + 0x18)); 0x00473c04 and r15d, dword [rdx + 8] | r15d &= *((rdx + 8)); 0x00473c08 test al, cl | | if ((al & cl) == 0) { 0x00473c0a jne 0x473c36 | 0x00473c0c cmp r15d, 0x10 | | if (r15d == 0x10) { 0x00473c10 jne 0x473c36 | 0x00473c12 lea rbp, [rsi + 4] | rbp = rsi + 4; 0x00473c16 test rbx, rbx | | if (rbx == 0) { 0x00473c19 je 0x473c3b | goto label_17; | } 0x00473c1b mov rax, rsi | rax = rsi; 0x00473c1e mov eax, dword [rsi] | eax = *(rsi); 0x00473c20 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473c24 cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00473c28 je 0x473c3f | goto label_18; | } 0x00473c2a lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473c2e mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473c32 mov dword [rcx], eax | *(rcx) = eax; 0x00473c34 jmp 0x473c4a | | } | } else { 0x00473c36 mov rbp, rsi | 0x00473c39 jmp 0x473c53 | goto label_19; | label_17: 0x00473c3b xor ebx, ebx | ebx = 0; 0x00473c3d jmp 0x473c53 | goto label_19; | label_18: 0x00473c3f mov rcx, qword [rbx] | rcx = *(rbx); 0x00473c42 mov rdi, rbx | rdi = rbx; 0x00473c45 mov esi, eax | esi = eax; 0x00473c47 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473c4a xor ecx, ecx | ecx = 0; 0x00473c4c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473c4f cmove rbx, rcx | rbx = rcx; | } | label_19: 0x00473c53 cmp dword [rsp + 0x10], 0 | 0x00473c58 mov dword [rsp + 0x28], r15d | *((rsp + 0x28)) = r15d; | if (*((rsp + 0x10)) <= 0) { 0x00473c5d jle 0x473cb4 | goto label_20; | } 0x00473c5f cmp r15d, 0x20 | | if (r15d == 0x20) { 0x00473c63 je 0x473cb4 | goto label_20; | } 0x00473c65 lea r15d, [r12 + 1] | r15d = r12 + 1; 0x00473c6a jmp 0x473c7b | | while (rbx == 0) { | label_2: 0x00473c70 xor ebx, ebx | ebx = 0; | label_3: 0x00473c72 dec r15d | r15d--; 0x00473c75 cmp r15d, 1 | | if (r15d <= 1) { 0x00473c79 jle 0x473cb4 | goto label_20; | } 0x00473c7b test rbx, rbx | 0x00473c7e je 0x473c70 | | } 0x00473c80 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473c84 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473c88 je 0x473ca0 | 0x00473c8a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473c8e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473c92 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x00473c96 mov dword [rax], ecx | *(rax) = ecx; 0x00473c98 mov eax, ecx | eax = ecx; 0x00473c9a jmp 0x473cad | | } else { 0x00473ca0 mov rax, qword [rbx] | rax = *(rbx); 0x00473ca3 mov rdi, rbx | rdi = rbx; 0x00473ca6 mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x00473caa call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473cad cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473cb0 je 0x473c70 | goto label_2; | } 0x00473cb2 jmp 0x473c72 | goto label_3; | label_20: 0x00473cb4 cmp rbp, r14 | | if (rbp == r14) { 0x00473cb7 je 0x473d02 | goto label_21; | } 0x00473cb9 mov r15d, dword [rsp + 0x28] | r15d = *((rsp + 0x28)); 0x00473cbe jmp 0x473ccb | | while (rbx == 0) { | label_4: 0x00473cc0 xor ebx, ebx | ebx = 0; | label_5: 0x00473cc2 add rbp, 4 | rbp += 4; 0x00473cc6 cmp r14, rbp | | if (r14 == rbp) { 0x00473cc9 je 0x473d07 | goto label_22; | } 0x00473ccb test rbx, rbx | 0x00473cce je 0x473cc0 | | } 0x00473cd0 mov eax, dword [rbp] | eax = *(rbp); 0x00473cd3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473cd7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473cdb je 0x473cf0 | 0x00473cdd lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473ce1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473ce5 mov dword [rcx], eax | *(rcx) = eax; 0x00473ce7 jmp 0x473cfb | | } else { 0x00473cf0 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473cf3 mov rdi, rbx | rdi = rbx; 0x00473cf6 mov esi, eax | esi = eax; 0x00473cf8 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473cfb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473cfe je 0x473cc0 | goto label_4; | } 0x00473d00 jmp 0x473cc2 | goto label_5; | label_21: 0x00473d02 mov r15d, dword [rsp + 0x28] | r15d = *((rsp + 0x28)); | label_22: 0x00473d07 cmp dword [rsp + 0x24], 0 | | if (*((rsp + 0x24)) == 0) { 0x00473d0c je 0x473e12 | goto label_23; | } 0x00473d12 mov rdi, rsp | rdi = rsp; 0x00473d15 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00473d1a call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00473d1f mov rdi, rsp | rdi = rsp; 0x00473d22 mov esi, 0x95a1e0 | esi = std::__1::ctype::id; 0x00473d27 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473d2c mov rcx, qword [rax] | rcx = *(rax); 0x00473d2f mov rdi, rax | rdi = rax; 0x00473d32 mov esi, 0x30 | esi = 0x30; 0x00473d37 call qword [rcx + 0x58] | eax = uint64_t (*rcx + 0x58)() (); 0x00473d3a mov ebp, eax | 0x00473d3c mov rdi, rsp | rdi = rsp; 0x00473d3f call 0x404be0 | std::_1::locale::~locale() (); 0x00473d44 cmp dword [rsp + 0x24], 0 | | if (*((rsp + 0x24)) <= 0) { 0x00473d49 jle 0x473da2 | goto label_24; | } 0x00473d4b sub r13d, dword [rsp + 0x50] | r13d -= *((rsp + 0x50)); 0x00473d50 inc r13d | r13d++; 0x00473d53 jmp 0x473d6b | | while (rbx == 0) { | label_6: 0x00473d60 xor ebx, ebx | ebx = 0; | label_7: 0x00473d62 dec r13d | r13d--; 0x00473d65 cmp r13d, 1 | | if (r13d <= 1) { 0x00473d69 jle 0x473da2 | goto label_24; | } 0x00473d6b test rbx, rbx | 0x00473d6e je 0x473d60 | | } 0x00473d70 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473d74 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473d78 je 0x473d90 | 0x00473d7a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473d7e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473d82 mov dword [rax], ebp | *(rax) = ebp; 0x00473d84 mov eax, ebp | eax = ebp; 0x00473d86 jmp 0x473d9b | | } else { 0x00473d90 mov rax, qword [rbx] | rax = *(rbx); 0x00473d93 mov rdi, rbx | rdi = rbx; 0x00473d96 mov esi, ebp | esi = ebp; 0x00473d98 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473d9b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473d9e je 0x473d60 | goto label_6; | } 0x00473da0 jmp 0x473d62 | goto label_7; | label_24: 0x00473da2 cmp r14, qword [rsp + 0x30] | | if (r14 == *((rsp + 0x30))) { 0x00473da7 je 0x473e12 | goto label_23; | } 0x00473da9 mov eax, 0x100 | eax = 0x100; 0x00473dae mov rcx, qword [rsp + 0x18] | rcx = *((rsp + 0x18)); 0x00473db3 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); | if (eax == 0) { 0x00473db6 je 0x473e12 | goto label_23; | } 0x00473db8 mov rax, qword [rsp + 8] | rax = *((rsp + 8)); 0x00473dbd mov rcx, qword [rsp + 0x48] | rcx = *((rsp + 0x48)); 0x00473dc2 lea rbp, [rax + rcx*4] | rbp = rax + rcx*4; 0x00473dc6 jmp 0x473ddb | | while (rbx == 0) { | label_8: 0x00473dd0 xor ebx, ebx | ebx = 0; | label_9: 0x00473dd2 add r14, 4 | r14 += 4; 0x00473dd6 cmp rbp, r14 | | if (rbp == r14) { 0x00473dd9 je 0x473e12 | goto label_23; | } 0x00473ddb test rbx, rbx | 0x00473dde je 0x473dd0 | | } 0x00473de0 mov eax, dword [r14] | eax = *(r14); 0x00473de3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00473de7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473deb je 0x473e00 | 0x00473ded lea rdx, [rcx + 4] | rdx = rcx + 4; 0x00473df1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00473df5 mov dword [rcx], eax | *(rcx) = eax; 0x00473df7 jmp 0x473e0b | | } else { 0x00473e00 mov rcx, qword [rbx] | rcx = *(rbx); 0x00473e03 mov rdi, rbx | rdi = rbx; 0x00473e06 mov esi, eax | esi = eax; 0x00473e08 call qword [rcx + 0x68] | eax = uint64_t (*rcx + 0x68)() (); | } 0x00473e0b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473e0e je 0x473dd0 | goto label_8; | } 0x00473e10 jmp 0x473dd2 | goto label_9; | label_23: 0x00473e12 cmp dword [rsp + 0x10], 0 | | if (*((rsp + 0x10)) <= 0) { 0x00473e17 jle 0x473e74 | goto label_16; | } 0x00473e19 cmp r15d, 0x20 | | if (r15d != 0x20) { 0x00473e1d jne 0x473e74 | goto label_16; | } 0x00473e1f inc r12d | r12d++; 0x00473e22 jmp 0x473e3b | | while (rbx == 0) { | label_10: 0x00473e30 xor ebx, ebx | ebx = 0; | label_11: 0x00473e32 dec r12d | r12d--; 0x00473e35 cmp r12d, 1 | | if (r12d <= 1) { 0x00473e39 jle 0x473e74 | goto label_16; | } 0x00473e3b test rbx, rbx | 0x00473e3e je 0x473e30 | | } 0x00473e40 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473e44 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473e48 je 0x473e60 | 0x00473e4a lea rcx, [rax + 4] | rcx = rax + 4; 0x00473e4e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473e52 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x00473e56 mov dword [rax], ecx | *(rax) = ecx; 0x00473e58 mov eax, ecx | eax = ecx; 0x00473e5a jmp 0x473e6d | | } else { 0x00473e60 mov rax, qword [rbx] | rax = *(rbx); 0x00473e63 mov rdi, rbx | rdi = rbx; 0x00473e66 mov esi, dword [rsp + 0x14] | esi = *((rsp + 0x14)); 0x00473e6a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); | } 0x00473e6d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00473e70 je 0x473e30 | goto label_10; | } 0x00473e72 jmp 0x473e32 | goto label_11; | label_16: 0x00473e74 mov rdi, qword [rip + 0x4e655d] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00473e7b test rdi, rdi | | if (rdi != 0) { 0x00473e7e je 0x473e8c | 0x00473e80 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x00473e85 mov r14, qword [rsp + 0x38] | r14 = *((rsp + 0x38)); 0x00473e8a jmp 0x473e9e | | } else { 0x00473e8c call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00473e91 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x00473e96 mov r14, qword [rsp + 0x38] | r14 = *((rsp + 0x38)); 0x00473e9b mov rdi, rax | rdi = rax; | } 0x00473e9e mov rax, qword [rdi] | rax = *(rdi); 0x00473ea1 mov rsi, qword [rsp + 8] | rsi = *((rsp + 8)); 0x00473ea6 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473ea9 mov rax, qword [rbp] | rax = *(rbp); 0x00473ead mov rdi, rbp | rdi = rbp; 0x00473eb0 mov rsi, r14 | rsi = r14; 0x00473eb3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473eb6 mov rax, rbx | rax = rbx; 0x00473eb9 add rsp, 0x88 | 0x00473ec0 pop rbx | 0x00473ec1 pop r12 | 0x00473ec3 pop r13 | 0x00473ec5 pop r14 | 0x00473ec7 pop r15 | 0x00473ec9 pop rbp | 0x00473eca ret | return rax; | }