Bỏ qua điều hướng tới nội dung chính
Tin tức AI

Claude mơ giữa các phiên để nhớ lâu hơn: ghi nhớ nào đáng giữ, sai thì sửa

📑 Mục lục chi tiết bài viết (34 mục)
Claude mơ giữa các phiên để nhớ lâu hơn: ghi nhớ nào đáng giữ, sai thì sửa

Fable 5 ghi 9 file mà thắng Sonnet 3.7 ghi 413 file. Bí quyết nằm ở lượt mơ giữa các phiên mà Anthropic mô tả ngày 06/11/2026 trong bài Engineering Blog của Lance Martin, và câu hỏi của anh em dùng Claude Code là mơ có phải Claude ngủ rồi mơ như người không, với mình có bật được nó không.

Dreaming là một lượt xử lý offline giữa các phiên, nó đọc lại transcript, sửa ghi chú sai rồi dựng wiki, mà số liệu đều là số hãng tự đo, chưa có ai kiểm chứng độc lập, dreaming vẫn đang là research preview nên người dùng thường chưa bật được, phần làm theo ngay hôm nay là MEMORY.md của Claude Code, gọn trong 200 dòng đầu hoặc 25 KB đầu.

Giấc mơ của Claude thực chất là lượt rà soát transcript offline giữa các phiên

Mình gỡ hiểu lầm đầu tiên, vì chữ mơ rất dễ làm anh em tưởng Claude ngủ rồi mơ như người.

Dreaming rà soát transcript offline: xếp lại ghi chú lộn xộn thành từng chồng gọn gàng
Dreaming rà soát transcript offline: xếp lại ghi chú lộn xộn thành từng chồng gọn gàng Ảnh minh họa.

Sleep-time compute của Letta và UC Berkeley đặt nền cho dreaming của Anthropic

Ý tưởng dùng thời gian rảnh của model để tính trước đã có từ paper Sleep-time Compute của Kevin Lin và cộng sự ở Letta và UC Berkeley, lên arXiv tháng 04/2025, với kết quả giảm khoảng 5 lần compute lúc test-time và tăng độ chính xác tới 13% trên GSM-Symbolic và 18% trên AIME. Chia chi phí qua 10 câu hỏi mỗi context thì mỗi câu rẻ đi tới 2,5 lần. Agentic SWE-Features lại trái chiều, tiết kiệm khoảng 1,5 lần số token test-time ở ngân sách thấp rồi lợi ích mờ đi ở ngân sách cao.

Dreaming đọc lại transcript, sửa ghi chú sai và dựng wiki của Claude

Một lượt dreaming làm bốn việc, gồm đọc lại log và transcript cũ, sửa ghi chú sai, viết ghi chú mới và dựng wiki, rồi quyết định fact nào được nạp sẵn vào phiên sau. Một dream nhận 1 memory store cùng 1 tới 100 phiên rồi tạo ra store mới đã sắp xếp lại, trong khi store đầu vào không bao giờ bị sửa. Sang lượt dreaming thứ hai, nó tìm thấy 9 link hỏng rồi trỏ lại về trang đã có, thêm 3 trang mới.

Claude không ngủ, dreaming chỉ chạy thêm compute lúc rảnh để dọn lại trí nhớ đã có

Claude không ngủ, dreaming chỉ là chạy thêm compute lúc rảnh, còn tên gọi lấy cảm hứng từ cách não người củng cố trí nhớ lúc ngủ. Dreaming không tạo ra trí nhớ mới từ hư không, nó chỉ tổ chức lại thứ đã có trong transcript và memory notes, như tài khoản X của Anthropic viết ngày 06/11/2026.

Bốn tầng trí nhớ của Claude từ transcript tới injected context

Trí nhớ của Claude là một tháp bốn tầng. Anthropic định nghĩa agent memory hẹp, chỉ tính kiến thức thu từ kinh nghiệm và giữ giữa các phiên dưới dạng context đọc lại được, loại trừ thay đổi trọng số, học trong một cuộc trò chuyện và compaction, nên Claude nhớ chỉ là đọc lại file ghi chú của chính nó.

