{"type": "func", "start": 6442461232, "end": 6442461524, "name": "sub_180002830", "pseudocode": "// \n// sub_180002830 from 0x180002830 to 0x180002954 (292 bytes)\n// \n// 4 xrefs:\n// > sub_180002B80 @ 0x180003050\n// > sub_180003390 @ 0x180003610\n// > sub_180003390 @ 0x180003625\n// > <???> @ 0x1801f612c\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_180002830(__int64 a1, __int64 a2, __m128i *a3, __m128i *a4)\n{\n  _QWORD *v4; // r11\n  __int64 v6; // rdi\n  int v8; // ecx\n  __int64 v11; // r9\n  __int64 v12; // r10\n  unsigned int v13; // edx\n  int v14; // r8d\n  unsigned int v15; // eax\n  int v16; // ecx\n  __int64 v17; // rax\n  unsigned int v18; // r10d\n  __m128i v19; // xmm3\n  unsigned int v20; // r9d\n  __m128i v21; // xmm3\n  __int64 result; // rax\n\n  v4 = *(_QWORD **)a2;\n  v6 = *(_QWORD *)(a1 + 56);\n  v8 = *(_DWORD *)(a2 + 16);\n  v11 = **(_QWORD **)a2 >> v8;\n  v12 = (unsigned int)v11 & *(_DWORD *)(a1 + 112);\n  v13 = *(unsigned __int16 *)(*(_QWORD *)(a1 + 48) + 2 * v12);\n  v14 = *(char *)((*(_WORD *)(*(_QWORD *)(a1 + 48) + 2 * v12) & 0x7FFF) + v6);\n  if ( v13 >= 0x8000 )\n  {\n    v15 = sub_180001910(a1, a2, v13, v11);\n    v8 = *(_DWORD *)(a2 + 16);\n    v4 = *(_QWORD **)a2;\n    v13 = v15;\n    v14 = *(char *)(v15 + v6);\n  }\n  v16 = v14 + v8;\n  *(_DWORD *)(a2 + 16) = v16 & 7;\n  *(_QWORD *)a2 = (char *)v4 + ((__int64)v16 >> 3);\n  v17 = *(_QWORD *)(a1 + 72);\n  LOBYTE(v16) = *(_BYTE *)(a1 + 102);\n  v18 = *(unsigned __int16 *)(v17 + 2LL * (v13 - 1)) >> v16;\n  v19 = _mm_cvtsi32_si128(*(unsigned __int16 *)(v17 + 2LL * (v13 - 1)));\n  LODWORD(v17) = v18 >> v16 >> v16;\n  v20 = (unsigned int)v17 >> v16 >> v16;\n  *a3 = _mm_unpacklo_epi64(\n          _mm_unpacklo_epi32(v19, _mm_cvtsi32_si128(v18)),\n          _mm_unpacklo_epi32(_mm_cvtsi32_si128(v18 >> v16), _mm_cvtsi32_si128(v17)));\n  v21 = _mm_cvtsi32_si128((unsigned int)v17 >> v16);\n  result = v20 >> v16 >> v16;\n  *a4 = _mm_unpacklo_epi64(\n          _mm_unpacklo_epi32(v21, _mm_cvtsi32_si128(v20)),\n          _mm_unpacklo_epi32(_mm_cvtsi32_si128(v20 >> v16), _mm_cvtsi32_si128(result)));\n  return result;\n}", "assembly": "; \n; sub_180002830 from 0x180002830 to 0x180002954 (292 bytes)\n; \n; 4 xrefs:\n; > sub_180002B80 @ 0x180003050\n; > sub_180003390 @ 0x180003610\n; > sub_180003390 @ 0x180003625\n; > <???> @ 0x1801f612c\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nmov     [rsp+arg_0], rbx                                               ; +0x0, 0x180002830\nmov     [rsp+arg_8], rbp                                               ; +0x5, 0x180002835\nmov     [rsp+arg_10], rsi                                              ; +0xa, 0x18000283a\nmov     [rsp+arg_18], rdi                                              ; +0xf, 0x18000283f\npush    r14                                                            ; +0x14, 0x180002844\nsub     rsp, 20h                                                       ; +0x16, 0x180002846\nmov     r11, [rdx]                                                     ; +0x1a, 0x18000284a\nmov     rsi, rcx                                                       ; +0x1d, 0x18000284d\nmov     rdi, [rcx+38h]                                                 ; +0x20, 0x180002850\nmov     rbp, r9                                                        ; +0x24, 0x180002854\nmov     ecx, [rdx+10h]                                                 ; +0x27, 0x180002857\nmov     rbx, rdx                                                       ; +0x2a, 0x18000285a\nmov     r14, r8                                                        ; +0x2d, 0x18000285d\nmov     rax, [rsi+30h]                                                 ; +0x30, 0x180002860\nmov     r9, [r11]                                                      ; +0x34, 0x180002864\nmov     r10d, [rsi+70h]                                                ; +0x37, 0x180002867\nshr     r9, cl                                                         ; +0x3b, 0x18000286b\nand     r10, r9                                                        ; +0x3e, 0x18000286e\nmovzx   edx, word ptr [rax+r10*2]                                      ; +0x41, 0x180002871\nmov     eax, edx                                                       ; +0x46, 0x180002876\nand     eax, 7FFFh                                                     ; +0x48, 0x180002878\nmovsx   r8d, byte ptr [rax+rdi]                                        ; +0x4d, 0x18000287d\ncmp     edx, 8000h                                                     ; +0x52, 0x180002882\njb      short loc_1800028A5                                            ; +0x58, 0x180002888\nmov     r8d, edx                                                       ; +0x5a, 0x18000288a\nmov     rcx, rsi                                                       ; +0x5d, 0x18000288d\nmov     rdx, rbx                                                       ; +0x60, 0x180002890\ncall    sub_180001910                                                  ; +0x63, 0x180002893\nmov     ecx, [rbx+10h]                                                 ; +0x68, 0x180002898\nmov     r11, [rbx]                                                     ; +0x6b, 0x18000289b\nmov     edx, eax                                                       ; +0x6e, 0x18000289e\nmovsx   r8d, byte ptr [rdx+rdi]                                        ; +0x70, 0x1800028a0\nadd     ecx, r8d                                                       ; +0x75, 0x1800028a5\nmov     eax, ecx                                                       ; +0x78, 0x1800028a8\nand     eax, 7                                                         ; +0x7a, 0x1800028aa\nmov     [rbx+10h], eax                                                 ; +0x7d, 0x1800028ad\nmovsxd  rax, ecx                                                       ; +0x80, 0x1800028b0\nlea     ecx, [rdx-1]                                                   ; +0x83, 0x1800028b3\nsar     rax, 3                                                         ; +0x86, 0x1800028b6\nadd     rax, r11                                                       ; +0x8a, 0x1800028ba\nmov     [rbx], rax                                                     ; +0x8d, 0x1800028bd\nmov     rax, [rsi+48h]                                                 ; +0x90, 0x1800028c0\nmovsx   edi, byte ptr [rsi+66h]                                        ; +0x94, 0x1800028c4\nmov     rsi, [rsp+28h+arg_10]                                          ; +0x98, 0x1800028c8\nmovzx   r11d, word ptr [rax+rcx*2]                                     ; +0x9d, 0x1800028cd\nmov     ecx, edi                                                       ; +0xa2, 0x1800028d2\nmov     rdi, [rsp+28h+arg_18]                                          ; +0xa4, 0x1800028d4\nmov     r10d, r11d                                                     ; +0xa9, 0x1800028d9\nshr     r10d, cl                                                       ; +0xac, 0x1800028dc\nmov     r8d, r10d                                                      ; +0xaf, 0x1800028df\nshr     r8d, cl                                                        ; +0xb2, 0x1800028e2\nmov     eax, r8d                                                       ; +0xb5, 0x1800028e5\nmovd    xmm3, r11d                                                     ; +0xb8, 0x1800028e8\nshr     eax, cl                                                        ; +0xbd, 0x1800028ed\nmov     ebx, eax                                                       ; +0xbf, 0x1800028ef\nmovd    xmm0, r10d                                                     ; +0xc1, 0x1800028f1\npunpckldq xmm3, xmm0                                                   ; +0xc6, 0x1800028f6\nshr     ebx, cl                                                        ; +0xca, 0x1800028fa\nmovd    xmm1, eax                                                      ; +0xcc, 0x1800028fc\nmov     r9d, ebx                                                       ; +0xd0, 0x180002900\nshr     r9d, cl                                                        ; +0xd3, 0x180002903\nmov     edx, r9d                                                       ; +0xd6, 0x180002906\nmovd    xmm2, r8d                                                      ; +0xd9, 0x180002909\npunpckldq xmm2, xmm1                                                   ; +0xde, 0x18000290e\npunpcklqdq xmm3, xmm2                                                  ; +0xe2, 0x180002912\nmovdqu  xmmword ptr [r14], xmm3                                        ; +0xe6, 0x180002916\nshr     edx, cl                                                        ; +0xeb, 0x18000291b\nmovd    xmm3, ebx                                                      ; +0xed, 0x18000291d\nmov     eax, edx                                                       ; +0xf1, 0x180002921\nmov     rbx, [rsp+28h+arg_0]                                           ; +0xf3, 0x180002923\nshr     eax, cl                                                        ; +0xf8, 0x180002928\nmovd    xmm2, edx                                                      ; +0xfa, 0x18000292a\nmovd    xmm0, r9d                                                      ; +0xfe, 0x18000292e\npunpckldq xmm3, xmm0                                                   ; +0x103, 0x180002933\nmovd    xmm1, eax                                                      ; +0x107, 0x180002937\npunpckldq xmm2, xmm1                                                   ; +0x10b, 0x18000293b\npunpcklqdq xmm3, xmm2                                                  ; +0x10f, 0x18000293f\nmovdqu  xmmword ptr [rbp+0], xmm3                                      ; +0x113, 0x180002943\nmov     rbp, [rsp+28h+arg_8]                                           ; +0x118, 0x180002948\nadd     rsp, 20h                                                       ; +0x11d, 0x18000294d\npop     r14                                                            ; +0x121, 0x180002951\nretn                                                                   ; +0x123, 0x180002953", "xrefs": ["sub_180002B80 @ 0x180003050", "sub_180003390 @ 0x180003610", "sub_180003390 @ 0x180003625", "<???> @ 0x1801f612c"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}