{"type": "func", "start": 363928, "end": 364424, "name": "sub_58D98", "pseudocode": "// \n// sub_58D98 from 0x58d98 to 0x58f88 (496 bytes)\n// \n// 1 xrefs:\n// > <???> @ 0x10c488\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_58D98(__int64 *a1, int a2)\n{\n  int v2; // w21\n  __int64 result; // x0\n  unsigned int v6; // w8\n  int v7; // w8\n  int v8; // w8\n  unsigned int v9; // w9\n  int v10; // w8\n  unsigned int v11; // w8\n  int v12; // w9\n  int v13; // w9\n  unsigned int v14; // w8\n  __int64 v15; // x10\n  __int64 v21; // x0\n  __int64 v22; // x2\n  __int64 v23; // x3\n  int v24; // w8\n  __int64 v25; // x9\n  unsigned int v26; // w10\n  int v27; // w8\n  __int64 v28; // [xsp+8h] [xbp-18h] BYREF\n\n  v2 = *((_DWORD *)a1 + 128);\n  result = (*(__int64 (__fastcall **)(__int64 *, __int64, __int64 *))(*a1 + 288))(a1, 4294967294LL, &v28);\n  if ( (_DWORD)result )\n    return result;\n  if ( (a2 & 7) != 0 )\n  {\n    v6 = a1[64] & 0xFFFFFFF8;\n    *((_DWORD *)a1 + 128) = v6;\n    if ( (a2 & 1) != 0 )\n    {\n      v7 = v6 | 1;\n    }\n    else if ( (a2 & 2) != 0 )\n    {\n      v7 = v6 | 2;\n    }\n    else\n    {\n      if ( (a2 & 4) == 0 )\n        goto LABEL_11;\n      v7 = v6 | 4;\n    }\n    *((_DWORD *)a1 + 128) = v7;\n  }\nLABEL_11:\n  if ( (a2 & 0x40000) != 0 )\n  {\n    v8 = 0x40000;\n  }\n  else\n  {\n    if ( (a2 & 0x80000) == 0 )\n      goto LABEL_16;\n    v8 = 0x80000;\n  }\n  *((_DWORD *)a1 + 128) = a1[64] & 0xFFF3FFFF | v8;\nLABEL_16:\n  if ( (a2 & 0x100000) != 0 )\n  {\n    v10 = 0x100000;\nLABEL_26:\n    v9 = *((_DWORD *)a1 + 128);\n    goto LABEL_27;\n  }\n  if ( (a2 & 0x200000) != 0 )\n  {\n    v10 = 0x200000;\n    goto LABEL_26;\n  }\n  if ( (a2 & 0x400000) != 0 )\n  {\n    v10 = 0x400000;\n    goto LABEL_26;\n  }\n  if ( (a2 & 0x800000) != 0 )\n  {\n    v10 = 0x800000;\n    goto LABEL_26;\n  }\n  v9 = *((_DWORD *)a1 + 128);\n  if ( (a2 & 0x4000000) == 0 )\n    goto LABEL_28;\n  v10 = 0x4000000;\nLABEL_27:\n  v9 = v9 & 0xFB0FFFFF | v10;\n  *((_DWORD *)a1 + 128) = v9;\nLABEL_28:\n  v11 = v9 & 0xBFFFFFFF;\n  v12 = v9 | 0x40000000;\n  if ( (a2 & 0x40000000) != 0 )\n    v11 = v12;\n  v13 = v11 & 0x7FFFFFFF;\n  v14 = v11 | 0x80000000;\n  if ( a2 >= 0 )\n    v14 = v13;\n  *((_DWORD *)a1 + 128) = v14;\n  if ( (a2 & 8) != 0 )\n  {\n    v15 = *a1;\n    __asm { FMOV            V0.2S, #1.0 }\n    *((_DWORD *)a1 + 48) = 0;\n    *((_DWORD *)a1 + 41) = 1065353216;\n    a1[15] = _D0;\n    *((_DWORD *)a1 + 128) = v14 & 0xFFFFFFE7 | 8;\n    result = (*(__int64 (__fastcall **)(__int64 *, __int64, _QWORD, _QWORD, _QWORD, _QWORD))(v15 + 200))(\n               a1,\n               a1[8],\n               (unsigned int)*((__int16 *)a1 + 29),\n               (unsigned int)*((__int16 *)a1 + 28),\n               0,\n               0);\n    if ( (_DWORD)result )\n      return result;\n    v21 = v28;\n    v22 = 0;\n    v23 = 0;\n  }\n  else\n  {\n    if ( (a2 & 0x10) == 0 )\n      goto LABEL_34;\n    *((_DWORD *)a1 + 128) = v14 & 0xFFFFFFE7 | 0x10;\n    v21 = v28;\n    v22 = 1;\n    v23 = 2;\n  }\n  result = sub_C7E34(v21, 0, v22, v23);\n  if ( (_DWORD)result )\n    return result;\n  if ( (a2 & 0x10) == 0 || (v2 & 0x10) != 0 )\n  {\nLABEL_34:\n    if ( ((v2 ^ a2) & 0x4F00000) == 0 )\n      goto LABEL_43;\n  }\n  *((_DWORD *)a1 + 18) |= 4u;\nLABEL_43:\n  v24 = *((_DWORD *)a1 + 128);\n  v25 = *a1;\n  v26 = v24 & 0xFEFFFFFF;\n  v27 = v24 | 0x1000000;\n  if ( (a2 & 0x1000000) == 0 )\n    v27 = v26;\n  *((_DWORD *)a1 + 128) = v27;\n  return (*(__int64 (__fastcall **)(__int64 *))(v25 + 520))(a1);\n}", "assembly": "; \n; sub_58D98 from 0x58d98 to 0x58f88 (496 bytes)\n; \n; 1 xrefs:\n; > <???> @ 0x10c488\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\nSTR             X21, [SP,#-0x10+var_20]!                               ; +0x0, 0x58d98\nSTP             X20, X19, [SP,#0x20+var_10]                            ; +0x4, 0x58d9c\nSTP             X29, X30, [SP,#0x20+var_s0]                            ; +0x8, 0x58da0\nLDR             X8, [X0]                                               ; +0xc, 0x58da4\nLDR             W21, [X0,#0x200]                                       ; +0x10, 0x58da8\nMOV             W20, W1                                                ; +0x14, 0x58dac\nADD             X2, SP, #0x20+var_18                                   ; +0x18, 0x58db0\nLDR             X8, [X8,#0x120]                                        ; +0x1c, 0x58db4\nMOV             W1, #0xFFFFFFFE                                        ; +0x20, 0x58db8\nADD             X29, SP, #0x20                                         ; +0x24, 0x58dbc\nMOV             X19, X0                                                ; +0x28, 0x58dc0\nBLR             X8                                                     ; +0x2c, 0x58dc4\nCBZ             W0, loc_58DD8                                          ; +0x30, 0x58dc8\nLDP             X29, X30, [SP,#0x20+var_s0]                            ; +0x34, 0x58dcc\nLDP             X20, X19, [SP,#0x20+var_10]                            ; +0x38, 0x58dd0\nB               loc_59350                                              ; +0x3c, 0x58dd4\nTST             W20, #7                                                ; +0x40, 0x58dd8\nB.EQ            loc_58E10                                              ; +0x44, 0x58ddc\nLDR             W8, [X19,#0x200]                                       ; +0x48, 0x58de0\nAND             W8, W8, #0xFFFFFFF8                                    ; +0x4c, 0x58de4\nSTR             W8, [X19,#0x200]                                       ; +0x50, 0x58de8\nTBNZ            W20, #0, loc_58E00                                     ; +0x54, 0x58dec\nTBNZ            W20, #1, loc_58E08                                     ; +0x58, 0x58df0\nTBZ             W20, #2, loc_58E10                                     ; +0x5c, 0x58df4\nORR             W8, W8, #4                                             ; +0x60, 0x58df8\nB               loc_58E0C                                              ; +0x64, 0x58dfc\nORR             W8, W8, #1                                             ; +0x68, 0x58e00\nB               loc_58E0C                                              ; +0x6c, 0x58e04\nORR             W8, W8, #2                                             ; +0x70, 0x58e08\nSTR             W8, [X19,#0x200]                                       ; +0x74, 0x58e0c\nTBNZ            W20, #0x12, loc_58E20                                  ; +0x78, 0x58e10\nTBZ             W20, #0x13, loc_58E34                                  ; +0x7c, 0x58e14\nMOV             W8, #0x80000                                           ; +0x80, 0x58e18\nB               loc_58E24                                              ; +0x84, 0x58e1c\nMOV             W8, #0x40000                                           ; +0x88, 0x58e20\nLDR             W9, [X19,#0x200]                                       ; +0x8c, 0x58e24\nAND             W9, W9, #0xFFF3FFFF                                    ; +0x90, 0x58e28\nORR             W8, W9, W8                                             ; +0x94, 0x58e2c\nSTR             W8, [X19,#0x200]                                       ; +0x98, 0x58e30\nTBNZ            W20, #0x14, loc_58E54                                  ; +0x9c, 0x58e34\nTBNZ            W20, #0x15, loc_58E5C                                  ; +0xa0, 0x58e38\nTBNZ            W20, #0x16, loc_58E64                                  ; +0xa4, 0x58e3c\nTBNZ            W20, #0x17, loc_58E6C                                  ; +0xa8, 0x58e40\nLDR             W9, [X19,#0x200]                                       ; +0xac, 0x58e44\nTBZ             W20, #0x1A, loc_58E84                                  ; +0xb0, 0x58e48\nMOV             W8, #0x4000000                                         ; +0xb4, 0x58e4c\nB               loc_58E74                                              ; +0xb8, 0x58e50\nMOV             W8, #0x100000                                          ; +0xbc, 0x58e54\nB               loc_58E70                                              ; +0xc0, 0x58e58\nMOV             W8, #0x200000                                          ; +0xc4, 0x58e5c\nB               loc_58E70                                              ; +0xc8, 0x58e60\nMOV             W8, #0x400000                                          ; +0xcc, 0x58e64\nB               loc_58E70                                              ; +0xd0, 0x58e68\nMOV             W8, #0x800000                                          ; +0xd4, 0x58e6c\nLDR             W9, [X19,#0x200]                                       ; +0xd8, 0x58e70\nMOV             W10, #0xFB0FFFFF                                       ; +0xdc, 0x58e74\nAND             W9, W9, W10                                            ; +0xe0, 0x58e78\nORR             W9, W9, W8                                             ; +0xe4, 0x58e7c\nSTR             W9, [X19,#0x200]                                       ; +0xe8, 0x58e80\nAND             W8, W9, #0xBFFFFFFF                                    ; +0xec, 0x58e84\nORR             W9, W9, #0x40000000                                    ; +0xf0, 0x58e88\nTST             W20, #0x40000000                                       ; +0xf4, 0x58e8c\nCSEL            W8, W8, W9, EQ                                         ; +0xf8, 0x58e90\nAND             W9, W8, #0x7FFFFFFF                                    ; +0xfc, 0x58e94\nORR             W8, W8, #0x80000000                                    ; +0x100, 0x58e98\nCMP             W20, #0                                                ; +0x104, 0x58e9c\nCSEL            W8, W8, W9, LT                                         ; +0x108, 0x58ea0\nSTR             W8, [X19,#0x200]                                       ; +0x10c, 0x58ea4\nTBNZ            W20, #3, loc_58EC4                                     ; +0x110, 0x58ea8\nTBNZ            W20, #4, loc_58F20                                     ; +0x114, 0x58eac\nEOR             W8, W21, W20                                           ; +0x118, 0x58eb0\nMOV             W9, #0x4F00000                                         ; +0x11c, 0x58eb4\nTST             W8, W9                                                 ; +0x120, 0x58eb8\nB.NE            loc_58F50                                              ; +0x124, 0x58ebc\nB               loc_58F5C                                              ; +0x128, 0x58ec0\nLDR             X10, [X19]                                             ; +0x12c, 0x58ec4\nAND             W8, W8, #0xFFFFFFE7                                    ; +0x130, 0x58ec8\nMOV             W9, #0x3F800000                                        ; +0x134, 0x58ecc\nFMOV            V0.2S, #1.0                                            ; +0x138, 0x58ed0\nORR             W8, W8, #8                                             ; +0x13c, 0x58ed4\nSTR             WZR, [X19,#0xC0]                                       ; +0x140, 0x58ed8\nSTR             W9, [X19,#0xA4]                                        ; +0x144, 0x58edc\nSTR             D0, [X19,#0x78]                                        ; +0x148, 0x58ee0\nSTR             W8, [X19,#0x200]                                       ; +0x14c, 0x58ee4\nLDR             X1, [X19,#0x40]                                        ; +0x150, 0x58ee8\nLDRSH           W2, [X19,#0x3A]                                        ; +0x154, 0x58eec\nLDRSH           W3, [X19,#0x38]                                        ; +0x158, 0x58ef0\nLDR             X8, [X10,#0xC8]                                        ; +0x15c, 0x58ef4\nMOV             X0, X19                                                ; +0x160, 0x58ef8\nMOV             W4, WZR                                                ; +0x164, 0x58efc\nMOV             W5, WZR                                                ; +0x168, 0x58f00\nBLR             X8                                                     ; +0x16c, 0x58f04\nCBNZ            W0, loc_58DCC                                          ; +0x170, 0x58f08\nLDR             X0, [SP,#0x20+var_18]                                  ; +0x174, 0x58f0c\nMOV             W1, WZR                                                ; +0x178, 0x58f10\nMOV             W2, WZR                                                ; +0x17c, 0x58f14\nMOV             W3, WZR                                                ; +0x180, 0x58f18\nB               loc_58F3C                                              ; +0x184, 0x58f1c\nAND             W8, W8, #0xFFFFFFE7                                    ; +0x188, 0x58f20\nORR             W8, W8, #0x10                                          ; +0x18c, 0x58f24\nSTR             W8, [X19,#0x200]                                       ; +0x190, 0x58f28\nLDR             X0, [SP,#0x20+var_18]                                  ; +0x194, 0x58f2c\nMOV             W2, #1                                                 ; +0x198, 0x58f30\nMOV             W3, #2                                                 ; +0x19c, 0x58f34\nMOV             W1, WZR                                                ; +0x1a0, 0x58f38\nBL              sub_C7E34                                              ; +0x1a4, 0x58f3c\nCBNZ            W0, loc_58DCC                                          ; +0x1a8, 0x58f40\nAND             W8, W20, #0x10                                         ; +0x1ac, 0x58f44\nCBZ             W8, loc_58EB0                                          ; +0x1b0, 0x58f48\nTBNZ            W21, #4, loc_58EB0                                     ; +0x1b4, 0x58f4c\nLDR             W8, [X19,#0x48]                                        ; +0x1b8, 0x58f50\nORR             W8, W8, #4                                             ; +0x1bc, 0x58f54\nSTR             W8, [X19,#0x48]                                        ; +0x1c0, 0x58f58\nLDR             W8, [X19,#0x200]                                       ; +0x1c4, 0x58f5c\nLDR             X9, [X19]                                              ; +0x1c8, 0x58f60\nTST             W20, #0x1000000                                        ; +0x1cc, 0x58f64\nMOV             X0, X19                                                ; +0x1d0, 0x58f68\nAND             W10, W8, #0xFEFFFFFF                                   ; +0x1d4, 0x58f6c\nORR             W8, W8, #0x1000000                                     ; +0x1d8, 0x58f70\nCSEL            W8, W10, W8, EQ                                        ; +0x1dc, 0x58f74\nSTR             W8, [X19,#0x200]                                       ; +0x1e0, 0x58f78\nLDR             X8, [X9,#0x208]                                        ; +0x1e4, 0x58f7c\nBLR             X8                                                     ; +0x1e8, 0x58f80\nB               loc_58DCC                                              ; +0x1ec, 0x58f84", "xrefs": ["<???> @ 0x10c488"], "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"}