code: def compress_list(
      lst, separator=",", rangedelim=":", zlibmarker="!", zlibmin=500
  ):
      bad_items = [
          x
          for x in lst
          if separator in x or rangedelim in x or zlibmarker in x
      ]
      if bad_items:
          raise MetaflowInternalError(
              "Item '%s' includes a delimiter character "
              "so it can't be compressed" % bad_items[0]
          )
      # Three output modes:
      lcp = longest_common_prefix(lst)
      if len(lst) < 2 or not lcp:
          # 1. Just a comma-separated list
          res = separator.join(lst)
      else:
          # 2. Prefix and a comma-separated list of suffixes
          lcplen = len(lcp)
          residuals = [e[lcplen:] for e in lst]
          res = rangedelim.join((lcp, separator.join(residuals)))
      if len(res) < zlibmin:
          return res
      else:
          # 3. zlib-compressed, base64-encoded, prefix-encoded list
  
          # interestingly, a typical zlib-encoded list of suffixes
          # has plenty of redundancy. Decoding the data *twice* helps a
          # lot
          compressed = zlib.compress(zlib.compress(to_bytes(res)))
          return zlibmarker + base64.b64encode(compressed).decode(
              "utf-8"
          )
  
imports: import os
  import shutil
  import sys
  import tempfile
  import zlib
  import base64
  from functools import wraps
  from io import BytesIO
  from itertools import takewhile
  import re
  from metaflow.exception import MetaflowUnknownUser, MetaflowInternalError
  from typing import NamedTuple
label_desc: Use image node_id 16 for calling a global function with example usage: compress_list(lst, separator, rangedelim, zlibmarker, zlibmin) and returns: res, unknown