@roomi-fields/notebooklm-mcp 1.3.6 → 1.5.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.
Files changed (138) hide show
  1. package/README.md +69 -34
  2. package/dist/accounts/account-manager.d.ts +163 -0
  3. package/dist/accounts/account-manager.d.ts.map +1 -0
  4. package/dist/accounts/account-manager.js +614 -0
  5. package/dist/accounts/account-manager.js.map +1 -0
  6. package/dist/accounts/auto-login-manager.d.ts +62 -0
  7. package/dist/accounts/auto-login-manager.d.ts.map +1 -0
  8. package/dist/accounts/auto-login-manager.js +537 -0
  9. package/dist/accounts/auto-login-manager.js.map +1 -0
  10. package/dist/accounts/crypto.d.ts +45 -0
  11. package/dist/accounts/crypto.d.ts.map +1 -0
  12. package/dist/accounts/crypto.js +138 -0
  13. package/dist/accounts/crypto.js.map +1 -0
  14. package/dist/accounts/index.d.ts +14 -0
  15. package/dist/accounts/index.d.ts.map +1 -0
  16. package/dist/accounts/index.js +14 -0
  17. package/dist/accounts/index.js.map +1 -0
  18. package/dist/accounts/types.d.ts +103 -0
  19. package/dist/accounts/types.d.ts.map +1 -0
  20. package/dist/accounts/types.js +7 -0
  21. package/dist/accounts/types.js.map +1 -0
  22. package/dist/auth/auth-manager.d.ts +9 -2
  23. package/dist/auth/auth-manager.d.ts.map +1 -1
  24. package/dist/auth/auth-manager.js +60 -6
  25. package/dist/auth/auth-manager.js.map +1 -1
  26. package/dist/auto-discovery/auto-discovery.d.ts.map +1 -1
  27. package/dist/auto-discovery/auto-discovery.js +2 -1
  28. package/dist/auto-discovery/auto-discovery.js.map +1 -1
  29. package/dist/cli/accounts.d.ts +13 -0
  30. package/dist/cli/accounts.d.ts.map +1 -0
  31. package/dist/cli/accounts.js +195 -0
  32. package/dist/cli/accounts.js.map +1 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +9 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/content/content-generator.d.ts +153 -0
  37. package/dist/content/content-generator.d.ts.map +1 -0
  38. package/dist/content/content-generator.js +637 -0
  39. package/dist/content/content-generator.js.map +1 -0
  40. package/dist/content/content-manager.d.ts +364 -0
  41. package/dist/content/content-manager.d.ts.map +1 -0
  42. package/dist/content/content-manager.js +3846 -0
  43. package/dist/content/content-manager.js.map +1 -0
  44. package/dist/content/content-templates.d.ts +183 -0
  45. package/dist/content/content-templates.d.ts.map +1 -0
  46. package/dist/content/content-templates.js +719 -0
  47. package/dist/content/content-templates.js.map +1 -0
  48. package/dist/content/index.d.ts +14 -0
  49. package/dist/content/index.d.ts.map +1 -0
  50. package/dist/content/index.js +14 -0
  51. package/dist/content/index.js.map +1 -0
  52. package/dist/content/types.d.ts +285 -0
  53. package/dist/content/types.d.ts.map +1 -0
  54. package/dist/content/types.js +10 -0
  55. package/dist/content/types.js.map +1 -0
  56. package/dist/errors.d.ts +1 -1
  57. package/dist/errors.d.ts.map +1 -1
  58. package/dist/errors.js.map +1 -1
  59. package/dist/http-wrapper.d.ts +7 -0
  60. package/dist/http-wrapper.d.ts.map +1 -1
  61. package/dist/http-wrapper.js +449 -29
  62. package/dist/http-wrapper.js.map +1 -1
  63. package/dist/index.js +26 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/library/notebook-library.d.ts +4 -0
  66. package/dist/library/notebook-library.d.ts.map +1 -1
  67. package/dist/library/notebook-library.js +20 -3
  68. package/dist/library/notebook-library.js.map +1 -1
  69. package/dist/session/browser-session.d.ts +35 -8
  70. package/dist/session/browser-session.d.ts.map +1 -1
  71. package/dist/session/browser-session.js +242 -28
  72. package/dist/session/browser-session.js.map +1 -1
  73. package/dist/session/session-manager.d.ts +6 -0
  74. package/dist/session/session-manager.d.ts.map +1 -1
  75. package/dist/session/session-manager.js +46 -14
  76. package/dist/session/session-manager.js.map +1 -1
  77. package/dist/session/shared-context-manager.d.ts +3 -3
  78. package/dist/session/shared-context-manager.d.ts.map +1 -1
  79. package/dist/session/shared-context-manager.js +8 -7
  80. package/dist/session/shared-context-manager.js.map +1 -1
  81. package/dist/stdio-http-proxy.d.ts +24 -0
  82. package/dist/stdio-http-proxy.d.ts.map +1 -0
  83. package/dist/stdio-http-proxy.js +592 -0
  84. package/dist/stdio-http-proxy.js.map +1 -0
  85. package/dist/tools/index.d.ts +106 -1
  86. package/dist/tools/index.d.ts.map +1 -1
  87. package/dist/tools/index.js +1028 -7
  88. package/dist/tools/index.js.map +1 -1
  89. package/dist/types.d.ts +81 -17
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils/citation-extractor.d.ts +66 -0
  92. package/dist/utils/citation-extractor.d.ts.map +1 -0
  93. package/dist/utils/citation-extractor.js +492 -0
  94. package/dist/utils/citation-extractor.js.map +1 -0
  95. package/dist/utils/page-utils.d.ts +8 -0
  96. package/dist/utils/page-utils.d.ts.map +1 -1
  97. package/dist/utils/page-utils.js +112 -8
  98. package/dist/utils/page-utils.js.map +1 -1
  99. package/docs/ARCHITECTURE_MIGRATION_STUDY.md +894 -0
  100. package/docs/CHROME_PROFILE_LIMITATION.md +15 -1
  101. package/docs/MULTI_ACCOUNT_SYSTEM.md +304 -0
  102. package/package.json +10 -10
  103. package/dist/__tests__/cleanup-manager.test.d.ts +0 -2
  104. package/dist/__tests__/cleanup-manager.test.d.ts.map +0 -1
  105. package/dist/__tests__/cleanup-manager.test.js +0 -341
  106. package/dist/__tests__/cleanup-manager.test.js.map +0 -1
  107. package/dist/__tests__/config-parsing.test.d.ts +0 -2
  108. package/dist/__tests__/config-parsing.test.d.ts.map +0 -1
  109. package/dist/__tests__/config-parsing.test.js +0 -338
  110. package/dist/__tests__/config-parsing.test.js.map +0 -1
  111. package/dist/__tests__/config.test.d.ts +0 -2
  112. package/dist/__tests__/config.test.d.ts.map +0 -1
  113. package/dist/__tests__/config.test.js +0 -267
  114. package/dist/__tests__/config.test.js.map +0 -1
  115. package/dist/__tests__/errors.test.d.ts +0 -2
  116. package/dist/__tests__/errors.test.d.ts.map +0 -1
  117. package/dist/__tests__/errors.test.js +0 -166
  118. package/dist/__tests__/errors.test.js.map +0 -1
  119. package/dist/__tests__/logger.test.d.ts +0 -2
  120. package/dist/__tests__/logger.test.d.ts.map +0 -1
  121. package/dist/__tests__/logger.test.js +0 -324
  122. package/dist/__tests__/logger.test.js.map +0 -1
  123. package/dist/__tests__/page-utils.test.d.ts +0 -2
  124. package/dist/__tests__/page-utils.test.d.ts.map +0 -1
  125. package/dist/__tests__/page-utils.test.js +0 -349
  126. package/dist/__tests__/page-utils.test.js.map +0 -1
  127. package/dist/__tests__/setup-verification.test.d.ts +0 -2
  128. package/dist/__tests__/setup-verification.test.d.ts.map +0 -1
  129. package/dist/__tests__/setup-verification.test.js +0 -15
  130. package/dist/__tests__/setup-verification.test.js.map +0 -1
  131. package/dist/__tests__/stealth-utils.test.d.ts +0 -2
  132. package/dist/__tests__/stealth-utils.test.d.ts.map +0 -1
  133. package/dist/__tests__/stealth-utils.test.js +0 -413
  134. package/dist/__tests__/stealth-utils.test.js.map +0 -1
  135. package/dist/__tests__/types.test.d.ts +0 -2
  136. package/dist/__tests__/types.test.d.ts.map +0 -1
  137. package/dist/__tests__/types.test.js +0 -461
  138. package/dist/__tests__/types.test.js.map +0 -1
