{"type": "func", "start": 374072, "end": 374440, "name": "sub_5B538", "pseudocode": "// \n// sub_5B538 from 0x5b538 to 0x5b6a8 (368 bytes)\n// \n// 2 xrefs:\n// > sub_92AE0 @ 0x931a0\n// > <???> @ 0x10c630\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 sub_5B538()\n{\n  __int64 v0; // x19\n  __int64 v1; // x0\n  __int64 v2; // x8\n  __int64 v3; // x0\n  int v4; // w1\n  __int64 v5; // x9\n  int v6; // w8\n  unsigned int v7; // w10\n  int v8; // w8\n  int v9; // w20\n  __int64 v10; // x0\n  __int64 result; // x0\n  __int64 v12; // x0\n  __int64 v13; // x0\n  int v14; // [xsp+8h] [xbp-28h] BYREF\n  _BYTE v15[4]; // [xsp+Ch] [xbp-24h] BYREF\n\n  v1 = sub_5C6DC();\n  if ( !v2 )\n    return 30;\n  v3 = sub_5C688(v1);\n  if ( !v5 )\n    return 30;\n  v6 = *(_DWORD *)(v0 + 72);\n  v7 = v6 & 0xFFFFFFFE;\n  v8 = v6 | 1;\n  if ( (v4 & 1) == 0 )\n    v8 = v7;\n  *(_DWORD *)(v0 + 72) = v8;\n  v9 = v4 | ((unsigned __int8)(*(_BYTE *)(v5 + 72) & 0x10) >> 4);\n  if ( (v8 & 0x40000) != 0 && !(v4 & 1 | ((*(_BYTE *)(v5 + 72) & 0x10) != 0)) )\n  {\n    v14 = 0;\n    *(_DWORD *)(v0 + 72) = v8 & 0xFFFBFFFF;\n    v10 = sub_597E0(v0);\n    v3 = sub_5C658(v10, &v14);\n    if ( (v14 & 0x10) != 0 )\n    {\n      *(_DWORD *)(v0 + 72) |= 0x80000u;\n      v3 = sub_5B3B0(v0, 0, 1);\n      *(_DWORD *)(v0 + 72) &= ~0x80000u;\n    }\n  }\n  result = sub_5C6C4(v3, v15);\n  if ( !(_DWORD)result )\n  {\n    if ( v15[0]\n      || ((unsigned __int8)v9 & ((*(_BYTE *)(*(_QWORD *)(v0 + 32) + 72LL) & 0x10) == 0)) == 0\n      || (result = sub_5C500(*(_QWORD *)(v0 + 96)), !(_DWORD)result)\n      && ((v12 = *(_QWORD *)(v0 + 112), v12 == *(_QWORD *)(v0 + 96)) || (result = sub_5C500(v12), !(_DWORD)result)) )\n    {\n      result = (*(__int64 (__fastcall **)(_QWORD, _QWORD))(**(_QWORD **)(v0 + 472) + 88LL))(\n                 *(_QWORD *)(v0 + 472),\n                 v9 & 1);\n      if ( !(_DWORD)result )\n      {\n        if ( v15[0] || ((v9 | ((unsigned __int8)(*(_BYTE *)(*(_QWORD *)(v0 + 32) + 72LL) & 0x10) >> 4)) & 1) != 0 )\n          goto LABEL_29;\n        v13 = *(_QWORD *)(v0 + 112);\n        if ( v13 != *(_QWORD *)(v0 + 96) )\n        {\n          result = ((__int64 (*)(void))sub_5C710)();\n          if ( (_DWORD)result )\n            return result;\n          v13 = *(_QWORD *)(v0 + 96);\n        }\n        result = sub_5C710(v13);\n        if ( !(_DWORD)result )\n        {\nLABEL_29:\n          if ( (v9 & 1) != 0 )\n            return 0;\n          if ( (*(_DWORD *)(v0 + 72) & 0x800000) == 0 )\n            return 0;\n          result = sub_5C64C();\n          if ( !(_DWORD)result )\n            return 0;\n        }\n      }\n    }\n  }\n  return result;\n}", "assembly": "; \n; sub_5B538 from 0x5b538 to 0x5b6a8 (368 bytes)\n; \n; 2 xrefs:\n; > sub_92AE0 @ 0x931a0\n; > <???> @ 0x10c630\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\nSUB             SP, SP, #0x30                                          ; +0x0, 0x5b538\nSTP             X20, X19, [SP,#0x30+var_20]                            ; +0x4, 0x5b53c\nSTP             X29, X30, [SP,#0x30+var_10]                            ; +0x8, 0x5b540\nBL              sub_5C6DC                                              ; +0xc, 0x5b544\nCBZ             X8, loc_5B69C                                          ; +0x10, 0x5b548\nBL              sub_5C688                                              ; +0x14, 0x5b54c\nCBZ             X9, loc_5B69C                                          ; +0x18, 0x5b550\nLDR             W8, [X19,#0x48]                                        ; +0x1c, 0x5b554\nTST             W1, #1                                                 ; +0x20, 0x5b558\nAND             W10, W8, #0xFFFFFFFE                                   ; +0x24, 0x5b55c\nORR             W8, W8, #1                                             ; +0x28, 0x5b560\nCSEL            W8, W8, W10, NE                                        ; +0x2c, 0x5b564\nSTR             W8, [X19,#0x48]                                        ; +0x30, 0x5b568\nLDRB            W9, [X9,#0x48]                                         ; +0x34, 0x5b56c\nAND             W9, W9, #0x10                                          ; +0x38, 0x5b570\nORR             W20, W1, W9,LSR#4                                      ; +0x3c, 0x5b574\nTBZ             W8, #0x12, loc_5B5D0                                   ; +0x40, 0x5b578\nTBNZ            W20, #0, loc_5B5D0                                     ; +0x44, 0x5b57c\nAND             W8, W8, #0xFFFBFFFF                                    ; +0x48, 0x5b580\nMOV             X0, X19                                                ; +0x4c, 0x5b584\nSTR             WZR, [SP,#0x30+var_28]                                 ; +0x50, 0x5b588\nSTR             W8, [X19,#0x48]                                        ; +0x54, 0x5b58c\nBL              sub_597E0                                              ; +0x58, 0x5b590\nLDR             X8, [X19]                                              ; +0x5c, 0x5b594\nADD             X1, SP, #0x30+var_28                                   ; +0x60, 0x5b598\nBL              sub_5C658                                              ; +0x64, 0x5b59c\nLDRB            W8, [SP,#0x30+var_28]                                  ; +0x68, 0x5b5a0\nTBZ             W8, #4, loc_5B5D0                                      ; +0x6c, 0x5b5a4\nLDR             W8, [X19,#0x48]                                        ; +0x70, 0x5b5a8\nMOV             W2, #1                                                 ; +0x74, 0x5b5ac\nMOV             X0, X19                                                ; +0x78, 0x5b5b0\nMOV             W1, WZR                                                ; +0x7c, 0x5b5b4\nORR             W8, W8, #0x80000                                       ; +0x80, 0x5b5b8\nSTR             W8, [X19,#0x48]                                        ; +0x84, 0x5b5bc\nBL              sub_5B3B0                                              ; +0x88, 0x5b5c0\nLDR             W8, [X19,#0x48]                                        ; +0x8c, 0x5b5c4\nAND             W8, W8, #0xFFF7FFFF                                    ; +0x90, 0x5b5c8\nSTR             W8, [X19,#0x48]                                        ; +0x94, 0x5b5cc\nLDR             X8, [X19]                                              ; +0x98, 0x5b5d0\nADD             X1, SP, #0x30+var_24                                   ; +0x9c, 0x5b5d4\nBL              sub_5C6C4                                              ; +0xa0, 0x5b5d8\nCBNZ            W0, loc_5B6A0                                          ; +0xa4, 0x5b5dc\nLDR             X8, [X19,#0x20]                                        ; +0xa8, 0x5b5e0\nLDRB            W9, [SP,#0x30+var_24]                                  ; +0xac, 0x5b5e4\nLDRB            W8, [X8,#0x48]                                         ; +0xb0, 0x5b5e8\nTST             W8, #0x10                                              ; +0xb4, 0x5b5ec\nCSET            W8, EQ                                                 ; +0xb8, 0x5b5f0\nCBNZ            W9, loc_5B624                                          ; +0xbc, 0x5b5f4\nAND             W8, W20, W8                                            ; +0xc0, 0x5b5f8\nCBZ             W8, loc_5B624                                          ; +0xc4, 0x5b5fc\nLDR             X0, [X19,#0x60]                                        ; +0xc8, 0x5b600\nBL              sub_5C500                                              ; +0xcc, 0x5b604\nCBNZ            W0, loc_5B6A0                                          ; +0xd0, 0x5b608\nLDR             X0, [X19,#0x70]                                        ; +0xd4, 0x5b60c\nLDR             X8, [X19,#0x60]                                        ; +0xd8, 0x5b610\nCMP             X0, X8                                                 ; +0xdc, 0x5b614\nB.EQ            loc_5B624                                              ; +0xe0, 0x5b618\nBL              sub_5C500                                              ; +0xe4, 0x5b61c\nCBNZ            W0, loc_5B6A0                                          ; +0xe8, 0x5b620\nLDR             X0, [X19,#0x1D8]                                       ; +0xec, 0x5b624\nAND             W1, W20, #1                                            ; +0xf0, 0x5b628\nLDR             X8, [X0]                                               ; +0xf4, 0x5b62c\nLDR             X8, [X8,#0x58]                                         ; +0xf8, 0x5b630\nBLR             X8                                                     ; +0xfc, 0x5b634\nCBNZ            W0, loc_5B6A0                                          ; +0x100, 0x5b638\nLDRB            W8, [SP,#0x30+var_24]                                  ; +0x104, 0x5b63c\nCBNZ            W8, loc_5B67C                                          ; +0x108, 0x5b640\nLDR             X8, [X19,#0x20]                                        ; +0x10c, 0x5b644\nLDRB            W8, [X8,#0x48]                                         ; +0x110, 0x5b648\nAND             W8, W8, #0x10                                          ; +0x114, 0x5b64c\nORR             W8, W20, W8,LSR#4                                      ; +0x118, 0x5b650\nTBNZ            W8, #0, loc_5B67C                                      ; +0x11c, 0x5b654\nLDR             X0, [X19,#0x70]                                        ; +0x120, 0x5b658\nLDR             X8, [X19,#0x60]                                        ; +0x124, 0x5b65c\nCMP             X0, X8                                                 ; +0x128, 0x5b660\nB.EQ            loc_5B674                                              ; +0x12c, 0x5b664\nBL              sub_5C710                                              ; +0x130, 0x5b668\nCBNZ            W0, loc_5B6A0                                          ; +0x134, 0x5b66c\nLDR             X0, [X19,#0x60]                                        ; +0x138, 0x5b670\nBL              sub_5C710                                              ; +0x13c, 0x5b674\nCBNZ            W0, loc_5B6A0                                          ; +0x140, 0x5b678\nTBNZ            W20, #0, loc_5B694                                     ; +0x144, 0x5b67c\nLDR             W8, [X19,#0x48]                                        ; +0x148, 0x5b680\nTBZ             W8, #0x17, loc_5B694                                   ; +0x14c, 0x5b684\nAND             W8, W8, #0xFF3FFFFF                                    ; +0x150, 0x5b688\nBL              sub_5C64C                                              ; +0x154, 0x5b68c\nCBNZ            W0, loc_5B6A0                                          ; +0x158, 0x5b690\nMOV             W0, WZR                                                ; +0x15c, 0x5b694\nB               loc_5B6A0                                              ; +0x160, 0x5b698\nMOV             W0, #0x1E                                              ; +0x164, 0x5b69c\nLDP             X29, X30, [SP,#0x30+var_10]                            ; +0x168, 0x5b6a0\nB               loc_5C60C                                              ; +0x16c, 0x5b6a4", "xrefs": ["sub_92AE0 @ 0x931a0", "<???> @ 0x10c630"], "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"}