dsh-locator 0.6.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.en.md +2 -2
- package/README.md +6 -3
- package/bin/darwin-arm64/indexd +0 -0
- package/bin/darwin-x64/indexd +0 -0
- package/bin/linux-arm64/indexd +0 -0
- package/bin/linux-x64/indexd +0 -0
- package/bin/win32-arm64/indexd.exe +0 -0
- package/bin/win32-x64/indexd.exe +0 -0
- package/docs/assets/panel-en.png +0 -0
- package/docs/assets/panel-zh.png +0 -0
- package/lib/config.d.ts +2 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +1 -0
- package/lib/config.js.map +1 -1
- package/lib/content.d.ts +39 -24
- package/lib/content.d.ts.map +1 -1
- package/lib/content.js +249 -148
- package/lib/content.js.map +1 -1
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +9 -0
- package/lib/http.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -4
- package/lib/index.js.map +1 -1
- package/lib/reindex.d.ts +3 -0
- package/lib/reindex.d.ts.map +1 -0
- package/lib/reindex.js +39 -0
- package/lib/reindex.js.map +1 -0
- package/package.json +1 -1
- package/src/config.ts +3 -0
- package/src/content.ts +225 -118
- package/src/http.ts +9 -0
- package/src/index.ts +9 -4
- package/src/reindex.ts +39 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.0 — 2026-11-10
|
|
4
|
+
|
|
5
|
+
* Incremental content refresh: `docs_meta`/`sources` store each file/session mtime, so the 2-minute background refresh only re-reads changed sources.
|
|
6
|
+
* `locator_reindex` tool and `/dsh-locator/content/rebuild` route: incremental by default, `full: true` drops and rebuilds the database.
|
|
7
|
+
* `contentRefreshMs` config (default 120000; 0 disables auto refresh).
|
|
8
|
+
* Empty `contentSessionDirs` in tests no longer falls back to the real `$DSH_HOME/sessions`; an explicit empty list means no sessions.
|
|
9
|
+
* Engine rebuilt at 0.7.0 so `locator_status` no longer reports 0.5.3.
|
|
10
|
+
|
|
3
11
|
## 0.6.3 — 2026-11-10
|
|
4
12
|
|
|
5
13
|
* Content-index defaults enlarged 4×: `contentMaxFileBytes` 1MB → 4MB, `contentMaxFiles` 50k → 200k, `contentMaxSessions` 50 → 200. All remain configurable.
|
package/README.en.md
CHANGED
|
@@ -76,7 +76,7 @@ The first scan of a large home directory reads the disk; later starts load the s
|
|
|
76
76
|
|
|
77
77
|
## Web search panel
|
|
78
78
|
|
|
79
|
-

