code: def _reduce_dynamic_table(self, new_entry_size=0):
          # type: (int) -> None
          
          assert(new_entry_size >= 0)
          cur_sz = len(self)
          dyn_tbl_sz = len(self._dynamic_table)
          while dyn_tbl_sz > 0 and cur_sz + new_entry_size > self._dynamic_table_max_size:  # noqa: E501
              last_elmt_sz = len(self._dynamic_table[-1])
              self._dynamic_table.pop()
              dyn_tbl_sz -= 1
              cur_sz -= last_elmt_sz
docs: _reduce_dynamic_table evicts entries from the dynamic table until it
          fits in less than the current size limit. The optional parameter,
          new_entry_size, allows the resize to happen so that a new entry of this
          size fits in.
          @param int new_entry_size: if called before adding a new entry, the size of the new entry in bytes (following  # noqa: E501
          the RFC7541 definition of the size of an entry)
          @raise AssertionError