@tienne/gestalt 0.109.0 → 0.111.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/dist/package.json +1 -1
- package/dist/src/cli/commands/peer.d.ts +30 -0
- package/dist/src/cli/commands/peer.d.ts.map +1 -1
- package/dist/src/cli/commands/peer.js +159 -4
- package/dist/src/cli/commands/peer.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +48 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/digest/render-html.d.ts +5 -0
- package/dist/src/digest/render-html.d.ts.map +1 -1
- package/dist/src/digest/render-html.js +31 -10
- package/dist/src/digest/render-html.js.map +1 -1
- package/dist/src/digest/render-lens.d.ts +1 -1
- package/dist/src/digest/render-lens.d.ts.map +1 -1
- package/dist/src/digest/render-lens.js +17 -2
- package/dist/src/digest/render-lens.js.map +1 -1
- package/dist/src/digest/server.d.ts.map +1 -1
- package/dist/src/digest/server.js +7 -4
- package/dist/src/digest/server.js.map +1 -1
- package/dist/src/digest/theme-diary.d.ts +10 -0
- package/dist/src/digest/theme-diary.d.ts.map +1 -0
- package/dist/src/digest/theme-diary.js +111 -0
- package/dist/src/digest/theme-diary.js.map +1 -0
- package/dist/src/digest/viewer-js.d.ts +6 -0
- package/dist/src/digest/viewer-js.d.ts.map +1 -1
- package/dist/src/digest/viewer-js.js +78 -4
- package/dist/src/digest/viewer-js.js.map +1 -1
- package/dist/src/peer/daemon.d.ts +17 -5
- package/dist/src/peer/daemon.d.ts.map +1 -1
- package/dist/src/peer/daemon.js +124 -15
- package/dist/src/peer/daemon.js.map +1 -1
- package/dist/src/peer/feed.d.ts +103 -0
- package/dist/src/peer/feed.d.ts.map +1 -0
- package/dist/src/peer/feed.js +167 -0
- package/dist/src/peer/feed.js.map +1 -0
- package/dist/src/peer/index.d.ts +10 -0
- package/dist/src/peer/index.d.ts.map +1 -1
- package/dist/src/peer/index.js +5 -0
- package/dist/src/peer/index.js.map +1 -1
- package/dist/src/peer/keys.d.ts +26 -0
- package/dist/src/peer/keys.d.ts.map +1 -0
- package/dist/src/peer/keys.js +95 -0
- package/dist/src/peer/keys.js.map +1 -0
- package/dist/src/peer/lock.d.ts +32 -0
- package/dist/src/peer/lock.d.ts.map +1 -0
- package/dist/src/peer/lock.js +147 -0
- package/dist/src/peer/lock.js.map +1 -0
- package/dist/src/peer/mirror.d.ts +21 -0
- package/dist/src/peer/mirror.d.ts.map +1 -0
- package/dist/src/peer/mirror.js +68 -0
- package/dist/src/peer/mirror.js.map +1 -0
- package/dist/src/peer/network.d.ts +148 -0
- package/dist/src/peer/network.d.ts.map +1 -0
- package/dist/src/peer/network.js +809 -0
- package/dist/src/peer/network.js.map +1 -0
- package/dist/src/peer/protocol.d.ts +52 -1
- package/dist/src/peer/protocol.d.ts.map +1 -1
- package/dist/src/peer/protocol.js +1 -0
- package/dist/src/peer/protocol.js.map +1 -1
- package/dist/src/peer/relay.d.ts +70 -0
- package/dist/src/peer/relay.d.ts.map +1 -0
- package/dist/src/peer/relay.js +410 -0
- package/dist/src/peer/relay.js.map +1 -0
- package/dist/src/peer/roster.d.ts +89 -0
- package/dist/src/peer/roster.d.ts.map +1 -0
- package/dist/src/peer/roster.js +160 -0
- package/dist/src/peer/roster.js.map +1 -0
- package/dist/src/peer/seal.d.ts +37 -0
- package/dist/src/peer/seal.d.ts.map +1 -0
- package/dist/src/peer/seal.js +115 -0
- package/dist/src/peer/seal.js.map +1 -0
- package/dist/src/peer/share.d.ts +4 -86
- package/dist/src/peer/share.d.ts.map +1 -1
- package/dist/src/peer/share.js +6 -140
- package/dist/src/peer/share.js.map +1 -1
- package/dist/src/peer/state.d.ts +35 -4
- package/dist/src/peer/state.d.ts.map +1 -1
- package/dist/src/peer/state.js +65 -3
- package/dist/src/peer/state.js.map +1 -1
- package/dist/src/peer/transport.d.ts +89 -0
- package/dist/src/peer/transport.d.ts.map +1 -0
- package/dist/src/peer/transport.js +345 -0
- package/dist/src/peer/transport.js.map +1 -0
- package/dist/src/peer/viewer-html.d.ts.map +1 -1
- package/dist/src/peer/viewer-html.js +10 -2
- package/dist/src/peer/viewer-html.js.map +1 -1
- package/dist/src/peer/viewer.d.ts +2 -2
- package/dist/src/peer/viewer.d.ts.map +1 -1
- package/dist/src/peer/viewer.js.map +1 -1
- package/dist/src/peer/wire.d.ts +90 -0
- package/dist/src/peer/wire.d.ts.map +1 -0
- package/dist/src/peer/wire.js +10 -0
- package/dist/src/peer/wire.js.map +1 -0
- package/dist/src/peer/ws.d.ts +47 -0
- package/dist/src/peer/ws.d.ts.map +1 -0
- package/dist/src/peer/ws.js +308 -0
- package/dist/src/peer/ws.js.map +1 -0
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { VIEWER_LOGIC_JS } from './viewer-logic.js';
|
|
3
|
-
|
|
3
|
+
/** 테마 저장 키. VIEWER_JS의 setupTheme과 THEME_BOOT_JS가 같이 쓴다 */
|
|
4
|
+
export const THEME_STORAGE_KEY = 'gestalt-digest-theme';
|
|
5
|
+
// 템플릿 리터럴 안이라 백틱과 달러 중괄호를 쓰지 않는다. 바깥 값은 문자열 연결로 끼운다
|
|
4
6
|
export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
7
|
+
"var THEME_STORAGE_KEY = '" +
|
|
8
|
+
THEME_STORAGE_KEY +
|
|
9
|
+
"';" +
|
|
5
10
|
`
|
|
6
11
|
(function(){
|
|
7
12
|
var dataEl = document.getElementById('digest-data');
|
|
@@ -52,6 +57,24 @@ export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
|
52
57
|
if (range) range.addEventListener('input', function(){ setScale(range.value); });
|
|
53
58
|
}
|
|
54
59
|
|
|
60
|
+
// 테마 전환. 자동이면 data-theme을 지워 OS 설정을 따르고 라이트와 다크는 고른 값을 기억한다.
|
|
61
|
+
// 첫 화면이 깜빡이지 않게 head의 짧은 스크립트가 저장된 값을 먼저 붙인다
|
|
62
|
+
function setupTheme() {
|
|
63
|
+
var THEME_KEY = THEME_STORAGE_KEY;
|
|
64
|
+
var btns = document.querySelectorAll('[data-theme-set]');
|
|
65
|
+
function setTheme(t) {
|
|
66
|
+
if (t !== 'light' && t !== 'dark') t = 'auto';
|
|
67
|
+
if (t === 'auto') root.removeAttribute('data-theme');
|
|
68
|
+
else root.setAttribute('data-theme', t);
|
|
69
|
+
btns.forEach(function(b){ b.setAttribute('aria-pressed', b.getAttribute('data-theme-set') === t ? 'true' : 'false'); });
|
|
70
|
+
try { if (t === 'auto') localStorage.removeItem(THEME_KEY); else localStorage.setItem(THEME_KEY, t); } catch (e) {}
|
|
71
|
+
}
|
|
72
|
+
var saved = 'auto';
|
|
73
|
+
try { saved = localStorage.getItem(THEME_KEY) || 'auto'; } catch (e) {}
|
|
74
|
+
setTheme(saved);
|
|
75
|
+
btns.forEach(function(b){ b.addEventListener('click', function(){ setTheme(b.getAttribute('data-theme-set')); }); });
|
|
76
|
+
}
|
|
77
|
+
|
|
55
78
|
// 플레이어 어댑터. 유튜브와 로컬 영상이 같은 꼴을 내서 따라가기 코드는 둘을 가리지 않는다
|
|
56
79
|
function createPlayer() {
|
|
57
80
|
var player = { live: false, seek: function(){}, cue: function(){}, currentTime: function(){ return null; }, state: function(){ return -1; } };
|
|
@@ -193,7 +216,7 @@ export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
|
193
216
|
|
|
194
217
|
// 글 자료의 원문 창. 문단 칩을 누르면 PDF는 그 쪽으로 가서 문단 자리를 칠하고 웹 글은 그 문단으로 스크롤한다
|
|
195
218
|
function setupDocPane() {
|
|
196
|
-
var api = { reveal: function(){} };
|
|
219
|
+
var api = { reveal: function(){}, closeSheet: function(){ return false; } };
|
|
197
220
|
if (!data.doc) return api;
|
|
198
221
|
var pagesBox = document.getElementById('doc-pages');
|
|
199
222
|
var textBox = document.getElementById('script-body');
|
|
@@ -252,11 +275,53 @@ export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
|
252
275
|
scrollWithin(textBox, li.offsetTop - textBox.clientHeight / 4);
|
|
253
276
|
}
|
|
254
277
|
};
|
|
278
|
+
// 좁은 화면에서는 원문 창이 시트로 접혀 있다. 문단 칩을 누르면 시트를 연 뒤 자리를 찾는다
|
|
279
|
+
// 900px은 render-lens.ts LENS_CSS의 시트 미디어 쿼리와 짝이다
|
|
280
|
+
var narrow = window.matchMedia ? window.matchMedia('(max-width: 900px)') : null;
|
|
281
|
+
var openBtn = document.getElementById('doc-open');
|
|
282
|
+
var side = document.getElementById('side');
|
|
283
|
+
var lastFocus = null;
|
|
284
|
+
function isSheetOpen() { return document.body.classList.contains('doc-sheet-open'); }
|
|
285
|
+
// 열 때는 닫기 버튼으로 포커스를 옮기고, 닫기 버튼과 Esc로 닫을 때만 연 자리로 되돌린다.
|
|
286
|
+
// 화면이 넓어져 닫힐 때는 사용자가 보던 자리를 건드리지 않는다
|
|
287
|
+
function setSheet(open, restore) {
|
|
288
|
+
var wasOpen = isSheetOpen();
|
|
289
|
+
if (open && !wasOpen) lastFocus = document.activeElement;
|
|
290
|
+
document.body.classList.toggle('doc-sheet-open', open);
|
|
291
|
+
if (openBtn) openBtn.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
292
|
+
if (open && !wasOpen) {
|
|
293
|
+
var closeBtn = side ? side.querySelector('.doc-close') : null;
|
|
294
|
+
if (closeBtn) closeBtn.focus();
|
|
295
|
+
} else if (!open && wasOpen && restore) {
|
|
296
|
+
var back = lastFocus && lastFocus.isConnected && lastFocus.getClientRects().length > 0 ? lastFocus : openBtn;
|
|
297
|
+
if (back) back.focus();
|
|
298
|
+
lastFocus = null;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function markDialog() {
|
|
302
|
+
if (!side) return;
|
|
303
|
+
if (narrow && narrow.matches) { side.setAttribute('role', 'dialog'); side.setAttribute('aria-label', '원문'); }
|
|
304
|
+
else { side.removeAttribute('role'); side.removeAttribute('aria-label'); }
|
|
305
|
+
}
|
|
306
|
+
markDialog();
|
|
307
|
+
if (narrow && narrow.addEventListener) narrow.addEventListener('change', function(){
|
|
308
|
+
markDialog();
|
|
309
|
+
if (!narrow.matches) setSheet(false, false);
|
|
310
|
+
});
|
|
311
|
+
if (openBtn) openBtn.addEventListener('click', function(){ setSheet(true); });
|
|
312
|
+
document.querySelectorAll('.doc-close').forEach(function(b){ b.addEventListener('click', function(){ setSheet(false, true); }); });
|
|
313
|
+
api.closeSheet = function() {
|
|
314
|
+
if (!isSheetOpen()) return false;
|
|
315
|
+
setSheet(false, true);
|
|
316
|
+
return true;
|
|
317
|
+
};
|
|
255
318
|
document.addEventListener('click', function(ev){
|
|
256
319
|
var el = ev.target.closest ? ev.target.closest('[data-unit]') : null;
|
|
257
320
|
if (!el) return;
|
|
258
321
|
ev.preventDefault();
|
|
259
322
|
var i = Number(el.getAttribute('data-unit'));
|
|
323
|
+
var inSheet = el.closest && el.closest('#side');
|
|
324
|
+
if (narrow && narrow.matches && !inSheet) setSheet(true);
|
|
260
325
|
api.reveal(i, i, i);
|
|
261
326
|
});
|
|
262
327
|
return api;
|
|
@@ -823,6 +888,7 @@ export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
|
823
888
|
if (target && target.tagName.toLowerCase() === 'details') target.open = true;
|
|
824
889
|
});
|
|
825
890
|
setupFontScale();
|
|
891
|
+
setupTheme();
|
|
826
892
|
setupTranslation();
|
|
827
893
|
// 요약 앵커로 스크롤하려면 요약 패널이 먼저 보여야 해서 탭을 리포트보다 먼저 연다
|
|
828
894
|
var tabs = setupTabs();
|
|
@@ -847,14 +913,22 @@ export const VIEWER_JS = VIEWER_LOGIC_JS +
|
|
|
847
913
|
ev.preventDefault();
|
|
848
914
|
el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
849
915
|
});
|
|
850
|
-
// 툴팁과 메뉴, 미니 플레이어가 함께 열려 있으면 Escape 한 번에 하나씩 닫는다
|
|
916
|
+
// 툴팁과 원문 시트, 메뉴, 미니 플레이어가 함께 열려 있으면 Escape 한 번에 하나씩 닫는다
|
|
851
917
|
document.addEventListener('keydown', function(ev){
|
|
852
918
|
if (ev.key !== 'Escape' || zoom.isOpen()) return;
|
|
853
919
|
if (popups.isOpen()) popups.closeAndReturn();
|
|
854
|
-
else if (!more.close()) mini.close();
|
|
920
|
+
else if (!docPane.closeSheet() && !more.close()) mini.close();
|
|
855
921
|
});
|
|
856
922
|
})();
|
|
857
923
|
`;
|
|
858
924
|
/** CSP script-src에 싣는 VIEWER_JS 해시. 렌더가 이 문자열을 그대로 인라인으로 싣는다 */
|
|
859
925
|
export const VIEWER_JS_SHA256 = createHash('sha256').update(VIEWER_JS, 'utf8').digest('base64');
|
|
926
|
+
/** 첫 화면이 깜빡이지 않게 head에서 저장된 테마를 먼저 붙이는 스크립트. VIEWER_JS는 body 끝에서 돌아서 따로 둔다 */
|
|
927
|
+
export const THEME_BOOT_JS = "try{var t=localStorage.getItem('" +
|
|
928
|
+
THEME_STORAGE_KEY +
|
|
929
|
+
"');if(t==='light'||t==='dark')document.documentElement.setAttribute('data-theme',t)}catch(e){}";
|
|
930
|
+
/** CSP script-src에 싣는 THEME_BOOT_JS 해시 */
|
|
931
|
+
export const THEME_BOOT_JS_SHA256 = createHash('sha256')
|
|
932
|
+
.update(THEME_BOOT_JS, 'utf8')
|
|
933
|
+
.digest('base64');
|
|
860
934
|
//# sourceMappingURL=viewer-js.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-js.js","sourceRoot":"","sources":["../../../src/digest/viewer-js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,
|
|
1
|
+
{"version":3,"file":"viewer-js.js","sourceRoot":"","sources":["../../../src/digest/viewer-js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAExD,oDAAoD;AACpD,MAAM,CAAC,MAAM,SAAS,GACpB,eAAe;IACf,2BAA2B;IAC3B,iBAAiB;IACjB,IAAI;IACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAi5BD,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEhG,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GACxB,kCAAkC;IAClC,iBAAiB;IACjB,gGAAgG,CAAC;AAEnG,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC;KACrD,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;KAC7B,MAAM,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PeerRequest, PeerResponse } from './protocol.js';
|
|
2
|
+
import type { PeerNetworkOptions } from './network.js';
|
|
2
3
|
export interface PeerDaemonOptions {
|
|
3
4
|
root: string;
|
|
4
5
|
/** 기본은 `<root>/state.db`. 테스트는 `.gestalt-test/peer-*.db`를 넘긴다 */
|
|
@@ -7,11 +8,14 @@ export interface PeerDaemonOptions {
|
|
|
7
8
|
pollMs?: number;
|
|
8
9
|
/** 가리기에서 `~`로 바꿀 홈. 테스트가 가짜 홈을 넣는다 */
|
|
9
10
|
home?: string;
|
|
11
|
+
/** 릴레이에 다시 붙는 간격 같은 것. 테스트가 줄인다 */
|
|
12
|
+
network?: PeerNetworkOptions['transport'];
|
|
10
13
|
}
|
|
11
14
|
/**
|
|
12
|
-
* `gestalt peer daemon`. 공유를 들고 대화 기록을 따라 읽어 로컬 뷰어로 흘린다.
|
|
15
|
+
* `gestalt peer daemon`. 공유를 들고 대화 기록을 따라 읽어 로컬 뷰어로 흘린다. 팀에
|
|
16
|
+
* 들었으면 팀 릴레이에 붙어 팀원에게 공유를 넘기고 팀원 공유를 받아 로컬 뷰어로 옮긴다.
|
|
13
17
|
*
|
|
14
|
-
* 바깥으로 나가는
|
|
18
|
+
* 바깥으로 나가는 연결은 팀 릴레이 하나다. 소켓은 0600, 디렉토리는 0700이라 같은 OS
|
|
15
19
|
* 사용자만 명령을 넣는다. 뷰어는 `127.0.0.1`에만 붙는다.
|
|
16
20
|
*/
|
|
17
21
|
export declare class PeerDaemon {
|
|
@@ -19,6 +23,9 @@ export declare class PeerDaemon {
|
|
|
19
23
|
private ipc;
|
|
20
24
|
private viewer;
|
|
21
25
|
private state;
|
|
26
|
+
private network;
|
|
27
|
+
private key;
|
|
28
|
+
private lock;
|
|
22
29
|
private shares;
|
|
23
30
|
private timer;
|
|
24
31
|
private startedAt;
|
|
@@ -43,7 +50,11 @@ export declare class PeerDaemon {
|
|
|
43
50
|
* 전에 이미 맵에서 빠지므로 남는 건 DB 기록 하나다.
|
|
44
51
|
*/
|
|
45
52
|
private closeShareSafely;
|
|
46
|
-
handle(req: PeerRequest): PeerResponse
|
|
53
|
+
handle(req: PeerRequest): PeerResponse | Promise<PeerResponse>;
|
|
54
|
+
private withNetwork;
|
|
55
|
+
private withNetworkAsync;
|
|
56
|
+
private viewerUrl;
|
|
57
|
+
private announceShares;
|
|
47
58
|
private openShare;
|
|
48
59
|
private closeShare;
|
|
49
60
|
private info;
|
|
@@ -52,8 +63,9 @@ export declare class PeerDaemon {
|
|
|
52
63
|
* 남은 소켓 파일을 치운다. 누가 받고 있으면 데몬이 이미 떠 있는 거라 던진다.
|
|
53
64
|
* 소켓이 아닌 파일이면 안 지운다 — 경로를 잘못 줬을 때 남의 파일을 지우지 않게.
|
|
54
65
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
66
|
+
* 데몬 잠금(`peer.lock`)을 쥔 뒤에만 부른다. 잠금을 쥔 데몬은 하나라서 확인하고 지우는
|
|
67
|
+
* 사이에 다른 데몬이 새 소켓을 만들 수 없다. 잠금 없이 소켓을 만드는 옛 버전 데몬이
|
|
68
|
+
* 끼어드는 경우만 남아서 지우기 직전에 같은 파일인지 한 번 더 본다.
|
|
57
69
|
*/
|
|
58
70
|
private clearStaleSocket;
|
|
59
71
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/peer/daemon.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAgB,WAAW,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/peer/daemon.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAgB,WAAW,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AAQxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;CAC3C;AAsBD;;;;;;GAMG;AACH,qBAAa,UAAU;IAkBT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAjBpC,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAqB;IAClC,iDAAiD;IACjD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,OAAO,EAAE,iBAAiB;IAevD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,oCAAoC;IACpC,IAAI,CAAC,GAAG,SAAa,GAAG,IAAI;IAyB5B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAuD9D,OAAO,CAAC,WAAW;YASL,gBAAgB;IAS9B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IA8DjB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,IAAI;IAuBZ,OAAO,CAAC,MAAM;IAed;;;;;;;OAOG;YACW,gBAAgB;IAkB9B;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IA+BjB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,KAAK;YAoCC,MAAM;CAoBrB"}
|
package/dist/src/peer/daemon.js
CHANGED
|
@@ -10,13 +10,17 @@ import { ViewerServer } from './viewer.js';
|
|
|
10
10
|
import { DEFAULT_EXPIRES_MINUTES, MAX_EXPIRES_MINUTES, MAX_REQUEST_BYTES } from './protocol.js';
|
|
11
11
|
import { isSessionId } from './locate.js';
|
|
12
12
|
import { errMessage } from './errors.js';
|
|
13
|
+
import { loadOrCreateMachineKey } from './keys.js';
|
|
14
|
+
import { acquireDaemonLock, releaseDaemonLock } from './lock.js';
|
|
15
|
+
import { PeerNetwork, PeerNetworkError } from './network.js';
|
|
13
16
|
const DEFAULT_POLL_MS = 500;
|
|
14
17
|
/** stop이 IPC 서버가 닫히길 기다리는 상한. 넘으면 기다리지 않고 정리를 마친다 */
|
|
15
18
|
const STOP_TIMEOUT_MS = 2_000;
|
|
16
19
|
/**
|
|
17
|
-
* `gestalt peer daemon`. 공유를 들고 대화 기록을 따라 읽어 로컬 뷰어로 흘린다.
|
|
20
|
+
* `gestalt peer daemon`. 공유를 들고 대화 기록을 따라 읽어 로컬 뷰어로 흘린다. 팀에
|
|
21
|
+
* 들었으면 팀 릴레이에 붙어 팀원에게 공유를 넘기고 팀원 공유를 받아 로컬 뷰어로 옮긴다.
|
|
18
22
|
*
|
|
19
|
-
* 바깥으로 나가는
|
|
23
|
+
* 바깥으로 나가는 연결은 팀 릴레이 하나다. 소켓은 0600, 디렉토리는 0700이라 같은 OS
|
|
20
24
|
* 사용자만 명령을 넣는다. 뷰어는 `127.0.0.1`에만 붙는다.
|
|
21
25
|
*/
|
|
22
26
|
export class PeerDaemon {
|
|
@@ -24,6 +28,9 @@ export class PeerDaemon {
|
|
|
24
28
|
ipc = null;
|
|
25
29
|
viewer;
|
|
26
30
|
state = null;
|
|
31
|
+
network = null;
|
|
32
|
+
key = null;
|
|
33
|
+
lock = null;
|
|
27
34
|
shares = new Map();
|
|
28
35
|
timer = null;
|
|
29
36
|
startedAt = 0;
|
|
@@ -42,7 +49,9 @@ export class PeerDaemon {
|
|
|
42
49
|
this.viewer = new ViewerServer({
|
|
43
50
|
lookup: (id) => {
|
|
44
51
|
const s = this.shares.get(id);
|
|
45
|
-
|
|
52
|
+
if (s)
|
|
53
|
+
return { stream: s.stream, token: s.token };
|
|
54
|
+
return this.network?.lookupWatch(id);
|
|
46
55
|
},
|
|
47
56
|
onConnect: (id) => this.state?.audit('viewer_connect', id),
|
|
48
57
|
onDisconnect: (id) => this.state?.audit('viewer_disconnect', id),
|
|
@@ -61,13 +70,16 @@ export class PeerDaemon {
|
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
ensurePrivateDir(this.options.root);
|
|
64
|
-
await this.
|
|
65
|
-
|
|
66
|
-
this.state = state;
|
|
73
|
+
const lock = await acquireDaemonLock(this.options.root, this.sock);
|
|
74
|
+
let state = null;
|
|
67
75
|
try {
|
|
76
|
+
await this.clearStaleSocket();
|
|
77
|
+
state = new PeerState(this.options.dbPath ?? statePath(this.options.root));
|
|
78
|
+
this.state = state;
|
|
68
79
|
for (const id of state.closeDangling('daemon_restart')) {
|
|
69
80
|
state.audit('share_close', id, 'daemon_restart');
|
|
70
81
|
}
|
|
82
|
+
this.key = loadOrCreateMachineKey(this.options.root);
|
|
71
83
|
await this.viewer.start(0);
|
|
72
84
|
await this.listenIpc();
|
|
73
85
|
}
|
|
@@ -75,10 +87,22 @@ export class PeerDaemon {
|
|
|
75
87
|
// stop()은 부르지 않는다. 여기까지 연 건 뷰어와 DB뿐이고 stop은 소켓 자리까지
|
|
76
88
|
// 치우는 경로라 반쯤 뜬 데몬이 이미 떠 있는 다른 데몬의 자리를 건드릴 수 있다
|
|
77
89
|
await this.viewer.stop();
|
|
78
|
-
state
|
|
90
|
+
state?.close();
|
|
79
91
|
this.state = null;
|
|
92
|
+
releaseDaemonLock(lock);
|
|
80
93
|
throw err;
|
|
81
94
|
}
|
|
95
|
+
this.lock = lock;
|
|
96
|
+
this.network = new PeerNetwork({
|
|
97
|
+
state,
|
|
98
|
+
key: this.key,
|
|
99
|
+
lookupShare: (id) => {
|
|
100
|
+
const s = this.shares.get(id);
|
|
101
|
+
return s ? { stream: s.stream, shareKey: s.shareKey } : undefined;
|
|
102
|
+
},
|
|
103
|
+
transport: this.options.network,
|
|
104
|
+
});
|
|
105
|
+
this.network.start();
|
|
82
106
|
this.startedAt = Date.now();
|
|
83
107
|
this.timer = setInterval(() => this.tick(), this.pollMs);
|
|
84
108
|
this.timer.unref();
|
|
@@ -91,7 +115,12 @@ export class PeerDaemon {
|
|
|
91
115
|
this.closeShareSafely(id, 'daemon_stop');
|
|
92
116
|
const ipc = this.ipc;
|
|
93
117
|
this.ipc = null;
|
|
118
|
+
const network = this.network;
|
|
119
|
+
this.network = null;
|
|
94
120
|
try {
|
|
121
|
+
await network?.stop().catch((err) => {
|
|
122
|
+
process.stderr.write(`[peer] network stop failed: ${errMessage(err)}\n`);
|
|
123
|
+
});
|
|
95
124
|
await this.viewer.stop();
|
|
96
125
|
if (ipc) {
|
|
97
126
|
// 열린 연결이 남아 있으면 close 콜백이 안 불려 stop이 끝나지 않는다
|
|
@@ -110,6 +139,9 @@ export class PeerDaemon {
|
|
|
110
139
|
this.removeOwnSocket();
|
|
111
140
|
this.state?.close();
|
|
112
141
|
this.state = null;
|
|
142
|
+
if (this.lock)
|
|
143
|
+
releaseDaemonLock(this.lock);
|
|
144
|
+
this.lock = null;
|
|
113
145
|
}
|
|
114
146
|
}
|
|
115
147
|
/** 테스트가 타이머를 기다리지 않고 한 번 돌릴 때 쓴다 */
|
|
@@ -165,10 +197,66 @@ export class PeerDaemon {
|
|
|
165
197
|
this.closeShareSafely(req.id, 'unshare');
|
|
166
198
|
return { ok: true, result: { id: req.id } };
|
|
167
199
|
}
|
|
200
|
+
case 'init':
|
|
201
|
+
return this.withNetwork((n) => n.init(String(req.person), String(req.relay)));
|
|
202
|
+
case 'invite':
|
|
203
|
+
return this.withNetwork((n) => n.invite(String(req.person)));
|
|
204
|
+
case 'join': {
|
|
205
|
+
const timeout = req.timeoutMs;
|
|
206
|
+
return this.withNetworkAsync((n) => n.join(String(req.code), Number.isFinite(timeout) && timeout > 0 ? timeout : undefined));
|
|
207
|
+
}
|
|
208
|
+
case 'remove':
|
|
209
|
+
return this.withNetwork((n) => n.remove(String(req.person)));
|
|
210
|
+
case 'members':
|
|
211
|
+
return this.withNetwork((n) => n.members());
|
|
212
|
+
case 'watch':
|
|
213
|
+
return this.withNetworkAsync(async (n) => {
|
|
214
|
+
const w = await n.watch(String(req.link));
|
|
215
|
+
return { id: w.id, share: w.share, owner: w.owner, url: this.viewerUrl(w.id, w.token) };
|
|
216
|
+
});
|
|
217
|
+
case 'watches':
|
|
218
|
+
return this.withNetwork((n) => n.listWatches().map((w) => ({
|
|
219
|
+
...w,
|
|
220
|
+
url: this.viewerUrl(w.id, n.lookupWatch(w.id).token),
|
|
221
|
+
})));
|
|
222
|
+
case 'unwatch': {
|
|
223
|
+
const id = String(req.id);
|
|
224
|
+
return this.withNetwork((n) => {
|
|
225
|
+
if (!n.unwatch(id))
|
|
226
|
+
throw new PeerNetworkError(`보고 있는 공유가 아니에요: ${id}`);
|
|
227
|
+
return { id };
|
|
228
|
+
});
|
|
229
|
+
}
|
|
168
230
|
default:
|
|
169
231
|
return { ok: false, error: `모르는 요청이에요: ${String(req.op)}` };
|
|
170
232
|
}
|
|
171
233
|
}
|
|
234
|
+
withNetwork(fn) {
|
|
235
|
+
if (!this.network)
|
|
236
|
+
return { ok: false, error: '데몬이 아직 안 떴어요' };
|
|
237
|
+
try {
|
|
238
|
+
return { ok: true, result: fn(this.network) };
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
return { ok: false, error: errMessage(err) };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async withNetworkAsync(fn) {
|
|
245
|
+
if (!this.network)
|
|
246
|
+
return { ok: false, error: '데몬이 아직 안 떴어요' };
|
|
247
|
+
try {
|
|
248
|
+
return { ok: true, result: await fn(this.network) };
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
return { ok: false, error: errMessage(err) };
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
viewerUrl(id, token) {
|
|
255
|
+
return `http://127.0.0.1:${this.viewer.port}/s/${id}?t=${token}`;
|
|
256
|
+
}
|
|
257
|
+
announceShares() {
|
|
258
|
+
this.network?.announce([...this.shares.keys()]);
|
|
259
|
+
}
|
|
172
260
|
openShare(req) {
|
|
173
261
|
const path = req.transcriptPath;
|
|
174
262
|
if (typeof path !== 'string' || !isAbsolute(path)) {
|
|
@@ -206,11 +294,19 @@ export class PeerDaemon {
|
|
|
206
294
|
}
|
|
207
295
|
const id = randomBytes(6).toString('base64url');
|
|
208
296
|
const token = randomBytes(24).toString('base64url');
|
|
297
|
+
const shareKey = randomBytes(32).toString('base64url');
|
|
209
298
|
const createdAt = Date.now();
|
|
210
299
|
const expiresAt = createdAt + Math.round(minutes * 60_000);
|
|
211
300
|
const stream = new ShareStream({ id, transcriptPath: real, tools, home: this.options.home });
|
|
212
301
|
stream.poll();
|
|
213
|
-
this.shares.set(id, {
|
|
302
|
+
this.shares.set(id, {
|
|
303
|
+
stream,
|
|
304
|
+
token,
|
|
305
|
+
shareKey,
|
|
306
|
+
sessionId: req.sessionId ?? null,
|
|
307
|
+
createdAt,
|
|
308
|
+
expiresAt,
|
|
309
|
+
});
|
|
214
310
|
this.state.insertShare({
|
|
215
311
|
id,
|
|
216
312
|
sessionId: req.sessionId ?? null,
|
|
@@ -220,6 +316,7 @@ export class PeerDaemon {
|
|
|
220
316
|
expiresAt,
|
|
221
317
|
});
|
|
222
318
|
this.state.audit('share_open', id, JSON.stringify({ tools, expiresAt }));
|
|
319
|
+
this.announceShares();
|
|
223
320
|
return { ok: true, result: this.info(id) };
|
|
224
321
|
}
|
|
225
322
|
closeShare(id, reason) {
|
|
@@ -228,6 +325,7 @@ export class PeerDaemon {
|
|
|
228
325
|
return;
|
|
229
326
|
this.shares.delete(id);
|
|
230
327
|
share.stream.close(reason);
|
|
328
|
+
this.announceShares();
|
|
231
329
|
this.state?.closeShare(id, reason);
|
|
232
330
|
this.state?.audit('share_close', id, reason);
|
|
233
331
|
}
|
|
@@ -250,7 +348,8 @@ export class PeerDaemon {
|
|
|
250
348
|
oversizedLines: s.stream.oversizedLines,
|
|
251
349
|
droppedEvents: s.stream.droppedEvents,
|
|
252
350
|
title: s.stream.sessionTitle,
|
|
253
|
-
url:
|
|
351
|
+
url: this.viewerUrl(id, s.token),
|
|
352
|
+
link: this.network?.linkFor(id, s.shareKey),
|
|
254
353
|
};
|
|
255
354
|
}
|
|
256
355
|
status() {
|
|
@@ -264,14 +363,17 @@ export class PeerDaemon {
|
|
|
264
363
|
startedAt: this.startedAt,
|
|
265
364
|
shares: this.shares.size,
|
|
266
365
|
viewers,
|
|
366
|
+
machineKey: this.key?.id ?? '',
|
|
367
|
+
team: this.network?.status() ?? null,
|
|
267
368
|
};
|
|
268
369
|
}
|
|
269
370
|
/**
|
|
270
371
|
* 남은 소켓 파일을 치운다. 누가 받고 있으면 데몬이 이미 떠 있는 거라 던진다.
|
|
271
372
|
* 소켓이 아닌 파일이면 안 지운다 — 경로를 잘못 줬을 때 남의 파일을 지우지 않게.
|
|
272
373
|
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
374
|
+
* 데몬 잠금(`peer.lock`)을 쥔 뒤에만 부른다. 잠금을 쥔 데몬은 하나라서 확인하고 지우는
|
|
375
|
+
* 사이에 다른 데몬이 새 소켓을 만들 수 없다. 잠금 없이 소켓을 만드는 옛 버전 데몬이
|
|
376
|
+
* 끼어드는 경우만 남아서 지우기 직전에 같은 파일인지 한 번 더 본다.
|
|
275
377
|
*/
|
|
276
378
|
async clearStaleSocket() {
|
|
277
379
|
if (!existsSync(this.sock))
|
|
@@ -349,6 +451,8 @@ export class PeerDaemon {
|
|
|
349
451
|
serve(socket) {
|
|
350
452
|
let buf = '';
|
|
351
453
|
let rejected = false;
|
|
454
|
+
// 오래 걸리는 요청(join, watch)이 있어도 답은 받은 차례대로 쓴다
|
|
455
|
+
let queue = Promise.resolve();
|
|
352
456
|
this.conns.add(socket);
|
|
353
457
|
socket.on('close', () => this.conns.delete(socket));
|
|
354
458
|
socket.setEncoding('utf8');
|
|
@@ -368,13 +472,18 @@ export class PeerDaemon {
|
|
|
368
472
|
while (nl !== -1) {
|
|
369
473
|
const line = buf.slice(0, nl);
|
|
370
474
|
buf = buf.slice(nl + 1);
|
|
371
|
-
if (line.trim() !== '')
|
|
372
|
-
|
|
475
|
+
if (line.trim() !== '') {
|
|
476
|
+
queue = queue.then(async () => {
|
|
477
|
+
const res = await this.answer(line);
|
|
478
|
+
if (!socket.destroyed)
|
|
479
|
+
socket.write(JSON.stringify(res) + '\n');
|
|
480
|
+
});
|
|
481
|
+
}
|
|
373
482
|
nl = buf.indexOf('\n');
|
|
374
483
|
}
|
|
375
484
|
});
|
|
376
485
|
}
|
|
377
|
-
answer(line) {
|
|
486
|
+
async answer(line) {
|
|
378
487
|
let req;
|
|
379
488
|
try {
|
|
380
489
|
req = JSON.parse(line);
|
|
@@ -388,7 +497,7 @@ export class PeerDaemon {
|
|
|
388
497
|
return { ok: false, error: 'op가 없어요' };
|
|
389
498
|
}
|
|
390
499
|
try {
|
|
391
|
-
return this.handle(req);
|
|
500
|
+
return await this.handle(req);
|
|
392
501
|
}
|
|
393
502
|
catch (err) {
|
|
394
503
|
return { ok: false, error: errMessage(err) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/peer/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/peer/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AA0B7D,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,qDAAqD;AACrD,MAAM,eAAe,GAAG,KAAK,CAAC;AAO9B;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IAkBQ;IAjBrB,GAAG,GAAkB,IAAI,CAAC;IAC1B,MAAM,CAAe;IACrB,KAAK,GAAqB,IAAI,CAAC;IAC/B,OAAO,GAAuB,IAAI,CAAC;IACnC,GAAG,GAAsB,IAAI,CAAC;IAC9B,IAAI,GAAsB,IAAI,CAAC;IAC/B,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtC,KAAK,GAA0B,IAAI,CAAC;IACpC,SAAS,GAAG,CAAC,CAAC;IACd,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,iDAAiD;IACzC,SAAS,GAAkB,IAAI,CAAC;IACvB,IAAI,CAAS;IAC9B,2CAA2C;IAC1B,OAAO,CAAS;IAChB,MAAM,CAAS;IAEhC,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;QACrD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC1D,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,qBAAqB,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,iBAAiB,qBAAqB,YAAY,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,KAAK,GAAqB,IAAI,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvD,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oDAAoD;YACpD,+CAA+C;YAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,EAAE,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC;YAC7B,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,CAAC;YACD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,GAAG,EAAE,CAAC;gBACR,6CAA6C;gBAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;oBAAE,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAClC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;oBACnD,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;wBACb,YAAY,CAAC,KAAK,CAAC,CAAC;wBACpB,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,IAAI;gBAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACnB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC3B,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;oBACrC,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;gBACzC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;oBACjD,IAAI,CAAC,KAAK,EAAE,KAAK,CACf,eAAe,EACf,EAAE,EACF,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAC7E,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qDAAqD;gBACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,EAAU,EAAE,MAAwB;QAC3D,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAgB;QACrB,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,QAAQ;gBACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,EAAE,CAAC;YACnF,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChE,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;YAC9C,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CACzF,CAAC;YACJ,CAAC;YACD,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAwB,EAAE;oBAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1C,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1F,CAAC,CAAC,CAAC;YACL,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAmB,EAAE,CAC7C,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1B,GAAG,CAAC;oBACJ,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC;iBACtD,CAAC,CAAC,CACJ,CAAC;YACJ,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC5B,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;wBAAE,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;oBACxE,OAAO,EAAE,EAAE,EAAE,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC;YACD;gBACE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,MAAM,CAAE,GAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtF,CAAC;IACH,CAAC;IAEO,WAAW,CAAI,EAAyB;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAI,EAAkC;QAClE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,EAAU,EAAE,KAAa;QACzC,OAAO,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC;IACnE,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAEO,SAAS,CAAC,GAA0C;QAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC;QAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAC3D,CAAC;QACD,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QAClF,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,EAAE,EAAE,CAAC;QACxD,CAAC;QACD,wDAAwD;QACxD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QAClF,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,IAAI,EAAE,EAAE,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,IAAI,EAAE,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,KAAK,GAAe,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC;QAErE,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,IAAI,uBAAuB,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;YAC/E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,mBAAmB,MAAM,EAAE,CAAC;QACzE,CAAC;QAED,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,EAAE,CAAC;QAEd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YAClB,MAAM;YACN,KAAK;YACL,QAAQ;YACR,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;YAChC,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,KAAM,CAAC,WAAW,CAAC;YACtB,EAAE;YACF,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;YAChC,cAAc,EAAE,IAAI;YACpB,KAAK;YACL,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7C,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,MAAwB;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,IAAI,CAAC,EAAU;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,OAAO;YACL,EAAE;YACF,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;YACvC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;YACrB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;YAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;YAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;YAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;YACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;YACjC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;YACvC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa;YACrC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;YAC5B,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEO,MAAM;QACZ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACtE,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACxB,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,IAAI;SACrC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACnD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;gBACrB,CAAC,CAAC,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;OAMG;IACK,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;gBACtB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACxF,IAAI,CAAC;oBACH,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;oBACjD,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1E,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC;oBACH,UAAU,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;gBACD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAc;QAC1B,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,4CAA4C;QAC5C,IAAI,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,IAAI,QAAQ;gBAAE,OAAO;YACrB,GAAG,IAAI,KAAK,CAAC;YACb,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,iBAAiB,EAAE,CAAC;gBAC/C,QAAQ,GAAG,IAAI,CAAC;gBAChB,GAAG,GAAG,EAAE,CAAC;gBACT,oCAAoC;gBACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CACxE,MAAM,CAAC,OAAO,EAAE,CACjB,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACvB,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;wBAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACpC,IAAI,CAAC,MAAM,CAAC,SAAS;4BAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,IAAY;QAC/B,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC5C,CAAC;QACD,IACE,OAAO,GAAG,KAAK,QAAQ;YACvB,GAAG,KAAK,IAAI;YACZ,OAAQ,GAAwB,CAAC,EAAE,KAAK,QAAQ,EAChD,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAkB,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,EAAU;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|