Sơ đồ bốn tầng trí nhớ của Claude: transcript, memory notes, wiki và injected context, với dreaming chạy xuyên suốt, nguồn Anthropic
Sơ đồ bốn tầng trí nhớ của Claude: transcript, memory notes, wiki và injected context, với dreaming chạy xuyên suốt, nguồn Anthropic Nguồn: Anthropic.

Transcript của Claude là bằng chứng gốc để kiểm chứng mọi ghi chú

Tầng 1 là transcript, tức nhật ký sự kiện tìm kiếm được của mọi phiên, và nó là ground truth để đối chiếu mọi ghi chú, vì vụ Mt. Moon sửa được chính nhờ còn transcript gốc. Superpower Daily nhấn mạnh rằng đừng bắt Claude tin vào bản tóm tắt cũ của chính nó.

Memory notes và wiki của Claude lọc transcript thành bản đồ liên kết để dò tìm trí nhớ khi kho đã lớn

Tầng 2 là memory notes, gồm bài học, quy tắc, mục tiêu và kế hoạch, tầng 3 là wiki. Wiki Stainless lớn từ 103 trang và 766 link lên 222 trang và 12.893 link sau 128 phiên dreaming với agent Opus 5, trên kho khoảng 350.000 file nội bộ và khoảng 420 triệu token của Stainless.

Injected context của Claude chỉ nạp sẵn một lớp nhỏ đầu phiên

Tầng 4 là injected context, lớp nhỏ nạp sẵn đầu phiên, và dreaming đẩy ghi chú lên đỉnh tháp để nạp sẵn, nhưng ghi chú sai ở tầng này sẽ bị mang vào mọi phiên. Anthropic giữ tầng này nhỏ và dùng như index, Claude Code chỉ nạp 200 dòng đầu hoặc 25 KB đầu của MEMORY.md. Phân tích XTrace ước tính 60 file memory trung bình 800 từ mỗi file ngốn khoảng 64.000 token, con số chưa kiểm chứng độc lập.

Toàn bộ số CL-Bench, Pokémon và wiki đều là số hãng tự đo, chưa ai đo lại

Nhưng toàn bộ số liệu đều do chính Anthropic đo, chưa có ai đo lại. Kho Stainless là dữ liệu nội bộ không xem được từ ngoài, nên các con số wiki này không ai tái lập độc lập được.

Biểu đồ CL-Bench 1.0 của Anthropic: điểm các model Claude có và không có memory store, nguồn Anthropic
Biểu đồ CL-Bench 1.0 của Anthropic: điểm các model Claude có và không có memory store, nguồn Anthropic Nguồn: Anthropic.

CL-Bench 1.0 cho thấy Opus 5.5 tăng từ 0,655 lên 0,838 còn Sonnet 4.6 chỉ tăng 0,034

CL-Bench 1.0 là nhiệm vụ tra cứu database, mỗi câu hỏi một phiên mới, chỉ thư mục memory mang qua, và điểm trung bình là Opus 5.5 từ 0,655 lên 0,838, Sonnet 5.5 từ 0,644 lên 0,833, Opus 5 từ 0,564 lên 0,828 và Opus 4.7 từ 0,383 lên 0,700.

Sonnet 5 từ 0,306 lên 0,610, còn Sonnet 4.6 từ 0,330 lên 0,364. Cùng một thư mục memory, Opus 5.5 tăng 0,183 điểm còn Sonnet 4.6 chỉ tăng 0,034, nên mình thấy memory không cứu được model yếu, nó chỉ phóng đại cái model đã có sẵn, khuếch đại năng lực sẵn có chứ không thay thế nó.

Opus 5 khép kín vòng học đầu tiên gồm quy tắc, cách biết quy tắc đúng, đáp án cũ và cảnh báo bẫy. Opus 5.5 và Sonnet 5.5 cũng khép kín, còn Sonnet 4.6 chỉ dừng ở giả thuyết chưa kiểm chứng.

Pokémon Red cho thấy Fable 5 ghi 9 file cộng global.md mà thắng Sonnet 3.7 ghi 413 file