|
|
80
80
|
|
|
81
81
|
Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the sidebar foot. The overlay queries the same index through two same-origin host routes (`POST /dsh-locator/search`, `POST /dsh-locator/status`), so it needs no second server and no extra port.
|
|
82
82
|
|
|
@@ -98,7 +98,7 @@ Press `Ctrl+Shift+F` anywhere in the Web GUI, or click the magnifier at the side
|
|
|
98
98
|
|
|
99
99
|
### Content search
|
|
100
100
|
|
|
101
|
-
`locator_find` searches the **bodies** of text files and DSH session messages through a local SQLite FTS5 index. Hits return a snippet plus `sessionId`/`messageId` for conversations, so the panel can open the session and scroll to the matched text. The index is built in the background after the name scan; text files are capped by `contentMaxFileBytes`, the total body store by `contentMaxTotalBytes`, and the most recent `contentMaxSessions` session logs are indexed by default.
|
|
101
|
+
`locator_find` searches the **bodies** of text files and DSH session messages through a local SQLite FTS5 index. Hits return a snippet plus `sessionId`/`messageId` for conversations, so the panel can open the session and scroll to the matched text. The index is built in the background after the name scan; text files are capped by `contentMaxFileBytes`, the total body store by `contentMaxTotalBytes`, and the most recent `contentMaxSessions` session logs are indexed by default. An incremental refresh runs every `contentRefreshMs` (2 minutes) and only re-reads changed files/sessions; `locator_reindex` triggers it manually (`full: true` rebuilds everything).
|
|
102
102
|
|
|
103
103
|
### Query language
|
|
104
104
|
|
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ dsh plugin --profile web add /绝对路径/dsh-locator
|
|
|
57
57
|
|
|
58
58
|
# 从 tarball
|
|
59
59
|
npm pack
|
|
60
|
-
dsh plugin --profile web add /绝对路径/dsh-locator-0.
|
|
60
|
+
dsh plugin --profile web add /绝对路径/dsh-locator-0.7.0.tgz
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
npm 包里已经带了六个平台的预编译引擎:`linux-x64`、`linux-arm64`、`win32-x64`、`win32-arm64`、`darwin-x64`、`darwin-arm64`。
|
|
@@ -91,12 +91,13 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
|
|
|
91
91
|
- 文件命中带路径,直接打开或定位;
|
|
92
92
|
- 会话命中带 `sessionId` 和 `messageId`,可以跳回那次对话;
|
|
93
93
|
- 中文和英文子串都能搜,不要求分词。
|
|
94
|
+
- 启动后每 2 分钟做一次增量刷新,只重读 mtime 变化的文件/会话;也可以手动触发全量重建。
|
|
94
95
|
|
|
95
96
|
内容索引在后台构建,刚启动时可能只覆盖了一部分,工具和面板都会显示构建状态。默认只索引 4MB 以内的文本文件,最多 20 万个文件、最近 200 个会话,内容总量上限 2GB;这些都能在配置里改。
|
|
96
97
|
|
|
97
98
|
## Web 面板
|
|
98
99
|
|
|
99
|
-

