{"version":3,"sources":["../src/index.ts","../src/utils/SignatureUtils.ts","../src/types/DisassemblerOptions.ts","../src/core/DisassemblerContext.ts","../src/core/ControlFlowGraph.ts","../src/disassemblers/InstructionDisassembler.ts","../src/disassemblers/ModuleDisassembler.ts","../src/types/MoveModule.ts","../src/types/serializedType.ts","../src/types/disassembler.ts","../src/instruction-helpers.ts","../src/loaders/BytecodeLoader.ts"],"sourcesContent":["/**\n * Main entry point for the aptos-disassemble package\n * Provides clean, class-based API for Move bytecode disassembly\n */\n\n// Export main classes\nexport { DisassemblerContext } from \"./core/DisassemblerContext\";\nexport { VMControlFlowGraph } from \"./core/ControlFlowGraph\";\nexport type { ControlFlowGraph } from \"./core/ControlFlowGraph\";\nexport { ModuleDisassembler } from \"./disassemblers/ModuleDisassembler\";\nexport { InstructionDisassembler } from \"./disassemblers/InstructionDisassembler\";\nexport { BytecodeLoader } from \"./loaders/BytecodeLoader\";\n\n// Export types\nexport * from \"./types/MoveModule\";\nexport type { DisassemblerOptions } from \"./types/DisassemblerOptions\";\n\n// Export utilities\nexport { parseSignatureToken, parseAbilities } from \"./utils/SignatureUtils\";\n\n// Export compatibility functions\nexport { disassembleMoveModule, disassemble_instruction } from \"./types\";\n\nimport { BytecodeLoader } from \"./loaders/BytecodeLoader\";\nimport { DisassemblerContext } from \"./core/DisassemblerContext\";\nimport { ModuleDisassembler } from \"./disassemblers/ModuleDisassembler\";\nimport { VMControlFlowGraph } from \"./core/ControlFlowGraph\";\nimport { MoveModule } from \"./types/MoveModule\";\nimport { DisassemblerOptions } from \"./types/DisassemblerOptions\";\n\n/**\n * Main disassembly function - improved version with class-based architecture\n */\nexport function disassemble(module: MoveModule, options?: Partial<DisassemblerOptions>): string {\n  const context = new DisassemblerContext(module, options);\n  const disassembler = new ModuleDisassembler(context);\n  return disassembler.disassemble();\n}\n\n/**\n * Convenience function to disassemble bytecode directly to string\n */\nexport function disassemble_to_string(\n  bytecode: Uint8Array,\n  options?: Partial<DisassemblerOptions>\n): string {\n  const module = BytecodeLoader.loadFromBytecode(bytecode);\n  return disassemble(module, options);\n}\n\n/**\n * Class-based API for more advanced usage\n */\nexport class MoveDisassembler {\n  private context: DisassemblerContext;\n  private moduleDisassembler: ModuleDisassembler;\n\n  constructor(module: MoveModule, options?: Partial<DisassemblerOptions>) {\n    this.context = new DisassemblerContext(module, options);\n    this.moduleDisassembler = new ModuleDisassembler(this.context);\n  }\n\n  static fromBytecode(\n    bytecode: Uint8Array,\n    options?: Partial<DisassemblerOptions>\n  ): MoveDisassembler {\n    const module = BytecodeLoader.loadFromBytecode(bytecode);\n    return new MoveDisassembler(module, options);\n  }\n\n  disassemble(): string {\n    return this.moduleDisassembler.disassemble();\n  }\n\n  getContext(): DisassemblerContext {\n    return this.context;\n  }\n\n  getModule(): MoveModule {\n    return this.context.getRawModule();\n  }\n\n  getSelfModuleName(): string {\n    return this.context.getSelfModuleName();\n  }\n\n  getSelfModuleAddress(): string {\n    return this.context.getSelfModuleAddress();\n  }\n\n  getVersion(): number {\n    return this.context.version;\n  }\n\n  /**\n   * Create a control flow graph for a specific function in the module\n   */\n  createControlFlowGraph(functionIndex: number): VMControlFlowGraph {\n    const module = this.context.getRawModule();\n    if (!module.function_defs || functionIndex >= module.function_defs.length) {\n      throw new Error(`Function index ${functionIndex} out of bounds`);\n    }\n\n    const functionDef = module.function_defs[functionIndex];\n    if (!functionDef.code) {\n      throw new Error(`Function at index ${functionIndex} has no code`);\n    }\n\n    return new VMControlFlowGraph(functionDef.code.code);\n  }\n}\n","/**\n * Utility functions for parsing signature tokens and abilities\n */\nimport { SignatureToken, MoveModule } from \"../types/MoveModule\";\n\nexport const AbilityValues = {\n  Copy: 0x1,\n  Drop: 0x2,\n  Store: 0x4,\n  Key: 0x8,\n};\n\nexport function parseAbilities(abilities: number): string[] {\n  const result: string[] = [];\n  if (abilities & AbilityValues.Copy) result.push(\"copy\");\n  if (abilities & AbilityValues.Drop) result.push(\"drop\");\n  if (abilities & AbilityValues.Store) result.push(\"store\");\n  if (abilities & AbilityValues.Key) result.push(\"key\");\n  return result;\n}\n\nexport function parseSignatureToken(token: SignatureToken, module: MoveModule): string {\n  switch (token.kind) {\n    case \"Bool\":\n      return \"bool\";\n    case \"U8\":\n      return \"u8\";\n    case \"U16\":\n      return \"u16\";\n    case \"U32\":\n      return \"u32\";\n    case \"U64\":\n      return \"u64\";\n    case \"U128\":\n      return \"u128\";\n    case \"U256\":\n      return \"u256\";\n    case \"Address\":\n      return \"address\";\n    case \"Signer\":\n      return \"signer\";\n    case \"Vector\":\n      return `vector<${parseSignatureToken(token.type, module)}>`;\n    case \"Reference\":\n      return `&${parseSignatureToken(token.type, module)}`;\n    case \"MutableReference\":\n      return `&mut ${parseSignatureToken(token.type, module)}`;\n    case \"TypeParameter\":\n      return `T${token.index}`;\n    case \"Struct\": {\n      const structHandle = module.struct_handles[token.handle];\n      if (!structHandle) {\n        throw new Error(`Struct handle at index ${token.handle} is out of bounds`);\n      }\n      const structName = module.identifiers[structHandle.name];\n      if (!structName) {\n        throw new Error(`Struct name at index ${structHandle.name} is out of bounds`);\n      }\n\n      // Only add module prefix if it's not the current module\n      if (structHandle.module === module.selfModuleHandleIdx) {\n        return structName;\n      } else {\n        const moduleHandle = module.module_handles[structHandle.module];\n        if (!moduleHandle) {\n          throw new Error(`Module handle at index ${structHandle.module} is out of bounds`);\n        }\n        const moduleName = module.identifiers[moduleHandle.name];\n        if (!moduleName) {\n          throw new Error(`Module name at index ${moduleHandle.name} is out of bounds`);\n        }\n        return `${moduleName}::${structName}`;\n      }\n    }\n    case \"StructInstantiation\": {\n      const structHandle = module.struct_handles[token.handle];\n      if (!structHandle) {\n        throw new Error(`Struct handle at index ${token.handle} is out of bounds`);\n      }\n      const structName = module.identifiers[structHandle.name];\n      if (!structName) {\n        throw new Error(`Struct name at index ${structHandle.name} is out of bounds`);\n      }\n      const typeParams = token.typeParams.map((tp) => parseSignatureToken(tp, module));\n\n      // Only add module prefix if it's not the current module\n      if (structHandle.module === module.selfModuleHandleIdx) {\n        return `${structName}<${typeParams.join(\", \")}>`;\n      } else {\n        const moduleHandle = module.module_handles[structHandle.module];\n        if (!moduleHandle) {\n          throw new Error(`Module handle at index ${structHandle.module} is out of bounds`);\n        }\n        const moduleName = module.identifiers[moduleHandle.name];\n        if (!moduleName) {\n          throw new Error(`Module name at index ${moduleHandle.name} is out of bounds`);\n        }\n        return `${moduleName}::${structName}<${typeParams.join(\", \")}>`;\n      }\n    }\n    case \"Function\": {\n      const args = token.args.map((arg) => parseSignatureToken(arg, module));\n      const results = token.results.map((result) => parseSignatureToken(result, module));\n      const abilities = parseAbilities(token.abilities);\n      const abilitiesStr = abilities.length > 0 ? ` + ${abilities.join(\" + \")}` : \"\";\n      return `|${args.join(\", \")}| -> (${results.join(\", \")})${abilitiesStr}`;\n    }\n    default:\n      throw new Error(`Unknown signature token kind: ${token}`);\n  }\n}\n","/**\n * Configuration options for the disassembler\n */\nexport interface DisassemblerOptions {\n  /** Whether to print basic block markers (B0:, B1:, etc.) in function code */\n  printBasicBlocks?: boolean;\n}\n\nexport const DEFAULT_DISASSEMBLER_OPTIONS: DisassemblerOptions = {\n  printBasicBlocks: true,\n};\n","/**\n * DisassemblerContext - Core context class that holds module information\n * and provides convenient methods for accessing module data\n */\nimport { MoveModule, SignatureToken } from \"../types/MoveModule\";\nimport { parseSignatureToken, parseAbilities } from \"../utils/SignatureUtils\";\nimport { DisassemblerOptions, DEFAULT_DISASSEMBLER_OPTIONS } from \"../types/DisassemblerOptions\";\n\nexport class DisassemblerContext {\n  public readonly options: DisassemblerOptions;\n\n  constructor(\n    private readonly module: MoveModule,\n    options?: Partial<DisassemblerOptions>\n  ) {\n    this.options = { ...DEFAULT_DISASSEMBLER_OPTIONS, ...options };\n  }\n\n  get version(): number {\n    return this.module.version;\n  }\n\n  get selfModuleHandleIdx(): number {\n    return this.module.selfModuleHandleIdx;\n  }\n\n  // Module handle utilities\n  getSelfModule() {\n    const selfModule = this.module.module_handles[this.selfModuleHandleIdx];\n    if (!selfModule) {\n      throw new Error(\"Self module handle index is out of bounds\");\n    }\n    return selfModule;\n  }\n\n  getSelfModuleAddress(): string {\n    const selfModule = this.getSelfModule();\n    return this.getAddressIdentifier(selfModule.address);\n  }\n\n  getSelfModuleName(): string {\n    const selfModule = this.getSelfModule();\n    return this.getIdentifier(selfModule.name);\n  }\n\n  // Identifier utilities\n  getIdentifier(index: number): string {\n    const identifier = this.module.identifiers[index];\n    if (identifier === undefined) {\n      throw new Error(`Identifier at index ${index} is out of bounds`);\n    }\n    return identifier;\n  }\n\n  getAddressIdentifier(index: number): string {\n    const address = this.module.address_identifiers[index];\n    if (address === undefined) {\n      throw new Error(`Address identifier at index ${index} is out of bounds`);\n    }\n    return address;\n  }\n\n  // Signature utilities\n  getSignature(index: number): SignatureToken[] {\n    const signature = this.module.signatures[index];\n    if (!signature) {\n      throw new Error(`Signature at index ${index} is out of bounds`);\n    }\n    return signature;\n  }\n\n  parseSignatureToken(token: SignatureToken): string {\n    return parseSignatureToken(token, this.module);\n  }\n\n  parseAbilities(abilities: number): string[] {\n    return parseAbilities(abilities);\n  }\n\n  // Handle utilities\n  getModuleHandle(index: number) {\n    const handle = this.module.module_handles[index];\n    if (!handle) {\n      throw new Error(`Module handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  getStructHandle(index: number) {\n    const handle = this.module.struct_handles[index];\n    if (!handle) {\n      throw new Error(`Struct handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  getFunctionHandle(index: number) {\n    const handle = this.module.function_handles[index];\n    if (!handle) {\n      throw new Error(`Function handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  getFieldHandle(index: number) {\n    const handle = this.module.field_handles[index];\n    if (!handle) {\n      throw new Error(`Field handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  // Definition utilities\n  getStructDefinition(index: number) {\n    const def = this.module.struct_defs[index];\n    if (!def) {\n      throw new Error(`Struct definition at index ${index} is out of bounds`);\n    }\n    return def;\n  }\n\n  getFunctionDefinition(index: number) {\n    const def = this.module.function_defs[index];\n    if (!def) {\n      throw new Error(`Function definition at index ${index} is out of bounds`);\n    }\n    return def;\n  }\n\n  // Instantiation utilities\n  getStructDefInstantiation(index: number) {\n    const inst = this.module.struct_defs_inst[index];\n    if (!inst) {\n      throw new Error(`Struct def instantiation at index ${index} is out of bounds`);\n    }\n    return inst;\n  }\n\n  getFunctionInstantiation(index: number) {\n    const inst = this.module.function_inst[index];\n    if (!inst) {\n      throw new Error(`Function instantiation at index ${index} is out of bounds`);\n    }\n    return inst;\n  }\n\n  getFieldInstantiation(index: number) {\n    const inst = this.module.field_insts[index];\n    if (!inst) {\n      throw new Error(`Field instantiation at index ${index} is out of bounds`);\n    }\n    return inst;\n  }\n\n  // Variant utilities (for enum support)\n  getStructVariantHandle(index: number) {\n    const handle = this.module.struct_variant_handles[index];\n    if (!handle) {\n      throw new Error(`Struct variant handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  getStructVariantInstantiation(index: number) {\n    const inst = this.module.struct_variant_inst[index];\n    if (!inst) {\n      throw new Error(`Struct variant instantiation at index ${index} is out of bounds`);\n    }\n    return inst;\n  }\n\n  getVariantFieldHandle(index: number) {\n    const handle = this.module.variant_field_handles[index];\n    if (!handle) {\n      throw new Error(`Variant field handle at index ${index} is out of bounds`);\n    }\n    return handle;\n  }\n\n  getVariantFieldInstantiation(index: number) {\n    const inst = this.module.variant_field_inst[index];\n    if (!inst) {\n      throw new Error(`Variant field instantiation at index ${index} is out of bounds`);\n    }\n    return inst;\n  }\n\n  // Access to raw module for compatibility\n  getRawModule(): MoveModule {\n    return this.module;\n  }\n}\n","/**\n * Control Flow Graph implementation for Move bytecode verification\n * Based on the Rust implementation from Move VM\n * \n * Copyright (c) The Diem Core Contributors\n * Copyright (        // Build a mapping from a block id to the next block id in the traversal order\n    const traversalSuccessors = new Map<BlockId, BlockId>();\n    for (let i = 0; i < traversalOrder.length - 1; i++) {\n      traversalSuccessors.set(traversalOrder[i], traversalOrder[i + 1]);\n    }\n\n    this.traversalSuccessors = traversalSuccessors;\n    this.loopHeads = loopHeads;ove Contributors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Bytecode, CodeOffset } from \"../types/MoveModule\";\n\n// Type aliases for better compatibility with Rust implementation\ntype BlockId = CodeOffset;\n\n/**\n * A trait that specifies the basic requirements for a CFG\n */\nexport interface ControlFlowGraph {\n  /** Start index of the block ID in the bytecode vector */\n  blockStart(blockId: BlockId): CodeOffset;\n\n  /** End index of the block ID in the bytecode vector */\n  blockEnd(blockId: BlockId): CodeOffset;\n\n  /** Successors of the block ID in the bytecode vector */\n  successors(blockId: BlockId): BlockId[];\n\n  /** Return the next block in traversal order */\n  nextBlock(blockId: BlockId): BlockId | null;\n\n  /** Iterator over the indexes of instructions in this block */\n  instrIndexes(blockId: BlockId): Iterable<CodeOffset>;\n\n  /** Return an iterator over the blocks of the CFG */\n  blocks(): BlockId[];\n\n  /** Return the number of blocks (vertices) in the control flow graph */\n  numBlocks(): number;\n\n  /** Return the id of the entry block for this control-flow graph */\n  entryBlockId(): BlockId;\n\n  /** Checks if the block ID is a loop head */\n  isLoopHead(blockId: BlockId): boolean;\n\n  /** Checks if the edge from cur->next is a back edge */\n  isBackEdge(cur: BlockId, next: BlockId): boolean;\n\n  /** Return the number of back edges in the cfg */\n  numBackEdges(): number;\n}\n\n/**\n * Basic block structure\n */\nclass BasicBlock {\n  constructor(\n    public readonly exit: CodeOffset,\n    public readonly successors: BlockId[]\n  ) {}\n\n  public display(entry: BlockId): void {\n    console.log(\"+=======================+\");\n    console.log(`| Enter:  ${entry}            |`);\n    console.log(\"+-----------------------+\");\n    console.log(`==> Children: ${JSON.stringify(this.successors)}`);\n    console.log(\"+-----------------------+\");\n    console.log(`| Exit:   ${this.exit}            |`);\n    console.log(\"+=======================+\");\n  }\n}\n\n/**\n * Exploration state for loop analysis\n */\nenum Exploration {\n  InProgress = \"InProgress\",\n  Done = \"Done\",\n}\n\nconst ENTRY_BLOCK_ID: BlockId = 0;\n\n/**\n * The control flow graph that we build from the bytecode.\n */\nexport class VMControlFlowGraph implements ControlFlowGraph {\n  /** The basic blocks */\n  private readonly basicBlocks: Map<BlockId, BasicBlock>;\n  /** Basic block ordering for traversal */\n  private readonly traversalSuccessors: Map<BlockId, BlockId>;\n  /** Map of loop heads with all of their back edges */\n  private readonly loopHeads: Map<BlockId, Set<BlockId>>;\n\n  constructor(code: Bytecode[]) {\n    const codeLen = code.length as CodeOffset;\n\n    // First go through and collect block ids, i.e., offsets that begin basic blocks.\n    // Need to do this first in order to handle backwards edges.\n    const blockIds = new Set<BlockId>();\n    blockIds.add(ENTRY_BLOCK_ID);\n\n    for (let pc = 0; pc < code.length; pc++) {\n      VMControlFlowGraph.recordBlockIds(pc as CodeOffset, code, blockIds);\n    }\n\n    // Create basic blocks\n    const basicBlocks = new Map<BlockId, BasicBlock>();\n    let entry = 0;\n    const exitToEntry = new Map<CodeOffset, BlockId>();\n\n    for (let pc = 0; pc < code.length; pc++) {\n      const coPc = pc as CodeOffset;\n\n      // Create a basic block\n      if (this.isEndOfBlock(coPc, code, blockIds)) {\n        const exit = coPc;\n        exitToEntry.set(exit, entry);\n        const successors = this.getSuccessors(coPc, code);\n        const bb = new BasicBlock(exit, successors);\n        basicBlocks.set(entry, bb);\n        entry = coPc + 1;\n      }\n    }\n\n    this.basicBlocks = basicBlocks;\n    console.assert(entry === codeLen, `Entry ${entry} should equal code length ${codeLen}`);\n\n    // Loop analysis\n    // This section identifies loops in the control-flow graph, picks a back edge and loop head\n    // (the basic block the back edge returns to), and decides the order that blocks are\n    // traversed during abstract interpretation (reverse post-order).\n\n    const exploration = new Map<BlockId, Exploration>();\n    const stack: BlockId[] = [ENTRY_BLOCK_ID];\n\n    // For every loop in the CFG that is reachable from the entry block, there is an entry in\n    // `loopHeads` mapping to all the back edges pointing to it, and vice versa.\n    const loopHeads = new Map<BlockId, Set<BlockId>>();\n\n    // Blocks appear in `postOrder` after all the blocks in their (non-reflexive) sub-graph.\n    const postOrder: BlockId[] = [];\n\n    while (stack.length > 0) {\n      const block = stack.pop()!;\n      const explorationState = exploration.get(block);\n\n      if (explorationState === undefined) {\n        // Record the fact that exploration of this block and its sub-graph has started.\n        exploration.set(block, Exploration.InProgress);\n\n        // Push the block back on the stack to finish processing it, and mark it as done\n        // once its sub-graph has been traversed.\n        stack.push(block);\n\n        const successors = this.basicBlocks.get(block)?.successors || [];\n        for (const succ of successors) {\n          const succExploration = exploration.get(succ);\n\n          if (succExploration === undefined) {\n            // This successor has never been visited before, add it to the stack to\n            // be explored before `block` gets marked `Done`.\n            stack.push(succ);\n          } else if (succExploration === Exploration.InProgress) {\n            // This block's sub-graph was being explored, meaning it is a (reflexive\n            // transitive) predecessor of `block` as well as being a successor,\n            // implying a loop has been detected -- greedily choose the successor\n            // block as the loop head.\n            if (!loopHeads.has(succ)) {\n              loopHeads.set(succ, new Set());\n            }\n            loopHeads.get(succ)!.add(block);\n          }\n          // Cross-edge detected, this block and its entire sub-graph (modulo\n          // cycles) has already been explored via a different path, and is\n          // already present in `postOrder`.\n          // We skip this case.\n        }\n      } else if (explorationState === Exploration.InProgress) {\n        // Finish up the traversal by adding this block to the post-order traversal\n        // after its sub-graph (modulo cycles).\n        postOrder.push(block);\n        exploration.set(block, Exploration.Done);\n      }\n      // Already traversed the sub-graph reachable from this block, so skip it.\n    }\n\n    const traversalOrder = postOrder.reverse(); // Reverse post order\n\n    // Build a mapping from a block id to the next block id in the traversal order\n    const traversalSuccessors = new Map<BlockId, BlockId>();\n    for (let i = 0; i < traversalOrder.length - 1; i++) {\n      traversalSuccessors.set(traversalOrder[i], traversalOrder[i + 1]);\n    }\n\n    this.traversalSuccessors = traversalSuccessors;\n    this.loopHeads = loopHeads;\n  }\n\n  public display(): void {\n    for (const [entry, block] of this.basicBlocks) {\n      block.display(entry);\n    }\n    console.log(\"Traversal:\", Object.fromEntries(this.traversalSuccessors));\n  }\n\n  private isEndOfBlock(pc: CodeOffset, code: Bytecode[], blockIds: Set<BlockId>): boolean {\n    return pc + 1 === code.length || blockIds.has(pc + 1);\n  }\n\n  private static recordBlockIds(pc: CodeOffset, code: Bytecode[], blockIds: Set<BlockId>): void {\n    const bytecode = code[pc];\n\n    // Get the offset from branch instructions\n    const offset = this.getOffset(bytecode);\n    if (offset !== null) {\n      blockIds.add(offset);\n    }\n\n    // If this is a branch instruction and not the last instruction, the next instruction starts a new block\n    if (this.isBranch(bytecode) && pc + 1 < code.length) {\n      blockIds.add(pc + 1);\n    }\n  }\n\n  private static getOffset(bytecode: Bytecode): CodeOffset | null {\n    switch (bytecode.kind) {\n      case \"BrTrue\":\n      case \"BrFalse\":\n      case \"Branch\":\n        return bytecode.codeOffset;\n      default:\n        return null;\n    }\n  }\n\n  private static isBranch(bytecode: Bytecode): boolean {\n    switch (bytecode.kind) {\n      case \"BrTrue\":\n      case \"BrFalse\":\n      case \"Branch\":\n      case \"Ret\":\n      case \"Abort\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  private getSuccessors(pc: CodeOffset, code: Bytecode[]): BlockId[] {\n    const bytecode = code[pc];\n    const successors: BlockId[] = [];\n\n    switch (bytecode.kind) {\n      case \"BrTrue\":\n      case \"BrFalse\":\n        // Conditional branches have two successors: the branch target and the next instruction\n        successors.push(bytecode.codeOffset);\n        if (pc + 1 < code.length) {\n          successors.push(pc + 1);\n        }\n        break;\n      case \"Branch\":\n        // Unconditional branch has one successor: the branch target\n        successors.push(bytecode.codeOffset);\n        break;\n      case \"Ret\":\n      case \"Abort\":\n        // Terminal instructions have no successors\n        break;\n      default:\n        // Regular instructions flow to the next instruction\n        if (pc + 1 < code.length) {\n          successors.push(pc + 1);\n        }\n        break;\n    }\n\n    return successors;\n  }\n\n  /**\n   * A utility function that implements BFS-reachability from blockId\n   */\n  private traverseBy(blockId: BlockId): BlockId[] {\n    const ret: BlockId[] = [];\n    let index = 0;\n    const seen = new Set<BlockId>();\n\n    ret.push(blockId);\n    seen.add(blockId);\n\n    while (index < ret.length) {\n      const currentBlockId = ret[index];\n      index += 1;\n      const successors = this.successors(currentBlockId);\n      for (const successor of successors) {\n        if (!seen.has(successor)) {\n          ret.push(successor);\n          seen.add(successor);\n        }\n      }\n    }\n\n    return ret;\n  }\n\n  public reachableFrom(blockId: BlockId): BlockId[] {\n    return this.traverseBy(blockId);\n  }\n\n  public traversalIndex(blockId: BlockId): number {\n    const keys = Array.from(this.traversalSuccessors.keys());\n    const index = keys.indexOf(blockId);\n    return index === -1 ? this.traversalSuccessors.size : index;\n  }\n\n  // ControlFlowGraph interface implementation\n\n  blockStart(blockId: BlockId): CodeOffset {\n    return blockId;\n  }\n\n  blockEnd(blockId: BlockId): CodeOffset {\n    const block = this.basicBlocks.get(blockId);\n    if (!block) {\n      throw new Error(`Block ${blockId} not found`);\n    }\n    return block.exit;\n  }\n\n  successors(blockId: BlockId): BlockId[] {\n    const block = this.basicBlocks.get(blockId);\n    if (!block) {\n      throw new Error(`Block ${blockId} not found`);\n    }\n    return [...block.successors]; // Return a copy to prevent mutation\n  }\n\n  nextBlock(blockId: BlockId): BlockId | null {\n    console.assert(this.basicBlocks.has(blockId), `Block ${blockId} should exist`);\n    return this.traversalSuccessors.get(blockId) || null;\n  }\n\n  *instrIndexes(blockId: BlockId): Iterable<CodeOffset> {\n    const start = this.blockStart(blockId);\n    const end = this.blockEnd(blockId);\n    for (let i = start; i <= end; i++) {\n      yield i;\n    }\n  }\n\n  blocks(): BlockId[] {\n    return Array.from(this.basicBlocks.keys());\n  }\n\n  numBlocks(): number {\n    return this.basicBlocks.size;\n  }\n\n  entryBlockId(): BlockId {\n    return ENTRY_BLOCK_ID;\n  }\n\n  isLoopHead(blockId: BlockId): boolean {\n    return this.loopHeads.has(blockId);\n  }\n\n  isBackEdge(cur: BlockId, next: BlockId): boolean {\n    const backEdges = this.loopHeads.get(next);\n    return backEdges ? backEdges.has(cur) : false;\n  }\n\n  numBackEdges(): number {\n    let count = 0;\n    for (const edges of this.loopHeads.values()) {\n      count += edges.size;\n    }\n    return count;\n  }\n}\n","/**\n * InstructionDisassembler - Handles disassembly of individual bytecode instructions\n */\nimport { Bytecode, FieldDefinition, FieldHandle, StructVariantHandle } from \"../types/MoveModule\";\nimport { DisassemblerContext } from \"../core/DisassemblerContext\";\nimport { SignatureToken } from \"../types/MoveModule\";\n\nexport class InstructionDisassembler {\n  constructor(\n    private readonly context: DisassemblerContext,\n    private readonly params: string[],\n    private readonly locals: string[]\n  ) {}\n\n  disassemble(instruction: Bytecode): string {\n    switch (instruction.kind) {\n      // Stack operations\n      case \"Pop\":\n        return \"Pop\";\n      case \"Ret\":\n        return \"Ret\";\n      case \"Nop\":\n        return \"Nop\";\n\n      // Branch operations\n      case \"BrTrue\":\n        return `BrTrue(${instruction.codeOffset})`;\n      case \"BrFalse\":\n        return `BrFalse(${instruction.codeOffset})`;\n      case \"Branch\":\n        return `Branch(${instruction.codeOffset})`;\n\n      // Load operations\n      case \"LdU8\":\n        return `LdU8(${instruction.value})`;\n      case \"LdU16\":\n        return `LdU16(${instruction.value})`;\n      case \"LdU32\":\n        return `LdU32(${instruction.value})`;\n      case \"LdU64\":\n        return `LdU64(${instruction.value})`;\n      case \"LdU128\":\n        return `LdU128(${instruction.value})`;\n      case \"LdU256\":\n        return `LdU256(${instruction.value})`;\n      case \"LdTrue\":\n        return \"LdTrue\";\n      case \"LdFalse\":\n        return \"LdFalse\";\n      case \"LdConst\":\n        return this.formatLdConst(instruction.constIdx);\n\n      // Cast operations\n      case \"CastU8\":\n        return \"CastU8\";\n      case \"CastU16\":\n        return \"CastU16\";\n      case \"CastU32\":\n        return \"CastU32\";\n      case \"CastU64\":\n        return \"CastU64\";\n      case \"CastU128\":\n        return \"CastU128\";\n      case \"CastU256\":\n        return \"CastU256\";\n\n      // Local variable operations\n      case \"CopyLoc\":\n        return this.formatLocalInstruction(instruction.localIdx, \"CopyLoc\");\n      case \"MoveLoc\":\n        return this.formatLocalInstruction(instruction.localIdx, \"MoveLoc\");\n      case \"StLoc\":\n        return this.formatLocalInstruction(instruction.localIdx, \"StLoc\");\n      case \"MutBorrowLoc\":\n        return this.formatLocalInstruction(instruction.localIdx, \"MutBorrowLoc\");\n      case \"ImmBorrowLoc\":\n        return this.formatLocalInstruction(instruction.localIdx, \"ImmBorrowLoc\");\n\n      // Function call operations\n      case \"Call\":\n        return this.formatCall(instruction.funcHandleIdx);\n      case \"CallGeneric\":\n        return this.formatCallGeneric(instruction.funcInstIdx);\n      case \"CallClosure\":\n        return this.formatCallClosure(instruction.sigIdx);\n\n      // Closure operations\n      case \"PackClosure\":\n        return this.formatPackClosure(instruction.fun, instruction.mask);\n      case \"PackClosureGeneric\":\n        return this.formatPackClosureGeneric(instruction.fun, instruction.mask);\n\n      // Struct operations\n      case \"Pack\":\n        return this.formatStructOperation(instruction.structDefIdx, \"Pack\");\n      case \"Unpack\":\n        return this.formatStructOperation(instruction.structDefIdx, \"Unpack\");\n      case \"PackGeneric\":\n        return this.formatGenericStructOperation(instruction.structInstIdx, \"PackGeneric\");\n      case \"UnpackGeneric\":\n        return this.formatGenericStructOperation(instruction.structInstIdx, \"UnpackGeneric\");\n\n      // Variant operations\n      case \"PackVariant\":\n        return this.formatVariantOperation(instruction.structVariantHandleIdx, \"PackVariant\");\n      case \"UnpackVariant\":\n        return this.formatVariantOperation(instruction.structVariantHandleIdx, \"UnpackVariant\");\n      case \"TestVariant\":\n        return this.formatVariantOperation(instruction.structVariantHandleIdx, \"TestVariant\");\n      case \"PackVariantGeneric\":\n        return this.formatGenericVariantOperation(\n          instruction.structVariantInstIdx,\n          \"PackVariantGeneric\"\n        );\n      case \"UnpackVariantGeneric\":\n        return this.formatGenericVariantOperation(\n          instruction.structVariantInstIdx,\n          \"UnpackVariantGeneric\"\n        );\n      case \"TestVariantGeneric\":\n        return this.formatGenericVariantOperation(\n          instruction.structVariantInstIdx,\n          \"TestVariantGeneric\"\n        );\n\n      // Field operations\n      case \"MutBorrowField\":\n        return this.formatFieldOperation(instruction.fieldHandleIdx, \"MutBorrowField\");\n      case \"ImmBorrowField\":\n        return this.formatFieldOperation(instruction.fieldHandleIdx, \"ImmBorrowField\");\n      case \"MutBorrowFieldGeneric\":\n        return this.formatGenericFieldOperation(instruction.fieldInstIdx, \"MutBorrowFieldGeneric\");\n      case \"ImmBorrowFieldGeneric\":\n        return this.formatGenericFieldOperation(instruction.fieldInstIdx, \"ImmBorrowFieldGeneric\");\n\n      // Variant field operations\n      case \"MutBorrowVariantField\":\n        return this.formatVariantFieldOperation(\n          instruction.variantFieldHandleIdx,\n          \"MutBorrowVariantField\"\n        );\n      case \"ImmBorrowVariantField\":\n        return this.formatVariantFieldOperation(\n          instruction.variantFieldHandleIdx,\n          \"ImmBorrowVariantField\"\n        );\n      case \"MutBorrowVariantFieldGeneric\":\n        return this.formatGenericVariantFieldOperation(\n          instruction.variantFieldInstIdx,\n          \"MutBorrowVariantFieldGeneric\"\n        );\n      case \"ImmBorrowVariantFieldGeneric\":\n        return this.formatGenericVariantFieldOperation(\n          instruction.variantFieldInstIdx,\n          \"ImmBorrowVariantFieldGeneric\"\n        );\n\n      // Global operations\n      case \"MutBorrowGlobal\":\n        return this.formatStructOperation(instruction.structDefIdx, \"MutBorrowGlobal\");\n      case \"ImmBorrowGlobal\":\n        return this.formatStructOperation(instruction.structDefIdx, \"ImmBorrowGlobal\");\n      case \"MutBorrowGlobalGeneric\":\n        return this.formatGenericStructOperation(\n          instruction.structInstIdx,\n          \"MutBorrowGlobalGeneric\"\n        );\n      case \"ImmBorrowGlobalGeneric\":\n        return this.formatGenericStructOperation(\n          instruction.structInstIdx,\n          \"ImmBorrowGlobalGeneric\"\n        );\n      case \"Exists\":\n        return this.formatStructOperation(instruction.structDefIdx, \"Exists\");\n      case \"ExistsGeneric\":\n        return this.formatGenericStructOperation(instruction.structInstIdx, \"ExistsGeneric\");\n      case \"MoveFrom\":\n        return this.formatStructOperation(instruction.structDefIdx, \"MoveFrom\");\n      case \"MoveFromGeneric\":\n        return this.formatGenericStructOperation(instruction.structInstIdx, \"MoveFromGeneric\");\n      case \"MoveTo\":\n        return this.formatStructOperation(instruction.structDefIdx, \"MoveTo\");\n      case \"MoveToGeneric\":\n        return this.formatGenericStructOperation(instruction.structInstIdx, \"MoveToGeneric\");\n\n      // Reference operations\n      case \"ReadRef\":\n        return \"ReadRef\";\n      case \"WriteRef\":\n        return \"WriteRef\";\n      case \"FreezeRef\":\n        return \"FreezeRef\";\n\n      // Arithmetic operations\n      case \"Add\":\n        return \"Add\";\n      case \"Sub\":\n        return \"Sub\";\n      case \"Mul\":\n        return \"Mul\";\n      case \"Mod\":\n        return \"Mod\";\n      case \"Div\":\n        return \"Div\";\n      case \"Shl\":\n        return \"Shl\";\n      case \"Shr\":\n        return \"Shr\";\n\n      // Bitwise operations\n      case \"BitOr\":\n        return \"BitOr\";\n      case \"BitAnd\":\n        return \"BitAnd\";\n      case \"Xor\":\n        return \"Xor\";\n\n      // Logical operations\n      case \"Or\":\n        return \"Or\";\n      case \"And\":\n        return \"And\";\n      case \"Not\":\n        return \"Not\";\n\n      // Comparison operations\n      case \"Eq\":\n        return \"Eq\";\n      case \"Neq\":\n        return \"Neq\";\n      case \"Lt\":\n        return \"Lt\";\n      case \"Gt\":\n        return \"Gt\";\n      case \"Le\":\n        return \"Le\";\n      case \"Ge\":\n        return \"Ge\";\n\n      // Other operations\n      case \"Abort\":\n        return \"Abort\";\n\n      // Vector operations\n      case \"VecPack\":\n        return this.formatVectorOperation(\n          instruction.elemTyIdx,\n          instruction.numElements,\n          \"VecPack\"\n        );\n      case \"VecLen\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecLen\");\n      case \"VecImmBorrow\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecImmBorrow\");\n      case \"VecMutBorrow\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecMutBorrow\");\n      case \"VecPushBack\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecPushBack\");\n      case \"VecPopBack\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecPopBack\");\n      case \"VecUnpack\":\n        return this.formatVectorOperation(\n          instruction.elemTyIdx,\n          instruction.numElements,\n          \"VecUnpack\"\n        );\n      case \"VecSwap\":\n        return this.formatVectorOperation(instruction.elemTyIdx, undefined, \"VecSwap\");\n\n      default:\n        throw new Error(`Unsupported instruction: ${instruction}`);\n    }\n  }\n\n  private formatLocalInstruction(localIdx: number, instructionName: string): string {\n    const localVar = this.getLocalVariable(localIdx);\n    return `${instructionName}[${localIdx}](${localVar})`;\n  }\n\n  private getLocalVariable(localIdx: number): string {\n    if (localIdx < this.params.length) {\n      return `arg${localIdx}: ${this.params[localIdx]}`;\n    } else if (localIdx < this.params.length + this.locals.length) {\n      const localIndex = localIdx - this.params.length;\n      return `loc${localIndex}: ${this.locals[localIndex]}`;\n    } else {\n      throw new Error(`Invalid local index: ${localIdx}`);\n    }\n  }\n\n  private formatCall(funcHandleIdx: number): string {\n    const functionHandle = this.context.getFunctionHandle(funcHandleIdx);\n    const functionName = this.context.getIdentifier(functionHandle.name);\n    const moduleHandle = this.context.getModuleHandle(functionHandle.module);\n\n    let functionString = \"\";\n    if (this.context.selfModuleHandleIdx === functionHandle.module) {\n      functionString = functionName;\n    } else {\n      const moduleName = this.context.getIdentifier(moduleHandle.name);\n      functionString = `${moduleName}::${functionName}`;\n    }\n\n    // Get function signature\n    const paramSignature = this.context.getSignature(functionHandle.parameters);\n    const returnSignature = this.context.getSignature(functionHandle.return_);\n\n    // Format parameters\n    const paramTypes = paramSignature.map((token) => this.context.parseSignatureToken(token));\n    const paramStr = `(${paramTypes.join(\", \")})`;\n\n    // Format return type\n    let returnStr = \"\";\n    if (returnSignature.length > 0) {\n      const returnTypes = returnSignature.map((token) => this.context.parseSignatureToken(token));\n      if (returnTypes.length === 1) {\n        returnStr = `: ${returnTypes[0]}`;\n      } else {\n        returnStr = `: (${returnTypes.join(\", \")})`;\n      }\n    }\n\n    return `Call ${functionString}${paramStr}${returnStr}`;\n  }\n\n  private formatCallGeneric(funcInstIdx: number): string {\n    const functionInst = this.context.getFunctionInstantiation(funcInstIdx);\n    const functionHandle = this.context.getFunctionHandle(functionInst.handle);\n    const functionName = this.context.getIdentifier(functionHandle.name);\n    const moduleHandle = this.context.getModuleHandle(functionHandle.module);\n\n    let functionString = \"\";\n    if (this.context.selfModuleHandleIdx === functionHandle.module) {\n      functionString = functionName;\n    } else {\n      const moduleName = this.context.getIdentifier(moduleHandle.name);\n      functionString = `${moduleName}::${functionName}`;\n    }\n\n    // Get generic type parameters\n    const typeParamSignature = this.context.getSignature(functionInst.type_parameters);\n    const typeParams = typeParamSignature.map((token) => this.context.parseSignatureToken(token));\n    const typeParamsStr = typeParams.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n\n    // Get function signature\n    const paramSignature = this.context.getSignature(functionHandle.parameters);\n    const returnSignature = this.context.getSignature(functionHandle.return_);\n\n    // Format parameters\n    const paramTypes = paramSignature.map((token) => this.context.parseSignatureToken(token));\n    const paramStr = `(${paramTypes.join(\", \")})`;\n\n    // Format return type\n    let returnStr = \"\";\n    if (returnSignature.length > 0) {\n      const returnTypes = returnSignature.map((token) => this.context.parseSignatureToken(token));\n      if (returnTypes.length === 1) {\n        returnStr = `: ${returnTypes[0]}`;\n      } else {\n        returnStr = `: (${returnTypes.join(\", \")})`;\n      }\n    }\n\n    return `Call ${functionString}${typeParamsStr}${paramStr}${returnStr}`;\n  }\n\n  private formatCallClosure(sigIdx: number): string {\n    const closureSignature = this.context.getSignature(sigIdx);\n    const closureType = closureSignature.map((tp) => this.context.parseSignatureToken(tp));\n    if (closureType.length !== 1) {\n      throw new Error(\"CallClosure with type parameters is not supported yet\");\n    }\n    return `CallClosure[${sigIdx}](${closureType[0]})`;\n  }\n\n  private formatPackClosure(fun: number, mask: number): string {\n    const functionHandle = this.context.getFunctionHandle(fun);\n    const functionName = this.context.getIdentifier(functionHandle.name);\n    const moduleHandle = this.context.getModuleHandle(functionHandle.module);\n\n    let functionString = \"\";\n    if (this.context.selfModuleHandleIdx === functionHandle.module) {\n      functionString = functionName;\n    } else {\n      const moduleName = this.context.getIdentifier(moduleHandle.name);\n      functionString = `${moduleName}::${functionName}`;\n    }\n\n    const typeArguments = functionHandle.type_parameters.map((tp) =>\n      this.context.parseAbilities(tp)\n    );\n    const typeParamsStr = typeArguments.length > 0 ? `<${typeArguments.join(\", \")}>` : \"\";\n\n    return `PackClosure#${mask}[${fun}](${functionString}${typeParamsStr})`;\n  }\n\n  private formatPackClosureGeneric(fun: number, mask: number): string {\n    return `PackClosureGeneric#${mask}[${fun}]`;\n  }\n\n  private formatStructOperation(structDefIdx: number, instructionName: string): string {\n    const structDef = this.context.getStructDefinition(structDefIdx);\n    const structHandle = this.context.getStructHandle(structDef.struct_handle);\n    const structName = this.context.getIdentifier(structHandle.name);\n    return `${instructionName}[${structDefIdx}](${structName})`;\n  }\n\n  private formatGenericStructOperation(structInstIdx: number, instructionName: string): string {\n    const structInst = this.context.getStructDefInstantiation(structInstIdx);\n    const structDef = this.context.getStructDefinition(structInst.def);\n    const structHandle = this.context.getStructHandle(structDef.struct_handle);\n    const structName = this.context.getIdentifier(structHandle.name);\n    const typeParams = this.context\n      .getSignature(structInst.typeParameters)\n      .map((tp) => this.context.parseSignatureToken(tp));\n    const typeParamsStr = typeParams.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n    return `${instructionName}[${structInstIdx}](${structName}${typeParamsStr})`;\n  }\n\n  private formatVariantOperation(structVariantHandleIdx: number, instructionName: string): string {\n    const structVariantHandle = this.context.getStructVariantHandle(structVariantHandleIdx);\n    const { structName, variantName } = this.getVariantInfo(structVariantHandle);\n    return `${instructionName}[${structVariantHandleIdx}](${structName}/${variantName})`;\n  }\n\n  private formatGenericVariantOperation(\n    structVariantInstIdx: number,\n    instructionName: string\n  ): string {\n    const structVariantInst = this.context.getStructVariantInstantiation(structVariantInstIdx);\n    const typeParams = this.context.getSignature(structVariantInst.type_parameters);\n    const structVariantHandle = this.context.getStructVariantHandle(structVariantInst.handle);\n    const { structName, variantName } = this.getVariantInfo(structVariantHandle);\n\n    const structTypeParams = typeParams.map((tp) => this.context.parseSignatureToken(tp));\n    const typeParamsStr = structTypeParams.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\n    return `${instructionName}[${structVariantInstIdx}](${structName}/${variantName}${typeParamsStr})`;\n  }\n\n  private formatFieldOperation(fieldHandleIdx: number, instructionName: string): string {\n    const fieldHandle = this.context.getFieldHandle(fieldHandleIdx);\n    const { structName, fieldName, fieldType } = this.getFieldInfo(fieldHandle);\n    return `${instructionName}[${fieldHandleIdx}](${structName}.${fieldName}: ${fieldType})`;\n  }\n\n  private formatGenericFieldOperation(fieldInstIdx: number, instructionName: string): string {\n    const fieldInst = this.context.getFieldInstantiation(fieldInstIdx);\n    const fieldHandle = this.context.getFieldHandle(fieldInst.handle);\n    const { structName, fieldName, fieldType } = this.getFieldInfo(fieldHandle);\n    return `${instructionName}[${fieldInstIdx}](${structName}.${fieldName}: ${fieldType})`;\n  }\n\n  private formatVariantFieldOperation(\n    variantFieldHandleIdx: number,\n    instructionName: string\n  ): string {\n    // const variantFieldHandle = this.context.getVariantFieldHandle(variantFieldHandleIdx);\n    // Implementation for variant field operations would be needed here\n    return `${instructionName}[${variantFieldHandleIdx}]`;\n  }\n\n  private formatGenericVariantFieldOperation(\n    variantFieldInstIdx: number,\n    instructionName: string\n  ): string {\n    // const variantFieldInst = this.context.getVariantFieldInstantiation(variantFieldInstIdx);\n    // Implementation for generic variant field operations would be needed here\n    return `${instructionName}[${variantFieldInstIdx}]`;\n  }\n\n  private formatVectorOperation(\n    elemTyIdx: number,\n    numElements: bigint | undefined,\n    instructionName: string\n  ): string {\n    const elementsStr = numElements !== undefined ? `, ${numElements}` : \"\";\n    return `${instructionName}(${elemTyIdx}${elementsStr})`;\n  }\n\n  private formatLdConst(constIdx: number): string {\n    const rawModule = this.context.getRawModule();\n    const constant = rawModule.constant_pool[constIdx];\n    if (!constant) {\n      throw new Error(`Constant at index ${constIdx} is out of bounds`);\n    }\n\n    // Format the constant value based on its type\n    const typeStr = this.context.parseSignatureToken(constant.type);\n    const dataStr = this.formatConstantData(constant.data, constant.type);\n    return `LdConst[${constIdx}](${typeStr}: ${dataStr})`;\n  }\n\n  private formatConstantData(data: Uint8Array, type: SignatureToken): string {\n    // For address type, format as hex string with commas\n    if (type.kind === \"Address\") {\n      return Array.from(data).join(\",\");\n    }\n\n    // For other types, we can add more specific formatting later\n    return Array.from(data).join(\",\");\n  }\n\n  private getFieldInfo(fieldHandle: FieldHandle): {\n    structName: string;\n    fieldName: string;\n    fieldType: string;\n  } {\n    const structDef = this.context.getStructDefinition(fieldHandle.owner);\n    const structHandle = this.context.getStructHandle(structDef.struct_handle);\n    const structName = this.context.getIdentifier(structHandle.name);\n\n    let fields: FieldDefinition[] = [];\n    if (structDef.field_information.kind === \"Declared\") {\n      fields = structDef.field_information.fields;\n    }\n\n    const field = fields[fieldHandle.field];\n    if (!field) {\n      throw new Error(`Field not found: ${fieldHandle.field}`);\n    }\n\n    const fieldName = this.context.getIdentifier(field.name);\n    const fieldType = this.context.parseSignatureToken(field.type);\n    return { structName, fieldName, fieldType };\n  }\n\n  private getVariantInfo(structVariantHandle: StructVariantHandle): {\n    structName: string;\n    variantName: string;\n  } {\n    const structDef = this.context.getStructDefinition(structVariantHandle.struct_index);\n    const structHandle = this.context.getStructHandle(structDef.struct_handle);\n    const structName = this.context.getIdentifier(structHandle.name);\n\n    if (structDef.field_information.kind !== \"DeclaredVariants\") {\n      throw new Error(\n        `PackVariant is not supported for field information kind: ${structDef.field_information.kind}`\n      );\n    }\n\n    const variant = structDef.field_information.variants[structVariantHandle.variant];\n    if (!variant) {\n      throw new Error(`Variant not found: ${structVariantHandle.variant}`);\n    }\n\n    const variantName = this.context.getIdentifier(variant.name);\n    return { structName, variantName };\n  }\n}\n","/**\r\n * ModuleDisassembler - Handles disassembly of entire Move modules\r\n */\r\nimport { DisassemblerContext } from \"../core/DisassemblerContext\";\r\nimport { InstructionDisassembler } from \"./InstructionDisassembler\";\r\nimport { VMControlFlowGraph } from \"../core/ControlFlowGraph\";\r\nimport { DisassemblerOptions } from \"../types/DisassemblerOptions\";\r\n\r\nexport class ModuleDisassembler {\r\n  private readonly options: DisassemblerOptions;\r\n\r\n  constructor(private readonly context: DisassemblerContext) {\r\n    this.options = this.context.options;\r\n  }\r\n\r\n  disassemble(): string {\r\n    const { moduleNames, moduleAliases } = this.buildModuleAliases();\r\n\r\n    const header = this.generateHeader();\r\n    const imports = this.generateImports(moduleNames, moduleAliases);\r\n    const structs = this.generateStructs();\r\n    const functions = this.generateFunctions();\r\n\r\n    return `// Move bytecode v${this.context.version}\\n${header} {\\n\\n${imports}\\n\\n${structs}\\n\\n${functions}\\n\\n}`;\r\n  }\r\n\r\n  private buildModuleAliases(): {\r\n    moduleNames: Map<string, number>;\r\n    moduleAliases: Map<string, string>;\r\n  } {\r\n    const moduleNames = new Map<string, number>();\r\n    const moduleAliases = new Map<string, string>();\r\n    const rawModule = this.context.getRawModule();\r\n\r\n    const selfModuleName = this.context.getSelfModuleName();\r\n    moduleNames.set(selfModuleName, 0);\r\n\r\n    for (const moduleHandle of rawModule.module_handles) {\r\n      const name = this.context.getIdentifier(moduleHandle.name);\r\n\r\n      if (moduleNames.has(name)) {\r\n        const count = moduleNames.get(name)!;\r\n        moduleNames.set(name, count + 1);\r\n        moduleAliases.set(name, `${count + 1}${name}`);\r\n      } else {\r\n        moduleNames.set(name, 0);\r\n        moduleAliases.set(name, `${0}${name}`);\r\n      }\r\n    }\r\n\r\n    return { moduleNames, moduleAliases };\r\n  }\r\n\r\n  private generateHeader(): string {\r\n    const selfModuleAddress = this.context.getSelfModuleAddress();\r\n    const selfModuleName = this.context.getSelfModuleName();\r\n    return `module ${selfModuleAddress}::${selfModuleName}`;\r\n  }\r\n\r\n  private generateImports(\r\n    moduleNames: Map<string, number>,\r\n    moduleAliases: Map<string, string>\r\n  ): string {\r\n    const rawModule = this.context.getRawModule();\r\n    const selfModuleAddress = this.context.getSelfModuleAddress();\r\n    const selfModuleName = this.context.getSelfModuleName();\r\n\r\n    return rawModule.module_handles\r\n      .filter((m) => {\r\n        const mAddress = this.context.getAddressIdentifier(m.address);\r\n        const mName = this.context.getIdentifier(m.name);\r\n        return `${mAddress}${mName}` !== `${selfModuleAddress}${selfModuleName}`;\r\n      })\r\n      .map((m) => {\r\n        const mAddress = this.context.getAddressIdentifier(m.address);\r\n        const mName = this.context.getIdentifier(m.name);\r\n\r\n        if (moduleNames.has(mName) && moduleNames.get(mName)! > 0) {\r\n          return `use ${mAddress}::${mName} as ${moduleAliases.get(mName)};`;\r\n        }\r\n        return `use ${mAddress}::${mName};`;\r\n      })\r\n      .join(\"\\n\");\r\n  }\r\n\r\n  private generateStructs(): string {\r\n    const rawModule = this.context.getRawModule();\r\n\r\n    return rawModule.struct_defs\r\n      .map((structDefinition) => {\r\n        const structHandle = this.context.getStructHandle(structDefinition.struct_handle);\r\n        const structName = this.context.getIdentifier(structHandle.name);\r\n        const abilities = this.context.parseAbilities(structHandle.abilities);\r\n        const structAbilities = abilities.length > 0 ? ` has ${abilities.join(\", \")}` : \"\";\r\n\r\n        const structTypeParams = structHandle.type_parameters.map((tp, idx) => {\r\n          const abilities = this.context.parseAbilities(tp.constraints);\r\n          return `${tp.is_phantom ? \"phantom \" : \"\"}T${idx}${abilities.length > 0 ? `: ${abilities.join(\"+ \")}` : \"\"}`;\r\n        });\r\n        const typeParameters =\r\n          structTypeParams.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\r\n\r\n        switch (structDefinition.field_information.kind) {\r\n          case \"Native\":\r\n            return `native struct ${structName}${typeParameters}${structAbilities}`;\r\n          case \"Declared\": {\r\n            const fields = structDefinition.field_information.fields\r\n              .map((field) => {\r\n                const fieldName = this.context.getIdentifier(field.name);\r\n                const fieldType = this.context.parseSignatureToken(field.type);\r\n                return `  ${fieldName}: ${fieldType}`;\r\n              })\r\n              .join(\",\\n\");\r\n            return `struct ${structName}${typeParameters}${structAbilities} {\\n${fields}\\n}`;\r\n          }\r\n          case \"DeclaredVariants\": {\r\n            const variants = structDefinition.field_information.variants\r\n              .map((variant) => {\r\n                const variantName = this.context.getIdentifier(variant.name);\r\n                return `  ${variantName}`;\r\n              })\r\n              .join(\",\\n\");\r\n            return `struct ${structName}${typeParameters}${structAbilities} {\\n${variants}\\n}`;\r\n          }\r\n          default:\r\n            throw new Error(\"Unknown field information\");\r\n        }\r\n      })\r\n      .join(\"\\n\");\r\n  }\r\n\r\n  private generateFunctions(): string {\r\n    const rawModule = this.context.getRawModule();\r\n\r\n    return rawModule.function_defs\r\n      .map((functionDefinition) => {\r\n        const functionHandle = this.context.getFunctionHandle(functionDefinition.function);\r\n        const functionName = this.context.getIdentifier(functionHandle.name);\r\n\r\n        const modifiers: string[] = [];\r\n        if (functionDefinition.code === undefined) {\r\n          modifiers.push(\"native\");\r\n        }\r\n\r\n        if (functionDefinition.isEntry) {\r\n          modifiers.push(\"entry\");\r\n        }\r\n\r\n        switch (functionDefinition.visibility) {\r\n          case \"public\":\r\n            modifiers.push(\"public\");\r\n            break;\r\n          case \"friend\":\r\n            modifiers.push(\"public(friend)\");\r\n            break;\r\n          case \"private\":\r\n            break;\r\n          default:\r\n            throw new Error(\"Unknown function visibility: \" + functionDefinition.visibility);\r\n        }\r\n\r\n        const typeParameters = functionHandle.type_parameters.map((abilitySet, idx) => {\r\n          const abilities = this.context.parseAbilities(abilitySet);\r\n          return `T${idx}${abilities.length > 0 ? `: ${abilities.join(\"+ \")}` : \"\"}`;\r\n        });\r\n\r\n        const params = this.context.getSignature(functionHandle.parameters).map((param) => {\r\n          return this.context.parseSignatureToken(param);\r\n        });\r\n\r\n        const retType = this.context.getSignature(functionHandle.return_).map((ret) => {\r\n          return this.context.parseSignatureToken(ret);\r\n        });\r\n\r\n        let retTypeStr = \"\";\r\n        if (retType.length === 0) {\r\n          retTypeStr = \"\";\r\n        } else if (retType.length === 1) {\r\n          retTypeStr = `: ${retType[0]}`;\r\n        } else {\r\n          retTypeStr = `: (${retType.join(\", \")})`;\r\n        }\r\n\r\n        let body: string[] = [];\r\n        if (functionDefinition.code === undefined) {\r\n          body = [];\r\n        } else {\r\n          const signatures = this.context.getSignature(functionDefinition.code.locals);\r\n          const maxIdx = signatures.length + params.length - 1;\r\n          const width = String(maxIdx).length;\r\n          const locals: string[] = [];\r\n\r\n          signatures.forEach((local, idx) => {\r\n            const localType = this.context.parseSignatureToken(local);\r\n            body.push(`L${String(idx + params.length).padEnd(width, \" \")} loc${idx}: ${localType}`);\r\n            locals.push(localType);\r\n          });\r\n\r\n          const instructionDisassembler = new InstructionDisassembler(this.context, params, locals);\r\n\r\n          // Create control flow graph if basic blocks should be printed\r\n          let cfg: VMControlFlowGraph | undefined;\r\n          let blockIdToNumber: Map<number, number> | undefined;\r\n\r\n          if (this.options.printBasicBlocks) {\r\n            cfg = new VMControlFlowGraph(functionDefinition.code.code);\r\n            // Create mapping from block ID to block number for display\r\n            blockIdToNumber = new Map();\r\n            cfg.blocks().forEach((blockId, index) => {\r\n              blockIdToNumber!.set(blockId, index);\r\n            });\r\n          }\r\n\r\n          functionDefinition.code.code.forEach((instruction, idx) => {\r\n            const instructionStr = instructionDisassembler.disassemble(instruction);\r\n\r\n            // Check if this instruction starts a new basic block\r\n            if (this.options.printBasicBlocks && cfg && blockIdToNumber) {\r\n              const blockId = cfg.blocks().find((blockId) => cfg!.blockStart(blockId) === idx);\r\n              if (blockId !== undefined) {\r\n                const blockNumber = blockIdToNumber.get(blockId);\r\n                if (blockNumber !== undefined) {\r\n                  body.push(`B${blockNumber}:`);\r\n                }\r\n              }\r\n            } else if (idx === 0 && !this.options.printBasicBlocks) {\r\n              // Legacy behavior: only add B0: for the first instruction if not using CFG\r\n              body.push(`B0:`);\r\n            }\r\n\r\n            body.push(\r\n              `${\"\".padStart(4, \" \")}${`${idx}`.padEnd(4, \" \")}:${instructionStr}`\r\n            );\r\n          });\r\n        }\r\n\r\n        return (\r\n          `${modifiers.join(\" \")}${modifiers.length > 0 ? \" \" : \"\"}fun ` +\r\n          `${functionName}` +\r\n          `${typeParameters.length > 0 ? `<${typeParameters.join(\", \")}>` : \"\"}` +\r\n          ` ( ${params.map((param, idx) => `arg${idx}: ${param}`).join(\", \")} )` +\r\n          `${retTypeStr}` +\r\n          ` {\\n\\n` +\r\n          `${body.join(\"\\n\")}\\n` +\r\n          `}`\r\n        );\r\n      })\r\n      .join(\"\\n\\n\");\r\n  }\r\n}\r\n","/**\n * Core types from the original compiledModule.ts - cleaned up and organized\n */\n\nimport { bcs, BcsType, Deserializer } from \"aptos-bcs\";\nimport { fromU8, SerializedType } from \"./serializedType\";\n\n// --- Index Types for Bytecode ---\nexport type ModuleHandleIndex = number;\nexport type StructHandleIndex = number;\nexport type FunctionHandleIndex = number;\nexport type FieldHandleIndex = number;\nexport type SignatureIndex = number;\nexport type IdentifierIndex = number;\nexport type AddressIdentifierIndex = number;\nexport type ConstantPoolIndex = number;\nexport type TypeParameterIndex = number;\nexport type VariantIndex = number;\nexport type FieldInstantiationIndex = number;\nexport type StructDefinitionIndex = number;\nexport type StructDefInstantiationIndex = number;\nexport type StructVariantHandleIndex = number;\nexport type StructVariantInstantiationIndex = number;\nexport type VariantFieldHandleIndex = number;\nexport type VariantFieldInstantiationIndex = number;\nexport type FunctionInstantiationIndex = number;\nexport type LocalIndex = number;\nexport type CodeOffset = number;\nexport type ClosureMask = number;\nexport type MemberCount = number;\n\n// --- Core Module Structure ---\nexport interface MoveModule {\n  magic: number;\n  version: number;\n  selfModuleHandleIdx: number;\n  module_handles: Array<ModuleHandle>;\n  struct_handles: Array<StructHandle>;\n  function_handles: Array<FunctionHandle>;\n  field_handles: Array<FieldHandle>;\n  friend_decls: Array<ModuleHandle>;\n  struct_defs_inst: Array<StructDefInstantiation>;\n  function_inst: Array<FunctionInstantiation>;\n  field_insts: Array<FieldInstantiation>;\n  signatures: Array<Array<SignatureToken>>;\n  identifiers: Array<string>;\n  address_identifiers: Array<string>;\n  constant_pool: Array<Constant>;\n  metadatas: Array<Metadata>;\n  struct_defs: Array<StructDefinition>;\n  function_defs: Array<FunctionDefinition>;\n  struct_variant_handles: Array<StructVariantHandle>;\n  struct_variant_inst: Array<StructVariantInstantiation>;\n  variant_field_handles: Array<VariantFieldHandle>;\n  variant_field_inst: Array<VariantFieldInstantiation>;\n}\n\n// --- Module Structure Types ---\nexport interface ModuleHandle {\n  address: AddressIdentifierIndex;\n  name: IdentifierIndex;\n}\n\nexport interface StructHandle {\n  module: ModuleHandleIndex;\n  name: IdentifierIndex;\n  abilities: number;\n  type_parameters: Array<{\n    constraints: number;\n    is_phantom: boolean;\n  }>;\n}\n\nexport interface FunctionHandle {\n  module: ModuleHandleIndex;\n  name: IdentifierIndex;\n  parameters: SignatureIndex;\n  return_: SignatureIndex;\n  type_parameters: number[];\n  access_specifiers?: BcsType<typeof AccessSpecifier>;\n  attributes?: any;\n}\n\nexport interface FieldHandle {\n  owner: StructDefinitionIndex;\n  field: MemberCount;\n}\n\n// --- Instantiation Types ---\nexport interface StructDefInstantiation {\n  def: StructDefinitionIndex;\n  typeParameters: SignatureIndex;\n}\n\nexport interface FunctionInstantiation {\n  handle: FunctionHandleIndex;\n  type_parameters: SignatureIndex;\n}\n\nexport interface FieldInstantiation {\n  handle: FieldHandleIndex;\n  typeParameters: SignatureIndex;\n}\n\n// --- Definition Types ---\nexport interface StructDefinition {\n  struct_handle: StructHandleIndex;\n  field_information: StructFieldInformation;\n}\n\nexport type StructFieldInformation =\n  | { kind: \"Native\" }\n  | { kind: \"Declared\"; fields: FieldDefinition[] }\n  | { kind: \"DeclaredVariants\"; variants: VariantDefinition[] };\n\nexport interface FieldDefinition {\n  name: IdentifierIndex;\n  type: SignatureToken;\n}\n\nexport interface VariantDefinition {\n  name: IdentifierIndex;\n  fields: FieldDefinition[];\n}\n\nexport type Visibility = \"public\" | \"private\" | \"friend\";\n\nexport interface FunctionDefinition {\n  function: FunctionHandleIndex;\n  visibility: Visibility;\n  isEntry: boolean;\n  acquiresGlobalResources: StructHandleIndex[];\n  code?: CodeUnit;\n}\n\nexport interface CodeUnit {\n  locals: SignatureIndex;\n  code: Bytecode[];\n}\n\n// --- Variant Types (for enum support) ---\nexport interface StructVariantHandle {\n  struct_index: StructDefinitionIndex;\n  variant: VariantIndex;\n}\n\nexport interface StructVariantInstantiation {\n  handle: StructVariantHandleIndex;\n  type_parameters: SignatureIndex;\n}\n\nexport interface VariantFieldHandle {\n  struct_index: StructDefinitionIndex;\n  variants: VariantIndex[];\n  field: MemberCount;\n}\n\nexport interface VariantFieldInstantiation {\n  handle: VariantFieldHandleIndex;\n  typeParameters: SignatureIndex;\n}\n\n// --- Metadata Types ---\nexport interface Constant {\n  type: SignatureToken;\n  data: Uint8Array;\n}\n\nexport interface Metadata {\n  key: Uint8Array;\n  value: Uint8Array;\n}\n\n// --- Ability Types ---\nexport enum Ability {\n  Copy = \"copy\",\n  Drop = \"drop\",\n  Store = \"store\",\n  Key = \"key\",\n}\n\nexport type AbilitySet = number;\n\n// --- Re-export SignatureToken ---\nexport type SignatureToken =\n  | ({ kind: \"Bool\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U8\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U16\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U32\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U64\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U128\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"U256\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"Address\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"Signer\" } & { __signatureTokenBrand: true })\n  | ({ kind: \"Vector\"; type: SignatureToken } & { __signatureTokenBrand: true })\n  | ({\n      kind: \"Function\";\n      args: SignatureToken[];\n      results: SignatureToken[];\n      abilities: AbilitySet;\n    } & { __signatureTokenBrand: true })\n  | ({ kind: \"Struct\"; handle: StructHandleIndex } & { __signatureTokenBrand: true })\n  | ({ kind: \"StructInstantiation\"; handle: StructHandleIndex; typeParams: SignatureToken[] } & {\n      __signatureTokenBrand: true;\n    })\n  | ({ kind: \"Reference\"; type: SignatureToken } & { __signatureTokenBrand: true })\n  | ({ kind: \"MutableReference\"; type: SignatureToken } & { __signatureTokenBrand: true })\n  | ({ kind: \"TypeParameter\"; index: TypeParameterIndex } & { __signatureTokenBrand: true });\n\n// --- Re-export Bytecode ---\nexport type Bytecode =\n  | { kind: \"Pop\" }\n  | { kind: \"Ret\" }\n  | { kind: \"BrTrue\"; codeOffset: CodeOffset }\n  | { kind: \"BrFalse\"; codeOffset: CodeOffset }\n  | { kind: \"Branch\"; codeOffset: CodeOffset }\n  | { kind: \"LdU8\"; value: number }\n  | { kind: \"LdU16\"; value: number }\n  | { kind: \"LdU32\"; value: number }\n  | { kind: \"LdU64\"; value: bigint }\n  | { kind: \"LdU128\"; value: bigint }\n  | { kind: \"LdU256\"; value: string }\n  | { kind: \"CastU8\" }\n  | { kind: \"CastU16\" }\n  | { kind: \"CastU32\" }\n  | { kind: \"CastU64\" }\n  | { kind: \"CastU128\" }\n  | { kind: \"CastU256\" }\n  | { kind: \"LdConst\"; constIdx: ConstantPoolIndex }\n  | { kind: \"LdTrue\" }\n  | { kind: \"LdFalse\" }\n  | { kind: \"CopyLoc\"; localIdx: LocalIndex }\n  | { kind: \"MoveLoc\"; localIdx: LocalIndex }\n  | { kind: \"StLoc\"; localIdx: LocalIndex }\n  | { kind: \"Call\"; funcHandleIdx: FunctionHandleIndex }\n  | { kind: \"CallGeneric\"; funcInstIdx: FunctionInstantiationIndex }\n  | { kind: \"Pack\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"PackGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"PackVariant\"; structVariantHandleIdx: StructVariantHandleIndex }\n  | { kind: \"PackVariantGeneric\"; structVariantInstIdx: StructVariantInstantiationIndex }\n  | { kind: \"Unpack\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"UnpackGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"UnpackVariant\"; structVariantHandleIdx: StructVariantHandleIndex }\n  | { kind: \"UnpackVariantGeneric\"; structVariantInstIdx: StructVariantInstantiationIndex }\n  | { kind: \"TestVariant\"; structVariantHandleIdx: StructVariantHandleIndex }\n  | { kind: \"TestVariantGeneric\"; structVariantInstIdx: StructVariantInstantiationIndex }\n  | { kind: \"ReadRef\" }\n  | { kind: \"WriteRef\" }\n  | { kind: \"FreezeRef\" }\n  | { kind: \"MutBorrowLoc\"; localIdx: LocalIndex }\n  | { kind: \"ImmBorrowLoc\"; localIdx: LocalIndex }\n  | { kind: \"MutBorrowField\"; fieldHandleIdx: FieldHandleIndex }\n  | { kind: \"MutBorrowVariantField\"; variantFieldHandleIdx: VariantFieldHandleIndex }\n  | { kind: \"MutBorrowFieldGeneric\"; fieldInstIdx: FieldInstantiationIndex }\n  | { kind: \"MutBorrowVariantFieldGeneric\"; variantFieldInstIdx: VariantFieldInstantiationIndex }\n  | { kind: \"ImmBorrowField\"; fieldHandleIdx: FieldHandleIndex }\n  | { kind: \"ImmBorrowVariantField\"; variantFieldHandleIdx: VariantFieldHandleIndex }\n  | { kind: \"ImmBorrowFieldGeneric\"; fieldInstIdx: FieldInstantiationIndex }\n  | { kind: \"ImmBorrowVariantFieldGeneric\"; variantFieldInstIdx: VariantFieldInstantiationIndex }\n  | { kind: \"MutBorrowGlobal\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"MutBorrowGlobalGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"ImmBorrowGlobal\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"ImmBorrowGlobalGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"Add\" }\n  | { kind: \"Sub\" }\n  | { kind: \"Mul\" }\n  | { kind: \"Mod\" }\n  | { kind: \"Div\" }\n  | { kind: \"BitOr\" }\n  | { kind: \"BitAnd\" }\n  | { kind: \"Xor\" }\n  | { kind: \"Or\" }\n  | { kind: \"And\" }\n  | { kind: \"Not\" }\n  | { kind: \"Eq\" }\n  | { kind: \"Neq\" }\n  | { kind: \"Lt\" }\n  | { kind: \"Gt\" }\n  | { kind: \"Le\" }\n  | { kind: \"Ge\" }\n  | { kind: \"Abort\" }\n  | { kind: \"Nop\" }\n  | { kind: \"Exists\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"ExistsGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"MoveFrom\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"MoveFromGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"MoveTo\"; structDefIdx: StructDefinitionIndex }\n  | { kind: \"MoveToGeneric\"; structInstIdx: StructDefInstantiationIndex }\n  | { kind: \"Shl\" }\n  | { kind: \"Shr\" }\n  | { kind: \"VecPack\"; elemTyIdx: SignatureIndex; numElements: bigint }\n  | { kind: \"VecLen\"; elemTyIdx: SignatureIndex }\n  | { kind: \"VecImmBorrow\"; elemTyIdx: SignatureIndex }\n  | { kind: \"VecMutBorrow\"; elemTyIdx: SignatureIndex }\n  | { kind: \"VecPushBack\"; elemTyIdx: SignatureIndex }\n  | { kind: \"VecPopBack\"; elemTyIdx: SignatureIndex }\n  | { kind: \"VecUnpack\"; elemTyIdx: SignatureIndex; numElements: bigint }\n  | { kind: \"VecSwap\"; elemTyIdx: SignatureIndex }\n  | { kind: \"PackClosure\"; fun: FunctionHandleIndex; mask: ClosureMask }\n  | { kind: \"PackClosureGeneric\"; fun: FunctionInstantiationIndex; mask: ClosureMask }\n  | { kind: \"CallClosure\"; sigIdx: SignatureIndex };\nexport const StructTypeParameter = bcs.Struct(\"StructTypeParameter\", {\n  /** The type parameter constraints. */\n  constraints: bcs.U8,\n  /** Whether the parameter is declared as phantom. */\n  is_phantom: bcs.Bool,\n});\n\nexport const StructHandle = bcs.Struct(\"StructHandle\", {\n  module: bcs.U16,\n  name: bcs.U16,\n  abilities: bcs.U8,\n  typeParameters: bcs.Vector(StructTypeParameter),\n});\n\nexport const AccessKind = bcs.Enum(\"AccessKind\", {\n  Reads: null,\n  Writes: null,\n});\n\nexport const ResourceInstantiation = bcs.Struct(\"ResourceInstantiation\", {\n  StructHandleIndex: bcs.Uleb128, // StructHandleIndex\n  SignatureIndex: bcs.Uleb128, // SignatureIndex\n});\n\nexport const ResourceSpecifier = bcs.Enum(\"ResourceSpecifier\", {\n  /** Any resource */\n  Any: null,\n  /** Resource declared at a specific address */\n  DeclaredAtAddress: bcs.Uleb128,\n  /** Resource declared in a specific module */\n  DeclaredInModule: bcs.Uleb128,\n  /** Resource type */\n  Resource: bcs.Uleb128,\n  /** Resource instantiation with type parameters */\n  ResourceInstantiation: ResourceInstantiation,\n});\n\nexport const AddressSpecifier = bcs.Enum(\"AddressSpecifier\", {\n  Any: null,\n  Literal: bcs.Uleb128,\n  Parameter: bcs.Uleb128,\n});\n\nexport const AccessSpecifier = bcs.Struct(\"AccessSpecifier\", {\n  /** The kind of access. */\n  kind: AccessKind,\n  /** Whether the specifier is negated. */\n  negated: bcs.Bool,\n  /** The resource specifier. */\n  resource: ResourceSpecifier,\n  /** The address where the resource is stored. */\n  address: AddressSpecifier,\n});\n\nexport const FunctionAttribute = bcs.Enum(\"FunctionAttribute\", {\n  Persistent: null,\n  ModuleLock: null,\n});\n\nexport const FunctionHandle = bcs.Struct(\"FunctionHandle\", {\n  module: bcs.U16,\n  name: bcs.U16,\n  parameters: bcs.U16,\n  return_: bcs.U16,\n  typeParameters: bcs.Vector(bcs.U8),\n  /** Optional access specifiers for the function. */\n  access_specifiers: bcs.Option(bcs.Vector(AccessSpecifier)),\n  /**\n   * Optional attributes for the function.\n   * - \"Persistent\": The function is treated like a public function on upgrade.\n   * - \"ModuleLock\": During execution, a module reentrancy lock is established.\n   */\n  attributes: bcs.Vector(FunctionAttribute),\n});\n\nexport type TypeBuilder =\n  | ({ kind: \"Saturated\"; token: SignatureToken } & { __typeBuilderBrand: true })\n  | ({ kind: \"Vector\" } & { __typeBuilderBrand: true })\n  | ({ kind: \"Reference\" } & { __typeBuilderBrand: true })\n  | ({ kind: \"MutableReference\" } & { __typeBuilderBrand: true })\n  | ({\n      kind: \"StructInst\";\n      sh_idx: StructHandleIndex;\n      arity: number;\n      ty_args: SignatureToken[];\n    } & { __typeBuilderBrand: true })\n  | ({\n      kind: \"Function\";\n      abilities: AbilitySet;\n      arg_count: number;\n      result_count: number;\n      args: SignatureToken[];\n      results: SignatureToken[];\n    } & { __typeBuilderBrand: true });\n\nexport const read_next = (deSignatures: Deserializer, version: number) => {\n  const next_token_num = deSignatures.deserializeU8();\n\n  const token = fromU8(next_token_num);\n  switch (token) {\n    case SerializedType.U16 | SerializedType.U32 | SerializedType.U256:\n      if (version < 6) {\n        throw new Error(`Unsupported token type: ${token} for version ${version}`);\n      }\n      break;\n    case SerializedType.FUNCTION:\n      if (version < 8) {\n        throw new Error(`Unsupported token type: ${token} for version ${version}`);\n      }\n      break;\n    default:\n      // do nothing\n      break;\n  }\n\n  let token_value: SignatureToken | TypeBuilder | null = null;\n  switch (token) {\n    case SerializedType.BOOL:\n      token_value = { kind: \"Bool\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U8:\n      token_value = { kind: \"U8\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U16:\n      token_value = { kind: \"U16\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U32:\n      token_value = { kind: \"U32\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U64:\n      token_value = { kind: \"U64\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U128:\n      token_value = { kind: \"U128\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.U256:\n      token_value = { kind: \"U256\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.ADDRESS:\n      token_value = { kind: \"Address\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.REFERENCE:\n      token_value = { kind: \"Reference\", __typeBuilderBrand: true };\n      break;\n    case SerializedType.MUTABLE_REFERENCE:\n      token_value = { kind: \"MutableReference\", __typeBuilderBrand: true };\n      break;\n    case SerializedType.SIGNER:\n      token_value = { kind: \"Signer\", __signatureTokenBrand: true };\n      break;\n    case SerializedType.VECTOR:\n      token_value = { kind: \"Vector\", __typeBuilderBrand: true };\n      break;\n    case SerializedType.STRUCT:\n      token_value = {\n        kind: \"Struct\",\n        __signatureTokenBrand: true,\n        handle: deSignatures.deserializeU8(),\n      };\n      break;\n    case SerializedType.STRUCT_INST: {\n      const sh_idx = deSignatures.deserializeUleb128AsU32();\n      const arity = deSignatures.deserializeUleb128AsU32();\n      if (arity == 0) {\n        throw new Error(`Unsupported arity 0 for struct instantiation at index ${sh_idx}`);\n      }\n      token_value = {\n        kind: \"StructInst\",\n        __typeBuilderBrand: true,\n        sh_idx: sh_idx,\n        arity: arity,\n        ty_args: [],\n      };\n      break;\n    }\n    case SerializedType.TYPE_PARAMETER: {\n      token_value = {\n        kind: \"TypeParameter\",\n        index: deSignatures.deserializeUleb128AsU32(),\n        __signatureTokenBrand: true,\n      };\n      break;\n    }\n    case SerializedType.FUNCTION: {\n      const abilities = deSignatures.deserializeUleb128AsU32();\n      const arg_count = deSignatures.deserializeUleb128AsU32();\n      const result_count = deSignatures.deserializeUleb128AsU32();\n      if (arg_count + result_count == 0) {\n        token_value = {\n          kind: \"Function\",\n          __signatureTokenBrand: true,\n          abilities: abilities,\n          arg_count: arg_count,\n          result_count: result_count,\n          args: [],\n          results: [],\n        };\n      } else {\n        token_value = {\n          kind: \"Function\",\n          __typeBuilderBrand: true,\n          abilities: abilities,\n          arg_count: arg_count,\n          result_count: result_count,\n          args: [],\n          results: [],\n        };\n      }\n      break;\n    }\n    default:\n      throw new Error(`Unknown serialized type: ${token}`);\n  }\n  return token_value;\n};\n\nexport function load_signature_token(deSignatures: Deserializer, version: number) {\n  const stack: Array<TypeBuilder | SignatureToken> = [];\n  const token = read_next(deSignatures, version);\n  if (token == null) {\n    throw new Error(`Invalid token: ${token}`);\n  } else if (\"__signatureTokenBrand\" in token) {\n    return token as SignatureToken;\n  } else {\n    stack.push(token as TypeBuilder);\n  }\n\n  // eslint-disable-next-line no-constant-condition\n  while (1) {\n    if (stack.length > 256) {\n      throw new Error(`Stack overflow: ${stack.length} tokens`);\n    }\n    const last = stack.at(-1);\n    if (last == null) {\n      throw new Error(`Stack is empty`);\n    } else if (typeof last === \"object\" && last !== null && \"__typeBuilderBrand\" in last) {\n      const next_token = read_next(deSignatures, version);\n      if (next_token == null) {\n        throw new Error(`Invalid token: ${next_token}`);\n      }\n      stack.push(next_token);\n    } else if (typeof last === \"object\" && last !== null && \"__signatureTokenBrand\" in last) {\n      const token = stack.pop();\n      if (token == null) {\n        throw new Error(`Stack is empty`);\n      }\n      const token2 = stack.pop();\n      if (token2 == null) {\n        return token as SignatureToken;\n      } else {\n        const result = apply(token2 as TypeBuilder, token as SignatureToken);\n        stack.push(result);\n      }\n    }\n  }\n  throw new Error(\"Unexpected end of stack\");\n}\n\nexport enum Opcodes {\n  POP = 0x01,\n  RET = 0x02,\n  BR_TRUE = 0x03,\n  BR_FALSE = 0x04,\n  BRANCH = 0x05,\n  LD_U64 = 0x06,\n  LD_CONST = 0x07,\n  LD_TRUE = 0x08,\n  LD_FALSE = 0x09,\n  COPY_LOC = 0x0a,\n  MOVE_LOC = 0x0b,\n  ST_LOC = 0x0c,\n  MUT_BORROW_LOC = 0x0d,\n  IMM_BORROW_LOC = 0x0e,\n  MUT_BORROW_FIELD = 0x0f,\n  IMM_BORROW_FIELD = 0x10,\n  CALL = 0x11,\n  PACK = 0x12,\n  UNPACK = 0x13,\n  READ_REF = 0x14,\n  WRITE_REF = 0x15,\n  ADD = 0x16,\n  SUB = 0x17,\n  MUL = 0x18,\n  MOD = 0x19,\n  DIV = 0x1a,\n  BIT_OR = 0x1b,\n  BIT_AND = 0x1c,\n  XOR = 0x1d,\n  OR = 0x1e,\n  AND = 0x1f,\n  NOT = 0x20,\n  EQ = 0x21,\n  NEQ = 0x22,\n  LT = 0x23,\n  GT = 0x24,\n  LE = 0x25,\n  GE = 0x26,\n  ABORT = 0x27,\n  NOP = 0x28,\n  EXISTS = 0x29,\n  MUT_BORROW_GLOBAL = 0x2a,\n  IMM_BORROW_GLOBAL = 0x2b,\n  MOVE_FROM = 0x2c,\n  MOVE_TO = 0x2d,\n  FREEZE_REF = 0x2e,\n  SHL = 0x2f,\n  SHR = 0x30,\n  LD_U8 = 0x31,\n  LD_U128 = 0x32,\n  CAST_U8 = 0x33,\n  CAST_U64 = 0x34,\n  CAST_U128 = 0x35,\n  MUT_BORROW_FIELD_GENERIC = 0x36,\n  IMM_BORROW_FIELD_GENERIC = 0x37,\n  CALL_GENERIC = 0x38,\n  PACK_GENERIC = 0x39,\n  UNPACK_GENERIC = 0x3a,\n  EXISTS_GENERIC = 0x3b,\n  MUT_BORROW_GLOBAL_GENERIC = 0x3c,\n  IMM_BORROW_GLOBAL_GENERIC = 0x3d,\n  MOVE_FROM_GENERIC = 0x3e,\n  MOVE_TO_GENERIC = 0x3f,\n  VEC_PACK = 0x40,\n  VEC_LEN = 0x41,\n  VEC_IMM_BORROW = 0x42,\n  VEC_MUT_BORROW = 0x43,\n  VEC_PUSH_BACK = 0x44,\n  VEC_POP_BACK = 0x45,\n  VEC_UNPACK = 0x46,\n  VEC_SWAP = 0x47,\n  LD_U16 = 0x48,\n  LD_U32 = 0x49,\n  LD_U256 = 0x4a,\n  CAST_U16 = 0x4b,\n  CAST_U32 = 0x4c,\n  CAST_U256 = 0x4d,\n  // Since bytecode version 7\n  IMM_BORROW_VARIANT_FIELD = 0x4e,\n  MUT_BORROW_VARIANT_FIELD = 0x4f,\n  IMM_BORROW_VARIANT_FIELD_GENERIC = 0x50,\n  MUT_BORROW_VARIANT_FIELD_GENERIC = 0x51,\n  PACK_VARIANT = 0x52,\n  PACK_VARIANT_GENERIC = 0x53,\n  UNPACK_VARIANT = 0x54,\n  UNPACK_VARIANT_GENERIC = 0x55,\n  TEST_VARIANT = 0x56,\n  TEST_VARIANT_GENERIC = 0x57,\n  // Since bytecode version 8\n  PACK_CLOSURE = 0x58,\n  PACK_CLOSURE_GENERIC = 0x59,\n  CALL_CLOSURE = 0x5a,\n}\n\nexport function load_code(deserializer: Deserializer, version: number): Array<Bytecode> {\n  const bytecode_count = deserializer.deserializeUleb128AsU32();\n  return Array.from({ length: bytecode_count }, () => {\n    const byte = deserializer.deserializeU8();\n    // check version\n    switch (byte) {\n      case Opcodes.LD_U16:\n      case Opcodes.LD_U32:\n      case Opcodes.LD_U256:\n      case Opcodes.CAST_U16:\n      case Opcodes.CAST_U32:\n      case Opcodes.CAST_U256:\n        if (version < 6) {\n          throw new Error(`Unsupported opcode ${byte} for version ${version}`);\n        }\n        break;\n      case Opcodes.VEC_PACK:\n      case Opcodes.VEC_LEN:\n      case Opcodes.VEC_IMM_BORROW:\n      case Opcodes.VEC_MUT_BORROW:\n      case Opcodes.VEC_PUSH_BACK:\n      case Opcodes.VEC_POP_BACK:\n      case Opcodes.VEC_UNPACK:\n      case Opcodes.VEC_SWAP:\n        if (version < 4) {\n          throw new Error(`Unsupported opcode ${byte} for version ${version}`);\n        }\n        break;\n      case Opcodes.TEST_VARIANT:\n      case Opcodes.TEST_VARIANT_GENERIC:\n      case Opcodes.PACK_VARIANT:\n      case Opcodes.PACK_VARIANT_GENERIC:\n      case Opcodes.IMM_BORROW_VARIANT_FIELD:\n      case Opcodes.IMM_BORROW_VARIANT_FIELD_GENERIC:\n      case Opcodes.MUT_BORROW_VARIANT_FIELD:\n      case Opcodes.MUT_BORROW_VARIANT_FIELD_GENERIC:\n        if (version < 7) {\n          throw new Error(`Unsupported opcode ${byte} for version ${version}`);\n        }\n        break;\n      case Opcodes.PACK_CLOSURE:\n      case Opcodes.PACK_CLOSURE_GENERIC:\n      case Opcodes.CALL_CLOSURE:\n        if (version < 8) {\n          throw new Error(`Unsupported opcode ${byte} for version ${version}`);\n        }\n        break;\n      default:\n        // No additional checks needed for other opcodes\n        break;\n    }\n    switch (byte) {\n      case Opcodes.POP:\n        return { kind: \"Pop\" };\n      case Opcodes.RET:\n        return { kind: \"Ret\" };\n      case Opcodes.BR_TRUE:\n        return { kind: \"BrTrue\", codeOffset: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.BR_FALSE:\n        return { kind: \"BrFalse\", codeOffset: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.BRANCH:\n        return { kind: \"Branch\", codeOffset: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.LD_U8:\n        return { kind: \"LdU8\", value: deserializer.deserializeU8() };\n      case Opcodes.LD_U64:\n        return { kind: \"LdU64\", value: deserializer.deserializeU64() };\n      case Opcodes.LD_U128:\n        return { kind: \"LdU128\", value: deserializer.deserializeU128() };\n      case Opcodes.CAST_U8:\n        return { kind: \"CastU8\" };\n      case Opcodes.CAST_U64:\n        return { kind: \"CastU64\" };\n      case Opcodes.CAST_U128:\n        return { kind: \"CastU128\" };\n      case Opcodes.LD_CONST:\n        return { kind: \"LdConst\", constIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.LD_TRUE:\n        return { kind: \"LdTrue\" };\n      case Opcodes.LD_FALSE:\n        return { kind: \"LdFalse\" };\n      case Opcodes.COPY_LOC:\n        return { kind: \"CopyLoc\", localIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MOVE_LOC:\n        return { kind: \"MoveLoc\", localIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.ST_LOC:\n        return { kind: \"StLoc\", localIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MUT_BORROW_LOC:\n        return { kind: \"MutBorrowLoc\", localIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.IMM_BORROW_LOC:\n        return { kind: \"ImmBorrowLoc\", localIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MUT_BORROW_FIELD:\n        return { kind: \"MutBorrowField\", fieldHandleIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MUT_BORROW_FIELD_GENERIC:\n        return {\n          kind: \"MutBorrowFieldGeneric\",\n          fieldInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.IMM_BORROW_FIELD:\n        return { kind: \"ImmBorrowField\", fieldHandleIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.IMM_BORROW_FIELD_GENERIC:\n        return {\n          kind: \"ImmBorrowFieldGeneric\",\n          fieldInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.MUT_BORROW_VARIANT_FIELD:\n        return {\n          kind: \"MutBorrowVariantField\",\n          variantFieldHandleIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.MUT_BORROW_VARIANT_FIELD_GENERIC:\n        return {\n          kind: \"MutBorrowVariantFieldGeneric\",\n          variantFieldInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.IMM_BORROW_VARIANT_FIELD:\n        return {\n          kind: \"ImmBorrowVariantField\",\n          variantFieldHandleIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.IMM_BORROW_VARIANT_FIELD_GENERIC:\n        return {\n          kind: \"ImmBorrowVariantFieldGeneric\",\n          variantFieldInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.CALL:\n        return { kind: \"Call\", funcHandleIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.CALL_GENERIC:\n        return { kind: \"CallGeneric\", funcInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.PACK:\n        return { kind: \"Pack\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.PACK_GENERIC:\n        return { kind: \"PackGeneric\", structInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.UNPACK:\n        return { kind: \"Unpack\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.UNPACK_GENERIC:\n        return { kind: \"UnpackGeneric\", structInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.PACK_VARIANT:\n        return {\n          kind: \"PackVariant\",\n          structVariantHandleIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.UNPACK_VARIANT:\n        return {\n          kind: \"UnpackVariant\",\n          structVariantHandleIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.PACK_VARIANT_GENERIC:\n        return {\n          kind: \"PackVariantGeneric\",\n          structVariantInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.UNPACK_VARIANT_GENERIC:\n        return {\n          kind: \"UnpackVariantGeneric\",\n          structVariantInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.TEST_VARIANT:\n        return {\n          kind: \"TestVariant\",\n          structVariantHandleIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.TEST_VARIANT_GENERIC:\n        return {\n          kind: \"TestVariantGeneric\",\n          structVariantInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.PACK_CLOSURE:\n        return {\n          kind: \"PackClosure\",\n          fun: deserializer.deserializeUleb128AsU32(),\n          mask: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.PACK_CLOSURE_GENERIC:\n        return {\n          kind: \"PackClosureGeneric\",\n          fun: deserializer.deserializeUleb128AsU32(),\n          mask: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.CALL_CLOSURE:\n        return { kind: \"CallClosure\", sigIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.READ_REF:\n        return { kind: \"ReadRef\" };\n      case Opcodes.WRITE_REF:\n        return { kind: \"WriteRef\" };\n      case Opcodes.ADD:\n        return { kind: \"Add\" };\n      case Opcodes.SUB:\n        return { kind: \"Sub\" };\n      case Opcodes.MUL:\n        return { kind: \"Mul\" };\n      case Opcodes.MOD:\n        return { kind: \"Mod\" };\n      case Opcodes.DIV:\n        return { kind: \"Div\" };\n      case Opcodes.BIT_OR:\n        return { kind: \"BitOr\" };\n      case Opcodes.BIT_AND:\n        return { kind: \"BitAnd\" };\n      case Opcodes.XOR:\n        return { kind: \"Xor\" };\n      case Opcodes.SHL:\n        return { kind: \"Shl\" };\n      case Opcodes.SHR:\n        return { kind: \"Shr\" };\n      case Opcodes.OR:\n        return { kind: \"Or\" };\n      case Opcodes.AND:\n        return { kind: \"And\" };\n      case Opcodes.NOT:\n        return { kind: \"Not\" };\n      case Opcodes.EQ:\n        return { kind: \"Eq\" };\n      case Opcodes.NEQ:\n        return { kind: \"Neq\" };\n      case Opcodes.LT:\n        return { kind: \"Lt\" };\n      case Opcodes.GT:\n        return { kind: \"Gt\" };\n      case Opcodes.LE:\n        return { kind: \"Le\" };\n      case Opcodes.GE:\n        return { kind: \"Ge\" };\n      case Opcodes.ABORT:\n        return { kind: \"Abort\" };\n      case Opcodes.NOP:\n        return { kind: \"Nop\" };\n      case Opcodes.EXISTS:\n        return { kind: \"Exists\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.EXISTS_GENERIC:\n        return { kind: \"ExistsGeneric\", structInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MUT_BORROW_GLOBAL:\n        return { kind: \"MutBorrowGlobal\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MUT_BORROW_GLOBAL_GENERIC:\n        return {\n          kind: \"MutBorrowGlobalGeneric\",\n          structInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.IMM_BORROW_GLOBAL:\n        return { kind: \"ImmBorrowGlobal\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.IMM_BORROW_GLOBAL_GENERIC:\n        return {\n          kind: \"ImmBorrowGlobalGeneric\",\n          structInstIdx: deserializer.deserializeUleb128AsU32(),\n        };\n      case Opcodes.MOVE_FROM:\n        return { kind: \"MoveFrom\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MOVE_FROM_GENERIC:\n        return { kind: \"MoveFromGeneric\", structInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MOVE_TO:\n        return { kind: \"MoveTo\", structDefIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.MOVE_TO_GENERIC:\n        return { kind: \"MoveToGeneric\", structInstIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.FREEZE_REF:\n        return { kind: \"FreezeRef\" };\n      case Opcodes.VEC_PACK:\n        return {\n          kind: \"VecPack\",\n          elemTyIdx: deserializer.deserializeUleb128AsU32(),\n          numElements: deserializer.deserializeU64(),\n        };\n      case Opcodes.VEC_LEN:\n        return { kind: \"VecLen\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.VEC_IMM_BORROW:\n        return { kind: \"VecImmBorrow\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.VEC_MUT_BORROW:\n        return { kind: \"VecMutBorrow\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.VEC_PUSH_BACK:\n        return { kind: \"VecPushBack\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.VEC_POP_BACK:\n        return { kind: \"VecPopBack\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.VEC_UNPACK:\n        return {\n          kind: \"VecUnpack\",\n          elemTyIdx: deserializer.deserializeUleb128AsU32(),\n          numElements: deserializer.deserializeU64(),\n        };\n      case Opcodes.VEC_SWAP:\n        return { kind: \"VecSwap\", elemTyIdx: deserializer.deserializeUleb128AsU32() };\n      case Opcodes.LD_U16:\n        return { kind: \"LdU16\", value: deserializer.deserializeU16() };\n      case Opcodes.LD_U32:\n        return { kind: \"LdU32\", value: deserializer.deserializeU32() };\n      case Opcodes.LD_U256:\n        return { kind: \"LdU256\", value: deserializer.deserializeU256().toString() };\n      case Opcodes.CAST_U16:\n        return { kind: \"CastU16\" };\n      case Opcodes.CAST_U32:\n        return { kind: \"CastU32\" };\n      case Opcodes.CAST_U256:\n        return { kind: \"CastU256\" };\n      default:\n        throw new Error(`Unknown bytecode opcode: 0x${byte.toString(16)}`);\n    }\n  });\n}\n\nexport const apply = (self: TypeBuilder, tok: SignatureToken): SignatureToken | TypeBuilder => {\n  switch (self.kind) {\n    case \"Reference\":\n      return { kind: \"Reference\", type: tok, __signatureTokenBrand: true };\n    case \"MutableReference\":\n      return { kind: \"MutableReference\", type: tok, __signatureTokenBrand: true };\n    case \"Vector\":\n      return { kind: \"Vector\", type: tok, __signatureTokenBrand: true };\n    case \"StructInst\":\n      self.ty_args.push(tok);\n      if (self.ty_args.length >= self.arity) {\n        return {\n          kind: \"StructInstantiation\",\n          handle: self.sh_idx,\n          typeParams: self.ty_args,\n          __signatureTokenBrand: true,\n        };\n      } else {\n        return {\n          kind: \"StructInst\",\n          __typeBuilderBrand: true,\n          sh_idx: self.sh_idx,\n          arity: self.arity,\n          ty_args: self.ty_args,\n        };\n      }\n    case \"Function\":\n      if (self.args.length < self.arg_count) {\n        self.args.push(tok);\n      } else {\n        self.results.push(tok);\n      }\n      if (self.args.length == self.arg_count && self.results.length == self.result_count) {\n        return {\n          kind: \"Function\",\n          arg_count: self.arg_count,\n          result_count: self.result_count,\n          args: self.args,\n          results: self.results,\n          abilities: self.abilities,\n          __signatureTokenBrand: true,\n        };\n      } else {\n        return {\n          kind: \"Function\",\n          __typeBuilderBrand: true,\n          arg_count: self.arg_count,\n          result_count: self.result_count,\n          args: self.args,\n          results: self.results,\n          abilities: self.abilities,\n        };\n      }\n    default:\n      throw new Error(`Unknown token kind ${tok.kind}`);\n  }\n};\n\nexport const AbilityValues = {\n  Copy: 1,\n  Drop: 2,\n  Store: 4,\n  Key: 8,\n};\n\nexport function parseAbilities(abilities: number): string[] {\n  const result: string[] = [];\n  if (abilities & AbilityValues.Copy) result.push(\"copy\");\n  if (abilities & AbilityValues.Drop) result.push(\"drop\");\n  if (abilities & AbilityValues.Store) result.push(\"store\");\n  if (abilities & AbilityValues.Key) result.push(\"key\");\n  return result;\n}\n\nexport function parseSignatureToken(token: SignatureToken, module: MoveModule): string {\n  switch (token.kind) {\n    case \"Bool\":\n    case \"U8\":\n    case \"U16\":\n    case \"U32\":\n    case \"U64\":\n    case \"U128\":\n    case \"U256\":\n    case \"Address\":\n    case \"Signer\":\n      return token.kind.toLowerCase();\n    case \"Vector\":\n      return `vector<${parseSignatureToken(token.type, module)}>`;\n    case \"Reference\":\n      return `&${parseSignatureToken(token.type, module)}`;\n    case \"MutableReference\":\n      return `&mut ${parseSignatureToken(token.type, module)}`;\n    case \"Struct\": {\n      const struct_handle = module.struct_handles[token.handle];\n      const struct_module_idx = struct_handle.module;\n      const struct_module = module.module_handles[struct_module_idx];\n      const moduleName = module.identifiers[struct_module.name];\n      const structName = module.identifiers[struct_handle.name];\n      if (struct_module_idx === module.selfModuleHandleIdx) {\n        return structName;\n      } else {\n        return `${moduleName}::${structName}`;\n      }\n    }\n    case \"StructInstantiation\": {\n      const struct_handle = module.struct_handles[token.handle];\n      const struct_module_idx = struct_handle.module;\n      const struct_module = module.module_handles[struct_module_idx];\n      const moduleName = module.identifiers[struct_module.name];\n      const structName = module.identifiers[struct_handle.name];\n      const typeParams = token.typeParams.map((tp) => parseSignatureToken(tp, module)).join(\", \");\n      if (struct_module_idx === module.selfModuleHandleIdx) {\n        return `${structName}<${typeParams}>`;\n      } else {\n        return `${moduleName}::${structName}<${typeParams}>`;\n      }\n    }\n    case \"TypeParameter\":\n      return `T${token.index}`;\n    case \"Function\":\n      return `fn(${token.args.map((a) => parseSignatureToken(a, module)).join(\", \")}) -> (${token.results.map((r) => parseSignatureToken(r, module)).join(\", \")})`;\n    default:\n      throw new Error(`Unknown SignatureToken kind: ${(token as any).kind}`);\n  }\n}\n","export enum SerializedType {\n  BOOL = 0x1,\n  U8 = 0x2,\n  U64 = 0x3,\n  U128 = 0x4,\n  ADDRESS = 0x5,\n  REFERENCE = 0x6,\n  MUTABLE_REFERENCE = 0x7,\n  STRUCT = 0x8,\n  TYPE_PARAMETER = 0x9,\n  VECTOR = 0xa,\n  STRUCT_INST = 0xb,\n  SIGNER = 0xc,\n  U16 = 0xd,\n  U32 = 0xe,\n  U256 = 0xf,\n  FUNCTION = 0x10,\n}\n\nexport function fromU8(value: number): SerializedType {\n  switch (value) {\n    case SerializedType.BOOL:\n      return SerializedType.BOOL;\n    case SerializedType.U8:\n      return SerializedType.U8;\n    case SerializedType.U64:\n      return SerializedType.U64;\n    case SerializedType.U128:\n      return SerializedType.U128;\n    case SerializedType.ADDRESS:\n      return SerializedType.ADDRESS;\n    case SerializedType.REFERENCE:\n      return SerializedType.REFERENCE;\n    case SerializedType.MUTABLE_REFERENCE:\n      return SerializedType.MUTABLE_REFERENCE;\n    case SerializedType.STRUCT:\n      return SerializedType.STRUCT;\n    case SerializedType.TYPE_PARAMETER:\n      return SerializedType.TYPE_PARAMETER;\n    case SerializedType.VECTOR:\n      return SerializedType.VECTOR;\n    case SerializedType.STRUCT_INST:\n      return SerializedType.STRUCT_INST;\n    case SerializedType.SIGNER:\n      return SerializedType.SIGNER;\n    case SerializedType.U16:\n      return SerializedType.U16;\n    case SerializedType.U32:\n      return SerializedType.U32;\n    case SerializedType.U256:\n      return SerializedType.U256;\n    case SerializedType.FUNCTION:\n      return SerializedType.FUNCTION;\n    default:\n      throw new Error(\"Unknown serialized type: \" + value);\n  }\n}\n","\nimport { Buffer } from \"buffer\";\nimport { bcs, Deserializer } from \"aptos-bcs\";\n\nimport {\n  formatLocalInstruction,\n  getFieldInfo,\n  formatFieldInstruction,\n  formatStructInstruction,\n  formatGenericStructInstruction,\n  getVariantInfo,\n} from \"../instruction-helpers\";\nimport {\n  AccessSpecifier,\n  FunctionAttribute,\n  load_signature_token,\n  load_code,\n  SignatureToken,\n  Bytecode,\n  CodeUnit,\n  Constant,\n  FieldDefinition,\n  FieldHandle,\n  FieldInstantiation,\n  FunctionDefinition,\n  Metadata,\n  ModuleHandle,\n  MoveModule,\n  parseAbilities,\n  parseSignatureToken,\n  StructDefinition,\n  StructDefInstantiation,\n  StructVariantHandle,\n  StructVariantInstantiation,\n  VariantDefinition,\n  VariantFieldHandle,\n  VariantFieldInstantiation,\n  Visibility,\n} from \"./MoveModule\";\n\n// Import functions that need to be defined\n// These should be moved from type/compiledModule.ts\nexport { load_signature_token, parseAbilities, parseSignatureToken, load_code } from \"./MoveModule\";\n\nexport function disassembleMoveModule(bytecode: Uint8Array): MoveModule {\n  const des = new Deserializer(bytecode);\n\n  // get magic\n\n  const magic = des.deserializeU32();\n  if (magic !== 0xbeb1ca1) {\n    throw new Error(`Invalid magic number: ${magic.toString(16)}`);\n  }\n\n  // get version\n  const version = des.deserializeU32() & ~0xa000000;\n  if (version > 8) {\n    throw new Error(`Unsupported version: ${version}`);\n  }\n\n  // get table length\n  const tableLength = des.deserializeUleb128AsU32();\n\n  // get table\n  const tables = Array.from({ length: tableLength }, () => {\n    const kind = des.deserializeU8();\n    const table_offset = des.deserializeUleb128AsU32();\n    const count = des.deserializeUleb128AsU32();\n\n    return {\n      kind,\n      table_offset,\n      count,\n    };\n  });\n\n  // check table\n  let offset = 0;\n  tables.forEach((table) => {\n    if (table.table_offset != offset) {\n      throw new Error(`Table offset mismatch: expected ${offset}, got ${table.table_offset}`);\n    }\n    offset += table.count;\n  });\n\n  // copy deserializer\n\n  const tables_byte = new Uint8Array(\n    Array.from({ length: offset }, () => {\n      return des.deserializeU8();\n    })\n  );\n\n  // get self_module_handle_idx\n  const selfModuleHandleIdx = des.deserializeUleb128AsU32();\n\n  // 表类型常量定义\n  const TableKind = {\n    MODULE_HANDLES: 0x1,\n    STRUCT_HANDLES: 0x2,\n    FUNCTION_HANDLES: 0x3,\n    FUNCTION_INST: 0x4,\n    SIGNATURES: 0x5,\n    CONSTANT_POOL: 0x6,\n    IDENTIFIERS: 0x7,\n    ADDRESS_IDENTIFIERS: 0x8,\n    STRUCT_DEFS: 0xa,\n    STRUCT_DEF_INST: 0xb,\n    FUNCTION_DEFS: 0xc,\n    FIELD_HANDLES: 0xd,\n    FIELD_INST: 0xe,\n    FRIEND_DECLS: 0xf,\n    METADATA: 0x10,\n    VARIANT_FIELD_HANDLES: 0x11,\n    VARIANT_FIELD_INST: 0x12,\n    STRUCT_VARIANT_HANDLES: 0x13,\n    STRUCT_VARIANT_INST: 0x14,\n  };\n\n  const module_handles: Array<{ address: number; name: number }> = [];\n  const struct_handles: Array<{\n    module: number;\n    name: number;\n    abilities: number;\n    type_parameters: { constraints: number; is_phantom: boolean }[];\n  }> = [];\n  const function_handles: Array<{\n    module: number;\n    name: number;\n    parameters: number;\n    return_: number;\n    type_parameters: number[];\n    access_specifiers?: any;\n    attributes?: any;\n  }> = [];\n\n  const function_inst: Array<{ handle: number; type_parameters: number }> = [];\n\n  const signatures: Array<Array<SignatureToken>> = [];\n  const constant_pool: Array<Constant> = [];\n  const identifiers: Array<string> = [];\n  const address_identifiers: Array<string> = [];\n  const metadatas: Array<Metadata> = [];\n\n  tables.forEach((table, idx) => {\n    switch (table.kind) {\n      case TableKind.MODULE_HANDLES: {\n        const module_handles_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const de = new Deserializer(module_handles_bytes);\n        while (de.remaining() > 0) {\n          module_handles.push({\n            address: de.deserializeUleb128AsU32(),\n            name: de.deserializeUleb128AsU32(),\n          });\n        }\n        break;\n      }\n\n      case TableKind.STRUCT_HANDLES: {\n        const struct_handles_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const deStruct = new Deserializer(struct_handles_bytes);\n        while (deStruct.remaining() > 0) {\n          const module = deStruct.deserializeUleb128AsU32();\n          const name = deStruct.deserializeUleb128AsU32();\n          const abilities = deStruct.deserializeUleb128AsU32();\n          const type_param_count = deStruct.deserializeUleb128AsU32();\n          const type_parameters = Array.from({ length: type_param_count }, () => {\n            const constraints = deStruct.deserializeUleb128AsU32();\n            let is_phantom = false;\n            if (version < 3) {\n              is_phantom = false;\n            } else {\n              const byte = deStruct.deserializeUleb128AsU32();\n              is_phantom = byte != 0;\n            }\n            return {\n              constraints,\n              is_phantom,\n            };\n          });\n\n          struct_handles.push({\n            module,\n            name,\n            abilities,\n            type_parameters,\n          });\n        }\n        break;\n      }\n      case TableKind.FUNCTION_HANDLES: {\n        const function_handles_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const deFunc = new Deserializer(function_handles_bytes);\n        while (deFunc.remaining() > 0) {\n          const module = deFunc.deserializeUleb128AsU32();\n          const name = deFunc.deserializeUleb128AsU32();\n          const parameters = deFunc.deserializeUleb128AsU32();\n          const return_ = deFunc.deserializeUleb128AsU32();\n          const type_param_count = deFunc.deserializeUleb128AsU32();\n          const type_parameters = Array.from({ length: type_param_count }, () => {\n            const constraints = deFunc.deserializeUleb128AsU32();\n            return constraints;\n          });\n          let access_specifiers: any = null;\n          if (version >= 7) {\n            const has_access_specifiers = deFunc.deserializeU8();\n            let is_some: boolean | undefined = undefined;\n            switch (has_access_specifiers) {\n              case 1:\n                is_some = false;\n                break;\n              case 2:\n                is_some = true;\n                break;\n              default:\n                throw new Error(`Unknown access specifier value: ${has_access_specifiers}`);\n            }\n            if (is_some) {\n              access_specifiers = bcs.Vector(AccessSpecifier).read(deFunc);\n            }\n          }\n\n          let function_abilities: any = null;\n          if (version >= 8) {\n            function_abilities = bcs.Vector(FunctionAttribute).read(deFunc);\n          }\n\n          function_handles.push({\n            module,\n            name,\n            parameters,\n            return_,\n            type_parameters,\n            access_specifiers,\n            attributes: function_abilities,\n          });\n        }\n        break;\n      }\n      case TableKind.FUNCTION_INST: {\n        const function_inst_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const deFuncInst = new Deserializer(function_inst_bytes);\n        while (deFuncInst.remaining() > 0) {\n          const handle = deFuncInst.deserializeUleb128AsU32();\n          const type_parameters = deFuncInst.deserializeUleb128AsU32();\n          function_inst.push({ handle, type_parameters });\n        }\n        break;\n      }\n\n      case TableKind.SIGNATURES: {\n        const signatures_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const deSignatures = new Deserializer(signatures_bytes);\n\n        while (deSignatures.remaining() > 0) {\n          const signature_len = bcs.U8.read(deSignatures);\n          const tokens = Array.from({ length: signature_len }, () => {\n            return load_signature_token(deSignatures, version);\n          });\n          signatures.push(tokens);\n        }\n        break;\n      }\n      case TableKind.CONSTANT_POOL: {\n        const constant_pool_bytes = tables_byte.slice(\n          table.table_offset,\n          table.table_offset + table.count\n        );\n        const deConstantPool = new Deserializer(constant_pool_bytes);\n        while (deConstantPool.remaining() > 0) {\n          const constant_pool_token = load_signature_token(deConstantPool, version);\n          const size = deConstantPool.deserializeUleb128AsU32();\n          const constant_pool_values = new Uint8Array(\n            Array.from({ length: size }, () => {\n              return deConstantPool.deserializeU8();\n            })\n          );\n          constant_pool.push({\n            type: constant_pool_token as SignatureToken,\n            data: constant_pool_values,\n          });\n        }\n        break;\n      }\n      case TableKind.IDENTIFIERS: {\n        const deIdentifiers = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deIdentifiers.remaining() > 0) {\n          const len = deIdentifiers.deserializeUleb128AsU32();\n          const identifiers_byte = new Uint8Array(\n            Array.from({ length: len }, () => {\n              return deIdentifiers.deserializeU8();\n            })\n          );\n          identifiers.push(Buffer.from(identifiers_byte).toString(\"utf-8\"));\n        }\n        break;\n      }\n      case TableKind.ADDRESS_IDENTIFIERS: {\n        const deAddressIdentifiers = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deAddressIdentifiers.remaining() > 0) {\n          const address = new Uint8Array(\n            Array.from({ length: 32 }, () => {\n              return deAddressIdentifiers.deserializeU8();\n            })\n          );\n          address_identifiers.push(Buffer.from(address).toString(\"hex\"));\n        }\n        break;\n      }\n      case TableKind.STRUCT_DEFS:\n      case TableKind.STRUCT_DEF_INST:\n      case TableKind.FUNCTION_DEFS:\n      case TableKind.FIELD_HANDLES:\n      case TableKind.FIELD_INST:\n        break;\n      case TableKind.FRIEND_DECLS:\n        if (version < 2) {\n          throw new Error(`Table kind ${table.kind} is not supported in version ${version}`);\n        }\n        break;\n      case TableKind.METADATA: {\n        if (version < 5) {\n          throw new Error(`Metadata table is not supported in version ${version}`);\n        }\n        const deMetadata = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deMetadata.remaining() > 0) {\n          const key_len = deMetadata.deserializeUleb128AsU32();\n          const key = new Uint8Array(\n            Array.from({ length: key_len }, () => {\n              return deMetadata.deserializeU8();\n            })\n          );\n\n          const value_len = deMetadata.deserializeUleb128AsU32();\n          const value = new Uint8Array(\n            Array.from({ length: value_len }, () => {\n              return deMetadata.deserializeU8();\n            })\n          );\n\n          metadatas.push({\n            key,\n            value,\n          });\n        }\n        break;\n      }\n      case TableKind.VARIANT_FIELD_HANDLES:\n      case TableKind.VARIANT_FIELD_INST:\n      case TableKind.STRUCT_VARIANT_HANDLES:\n      case TableKind.STRUCT_VARIANT_INST: {\n        if (version < 7) {\n          throw new Error(`Enum types not available for bytecode version ${version}`);\n        }\n        break;\n      }\n      default:\n        console.warn(`Unknown table kind ${table.kind} at index ${idx}`);\n    }\n  });\n\n  const struct_defs: Array<StructDefinition> = [];\n  const struct_defs_inst: Array<StructDefInstantiation> = [];\n\n  const function_defs: Array<FunctionDefinition> = [];\n  const field_defs: Array<FieldHandle> = [];\n  const field_insts: Array<FieldInstantiation> = [];\n  const friend_decls: Array<ModuleHandle> = [];\n  const variant_field_handles: Array<VariantFieldHandle> = [];\n  const variant_field_inst: Array<VariantFieldInstantiation> = [];\n  const struct_variant_handles: Array<StructVariantHandle> = [];\n  const struct_variant_inst: Array<StructVariantInstantiation> = [];\n\n  tables.forEach((table) => {\n    switch (table.kind) {\n      case TableKind.STRUCT_DEFS: {\n        const deStructDefs = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deStructDefs.remaining() > 0) {\n          const struct_handle = deStructDefs.deserializeUleb128AsU32();\n          const field_information_flag = deStructDefs.deserializeU8();\n          switch (field_information_flag) {\n            case 0x01:\n              // NATIVE\n              struct_defs.push({\n                struct_handle,\n                field_information: { kind: \"Native\" },\n              });\n              break;\n            case 0x02: {\n              // DECLARED\n              const field_count = deStructDefs.deserializeUleb128AsU32();\n              const fields: Array<FieldDefinition> = Array.from({ length: field_count }, () => {\n                return {\n                  name: deStructDefs.deserializeUleb128AsU32(),\n                  type: load_signature_token(deStructDefs, version) as SignatureToken,\n                };\n              });\n              struct_defs.push({\n                struct_handle,\n                field_information: { kind: \"Declared\", fields },\n              });\n              break;\n            }\n            case 0x03: {\n              // UNRESTRICTED\n              if (version >= 7) {\n                const variant_count = deStructDefs.deserializeUleb128AsU32();\n                const variants: Array<VariantDefinition> = Array.from(\n                  { length: variant_count },\n                  () => {\n                    const name = deStructDefs.deserializeUleb128AsU32();\n                    const fields: Array<FieldDefinition> = Array.from(\n                      { length: deStructDefs.deserializeUleb128AsU32() },\n                      () => {\n                        return {\n                          name: deStructDefs.deserializeUleb128AsU32(),\n                          type: load_signature_token(deStructDefs, version) as SignatureToken,\n                        };\n                      }\n                    );\n                    return { name, fields };\n                  }\n                );\n                struct_defs.push({\n                  struct_handle,\n                  field_information: { kind: \"DeclaredVariants\", variants },\n                });\n              } else {\n                throw new Error(\n                  `Unrestricted field information is not supported in version ${version}`\n                );\n              }\n              break;\n            }\n            default:\n              throw new Error(`Unknown field information flag: ${field_information_flag}`);\n          }\n        }\n        break;\n      }\n      case TableKind.STRUCT_DEF_INST: {\n        const deStructDefInst = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deStructDefInst.remaining() > 0) {\n          const def = deStructDefInst.deserializeUleb128AsU32();\n          const type_parameters = deStructDefInst.deserializeUleb128AsU32();\n          struct_defs_inst.push({\n            def,\n            typeParameters: type_parameters,\n          });\n        }\n        break;\n      }\n      case TableKind.FUNCTION_DEFS: {\n        const deFunctionDefs = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deFunctionDefs.remaining() > 0) {\n          const function_ = deFunctionDefs.deserializeUleb128AsU32();\n          let flag = deFunctionDefs.deserializeU8();\n\n          let vis: Visibility | undefined = undefined;\n          let is_entry = false;\n          let extra_flags = 0;\n          if (version == 1) {\n            if ((flag & 1) != 0) {\n              flag ^= 1;\n              vis = \"public\";\n            } else {\n              vis = \"private\";\n            }\n\n            is_entry = false;\n            extra_flags = flag;\n          } else if (version < 5) {\n            if (flag == 2) {\n              vis = \"public\";\n              is_entry = true;\n            } else {\n              switch (flag) {\n                case 0:\n                  vis = \"private\";\n                  break;\n                case 1:\n                  vis = \"public\";\n                  break;\n                case 3:\n                  vis = \"friend\";\n                  break;\n                default:\n                  throw new Error(`Unknown function definition flag: ${flag}`);\n              }\n              is_entry = false;\n              extra_flags = deFunctionDefs.deserializeU8();\n            }\n          } else {\n            switch (flag) {\n              case 0:\n                vis = \"private\";\n                break;\n              case 1:\n                vis = \"public\";\n                break;\n              case 3:\n                vis = \"friend\";\n                break;\n              default:\n                throw new Error(`Unknown function definition flag: ${flag}`);\n            }\n            extra_flags = deFunctionDefs.deserializeU8();\n            is_entry = (extra_flags & 4) != 0;\n            if (is_entry) {\n              extra_flags ^= 4;\n            }\n          }\n          const acquires_global_resources: Array<number> = Array.from(\n            { length: deFunctionDefs.deserializeUleb128AsU32() },\n            () => {\n              return deFunctionDefs.deserializeUleb128AsU32();\n            }\n          );\n          let code_unit: CodeUnit | undefined = undefined;\n          if ((extra_flags & 2) != 0) {\n            extra_flags ^= 2;\n          } else {\n            const locals = deFunctionDefs.deserializeUleb128AsU32();\n            const codes = load_code(deFunctionDefs, version);\n            code_unit = {\n              locals,\n              code: codes,\n            };\n          }\n          function_defs.push({\n            function: function_,\n            visibility: vis,\n            isEntry: is_entry,\n            acquiresGlobalResources: acquires_global_resources,\n            code: code_unit,\n          });\n        }\n        break;\n      }\n      case TableKind.FIELD_HANDLES: {\n        const deFieldHandles = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deFieldHandles.remaining() > 0) {\n          const struct_idx = deFieldHandles.deserializeUleb128AsU32();\n          const offset = deFieldHandles.deserializeUleb128AsU32();\n          field_defs.push({\n            owner: struct_idx,\n            field: offset,\n          });\n        }\n        break;\n      }\n      case TableKind.FIELD_INST: {\n        const deFieldInst = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deFieldInst.remaining() > 0) {\n          const handle = deFieldInst.deserializeUleb128AsU32();\n          const type_parameters = deFieldInst.deserializeUleb128AsU32();\n          field_insts.push({\n            handle,\n            typeParameters: type_parameters,\n          });\n        }\n        break;\n      }\n      case TableKind.FRIEND_DECLS: {\n        const deFriendDecls = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deFriendDecls.remaining() > 0) {\n          const address = deFriendDecls.deserializeUleb128AsU32();\n          const name = deFriendDecls.deserializeUleb128AsU32();\n          friend_decls.push({\n            address,\n            name,\n          });\n        }\n        break;\n      }\n      case TableKind.VARIANT_FIELD_HANDLES: {\n        const deVariantFieldHandles = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deVariantFieldHandles.remaining() > 0) {\n          const owner = deVariantFieldHandles.deserializeUleb128AsU32();\n          const offset = deVariantFieldHandles.deserializeUleb128AsU32();\n          const variant_count = deVariantFieldHandles.deserializeUleb128AsU32();\n          const variants = Array.from({ length: variant_count }, () => {\n            return deVariantFieldHandles.deserializeUleb128AsU32();\n          });\n          variant_field_handles.push({\n            struct_index: owner,\n            field: offset,\n            variants,\n          });\n        }\n        break;\n      }\n      case TableKind.VARIANT_FIELD_INST: {\n        const deVariantFieldInst = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deVariantFieldInst.remaining() > 0) {\n          const handle = deVariantFieldInst.deserializeUleb128AsU32();\n          const type_parameters = deVariantFieldInst.deserializeUleb128AsU32();\n          variant_field_inst.push({\n            handle,\n            typeParameters: type_parameters,\n          });\n        }\n        break;\n      }\n      case TableKind.STRUCT_VARIANT_HANDLES: {\n        const deStructVariantHandles = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deStructVariantHandles.remaining() > 0) {\n          const struct_index = deStructVariantHandles.deserializeUleb128AsU32();\n          const variant = deStructVariantHandles.deserializeUleb128AsU32();\n          struct_variant_handles.push({\n            struct_index,\n            variant,\n          });\n        }\n        break;\n      }\n      case TableKind.STRUCT_VARIANT_INST: {\n        const deStructVariantInst = new Deserializer(\n          tables_byte.slice(table.table_offset, table.table_offset + table.count)\n        );\n        while (deStructVariantInst.remaining() > 0) {\n          const handle = deStructVariantInst.deserializeUleb128AsU32();\n          const type_parameters = deStructVariantInst.deserializeUleb128AsU32();\n          struct_variant_inst.push({\n            handle,\n            type_parameters,\n          });\n        }\n        break;\n      }\n      default:\n        break;\n    }\n  });\n\n  return {\n    magic,\n    version,\n    selfModuleHandleIdx,\n    module_handles,\n    struct_handles,\n    function_handles,\n    function_inst,\n    struct_defs_inst,\n    signatures,\n    constant_pool,\n    identifiers,\n    address_identifiers,\n    metadatas,\n    function_defs,\n    struct_defs,\n    field_handles: field_defs,\n    field_insts,\n    friend_decls,\n    variant_field_handles,\n    variant_field_inst,\n    struct_variant_handles,\n    struct_variant_inst,\n  };\n}\n\nexport function disassemble_instruction(\n  instruction: Bytecode,\n  params: string[],\n  locals: string[],\n  module: MoveModule\n): string {\n  switch (instruction.kind) {\n    case \"LdConst\": {\n      const constant = module.constant_pool[instruction.constIdx];\n      return `LdConst[${instruction.constIdx}](${parseSignatureToken(constant.type, module)}: ${constant.data})`;\n    }\n\n    // Local variable operations - use helper function to reduce duplication\n    case \"CopyLoc\":\n    case \"MoveLoc\":\n    case \"StLoc\":\n    case \"MutBorrowLoc\":\n    case \"ImmBorrowLoc\":\n      return formatLocalInstruction(instruction, instruction.kind, params, locals);\n\n    // Field operations\n    case \"MutBorrowField\": {\n      const fieldHandle = module.field_handles[instruction.fieldHandleIdx];\n      const { structName, field, fieldType } = getFieldInfo(fieldHandle, module);\n      return formatFieldInstruction(\n        \"MutBorrowField\",\n        instruction.fieldHandleIdx,\n        structName,\n        module.identifiers[field.name],\n        fieldType\n      );\n    }\n\n    case \"MutBorrowFieldGeneric\": {\n      const fieldInst = module.field_insts[instruction.fieldInstIdx];\n      const fieldHandle = module.field_handles[fieldInst.handle];\n      const { structName, field, fieldType } = getFieldInfo(fieldHandle, module);\n      return formatFieldInstruction(\n        \"MutBorrowFieldGeneric\",\n        instruction.fieldInstIdx,\n        structName,\n        module.identifiers[field.name],\n        fieldType\n      );\n    }\n\n    case \"ImmBorrowField\": {\n      const fieldHandle = module.field_handles[instruction.fieldHandleIdx];\n      const { structName, field, fieldType } = getFieldInfo(fieldHandle, module);\n      return formatFieldInstruction(\n        \"ImmBorrowField\",\n        instruction.fieldHandleIdx,\n        structName,\n        module.identifiers[field.name],\n        fieldType\n      );\n    }\n\n    case \"ImmBorrowFieldGeneric\": {\n      const fieldInst = module.field_insts[instruction.fieldInstIdx];\n      const fieldHandle = module.field_handles[fieldInst.handle];\n      const { structName, field, fieldType } = getFieldInfo(fieldHandle, module);\n      return formatFieldInstruction(\n        \"ImmBorrowFieldGeneric\",\n        instruction.fieldInstIdx,\n        structName,\n        module.identifiers[field.name],\n        fieldType\n      );\n    }\n\n    case \"MutBorrowVariantField\":\n      throw new Error(\"MutBorrowVariantField is not implemented yet\");\n    case \"MutBorrowVariantFieldGeneric\":\n      throw new Error(\"MutBorrowVariantFieldGeneric is not implemented yet\");\n    case \"ImmBorrowVariantField\":\n      throw new Error(\"ImmBorrowVariantField is not implemented yet\");\n    case \"ImmBorrowVariantFieldGeneric\":\n      throw new Error(\"ImmBorrowVariantFieldGeneric is not implemented yet\");\n\n    // Struct packing/unpacking operations\n    case \"Pack\":\n      return formatStructInstruction(instruction, \"Pack\", module);\n    case \"Unpack\":\n      return formatStructInstruction(instruction, \"Unpack\", module);\n    case \"PackGeneric\":\n      return formatGenericStructInstruction(instruction, \"PackGeneric\", module);\n    case \"UnpackGeneric\":\n      return formatGenericStructInstruction(instruction, \"UnpackGeneric\", module);\n\n    // Variant operations\n    case \"PackVariant\": {\n      const structVariantHandle = module.struct_variant_handles[instruction.structVariantHandleIdx];\n      const { structName, variantName } = getVariantInfo(structVariantHandle, module);\n      return `PackVariant[${instruction.structVariantHandleIdx}](${structName}/${variantName})`;\n    }\n\n    case \"PackVariantGeneric\": {\n      const struct_variant_inst = module.struct_variant_inst[instruction.structVariantInstIdx];\n      const type_params = module.signatures[struct_variant_inst.type_parameters];\n      const struct_variant_handle = module.struct_variant_handles[struct_variant_inst.handle];\n      const { structName: struct_name, variantName } = getVariantInfo(\n        struct_variant_handle,\n        module\n      );\n\n      const structTypeParams = type_params!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = structTypeParams?.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\n      return `PackVariantGeneric[${instruction.structVariantInstIdx}](${struct_name}/${variantName}${typeParamsStr})`;\n    }\n    case \"UnpackVariant\": {\n      const structVariantHandle = module.struct_variant_handles[instruction.structVariantHandleIdx];\n      const { structName, variantName } = getVariantInfo(structVariantHandle, module);\n      return `UnpackVariant[${instruction.structVariantHandleIdx}](${structName}/${variantName})`;\n    }\n    case \"UnpackVariantGeneric\": {\n      const struct_variant_inst = module.struct_variant_inst[instruction.structVariantInstIdx];\n      const type_params = module.signatures[struct_variant_inst.type_parameters];\n      const struct_variant_handle = module.struct_variant_handles[struct_variant_inst.handle];\n      const { structName: struct_name, variantName } = getVariantInfo(\n        struct_variant_handle,\n        module\n      );\n\n      const structTypeParams = type_params!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = structTypeParams?.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\n      return `UnpackVariantGeneric[${instruction.structVariantInstIdx}](${struct_name}/${variantName}${typeParamsStr})`;\n    }\n    case \"TestVariant\": {\n      const structVariantHandle = module.struct_variant_handles[instruction.structVariantHandleIdx];\n      const { structName, variantName } = getVariantInfo(structVariantHandle, module);\n      return `TestVariant[${instruction.structVariantHandleIdx}](${structName}/${variantName})`;\n    }\n    case \"TestVariantGeneric\": {\n      const struct_variant_inst = module.struct_variant_inst[instruction.structVariantInstIdx];\n      const type_params = module.signatures[struct_variant_inst.type_parameters];\n      const struct_variant_handle = module.struct_variant_handles[struct_variant_inst.handle];\n      const { structName: struct_name, variantName } = getVariantInfo(\n        struct_variant_handle,\n        module\n      );\n\n      const structTypeParams = type_params!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = structTypeParams?.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\n      return `TestVariantGeneric[${instruction.structVariantInstIdx}](${struct_name}/${variantName}${typeParamsStr})`;\n    }\n    case \"Exists\": {\n      const structDef = module.struct_defs[instruction.structDefIdx];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      return `Exists[${instruction.structDefIdx}](${structName})`;\n    }\n    case \"ExistsGeneric\": {\n      const structDefInst = module.struct_defs_inst[instruction.structInstIdx];\n      const structDef = module.struct_defs[structDefInst.def];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      const typeParams = module.signatures[structDefInst.typeParameters]!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = typeParams?.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n      return `ExistsGeneric[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n    }\n    case \"MutBorrowGlobal\": {\n      const structDef = module.struct_defs[instruction.structDefIdx];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      return `MutBorrowGlobal[${instruction.structDefIdx}](${structName})`;\n    }\n    case \"MutBorrowGlobalGeneric\": {\n      const structDefInst = module.struct_defs_inst[instruction.structInstIdx];\n      const structDef = module.struct_defs[structDefInst.def];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      const typeParams = module.signatures[structDefInst.typeParameters]!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = typeParams?.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n      return `MutBorrowGlobalGeneric[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n    }\n    case \"ImmBorrowGlobal\": {\n      const structDef = module.struct_defs[instruction.structDefIdx];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      return `ImmBorrowGlobal[${instruction.structDefIdx}](${structName})`;\n    }\n    case \"ImmBorrowGlobalGeneric\": {\n      const structDefInst = module.struct_defs_inst[instruction.structInstIdx];\n      const structDef = module.struct_defs[structDefInst.def];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      const typeParams = module.signatures[structDefInst.typeParameters]!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = typeParams?.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n      return `ImmBorrowGlobalGeneric[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n    }\n    case \"MoveFrom\": {\n      const structDef = module.struct_defs[instruction.structDefIdx];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      return `MoveFrom[${instruction.structDefIdx}](${structName})`;\n    }\n    case \"MoveFromGeneric\": {\n      const structDefInst = module.struct_defs_inst[instruction.structInstIdx];\n      const structDef = module.struct_defs[structDefInst.def];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      const typeParams = module.signatures[structDefInst.typeParameters]!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = typeParams?.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n      return `MoveFromGeneric[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n    }\n    case \"MoveTo\": {\n      const structDef = module.struct_defs[instruction.structDefIdx];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      return `MoveTo[${instruction.structDefIdx}](${structName})`;\n    }\n    case \"MoveToGeneric\": {\n      const structDefInst = module.struct_defs_inst[instruction.structInstIdx];\n      const structDef = module.struct_defs[structDefInst.def];\n      const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n      const typeParams = module.signatures[structDefInst.typeParameters]!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      const typeParamsStr = typeParams?.length > 0 ? `<${typeParams.join(\", \")}>` : \"\";\n      return `MoveToGeneric[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n    }\n    case \"CallClosure\": {\n      const closure_sign = module.signatures[instruction.sigIdx];\n      const closure_type = closure_sign!.map((tp) => {\n        return parseSignatureToken(tp, module);\n      });\n      if (closure_type.length != 1) {\n        throw new Error(\"CallClosure with type parameters is not supported yet\");\n      }\n      return `CallClosure[${instruction.sigIdx}](${closure_type.at(0)})`;\n    }\n    case \"Call\":\n    case \"PackClosure\": {\n      let funcHandleIdx;\n      if (instruction.kind === \"PackClosure\") {\n        funcHandleIdx = instruction.fun;\n      } else {\n        funcHandleIdx = instruction.funcHandleIdx;\n      }\n      const function_handle = module.function_handles[funcHandleIdx];\n      const function_name = module.identifiers[function_handle.name];\n      const module_handle = module.module_handles[function_handle.module];\n      let function_string = \"\";\n      if (module.selfModuleHandleIdx == function_handle.module) {\n        function_string = `${function_name}`;\n      } else {\n        function_string = `${module.identifiers[module_handle.name]}::${function_name}`;\n      }\n      const type_arguments = function_handle.type_parameters.map((tp) => {\n        return parseAbilities(tp);\n      });\n      const typeParamsStr = type_arguments?.length > 0 ? `<${type_arguments.join(\", \")}>` : \"\";\n\n      let op_name;\n      if (instruction.kind === \"PackClosure\") {\n        op_name = `PackClosure#${instruction.mask}`;\n      } else {\n        op_name = \"Call\";\n      }\n      return `${op_name}[${funcHandleIdx}](${function_string}${typeParamsStr})`;\n    }\n    case \"PackClosureGeneric\":\n    case \"CallGeneric\": {\n      // throw new Error(\"CallGeneric is not implemented yet\");\n      return `CallGeneric`;\n    }\n\n    case \"LdU16\":\n      return `LdU16(${instruction.value})`;\n    case \"LdU32\":\n      return `LdU32(${instruction.value})`;\n    case \"LdU256\":\n      return `LdU256(${instruction.value})`;\n    case \"VecPack\":\n      return `VecPack(${instruction.elemTyIdx}, ${instruction.numElements})`;\n    case \"VecLen\":\n      return `VecLen(${instruction.elemTyIdx})`;\n    case \"VecImmBorrow\":\n      return `VecImmBorrow(${instruction.elemTyIdx})`;\n    case \"VecMutBorrow\":\n      return `VecMutBorrow(${instruction.elemTyIdx})`;\n    case \"VecPushBack\":\n      return `VecPushBack(${instruction.elemTyIdx})`;\n    case \"VecPopBack\":\n      return `VecPopBack(${instruction.elemTyIdx})`;\n    case \"VecUnpack\":\n      return `VecUnpack(${instruction.elemTyIdx}, ${instruction.numElements})`;\n    case \"VecSwap\":\n      return `VecSwap(${instruction.elemTyIdx})`;\n    case \"BrTrue\":\n      return `BrTrue(${instruction.codeOffset})`;\n    case \"BrFalse\":\n      return `BrFalse(${instruction.codeOffset})`;\n    case \"Branch\":\n      return `Branch(${instruction.codeOffset})`;\n    case \"LdU8\":\n      return `LdU8(${instruction.value})`;\n    case \"LdU64\":\n      return `LdU64(${instruction.value})`;\n    case \"LdU128\":\n      return `LdU128(${instruction.value})`;\n    default:\n      return `${instruction.kind}`;\n  }\n}\n","import {\n  FieldDefinition,\n  FieldHandle,\n  MoveModule,\n  parseSignatureToken,\n  StructVariantHandle,\n} from \"./types/MoveModule\";\n\n/**\n * Formats a local variable reference (parameter or local variable)\n */\nexport function formatLocalVariable(localIdx: number, params: string[], locals: string[]): string {\n  if (localIdx < params.length) {\n    return `arg${localIdx}: ${params[localIdx]}`;\n  } else if (localIdx < params.length + locals.length) {\n    const localIndex = localIdx - params.length;\n    return `loc${localIndex}: ${locals[localIndex]}`;\n  } else {\n    throw new Error(`Invalid local index: ${localIdx}`);\n  }\n}\n\n/**\n * Formats an instruction that operates on local variables\n */\nexport function formatLocalInstruction(\n  instruction: { localIdx: number },\n  instructionName: string,\n  params: string[],\n  locals: string[]\n): string {\n  const localVar = formatLocalVariable(instruction.localIdx, params, locals);\n  return `${instructionName}[${instruction.localIdx}](${localVar})`;\n}\n\n/**\n * Extracts field information from a field handle\n */\nexport function getFieldInfo(\n  fieldHandle: FieldHandle,\n  module: MoveModule\n): {\n  structName: string;\n  field: FieldDefinition;\n  fieldType: string;\n} {\n  const structDef = module.struct_defs[fieldHandle.owner];\n  const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n\n  let fields: Array<FieldDefinition> = [];\n  if (structDef.field_information.kind === \"Declared\") {\n    fields = structDef.field_information.fields;\n  }\n\n  const field = fields[fieldHandle.field];\n  if (!field) {\n    throw new Error(`Field not found: ${fieldHandle.field}`);\n  }\n\n  const fieldType = parseSignatureToken(field.type, module);\n  return { structName, field, fieldType };\n}\n\n/**\n * Formats a field access instruction\n */\nexport function formatFieldInstruction(\n  instructionName: string,\n  index: number,\n  structName: string,\n  fieldName: string,\n  fieldType: string\n): string {\n  return `${instructionName}[${index}](${structName}.${fieldName}: ${fieldType})`;\n}\n\n/**\n * Formats a struct operation instruction\n */\nexport function formatStructInstruction(\n  instruction: { structDefIdx: number },\n  instructionName: string,\n  module: MoveModule\n): string {\n  const structDef = module.struct_defs[instruction.structDefIdx];\n  const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n  return `${instructionName}[${instruction.structDefIdx}](${structName})`;\n}\n\n/**\n * Formats a generic struct operation instruction\n */\nexport function formatGenericStructInstruction(\n  instruction: { structInstIdx: number },\n  instructionName: string,\n  module: MoveModule\n): string {\n  const structInst = module.struct_defs_inst[instruction.structInstIdx];\n  const structName =\n    module.identifiers[\n      module.struct_handles[module.struct_defs[structInst.def].struct_handle].name\n    ];\n  const structTypeParams = module.signatures.at(structInst.typeParameters)!.map((tp) => {\n    return parseSignatureToken(tp, module);\n  });\n  const typeParamsStr = structTypeParams?.length > 0 ? `<${structTypeParams.join(\", \")}>` : \"\";\n  return `${instructionName}[${instruction.structInstIdx}](${structName}${typeParamsStr})`;\n}\n\n/**\n * Extracts variant information from a struct variant handle\n */\nexport function getVariantInfo(\n  structVariantHandle: StructVariantHandle,\n  module: MoveModule\n): {\n  structName: string;\n  variantName: string;\n} {\n  const structDef = module.struct_defs[structVariantHandle.struct_index];\n  const structName = module.identifiers[module.struct_handles[structDef.struct_handle].name];\n\n  if (structDef.field_information.kind !== \"DeclaredVariants\") {\n    throw new Error(\n      `PackVariant is not supported for field information kind: ${structDef.field_information.kind}`\n    );\n  }\n\n  const variant = structDef.field_information.variants[structVariantHandle.variant];\n  if (!variant) {\n    throw new Error(`Variant not found: ${structVariantHandle.variant}`);\n  }\n\n  const variantName = module.identifiers[variant.name];\n  return { structName, variantName };\n}\n","import { disassembleMoveModule } from \"../types\";\n\n/**\n * Loader for Move bytecode modules.\n */\nexport class BytecodeLoader {\n  static loadFromBytecode(bytecode: Uint8Array) {\n    return disassembleMoveModule(bytecode);\n  }\n}\n"],"mappings":"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","names":["AbilityValues","module","module","abilities","blockId","Ability","token","token2","Opcodes","AbilityValues","parseAbilities","parseSignatureToken","module","import_aptos_bcs","module","parseSignatureToken","module","offset","parseSignatureToken","parseAbilities","module"]}