Mỗi model chỉ có một lần chạy duy nhất, khoảng 10.000 bước, Sonnet 3.7 ghi 413 file trên 225 thư mục, khoảng 978.000 ký tự, được 1 huy hiệu, trong khi Fable 5 ghi 9 file trong 2 thư mục cộng 1 file global.md làm bảng điều khiển, gồm mục tiêu hiện tại, kế hoạch đánh gym và quy tắc dùng memory, khoảng 43.400 ký tự, được 4 huy hiệu. Ghi ít hơn khoảng 22 lần mà đi xa hơn, mà Fable 5 còn bỏ qua thứ màn hình đã cho thấy như tiền và vị trí, chỉ lưu chiến lược, kế hoạch và quy tắc đã kiểm chứng, nên so sánh này mang tính minh họa thôi vì là một lần chạy duy nhất và hai model khác nhau, với quanh bước 10.000 thì Sonnet 3.7 tạo 6 file và xóa 9 file trong 17 bước mà không hành động gì trong game, thành ra mình thấy con số này đáng nhớ hơn mọi lý thuyết về memory.

Wiki Stainless tăng từ 13% lên 48% nhưng vẫn thua search riêng 53%

Wiki Stainless trên 25 câu hỏi đánh giá, cho thấy wiki riêng tăng từ 13% ở 2 phiên lên 48% ở 128 phiên, wiki cộng search tăng từ 54% lên 61%, search riêng đạt 53%, còn cấu hình ghép wiki với search thì tiết kiệm khoảng 20.000 token mỗi câu hỏi. Ở merger, mục cần tổng hợp thì wiki đạt 87% so với search 73%, nên wiki chỉ thực sự hơn search khi câu hỏi cần tổng hợp qua nhiều tài liệu, mà mình thì vẫn dùng wiki, nhưng chỉ để tổng hợp chứ không giao hẳn việc tìm kiếm cho nó.

Bẫy đi kèm là wiki có thể phình to hơn tài liệu gốc, ví dụ wiki 68 trang và 203 KB dựng từ 10 tài liệu và 115 KB, gấp 1,77 lần kho gốc, và một task LAB cho thấy khi đáp án nằm gọn trong một tài liệu duy nhất thì wiki không cho lợi ích rõ rệt.

Ghi nhớ đáng giữ là ghi nhớ có điều kiện kích hoạt rõ ràng, còn lại nên bỏ

Số liệu Pokémon đã nói lên một nửa câu trả lời, ghi ít mà chọn lọc thì đi xa hơn ghi nhiều.

So sánh thư mục memory Pokémon Red: Sonnet 3.7 ghi 413 file rối rắm, Fable 5 chỉ ghi 9 file cộng 1 file global.md gọn gàng, nguồn Anthropic
So sánh thư mục memory Pokémon Red: Sonnet 3.7 ghi 413 file rối rắm, Fable 5 chỉ ghi 9 file cộng 1 file global.md gọn gàng, nguồn Anthropic Nguồn: Anthropic.

Quy tắc Magikarp của Fable 5 là mẫu ghi chú đáng giữ của Claude

Sau 7 quả Poké Ball liên tiếp không bắt được Magikarp, Fable 5 viết quy tắc rằng nếu 3 quả trở lên trượt liên tiếp thì đổi nhịp bằng cách chèn thêm thao tác chờ giữa các bước menu. Quả bắt thành công đến ngay sau khi làm vậy.

Sonnet 3.7 ghi 413 file Pokémon Red là bài học ghi nhiều mà nhớ dở

Ghi chép chi tiết nhanh lỗi thời vì game thay đổi liên tục.

Soi một ghi nhớ bằng ba câu hỏi, trả lời không cả ba thì bỏ hoặc viết lại

Ba câu hỏi kiểm tra một ghi nhớ, gồm ghi nhớ này có điều kiện kích hoạt rõ ràng như quy tắc Magikarp không, nó có được kiểm chứng bằng transcript gốc không, và nó có phải thứ màn hình hoặc môi trường đã cho thấy hay không. Nếu trả lời không cho cả ba thì nên bỏ hoặc viết lại.

Vụ PokéCenter ở Mt. Moon cho thấy dreaming sửa ghi chú sai ra sao

Quy tắc giữ hay bỏ mới chỉ là nửa câu chuyện, vì ghi chú sai thì kiểu gì cũng lọt vào.

Bản đồ Pokémon Red đoạn Mt. Moon: ghi chú sai khiến agent đi lạc, dreaming sửa ghi chú để agent quay lại lối vào hang, nguồn Anthropic
Bản đồ Pokémon Red đoạn Mt. Moon: ghi chú sai khiến agent đi lạc, dreaming sửa ghi chú để agent quay lại lối vào hang, nguồn Anthropic Nguồn: Anthropic.