|
|
100
101
|
|
|
101
102
|
在 Web GUI 里按 `Ctrl+Shift+F`,或者点侧栏底部的放大镜。
|
|
102
103
|
|
|
@@ -116,7 +117,8 @@ Everything 风格的查询语法,返回路径、大小、修改时间、扩展
|
|
|
116
117
|
| `locator_search` | 按文件名/路径搜索,支持 `ext:`、`size:`、`dm:`、`path:` 等过滤。 |
|
|
117
118
|
| `locator_find` | 按文件正文和会话内容搜索,返回片段与 `sessionId`/`messageId`。 |
|
|
118
119
|
| `locator_status` | 查看根目录、条目数、监听状态、内容索引进度和引擎版本。 |
|
|
119
|
-
| `locator_rebuild` |
|
|
120
|
+
| `locator_rebuild` | 后台重建文件名索引;新索引就绪前,搜索继续使用旧的。 |
|
|
121
|
+
| `locator_reindex` | 重建/刷新内容索引:默认增量,`full: true` 全量。 |
|
|
120
122
|
| `locator_export` | 把文件名索引导出成只读 SQLite,方便外部工具查询。 |
|
|
121
123
|
|
|
122
124
|
### 查询语法
|
|
@@ -151,6 +153,7 @@ case:1 wholeword:1 区分大小写 / 全词匹配
|
|
|
151
153
|
| `contentMaxTotalBytes` | 2000000000 | 内容库总量上限;0 表示不限制。 |
|
|
152
154
|
| `contentMaxFiles` | 200000 | 最多索引多少个文件;0 表示不限制。 |
|
|
153
155
|
| `contentMaxSessions` | 200 | 最多索引最近多少个会话;0 表示全部。 |
|
|
156
|
+
| `contentRefreshMs` | 120000 | 内容增量刷新周期;0 关闭自动刷新。 |
|
|
154
157
|
| `contentSessionDirs` | `$DSH_HOME/sessions` | 额外的会话目录。 |
|
|
155
158
|
| `stateDir` | 系统缓存 | 快照和内容数据库的位置。 |
|
|
156
159
|
|
package/bin/darwin-arm64/indexd
CHANGED
|
Binary file
|
package/bin/darwin-x64/indexd
CHANGED
|
Binary file
|
package/bin/linux-arm64/indexd
CHANGED
|
Binary file
|
package/bin/linux-x64/indexd
CHANGED
|
Binary file
|
|
Binary file
|
package/bin/win32-x64/indexd.exe
CHANGED
|
Binary file
|
package/docs/assets/panel-en.png
CHANGED
|
Binary file
|
package/docs/assets/panel-zh.png
CHANGED
|
Binary file
|
package/lib/config.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export interface Config {
|
|
|
29
29
|
contentMaxFileBytes: number;
|
|
30
30
|
/** Stop adding content after this many body bytes; 0 means unlimited. */
|
|
31
31
|
contentMaxTotalBytes: number;
|
|
32
|
+
/** Incremental content refresh cadence; 0 disables it. */
|
|
33
|
+
contentRefreshMs: number;
|
|
32
34
|
/** Maximum text files indexed per build; 0 means no cap. */
|
|
33
35
|
contentMaxFiles: number;
|
|
34
36
|
/** Most recent session logs indexed; 0 means all. */
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,oCAAoC;AACpC,MAAM,WAAW,MAAM;IACrB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAA;IACd;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM,CAAA;IAC3B,yEAAyE;IACzE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAA;IACxB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,yEAAyE;AACzE,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,oCAAoC;AACpC,MAAM,WAAW,MAAM;IACrB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAA;IACd;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,YAAY,EAAE,OAAO,CAAA;IACrB,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM,CAAA;IAC3B,yEAAyE;IACzE,oBAAoB,EAAE,MAAM,CAAA;IAC5B,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAA;IACxB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAA;IAC1B,iEAAiE;IACjE,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAA;IACxB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,yEAAyE;AACzE,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CA+BhC,CAAA"}
|
package/lib/config.js
CHANGED
|
@@ -25,6 +25,7 @@ export const Config = Schema.object({
|
|
|
25
25
|
contentIndex: Schema.boolean().default(true),
|
|
26
26
|
contentMaxFileBytes: Schema.number().default(4_000_000),
|
|
27
27
|
contentMaxTotalBytes: Schema.number().default(2_000_000_000),
|
|
28
|
+
contentRefreshMs: Schema.number().default(120_000),
|
|
28
29
|
contentMaxFiles: Schema.number().default(200_000),
|
|
29
30
|
contentMaxSessions: Schema.number().default(200),
|
|
30
31
|
contentSessionDirs: Schema.array(Schema.string()).default([]),
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAqD7C,yEAAyE;AACzE,MAAM,CAAC,MAAM,MAAM,GAAmB,MAAM,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;QAC9C,cAAc;QACd,MAAM;QACN,KAAK;QACL,MAAM;QACN,QAAQ;QACR,aAAa;QACb,OAAO;QACP,MAAM;QACN,OAAO;KACR,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACrD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACvD,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5D,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACjD,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAChD,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CAClD,CAAC,CAAA"}
|
package/lib/content.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Content search: text files and DSH session messages in SQLite FTS5.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* File names stay in the Go engine. This store is built from the engine's
|
|
5
|
+
* `dump` RPC plus the session logs: Node reads text bodies, decompresses
|
|
6
|
+
* `session.v4.jsonl.zstd`, and SQLite's trigram tokenizer gives substring and
|
|
7
|
+
* CJK search. A meta table stores each source's mtime so refresh() only
|
|
8
|
+
* re-reads what changed; rebuild() drops and rebuilds everything.
|
|
8
9
|
* @module dsh-locator/content
|
|
9
10
|
*/
|
|
10
11
|
import type { LocatorRuntime } from './runtime.ts';
|
|
11
|
-
/** One searchable document. */
|
|
12
12
|
export interface ContentHit {
|
|
13
13
|
kind: 'file' | 'session';
|
|
14
14
|
path: string;
|
|
@@ -18,7 +18,6 @@ export interface ContentHit {
|
|
|
18
18
|
messageId?: string;
|
|
19
19
|
score: number;
|
|
20
20
|
}
|
|
21
|
-
/** Build progress shown by the panel/status. */
|
|
22
21
|
export interface ContentState {
|
|
23
22
|
building: boolean;
|
|
24
23
|
files: number;
|
|
@@ -28,34 +27,50 @@ export interface ContentState {
|
|
|
28
27
|
error: string;
|
|
29
28
|
updatedAt: number;
|
|
30
29
|
}
|
|
31
|
-
|
|
30
|
+
export interface ContentOptions {
|
|
31
|
+
stateDir: string;
|
|
32
|
+
sessionDirs?: string[] | undefined;
|
|
33
|
+
maxFileBytes: number;
|
|
34
|
+
maxTotalBytes?: number;
|
|
35
|
+
maxFiles: number;
|
|
36
|
+
maxSessions: number;
|
|
37
|
+
}
|
|
32
38
|
export declare class ContentIndex {
|
|
33
39
|
private readonly rt;
|
|
34
40
|
private readonly options;
|
|
35
41
|
private db;
|
|
36
42
|
private readonly state;
|
|
37
43
|
private generation;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
maxFileBytes: number;
|
|
42
|
-
maxTotalBytes?: number;
|
|
43
|
-
maxFiles: number;
|
|
44
|
-
maxSessions: number;
|
|
45
|
-
});
|
|
44
|
+
private totalBytes;
|
|
45
|
+
private timer;
|
|
46
|
+
constructor(rt: LocatorRuntime, options: ContentOptions);
|
|
46
47
|
status(): ContentState;
|
|
47
|
-
/**
|
|
48
|
+
/** Start periodic incremental refreshes; 0 disables. */
|
|
49
|
+
startAutoRefresh(ms: number): void;
|
|
50
|
+
/** Queue a full rebuild; false when one is already running. */
|
|
51
|
+
rebuild(): boolean;
|
|
52
|
+
/** Queue an incremental refresh; false when one is already running. */
|
|
53
|
+
refreshNow(): boolean;
|
|
48
54
|
close(): void;
|
|
49
|
-
/** Build
|
|
55
|
+
/** Build everything from scratch. */
|
|
50
56
|
start(): void;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
private
|
|
57
|
+
/** Re-read changed files/sessions; open the DB when this is the first run. */
|
|
58
|
+
refresh(): void;
|
|
59
|
+
private begin;
|
|
60
|
+
private full;
|
|
61
|
+
private incremental;
|
|
62
|
+
private open;
|
|
63
|
+
private finish;
|
|
64
|
+
private addDoc;
|
|
65
|
+
private deleteDoc;
|
|
66
|
+
private deletePath;
|
|
56
67
|
private indexFiles;
|
|
57
|
-
private
|
|
58
|
-
|
|
68
|
+
private refreshFiles;
|
|
69
|
+
private readFileDoc;
|
|
70
|
+
private indexSessions;
|
|
71
|
+
private refreshSessions;
|
|
72
|
+
private indexSessionFile;
|
|
73
|
+
sessionRoots(): string[];
|
|
59
74
|
search(query: string, limit: number): ContentHit[];
|
|
60
75
|
}
|
|
61
76
|
//# sourceMappingURL=content.d.ts.map
|
package/lib/content.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAWlD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAaD,qBAAa,YAAY;IAOX,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAkB,OAAO,CAAC,QAAQ,CAAC,OAAO;IANzE,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmH;IACzI,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,KAAK,CAA4B;gBAEZ,EAAE,EAAE,cAAc,EAAmB,OAAO,EAAE,cAAc;IAEzF,MAAM,IAAI,YAAY;IAEtB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKlC,+DAA+D;IAC/D,OAAO,IAAI,OAAO;IAMlB,uEAAuE;IACvE,UAAU,IAAI,OAAO;IAMrB,KAAK,IAAI,IAAI;IAQb,qCAAqC;IACrC,KAAK,IAAI,IAAI;IAEb,8EAA8E;IAC9E,OAAO,IAAI,IAAI;IAEf,OAAO,CAAC,KAAK;YAcC,IAAI;YAUJ,WAAW;IAUzB,OAAO,CAAC,IAAI;IAmBZ,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,UAAU;YAOJ,UAAU;YAoBV,YAAY;IA2B1B,OAAO,CAAC,WAAW;YAOL,aAAa;YAUb,eAAe;IAoB7B,OAAO,CAAC,gBAAgB;IAmBxB,YAAY,IAAI,MAAM,EAAE;IAKxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;CA8BnD"}
|