"""Q24: FUN_180119bd0 -- the cardtype-7 name resolver. This should BE the mapping.

The manager vtable was read out of the live process (read-only): DAT_1802e6398 ->
object -> vtable static 0x18021c2a0, with
    +0x490 = FUN_18011a860   (cardtype switch 1,2,3,4,5,10 -- no club arm)
    +0x498 = FUN_180119bd0   (called ONLY when +0x490 returned empty AND cardtype==7,
                              with args (cardsubtypeid, teamid, assetId))
    +0xa08 = FUN_18011cca0   (file a parsed item)
    +0xa38 = FUN_180113e40   (register trophy: (tournamentId, subtype, name))
    +0xa40 = FUN_18011bf40   (lookup by resourceId)

Decompile 0x498, 0xa38, 0xa40 and 0xa08.

CONTROL: FUN_18011a860 must be the same function Q11 dumped (12905 chars) with the
cardtype switch; that is what makes the 0x498 fallback meaningful.
"""
import traceback

try:
    for a, tag in [(0x180119BD0, "+0x498 club-item name resolver"),
                   (0x180113E40, "+0xa38 trophy register"),
                   (0x18011BF40, "+0xa40 lookup by resourceId"),
                   (0x18011CCA0, "+0xa08 file parsed item")]:
        src = dec(a)
        print("=" * 78)
        print("%s  FUN_%x len=%d" % (tag, a, len(src)))
        print(src if len(src) < 14000 else src[:14000] + "\n...[cut, len above]")
    print("=" * 78)
    print("control: FUN_18011a860 len=%d" % len(dec(0x18011A860)))
except Exception:
    traceback.print_exc()