Ghi chú sai về PokéCenter ở Mt. Moon khiến Claude rơi qua gờ 3 lần

Claude ghi sai PokéCenter ở phía đông bản đồ trong khi thực tế ở phía tây, gần lối vào hang, rồi tuyên bố “Mt Moon is behind me”, ghi “Mt Moon DONE”, rơi qua gờ một chiều về tuyến cũ 3 lần, tới lần thứ ba viết “I’m going to stop rather than keep looping”, đi ngược về Pewter City, không bao giờ tới Cerulean City. Mình đọc tới đoạn này thì thấy đúng kiểu người đi lạc mà càng đi càng tự tin, sai một nước rồi kéo theo cả chuỗi sai sau đó. Công cụ định vị không cho thấy cú rơi nên Claude tự kết luận sai tiếp là mình đi quá xa về phía tây.

Dreaming đối chiếu transcript gốc rồi sửa ghi chú PokéCenter

Dreaming sửa được vì nó có transcript gốc để đối chiếu, và sau khi dreaming sửa ghi chú thì Claude vào lại hang và tới được Cerulean City. Superpower Daily nhấn mạnh đây chỉ là một lỗi cụ thể đã sửa, chưa phải test tổng quát.

Dreaming khó sửa khi transcript gốc thiếu, và Anthropic chưa chốt nên chạy bao lâu một lần

Dreaming cần transcript gốc làm ground truth nên nếu transcript thiếu hoặc lỗi thì dreaming cũng khó sửa. Anthropic thừa nhận chưa rõ nên chạy bao lâu một lần, cộng thêm hai câu hỏi mở khác của hãng là khi nào tạo memory và làm sao giữ memory cập nhật.

Dreaming vẫn là research preview và người dùng Claude Code làm được gì hôm nay

Tới đây anh em nào cũng sẽ hỏi mình bật dreaming ở đâu. Câu trả lời hơi cụt hứng, vì bài gốc là bài viết thiết kế kèm kết quả thử nghiệm, chứ không phải thông báo ra mắt sản phẩm.

Người dùng Claude Code làm việc khuya với MEMORY.md trên máy của mình
Người dùng Claude Code làm việc khuya với MEMORY.md trên máy của mình Ảnh minh họa.

Beta header dreaming-2026-04-21 và giá token API chuẩn của dreaming

Dreaming là research preview trong Claude Managed Agents, giới thiệu tại hội nghị Code with Claude ngày 06/05/2026, chỉ một số model được hỗ trợ gồm Opus 5.5, Fable 5.1, Fable 5, Opus 5, Sonnet 5.5, Sonnet 5, Opus 4.8, Opus 4.7 và Sonnet 4.6, và cần beta header dreaming-2026-04-21, trong khi header managed-agents-2026-04-01 riêng nó không đủ quyền. Dreaming tính tiền theo giá token API chuẩn của model được chọn, chạy thường vài phút tới vài giờ, với trạng thái gồm pending, running, completed, failed và canceled. Có thể truyền instructions để định hướng, nhưng lệnh kiểu sửa câu X thường không có tác dụng, vì pipeline là lượt tổng hợp.

anthropic-beta: dreaming-2026-04-21

Chi phí dreaming khoảng 8 USD cho 50 transcript dài trong cookbook của Anthropic

Cookbook của Anthropic cho ví dụ trên 50 transcript dài, khoảng 12 MB text, một dream tốn khoảng 8 USD ở giá niêm yết với cài đặt tiết kiệm và mất khoảng 10 phút. Đây là con số ví dụ của hãng, chưa phải bảng giá cố định.

MEMORY.md của Claude Code chỉ nạp 200 dòng đầu hoặc 25 KB đầu

Phần auto memory, tức file MEMORY.md trên máy của mình, Claude Code chỉ nạp 200 dòng đầu tiên hoặc 25 KB đầu tiên của MEMORY.md, tùy giới hạn nào tới trước, nên phần này là index cho cả thư mục memory, viết index ngắn, chi tiết đẩy xuống topic file. File auto memory nằm ở ~/.claude/projects/<project>/memory/, chỉ chạy trên máy local, không đồng bộ qua máy khác hay cloud. Theo bản rò rỉ, chưa được hãng xác nhận, thì mỗi mục trong core index nên dưới 150 ký tự. Tắt auto memory bằng toggle /memory, đặt autoMemoryEnabled: false, hoặc biến môi trường CLAUDE_CODE_DISABLE_AUTO_MEMORY=1.

