{"type": "func", "start": 6442461536, "end": 6442462079, "name": "sub_180002960", "pseudocode": "// \n// sub_180002960 from 0x180002960 to 0x180002b7f (543 bytes)\n// \n// 12 xrefs:\n// > sub_180002B80 @ 0x180002c29\n// > sub_180002B80 @ 0x180002c66\n// > sub_180002B80 @ 0x180002d49\n// > sub_180002B80 @ 0x180002e86\n// > sub_180003130 @ 0x1800031b6\n// > sub_180003130 @ 0x1800031fa\n// > sub_180003130 @ 0x180003296\n// > sub_180003390 @ 0x180003436\n// > sub_180003390 @ 0x180003450\n// > sub_180003390 @ 0x1800034a6\n// > sub_180003390 @ 0x180003526\n// > <???> @ 0x1801f6138\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__m128i __fastcall sub_180002960(__int64 a1, __int64 a2)\n{\n  __int64 v3; // r12\n  __int64 v5; // r14\n  unsigned __int64 v6; // rbx\n  unsigned int v7; // r15d\n  int v8; // r11d\n  unsigned __int64 v9; // rdx\n  unsigned int v10; // esi\n  int v11; // r10d\n  unsigned __int64 v12; // rdx\n  unsigned int v13; // ebp\n  int v14; // r9d\n  unsigned int v15; // r8d\n  int v16; // edx\n  unsigned __int64 v17; // rbx\n  unsigned __int64 v18; // rbx\n  unsigned __int64 v19; // rbx\n  unsigned int v20; // eax\n  int v21; // ecx\n  __int64 v22; // r10\n  int v24; // [rsp+70h] [rbp+8h]\n  int v25; // [rsp+78h] [rbp+10h]\n  int v26; // [rsp+80h] [rbp+18h]\n  __int64 v27; // [rsp+88h] [rbp+20h]\n\n  v3 = *(_QWORD *)(a1 + 56);\n  v5 = *(unsigned int *)(a1 + 112);\n  v27 = *(_QWORD *)(a1 + 48);\n  v6 = **(_QWORD **)a2 >> *(_DWORD *)(a2 + 16);\n  v7 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5));\n  v8 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5)) & 0x7FFF) + v3);\n  v9 = v6 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5)) & 0x7FFF) + v3);\n  v10 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5));\n  v11 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5)) & 0x7FFF) + v3);\n  v12 = v9 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5)) & 0x7FFF) + v3);\n  v13 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5));\n  v14 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5)) & 0x7FFF) + v3);\n  v15 = *(unsigned __int16 *)(v27\n                            + 2\n                            * (v5\n                             & (v12 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5))\n                                                 & 0x7FFF)\n                                                + v3))));\n  v16 = *(char *)((v15 & 0x7FFF) + v3);\n  if ( ((v7 | v10 | v13 | v15) & 0x8000u) != 0 )\n  {\n    if ( v7 >= 0x8000 )\n      v7 = sub_180001910(a1, a2, v7, v6);\n    v26 = *(char *)(v7 + v3);\n    v17 = v6 >> v26;\n    v10 = *(unsigned __int16 *)(v27 + 2 * (v17 & v5));\n    if ( v10 >= 0x8000 )\n      v10 = sub_180001910(a1, a2, *(_WORD *)(v27 + 2 * (v17 & v5)), v17);\n    v25 = *(char *)(v10 + v3);\n    v18 = v17 >> v25;\n    v13 = *(unsigned __int16 *)(v27 + 2 * (v18 & v5));\n    if ( v13 >= 0x8000 )\n      v13 = sub_180001910(a1, a2, v13, v18);\n    v14 = *(char *)(v13 + v3);\n    v19 = v18 >> *(_BYTE *)(v13 + v3);\n    v24 = v14;\n    v15 = *(unsigned __int16 *)(v27 + 2 * (v19 & v5));\n    if ( v15 >= 0x8000 )\n    {\n      v20 = sub_180001910(a1, a2, v15, v19);\n      v14 = v24;\n      v15 = v20;\n    }\n    v11 = v25;\n    v8 = v26;\n    v16 = *(char *)(v15 + v3);\n  }\n  v21 = v8 + v11 + v14 + v16 + *(_DWORD *)(a2 + 16);\n  *(_DWORD *)(a2 + 16) = ((_BYTE)v8 + (_BYTE)v11 + (_BYTE)v14 + (_BYTE)v16 + *(_BYTE *)(a2 + 16)) & 7;\n  *(_QWORD *)a2 += (__int64)v21 >> 3;\n  v22 = *(_QWORD *)(a1 + 72);\n  return _mm_unpacklo_epi64(\n           _mm_unpacklo_epi32(\n             _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v7 - 1))),\n             _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v10 - 1)))),\n           _mm_unpacklo_epi32(\n             _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v13 - 1))),\n             _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v15 - 1)))));\n}", "assembly": "; \n; sub_180002960 from 0x180002960 to 0x180002b7f (543 bytes)\n; \n; 12 xrefs:\n; > sub_180002B80 @ 0x180002c29\n; > sub_180002B80 @ 0x180002c66\n; > sub_180002B80 @ 0x180002d49\n; > sub_180002B80 @ 0x180002e86\n; > sub_180003130 @ 0x1800031b6\n; > sub_180003130 @ 0x1800031fa\n; > sub_180003130 @ 0x180003296\n; > sub_180003390 @ 0x180003436\n; > sub_180003390 @ 0x180003450\n; > sub_180003390 @ 0x1800034a6\n; > sub_180003390 @ 0x180003526\n; > <???> @ 0x1801f6138\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\npush    rbx                                                            ; +0x0, 0x180002960\npush    rbp                                                            ; +0x2, 0x180002962\npush    rsi                                                            ; +0x3, 0x180002963\npush    rdi                                                            ; +0x4, 0x180002964\npush    r12                                                            ; +0x5, 0x180002965\npush    r13                                                            ; +0x7, 0x180002967\npush    r14                                                            ; +0x9, 0x180002969\npush    r15                                                            ; +0xb, 0x18000296b\nsub     rsp, 28h                                                       ; +0xd, 0x18000296d\nmov     r8, [rcx+30h]                                                  ; +0x11, 0x180002971\nmov     r13, rcx                                                       ; +0x15, 0x180002975\nmov     r12, [rcx+38h]                                                 ; +0x18, 0x180002978\nmov     rdi, rdx                                                       ; +0x1c, 0x18000297c\nmov     rax, [rdx]                                                     ; +0x1f, 0x18000297f\nmov     ecx, [rdx+10h]                                                 ; +0x22, 0x180002982\nmov     r14d, [r13+70h]                                                ; +0x25, 0x180002985\nmov     [rsp+68h+arg_18], r8                                           ; +0x29, 0x180002989\nmov     rbx, [rax]                                                     ; +0x31, 0x180002991\nmov     eax, r14d                                                      ; +0x34, 0x180002994\nshr     rbx, cl                                                        ; +0x37, 0x180002997\nand     rax, rbx                                                       ; +0x3a, 0x18000299a\nmov     rdx, rbx                                                       ; +0x3d, 0x18000299d\nmovzx   r15d, word ptr [r8+rax*2]                                      ; +0x40, 0x1800029a0\nmov     eax, r15d                                                      ; +0x45, 0x1800029a5\nand     eax, 7FFFh                                                     ; +0x48, 0x1800029a8\nmovsx   r11d, byte ptr [rax+r12]                                       ; +0x4d, 0x1800029ad\nmov     eax, r14d                                                      ; +0x52, 0x1800029b2\nmov     ecx, r11d                                                      ; +0x55, 0x1800029b5\nshr     rdx, cl                                                        ; +0x58, 0x1800029b8\nand     rax, rdx                                                       ; +0x5b, 0x1800029bb\nmovzx   esi, word ptr [r8+rax*2]                                       ; +0x5e, 0x1800029be\nmov     eax, esi                                                       ; +0x63, 0x1800029c3\nand     eax, 7FFFh                                                     ; +0x65, 0x1800029c5\nmovsx   r10d, byte ptr [rax+r12]                                       ; +0x6a, 0x1800029ca\nmov     eax, r14d                                                      ; +0x6f, 0x1800029cf\nmov     ecx, r10d                                                      ; +0x72, 0x1800029d2\nshr     rdx, cl                                                        ; +0x75, 0x1800029d5\nand     rax, rdx                                                       ; +0x78, 0x1800029d8\nmovzx   ebp, word ptr [r8+rax*2]                                       ; +0x7b, 0x1800029db\nmov     eax, ebp                                                       ; +0x80, 0x1800029e0\nand     eax, 7FFFh                                                     ; +0x82, 0x1800029e2\nmovsx   r9d, byte ptr [rax+r12]                                        ; +0x87, 0x1800029e7\nmov     ecx, r9d                                                       ; +0x8c, 0x1800029ec\nshr     rdx, cl                                                        ; +0x8f, 0x1800029ef\nmov     ecx, 8000h                                                     ; +0x92, 0x1800029f2\nand     rdx, r14                                                       ; +0x97, 0x1800029f7\nmovzx   r8d, word ptr [r8+rdx*2]                                       ; +0x9a, 0x1800029fa\nmov     eax, r8d                                                       ; +0x9f, 0x1800029ff\nand     eax, 7FFFh                                                     ; +0xa2, 0x180002a02\nmovsx   edx, byte ptr [rax+r12]                                        ; +0xa7, 0x180002a07\nmovzx   eax, r8w                                                       ; +0xac, 0x180002a0c\nor      ax, bp                                                         ; +0xb0, 0x180002a10\nor      ax, si                                                         ; +0xb3, 0x180002a13\nor      ax, r15w                                                       ; +0xb6, 0x180002a16\ntest    cx, ax                                                         ; +0xba, 0x180002a1a\njz      loc_180002B0A                                                  ; +0xbd, 0x180002a1d\ncmp     r15d, ecx                                                      ; +0xc3, 0x180002a23\njb      short loc_180002A3C                                            ; +0xc6, 0x180002a26\nmov     r9d, ebx                                                       ; +0xc8, 0x180002a28\nmov     r8d, r15d                                                      ; +0xcb, 0x180002a2b\nmov     rdx, rdi                                                       ; +0xce, 0x180002a2e\nmov     rcx, r13                                                       ; +0xd1, 0x180002a31\ncall    sub_180001910                                                  ; +0xd4, 0x180002a34\nmov     r15d, eax                                                      ; +0xd9, 0x180002a39\nmov     rbp, [rsp+68h+arg_18]                                          ; +0xdc, 0x180002a3c\nmov     eax, r15d                                                      ; +0xe4, 0x180002a44\nmovsx   eax, byte ptr [rax+r12]                                        ; +0xe7, 0x180002a47\nmov     ecx, eax                                                       ; +0xec, 0x180002a4c\nmov     [rsp+68h+arg_10], eax                                          ; +0xee, 0x180002a4e\nshr     rbx, cl                                                        ; +0xf5, 0x180002a55\nmov     rax, r14                                                       ; +0xf8, 0x180002a58\nand     rax, rbx                                                       ; +0xfb, 0x180002a5b\nmovzx   esi, word ptr [rbp+rax*2+0]                                    ; +0xfe, 0x180002a5e\ncmp     esi, 8000h                                                     ; +0x103, 0x180002a63\njb      short loc_180002A7E                                            ; +0x109, 0x180002a69\nmov     r9d, ebx                                                       ; +0x10b, 0x180002a6b\nmov     r8d, esi                                                       ; +0x10e, 0x180002a6e\nmov     rdx, rdi                                                       ; +0x111, 0x180002a71\nmov     rcx, r13                                                       ; +0x114, 0x180002a74\ncall    sub_180001910                                                  ; +0x117, 0x180002a77\nmov     esi, eax                                                       ; +0x11c, 0x180002a7c\nmov     eax, esi                                                       ; +0x11e, 0x180002a7e\nmovsx   eax, byte ptr [rax+r12]                                        ; +0x120, 0x180002a80\nmov     ecx, eax                                                       ; +0x125, 0x180002a85\nmov     [rsp+68h+arg_8], eax                                           ; +0x127, 0x180002a87\nshr     rbx, cl                                                        ; +0x12b, 0x180002a8b\nmov     rax, r14                                                       ; +0x12e, 0x180002a8e\nand     rax, rbx                                                       ; +0x131, 0x180002a91\nmovzx   ebp, word ptr [rbp+rax*2+0]                                    ; +0x134, 0x180002a94\ncmp     ebp, 8000h                                                     ; +0x139, 0x180002a99\njb      short loc_180002AB4                                            ; +0x13f, 0x180002a9f\nmov     r9d, ebx                                                       ; +0x141, 0x180002aa1\nmov     r8d, ebp                                                       ; +0x144, 0x180002aa4\nmov     rdx, rdi                                                       ; +0x147, 0x180002aa7\nmov     rcx, r13                                                       ; +0x14a, 0x180002aaa\ncall    sub_180001910                                                  ; +0x14d, 0x180002aad\nmov     ebp, eax                                                       ; +0x152, 0x180002ab2\nmov     eax, ebp                                                       ; +0x154, 0x180002ab4\nmovsx   r9d, byte ptr [rax+r12]                                        ; +0x156, 0x180002ab6\nmov     rax, [rsp+68h+arg_18]                                          ; +0x15b, 0x180002abb\nmov     ecx, r9d                                                       ; +0x163, 0x180002ac3\nshr     rbx, cl                                                        ; +0x166, 0x180002ac6\nand     r14, rbx                                                       ; +0x169, 0x180002ac9\nmov     [rsp+68h+arg_0], r9d                                           ; +0x16c, 0x180002acc\nmovzx   r8d, word ptr [rax+r14*2]                                      ; +0x171, 0x180002ad1\ncmp     r8d, 8000h                                                     ; +0x176, 0x180002ad6\njb      short loc_180002AF5                                            ; +0x17d, 0x180002add\nmov     r9d, ebx                                                       ; +0x17f, 0x180002adf\nmov     rdx, rdi                                                       ; +0x182, 0x180002ae2\nmov     rcx, r13                                                       ; +0x185, 0x180002ae5\ncall    sub_180001910                                                  ; +0x188, 0x180002ae8\nmov     r9d, [rsp+68h+arg_0]                                           ; +0x18d, 0x180002aed\nmov     r8d, eax                                                       ; +0x192, 0x180002af2\nmov     r10d, [rsp+68h+arg_8]                                          ; +0x195, 0x180002af5\nmov     r11d, [rsp+68h+arg_10]                                         ; +0x19a, 0x180002afa\nmov     eax, r8d                                                       ; +0x1a2, 0x180002b02\nmovsx   edx, byte ptr [rax+r12]                                        ; +0x1a5, 0x180002b05\nmov     ecx, [rdi+10h]                                                 ; +0x1aa, 0x180002b0a\nadd     ecx, edx                                                       ; +0x1ad, 0x180002b0d\nadd     ecx, r9d                                                       ; +0x1af, 0x180002b0f\nadd     ecx, r10d                                                      ; +0x1b2, 0x180002b12\nadd     ecx, r11d                                                      ; +0x1b5, 0x180002b15\nmov     eax, ecx                                                       ; +0x1b8, 0x180002b18\nand     eax, 7                                                         ; +0x1ba, 0x180002b1a\nmov     [rdi+10h], eax                                                 ; +0x1bd, 0x180002b1d\nmovsxd  rax, ecx                                                       ; +0x1c0, 0x180002b20\nsar     rax, 3                                                         ; +0x1c3, 0x180002b23\nadd     [rdi], rax                                                     ; +0x1c7, 0x180002b27\nlea     eax, [r8-1]                                                    ; +0x1ca, 0x180002b2a\nmov     r10, [r13+48h]                                                 ; +0x1ce, 0x180002b2e\nmovzx   r9d, word ptr [r10+rax*2]                                      ; +0x1d2, 0x180002b32\nlea     eax, [rbp-1]                                                   ; +0x1d7, 0x180002b37\nmovzx   r8d, word ptr [r10+rax*2]                                      ; +0x1da, 0x180002b3a\nlea     eax, [rsi-1]                                                   ; +0x1df, 0x180002b3f\nmovzx   edx, word ptr [r10+rax*2]                                      ; +0x1e2, 0x180002b42\nlea     eax, [r15-1]                                                   ; +0x1e7, 0x180002b47\nmovzx   eax, word ptr [r10+rax*2]                                      ; +0x1eb, 0x180002b4b\nmovd    xmm2, r9d                                                      ; +0x1f0, 0x180002b50\nmovd    xmm3, r8d                                                      ; +0x1f5, 0x180002b55\nmovd    xmm1, edx                                                      ; +0x1fa, 0x180002b5a\nmovd    xmm0, eax                                                      ; +0x1fe, 0x180002b5e\npunpckldq xmm0, xmm1                                                   ; +0x202, 0x180002b62\npunpckldq xmm3, xmm2                                                   ; +0x206, 0x180002b66\npunpcklqdq xmm0, xmm3                                                  ; +0x20a, 0x180002b6a\nadd     rsp, 28h                                                       ; +0x20e, 0x180002b6e\npop     r15                                                            ; +0x212, 0x180002b72\npop     r14                                                            ; +0x214, 0x180002b74\npop     r13                                                            ; +0x216, 0x180002b76\npop     r12                                                            ; +0x218, 0x180002b78\npop     rdi                                                            ; +0x21a, 0x180002b7a\npop     rsi                                                            ; +0x21b, 0x180002b7b\npop     rbp                                                            ; +0x21c, 0x180002b7c\npop     rbx                                                            ; +0x21d, 0x180002b7d\nretn                                                                   ; +0x21e, 0x180002b7e", "xrefs": ["sub_180002B80 @ 0x180002c29", "sub_180002B80 @ 0x180002c66", "sub_180002B80 @ 0x180002d49", "sub_180002B80 @ 0x180002e86", "sub_180003130 @ 0x1800031b6", "sub_180003130 @ 0x1800031fa", "sub_180003130 @ 0x180003296", "sub_180003390 @ 0x180003436", "sub_180003390 @ 0x180003450", "sub_180003390 @ 0x1800034a6", "sub_180003390 @ 0x180003526", "<???> @ 0x1801f6138"], "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"}