code: def write_elements(elements, mass_erase_used, progress=None):
      
  
      mem_layout = get_memory_layout(__dev)
      for elem in elements:
          addr = elem['addr']
          size = elem['size']
          data = elem['data']
          elem_size = size
          elem_addr = addr
          if progress:
              progress(elem_addr, 0, elem_size)
          while size > 0:
              write_size = size
              if not mass_erase_used:
                  for segment in mem_layout:
                      if addr >= segment['addr'] and \
                         addr <= segment['last_addr']:
                          # We found the page containing the address we want to
                          # write, erase it
                          page_size = segment['page_size']
                          page_addr = addr & ~(page_size - 1)
                          if addr + write_size > page_addr + page_size:
                              write_size = page_addr + page_size - addr
                          page_erase(page_addr)
                          break
              write_memory(addr, data[:write_size], progress,
                           elem_addr, elem_size)
              data = data[write_size:]
              addr += write_size
              size -= write_size
              if progress:
                  progress(elem_addr, addr - elem_addr, elem_size)
docs: Writes the indicated elements into the target memory,
      erasing as needed.