{
  "autoMemoryEnabled": false
}
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1

Build agent thì copy cách rà soát nền của dreaming, đừng copy kiểu ra lệnh cứng

Phần MEMORY.md dùng được ngay hôm nay, nhưng người tự build agent còn học được nhiều hơn từ bài của Anthropic.

Một người viết cho mỗi trang wiki: bốn agent viết chung một trang làm mất fact, chia trang riêng thì giữ đủ 57 trên 57 fact, nguồn Anthropic
Một người viết cho mỗi trang wiki: bốn agent viết chung một trang làm mất fact, chia trang riêng thì giữ đủ 57 trên 57 fact, nguồn Anthropic Nguồn: Anthropic.

Đừng ra lệnh cứng cho model mạnh vì quy tắc chỉ ghi thất bại làm Opus 5 mất 0,234 điểm tăng

Quy tắc “record only failures” làm mức tăng điểm do memory mang lại giảm 0,234 với Opus 5, giảm 0,150 với Opus 4.7 và giảm 0,020 với Sonnet 4.6, trong khi model yếu lại được lợi từ chỉ dẫn cụ thể. Nhắc Sonnet 4.6 đọc memory trước rồi kiểm chứng giả thuyết thì điểm từ 0,330 lên 0,641, gần gấp đôi, Sonnet 5 tự đọc memory 9 trên 10 lần, Sonnet 4.6 chưa tới một nửa. Từ chỗ đó mình rút ra ba việc làm theo ngay, mà cả ba đều rẻ hơn nhiều so với việc để ghi chú sai lọt vào phiên sau.

Nói thẳng với model rằng nó có thư mục memory và phải đọc trước khi làm, đừng mặc định nó tự tìm thấy, rồi thêm vào mỗi ghi chú một trường kiểm chứng ghi rõ nguồn transcript và ngày ghi để lượt rà soát sau đối chiếu được ngay, với chạy định kỳ một lượt rà soát nền đối chiếu ghi chú với transcript gốc, để ghi chú sai bị bắt trước khi lọt vào phiên sau.

Ghép wiki với search thay vì thay search vì wiki riêng 48% thua search riêng 53%

Wiki riêng đạt 48% còn search riêng đạt 53%, chỉ khi ghép wiki với search mới thắng với 61%. Bẫy đi kèm là wiki có thể phình to hơn tài liệu gốc, gấp 1,77 lần kho gốc, nên ghép wiki với search.

Một người viết cho mỗi trang wiki và giữ tầng inject nhỏ như index

Vụ bảng điều khoản hợp đồng chung cho thấy nhiều agent cùng viết vào một bảng, ghi đè lẫn nhau làm mất 16 trên 57 fact, bản brief chỉ chứa 41 trên 57 fact. Sau vòng lặp tự sửa chỉ dẫn, mỗi hợp đồng một trang riêng, một agent viết, trích nguyên văn thì brief đạt 100% tiêu chí. Giữ tầng inject nhỏ bằng cách chỉ nạp tên file và một dòng mô tả mỗi mục, chi tiết đẩy xuống topic file để model dò theo index.

Hacker News lo memory làm agent chạy dài hạn biến động, X bảo học trong context vẫn kẹt ở pretrain

Tới đây bài đã trình bày phía Anthropic khá đầy đủ, nhưng format opinion đòi phải nghe phía bên kia.

Cộng đồng Hacker News và X đọc và hoài nghi về dreaming của Anthropic
Cộng đồng Hacker News và X đọc và hoài nghi về dreaming của Anthropic Ảnh minh họa.

Bình luận Hacker News lo biến động của memory trong agent chạy dài hạn

