code: def make_virtual_offset(block_start_offset, within_block_offset):
      
      if within_block_offset < 0 or within_block_offset >= 65536:
          raise ValueError("Require 0 <= within_block_offset < 2**16, got %i" % within_block_offset)
      if block_start_offset < 0 or block_start_offset >= 281474976710656:
          raise ValueError("Require 0 <= block_start_offset < 2**48, got %i" % block_start_offset)
      return (block_start_offset << 16) | within_block_offset
docs: Compute a BGZF virtual offset from block start and within block offsets.
      The BAM indexing scheme records read positions using a 64 bit
      'virtual offset', comprising in C terms:
      block_start_offset << 16 | within_block_offset
      Here block_start_offset is the file offset of the BGZF block
      start (unsigned integer using up to 64-16 = 48 bits), and
      within_block_offset within the (decompressed) block (unsigned
      16 bit integer).
      >>> make_virtual_offset(0, 0)
      0
      >>> make_virtual_offset(0, 1)
      1
      >>> make_virtual_offset(0, 2**16 - 1)
      65535
      >>> make_virtual_offset(0, 2**16)
      Traceback (most recent call last):
      ...
      ValueError: Require 0 <= within_block_offset < 2**16, got 65536
      >>> 65536 == make_virtual_offset(1, 0)
      True
      >>> 65537 == make_virtual_offset(1, 1)
      True
      >>> 131071 == make_virtual_offset(1, 2**16 - 1)
      True
      >>> 6553600000 == make_virtual_offset(100000, 0)
      True
      >>> 6553600001 == make_virtual_offset(100000, 1)
      True
      >>> 6553600010 == make_virtual_offset(100000, 10)
      True
      >>> make_virtual_offset(2**48, 0)
      Traceback (most recent call last):
      ...
      ValueError: Require 0 <= block_start_offset < 2**48, got 281474976710656