code: def pack_subdomain(self):
          
          output = []
  
          # name (only fully-qualified if independent of the domain name)
          if self.independent:
              output.append(self.fqn)
          else:
              _, subdomain_name, _ = is_address_subdomain(self.fqn)
              output.append(subdomain_name)
  
          # address
          output.append(txt_encode_key_value(SUBDOMAIN_PUBKEY, self.address))
  
          # sequence number 
          output.append(txt_encode_key_value(SUBDOMAIN_N, "{}".format(self.n)))
          
          # subdomain zone file data, broken into 255-character base64 strings.
          # let's pack into 250 byte strings -- the entry "zf99=" eliminates 5 useful bytes,
          # and the max is 255.
          encoded_zf = base64.b64encode(self.zonefile_str)
          n_pieces = (len(encoded_zf) / 250) + 1
          if len(encoded_zf) % 250 == 0:
              n_pieces -= 1
          
          # number of pieces
          output.append(txt_encode_key_value(SUBDOMAIN_ZF_PARTS, "{}".format(n_pieces)))
  
          for i in range(n_pieces):
              start = i * 250
              piece_len = min(250, len(encoded_zf[start:]))
              assert piece_len != 0
              piece = encoded_zf[start:(start+piece_len)]
  
              # next piece
              output.append(txt_encode_key_value(SUBDOMAIN_ZF_PIECE % i, piece))
  
          # signature (optional)
          if self.sig is not None:
              output.append(txt_encode_key_value(SUBDOMAIN_SIG, self.sig))
  
          return output
docs: Pack all of the data for this subdomain into a list of strings.
          The list of strings will be given in the order in which they should be signed.
          That is: NAME, ADDR, N, NUM_ZF_PARTS ZF_PARTS, IN_ORDER_PIECES, (? SIG)