code: func decomposeContentBlocks4(r io.Reader) ([]byte, error) {
  	var contentData []byte
  	// Get all the content
  	content, err := ioutil.ReadAll(r)
  	if err != nil {
  		return nil, err
  	}
  
  	offset := uint32(0)
  	for {
  		var hash [32]byte
  		var length uint32
  		var data []byte
  
  		copy(hash[:], content[offset:offset+32])
  		offset = offset + 32
  
  		length = binary.LittleEndian.Uint32(content[offset : offset+4])
  		offset = offset + 4
  
  		if length > 0 {
  			data = make([]byte, length)
  			copy(data, content[offset:offset+length])
  			offset = offset + length
  
  			// Add to blocks
  			contentData = append(contentData, data...)
  		} else {
  			break
  		}
  	}
  	return contentData, nil
  }
docs: // decomposeContentBlocks4 decodes the content data block by block (Kdbx v4)
  // Used to extract data blocks from the entire content