Thread Hacker News item 50402212 đăng bởi geoffbp, ảnh chụp của thevibeworks ghi 53 points và 27 comments tại một thời điểm. Một độc giả HN bình luận rằng biểu đồ tiến độ của Anthropic càng thuyết phục anh ta không dùng memory, vì thứ anh ta muốn tránh nhất ở agent chạy dài hạn là biến động, và mình đồng tình rằng biến động là rủi ro thật, vì ghi chú sai bị mang vào mọi phiên. Nhưng dreaming sinh ra để giảm biến động đó bằng cách rà soát lại ghi chú đối chiếu transcript gốc, nên câu trả lời đúng là giữ memory kèm một lượt rà soát nền, thay vì bỏ memory hẳn.

Ý kiến trên X cho rằng học trong context vẫn bị giới hạn bởi khả năng pretrain của model

Tài khoản X teortaxesTex cho rằng học trong context vẫn bị giới hạn bởi khả năng của model đã pretrain. Đây là nhận định, chưa phải số liệu, mà mình đồng tình một phần vì số CL-Bench cho thấy đúng là model mạnh hưởng lợi nhiều hơn model yếu từ cùng một thư mục memory.

Google SLEEP đưa memory vào trọng số thay vì giữ memory dạng file ghi chú

Bài phân tích trên max.nardit.com về framework SLEEP của Google, blog ngày 27/10/2026, đặt câu hỏi rằng nếu model có thể biến context thành tham số thì còn cần ghi chú làm gì, và tác giả cho rằng memory dạng file mua được tính đọc được, còn memory trong trọng số thì bỏ hẳn tính đọc được để đổi lấy việc sửa hai vấn đề mà file không sửa được. Hai hướng này là hai cược khác nhau, và số liệu SLEEP là của chính tác giả Google, chưa kiểm chứng độc lập.

Paper MemDream của Đại học Công nghệ Sydney, arXiv tháng 09/2026, cũng chê cách của Anthropic là chỉ phản ứng sau khi việc xong.

Claude mơ giữa các phiên chưa phải tính năng cho mọi người nhưng bài học ghi ít mà chọn lọc thì dùng được ngay

Đọc tới đây, dreaming là một lượt dọn trí nhớ có số liệu bước đầu khá đẹp. Claude mơ giữa các phiên vẫn là research preview cần beta header dreaming-2026-04-21, chưa mở cho mọi người.

Thư mục memory gọn gàng chỉ vài file ngắn, ghi ít mà chọn lọc
Thư mục memory gọn gàng chỉ vài file ngắn, ghi ít mà chọn lọc Ảnh minh họa.

Phần làm theo ngay hôm nay là viết MEMORY.md của Claude Code dạng index ngắn trong 200 dòng đầu hoặc 25 KB đầu, chi tiết đẩy xuống topic file. Anh em thử viết lại MEMORY.md của mình theo cách này rồi chia sẻ trải nghiệm thật ở dưới.

Nguồn tham khảo

Bài viết này có hữu ích cho công việc của bạn?
Báo thông số cũ / Góp ý
Ảnh đại diện tác giả Tuấn Prompt tại ThuThuatAI.net

Tuấn Prompt

Biên tập viên AI Thực chiến

Thợ săn AI thực chiến của ThuThuatAI.net. Chuyên bóc tách tool, prompt và model AI mới — cái nào có lệnh cài, có giá, có số liệu kiểm chứng được thì mới lên bài. Viết như nói chuyện với anh em: có chuyên môn, có hài hước, và nói thẳng chỗ nào chưa kiểm chứng.

ĐỌC TIẾP CÙNG CHUYÊN MỤC

Bài viết Chuyên sâu Cùng Chuyên mục Tin tức AI

TÀI LIỆU NỀN TẢNG ĐỀ XUẤT

Cẩm nang Nền tảng Đề xuất Đọc tiếp

Bình luận & Trao đổi

Để lại câu hỏi hoặc chia sẻ kinh nghiệm thực tế của bạn

Email của bạn được bảo mật tuyệt đối theo Nghị định 13/2023/NĐ-CP và không hiển thị công khai. Vui lòng ẩn danh API Key trước khi dán log lỗi.

BẢN TIN HÀNG TUẦN

Nhận điểm tin & thủ thuật AI chọn lọc mỗi tuần

Tổng hợp ngắn gọn các công cụ AI mới đáng thử, mẫu prompt dùng được ngay và kinh nghiệm tự động hóa thực tế. Chỉ 1 email mỗi tuần, không spam.

Không gửi thư rác quảng cáo. Xem chi tiết tại Chính sách bảo mật.