@@ -1,461 +0,0 @@
1
- import { describe, it, expect } from '@jest/globals';
2
- describe('Type Definitions', () => {
3
- describe('SessionInfo', () => {
4
- it('should accept valid session info', () => {
5
- const sessionInfo = {
6
- id: 'session-123',
7
- created_at: Date.now(),
8
- last_activity: Date.now(),
9
- age_seconds: 60,
10
- inactive_seconds: 10,
11
- message_count: 5,
12
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
13
- };
14
- expect(sessionInfo.id).toBeTruthy();
15
- expect(typeof sessionInfo.id).toBe('string');
16
- expect(typeof sessionInfo.created_at).toBe('number');
17
- expect(typeof sessionInfo.last_activity).toBe('number');
18
- expect(typeof sessionInfo.age_seconds).toBe('number');
19
- expect(typeof sessionInfo.inactive_seconds).toBe('number');
20
- expect(typeof sessionInfo.message_count).toBe('number');
21
- expect(typeof sessionInfo.notebook_url).toBe('string');
22
- });
23
- it('should handle zero message count', () => {
24
- const sessionInfo = {
25
- id: 'session-new',
26
- created_at: Date.now(),
27
- last_activity: Date.now(),
28
- age_seconds: 0,
29
- inactive_seconds: 0,
30
- message_count: 0,
31
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
32
- };
33
- expect(sessionInfo.message_count).toBe(0);
34
- expect(sessionInfo.age_seconds).toBe(0);
35
- });
36
- it('should handle long-running sessions', () => {
37
- const sessionInfo = {
38
- id: 'session-old',
39
- created_at: Date.now() - 3600000,
40
- last_activity: Date.now(),
41
- age_seconds: 3600,
42
- inactive_seconds: 0,
43
- message_count: 100,
44
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
45
- };
46
- expect(sessionInfo.age_seconds).toBeGreaterThan(0);
47
- expect(sessionInfo.message_count).toBeGreaterThan(0);
48
- });
49
- it('should handle inactive sessions', () => {
50
- const sessionInfo = {
51
- id: 'session-inactive',
52
- created_at: Date.now() - 3600000,
53
- last_activity: Date.now() - 1800000,
54
- age_seconds: 3600,
55
- inactive_seconds: 1800,
56
- message_count: 5,
57
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
58
- };
59
- expect(sessionInfo.inactive_seconds).toBeGreaterThan(0);
60
- expect(sessionInfo.last_activity).toBeLessThan(Date.now());
61
- });
62
- });
63
- describe('AskQuestionResult', () => {
64
- it('should accept successful result', () => {
65
- const result = {
66
- status: 'success',
67
- question: 'What is the capital of France?',
68
- answer: 'Paris is the capital of France.',
69
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
70
- session_id: 'session-123',
71
- session_info: {
72
- age_seconds: 60,
73
- message_count: 5,
74
- last_activity: Date.now(),
75
- },
76
- };
77
- expect(result.status).toBe('success');
78
- expect(result.answer).toBeDefined();
79
- expect(result.error).toBeUndefined();
80
- });
81
- it('should accept error result', () => {
82
- const result = {
83
- status: 'error',
84
- question: 'What is the capital of France?',
85
- error: 'Failed to get answer',
86
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
87
- };
88
- expect(result.status).toBe('error');
89
- expect(result.error).toBeDefined();
90
- expect(result.answer).toBeUndefined();
91
- });
92
- it('should accept result without session info', () => {
93
- const result = {
94
- status: 'success',
95
- question: 'Test question',
96
- answer: 'Test answer',
97
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
98
- };
99
- expect(result.session_id).toBeUndefined();
100
- expect(result.session_info).toBeUndefined();
101
- });
102
- it('should handle empty question', () => {
103
- const result = {
104
- status: 'error',
105
- question: '',
106
- error: 'Question is required',
107
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
108
- };
109
- expect(result.question).toBe('');
110
- expect(result.status).toBe('error');
111
- });
112
- it('should handle long answers', () => {
113
- const longAnswer = 'A'.repeat(10000);
114
- const result = {
115
- status: 'success',
116
- question: 'Tell me a long story',
117
- answer: longAnswer,
118
- notebook_url: 'https://notebooklm.google.com/notebook/abc',
119
- };
120
- expect(result.answer?.length).toBe(10000);
121
- });
122
- });
123
- describe('ToolResult', () => {
124
- it('should accept successful result with data', () => {
125
- const result = {
126
- success: true,
127
- data: 'Operation completed',
128
- };
129
- expect(result.success).toBe(true);
130
- expect(result.data).toBe('Operation completed');
131
- expect(result.error).toBeUndefined();
132
- });
133
- it('should accept error result', () => {
134
- const result = {
135
- success: false,
136
- error: 'Operation failed',
137
- };
138
- expect(result.success).toBe(false);
139
- expect(result.error).toBe('Operation failed');
140
- expect(result.data).toBeUndefined();
141
- });
142
- it('should accept generic type parameter', () => {
143
- const numberResult = {
144
- success: true,
145
- data: 42,
146
- };
147
- const objectResult = {
148
- success: true,
149
- data: { count: 5 },
150
- };
151
- expect(numberResult.data).toBe(42);
152
- expect(objectResult.data?.count).toBe(5);
153
- });
154
- it('should accept any type as default', () => {
155
- const result = {
156
- success: true,
157
- data: { anything: 'goes', here: true, count: 123 },
158
- };
159
- expect(result.success).toBe(true);
160
- expect(result.data).toBeDefined();
161
- });
162
- it('should handle undefined data', () => {
163
- const result = {
164
- success: true,
165
- data: undefined,
166
- };
167
- expect(result.success).toBe(true);
168
- expect(result.data).toBeUndefined();
169
- });
170
- });
171
- describe('Tool', () => {
172
- it('should accept valid tool definition', () => {
173
- const tool = {
174
- name: 'ask_question',
175
- title: 'Ask Question',
176
- description: 'Ask a question to NotebookLM',
177
- inputSchema: {
178
- type: 'object',
179
- properties: {
180
- question: { type: 'string', description: 'The question to ask' },
181
- },
182
- required: ['question'],
183
- },
184
- };
185
- expect(tool.name).toBe('ask_question');
186
- expect(tool.title).toBe('Ask Question');
187
- expect(tool.description).toBeTruthy();
188
- expect(tool.inputSchema.type).toBe('object');
189
- });
190
- it('should accept tool without title', () => {
191
- const tool = {
192
- name: 'get_health',
193
- description: 'Get server health',
194
- inputSchema: {
195
- type: 'object',
196
- properties: {},
197
- },
198
- };
199
- expect(tool.title).toBeUndefined();
200
- expect(tool.name).toBe('get_health');
201
- });
202
- it('should accept tool with no required fields', () => {
203
- const tool = {
204
- name: 'list_notebooks',
205
- description: 'List all notebooks',
206
- inputSchema: {
207
- type: 'object',
208
- properties: {
209
- limit: { type: 'number', description: 'Max results' },
210
- },
211
- },
212
- };
213
- expect(tool.inputSchema.required).toBeUndefined();
214
- });
215
- it('should accept tool with multiple required fields', () => {
216
- const tool = {
217
- name: 'create_notebook',
218
- description: 'Create a notebook',
219
- inputSchema: {
220
- type: 'object',
221
- properties: {
222
- name: { type: 'string' },
223
- description: { type: 'string' },
224
- },
225
- required: ['name', 'description'],
226
- },
227
- };
228
- expect(tool.inputSchema.required).toHaveLength(2);
229
- expect(tool.inputSchema.required).toContain('name');
230
- });
231
- it('should accept complex property definitions', () => {
232
- const tool = {
233
- name: 'complex_tool',
234
- description: 'A complex tool',
235
- inputSchema: {
236
- type: 'object',
237
- properties: {
238
- options: {
239
- type: 'object',
240
- properties: {
241
- enabled: { type: 'boolean' },
242
- count: { type: 'number' },
243
- },
244
- },
245
- tags: {
246
- type: 'array',
247
- items: { type: 'string' },
248
- },
249
- },
250
- },
251
- };
252
- expect(tool.inputSchema.properties.options).toBeDefined();
253
- expect(tool.inputSchema.properties.tags).toBeDefined();
254
- });
255
- });
256
- describe('TypingOptions', () => {
257
- it('should accept valid options', () => {
258
- const options = {
259
- wpm: 180,
260
- withTypos: true,
261
- };
262
- expect(options.wpm).toBe(180);
263
- expect(options.withTypos).toBe(true);
264
- });
265
- it('should accept partial options', () => {
266
- const options1 = { wpm: 200 };
267
- const options2 = { withTypos: false };
268
- const options3 = {};
269
- expect(options1.withTypos).toBeUndefined();
270
- expect(options2.wpm).toBeUndefined();
271
- expect(options3.wpm).toBeUndefined();
272
- });
273
- it('should accept various WPM values', () => {
274
- const slow = { wpm: 60 };
275
- const fast = { wpm: 300 };
276
- const zero = { wpm: 0 };
277
- expect(slow.wpm).toBe(60);
278
- expect(fast.wpm).toBe(300);
279
- expect(zero.wpm).toBe(0);
280
- });
281
- it('should accept typo configurations', () => {
282
- const withTypos = { withTypos: true };
283
- const noTypos = { withTypos: false };
284
- expect(withTypos.withTypos).toBe(true);
285
- expect(noTypos.withTypos).toBe(false);
286
- });
287
- });
288
- describe('WaitForAnswerOptions', () => {
289
- it('should accept all options', () => {
290
- const options = {
291
- question: 'What is AI?',
292
- timeoutMs: 120000,
293
- pollIntervalMs: 1000,
294
- ignoreTexts: ['Loading...', 'Please wait...'],
295
- debug: true,
296
- };
297
- expect(options.question).toBe('What is AI?');
298
- expect(options.timeoutMs).toBe(120000);
299
- expect(options.pollIntervalMs).toBe(1000);
300
- expect(options.ignoreTexts).toHaveLength(2);
301
- expect(options.debug).toBe(true);
302
- });
303
- it('should accept empty options', () => {
304
- const options = {};
305
- expect(options.question).toBeUndefined();
306
- expect(options.timeoutMs).toBeUndefined();
307
- expect(options.pollIntervalMs).toBeUndefined();
308
- expect(options.ignoreTexts).toBeUndefined();
309
- expect(options.debug).toBeUndefined();
310
- });
311
- it('should accept partial options', () => {
312
- const options = {
313
- timeoutMs: 60000,
314
- debug: true,
315
- };
316
- expect(options.timeoutMs).toBe(60000);
317
- expect(options.debug).toBe(true);
318
- expect(options.question).toBeUndefined();
319
- });
320
- it('should accept empty ignore texts', () => {
321
- const options = {
322
- ignoreTexts: [],
323
- };
324
- expect(options.ignoreTexts).toEqual([]);
325
- expect(options.ignoreTexts).toHaveLength(0);
326
- });
327
- it('should accept various timeout values', () => {
328
- const short = { timeoutMs: 30000 };
329
- const long = { timeoutMs: 300000 };
330
- expect(short.timeoutMs).toBe(30000);
331
- expect(long.timeoutMs).toBe(300000);
332
- });
333
- });
334
- describe('ProgressCallback', () => {
335
- it('should accept valid callback function', async () => {
336
- const callback = async (message, _progress, _total) => {
337
- expect(typeof message).toBe('string');
338
- };
339
- await callback('Processing...', 1, 10);
340
- });
341
- it('should accept callback with all parameters', async () => {
342
- const callback = async (message, progress, total) => {
343
- expect(message).toBe('Step 1');
344
- expect(progress).toBe(1);
345
- expect(total).toBe(5);
346
- };
347
- await callback('Step 1', 1, 5);
348
- });
349
- it('should accept callback with optional parameters', async () => {
350
- const callback = async (message) => {
351
- expect(message).toBeTruthy();
352
- };
353
- await callback('Message only');
354
- });
355
- it('should return promise', async () => {
356
- const callback = async (_message) => {
357
- return Promise.resolve();
358
- };
359
- const result = callback('Test');
360
- expect(result).toBeInstanceOf(Promise);
361
- await result;
362
- });
363
- it('should handle async operations', async () => {
364
- let called = false;
365
- const callback = async (_message) => {
366
- await new Promise((resolve) => setTimeout(resolve, 10));
367
- called = true;
368
- };
369
- await callback('Test');
370
- expect(called).toBe(true);
371
- });
372
- });
373
- describe('ServerState', () => {
374
- it('should accept valid server state', () => {
375
- const state = {
376
- playwright: {},
377
- sessionManager: {},
378
- authManager: {},
379
- };
380
- expect(state.playwright).toBeDefined();
381
- expect(state.sessionManager).toBeDefined();
382
- expect(state.authManager).toBeDefined();
383
- });
384
- it('should accept actual manager instances', () => {
385
- const mockPlaywright = { launch: () => { } };
386
- const mockSessionManager = { getSessions: () => [] };
387
- const mockAuthManager = { isAuthenticated: () => false };
388
- const state = {
389
- playwright: mockPlaywright,
390
- sessionManager: mockSessionManager,
391
- authManager: mockAuthManager,
392
- };
393
- expect(state.playwright).toBe(mockPlaywright);
394
- expect(state.sessionManager).toBe(mockSessionManager);
395
- expect(state.authManager).toBe(mockAuthManager);
396
- });
397
- it('should accept any type for managers', () => {
398
- const state = {
399
- playwright: null,
400
- sessionManager: undefined,
401
- authManager: { custom: 'property' },
402
- };
403
- expect(state.playwright).toBeNull();
404
- expect(state.sessionManager).toBeUndefined();
405
- expect(state.authManager).toBeDefined();
406
- });
407
- });
408
- describe('Type compatibility', () => {
409
- it('should allow session info in ask result', () => {
410
- const sessionInfo = {
411
- age_seconds: 60,
412
- message_count: 5,
413
- last_activity: Date.now(),
414
- };
415
- const result = {
416
- status: 'success',
417
- question: 'Test',
418
- answer: 'Answer',
419
- notebook_url: 'https://example.com',
420
- session_info: sessionInfo,
421
- };
422
- expect(result.session_info).toBeDefined();
423
- expect(result.session_info?.age_seconds).toBe(60);
424
- });
425
- it('should allow ToolResult with SessionInfo', () => {
426
- const sessionInfo = {
427
- id: 'session-123',
428
- created_at: Date.now(),
429
- last_activity: Date.now(),
430
- age_seconds: 60,
431
- inactive_seconds: 10,
432
- message_count: 5,
433
- notebook_url: 'https://example.com',
434
- };
435
- const result = {
436
- success: true,
437
- data: sessionInfo,
438
- };
439
- expect(result.data?.id).toBe('session-123');
440
- });
441
- it('should allow ToolResult with arrays', () => {
442
- const sessions = [
443
- {
444
- id: 'session-1',
445
- created_at: Date.now(),
446
- last_activity: Date.now(),
447
- age_seconds: 60,
448
- inactive_seconds: 10,
449
- message_count: 5,
450
- notebook_url: 'https://example.com',
451
- },
452
- ];
453
- const result = {
454
- success: true,
455
- data: sessions,
456
- };
457
- expect(result.data).toHaveLength(1);
458
- });
459
- });
460
- });
461
- //# sourceMappingURL=types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../src/__tests__/types.test.ts"],"names":[],"mappings":"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"}