memorix 1.9.1 → 1.9.3
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 +22 -0
- package/README.md +17 -4
- package/README.zh-CN.md +8 -4
- package/dist/cli/index.js +448 -243
- package/dist/index.js +302 -165
- package/dist/maintenance-runner.js +194 -98
- package/dist/media-audio-runner.js +196 -100
- package/dist/media-video-runner.js +194 -98
- package/dist/memcode-runtime/CHANGELOG.md +22 -0
- package/dist/sdk.js +301 -164
- package/dist/vector-backfill-runner.js +194 -98
- package/docs/AGENT_OPERATOR_PLAYBOOK.md +15 -0
- package/docs/ARCHITECTURE.md +23 -0
- package/docs/DEVELOPMENT.md +1 -1
- package/docs/INTEGRATIONS.md +4 -0
- package/docs/PERFORMANCE.md +50 -0
- package/docs/README.md +1 -1
- package/docs/SETUP.md +5 -0
- package/package.json +1 -2
- package/plugins/antigravity/memorix/plugin.json +1 -1
- package/plugins/claude/memorix/.claude-plugin/plugin.json +1 -1
- package/plugins/codebuddy/memorix/.codebuddy-plugin/plugin.json +1 -1
- package/plugins/codex/memorix/.codex-plugin/plugin.json +1 -1
- package/plugins/copilot/memorix/plugin.json +1 -1
- package/plugins/gemini/memorix/gemini-extension.json +1 -1
- package/plugins/hermes/memorix/plugin.yaml +1 -1
- package/plugins/omp/memorix/package.json +1 -1
- package/plugins/openclaw/memorix/.codex-plugin/plugin.json +1 -1
- package/plugins/pi/memorix/package.json +1 -1
- package/server.json +2 -2
- package/src/cli/commands/doctor.ts +78 -17
- package/src/cli/commands/memory.ts +2 -1
- package/src/cli/default-mode.ts +15 -0
- package/src/cli/index.ts +10 -1
- package/src/codegraph/lite-provider.ts +10 -1
- package/src/dashboard/maintenance.ts +11 -2
- package/src/memory/consolidation.ts +15 -6
- package/src/store/mini-skill-store.ts +31 -22
- package/src/store/obs-store.ts +46 -30
- package/src/store/session-store.ts +35 -21
- package/src/store/sqlite-db.ts +16 -7
- package/src/store/sqlite-reliability.ts +87 -0
- package/src/store/sqlite-store.ts +4 -1
- package/assets/star-history-dark.svg +0 -30
- package/assets/star-history-light.svg +0 -30
- package/assets/star-history.json +0 -712
package/src/store/obs-store.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Backends:
|
|
5
5
|
* - SqliteBackend (sqlite-store.ts) — WAL-mode SQLite with generation tracking
|
|
6
|
-
* - DegradedBackend —
|
|
6
|
+
* - DegradedBackend — diagnostic-only backend when SQLite is unavailable
|
|
7
7
|
*
|
|
8
8
|
* JSON is no longer a runtime writable backend.
|
|
9
9
|
* observations.json is only used as a one-time migration source into SQLite.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import type { Observation } from '../types.js';
|
|
15
|
+
import { degradedReadError, degradedWriteError, formatSqliteFailure, isSqliteUnavailableError, initializeSqliteStore } from './sqlite-reliability.js';
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Raw transaction handle for compound atomic operations.
|
|
@@ -164,6 +165,9 @@ export interface ObservationStore {
|
|
|
164
165
|
|
|
165
166
|
/** Which backend is active: 'sqlite' or 'degraded' (read-only). */
|
|
166
167
|
getBackendName(): 'sqlite' | 'degraded';
|
|
168
|
+
|
|
169
|
+
/** Why a degraded backend was selected, when applicable. */
|
|
170
|
+
getBackendReason?(): string | undefined;
|
|
167
171
|
}
|
|
168
172
|
|
|
169
173
|
// ── Singleton store access ─────────────────────────────────────────
|
|
@@ -199,23 +203,25 @@ export function resetObservationStore(): void {
|
|
|
199
203
|
* without touching the process-wide singleton. This is useful for long-lived
|
|
200
204
|
* multi-project hosts (for example serve-http embedded dashboard APIs) where
|
|
201
205
|
* requests may need to read different project data dirs concurrently.
|
|
206
|
+
*
|
|
207
|
+
* Only a *structural* failure — better-sqlite3 genuinely unavailable — falls
|
|
208
|
+
* back to the read-only DegradedBackend. A transient lock is retried, and a
|
|
209
|
+
* persistent runtime failure is thrown rather than silently degraded: an
|
|
210
|
+
* empty-looking store is far more dangerous than a loud error, because
|
|
211
|
+
* callers cannot distinguish it from a project with no observations yet.
|
|
202
212
|
*/
|
|
203
213
|
export async function createObservationStore(dataDir: string): Promise<ObservationStore> {
|
|
204
|
-
// Try SQLite first (optionalDependencies — may not be installed)
|
|
205
214
|
try {
|
|
206
215
|
const { SqliteBackend } = await import('./sqlite-store.js');
|
|
207
|
-
|
|
208
|
-
await store.init(dataDir);
|
|
209
|
-
return store;
|
|
216
|
+
return await initializeSqliteStore(() => new SqliteBackend(), dataDir, 'Observation store');
|
|
210
217
|
} catch (err) {
|
|
211
|
-
|
|
218
|
+
if (!isSqliteUnavailableError(err)) throw err;
|
|
219
|
+
const reason = formatSqliteFailure(err);
|
|
220
|
+
console.error(`[memorix] SQLite module unavailable — degraded mode (reads/writes disabled): ${reason}`);
|
|
221
|
+
const degraded = new DegradedBackend(reason);
|
|
222
|
+
await degraded.init(dataDir);
|
|
223
|
+
return degraded;
|
|
212
224
|
}
|
|
213
|
-
|
|
214
|
-
// No writable JSON fallback — degraded read-only mode instead
|
|
215
|
-
// observations.json is only used as migration source, not runtime backend
|
|
216
|
-
const store = new DegradedBackend();
|
|
217
|
-
await store.init(dataDir);
|
|
218
|
-
return store;
|
|
219
225
|
}
|
|
220
226
|
|
|
221
227
|
/**
|
|
@@ -243,52 +249,58 @@ export async function initObservationStore(dataDir: string): Promise<Observation
|
|
|
243
249
|
return store;
|
|
244
250
|
}
|
|
245
251
|
|
|
246
|
-
// ── DegradedBackend (
|
|
252
|
+
// ── DegradedBackend (diagnostic-only when SQLite unavailable) ─────
|
|
247
253
|
|
|
248
254
|
/**
|
|
249
|
-
* DegradedBackend —
|
|
255
|
+
* DegradedBackend — diagnostic-only backend used when SQLite is unavailable.
|
|
250
256
|
*
|
|
251
|
-
*
|
|
257
|
+
* Business reads and writes throw instead of returning synthetic empty data.
|
|
252
258
|
* This ensures the system does not silently fall back to writing observations.json
|
|
253
259
|
* as a runtime canonical store.
|
|
254
260
|
*/
|
|
255
261
|
export class DegradedBackend implements ObservationStore {
|
|
256
262
|
private dataDir: string = '';
|
|
257
263
|
|
|
264
|
+
constructor(private readonly reason = 'SQLite runtime unavailable') {}
|
|
265
|
+
|
|
266
|
+
private unavailableRead(): Error {
|
|
267
|
+
return degradedReadError('observations');
|
|
268
|
+
}
|
|
269
|
+
|
|
258
270
|
async init(dataDir: string): Promise<void> {
|
|
259
271
|
this.dataDir = dataDir;
|
|
260
272
|
}
|
|
261
273
|
|
|
262
274
|
async loadAll(): Promise<Observation[]> {
|
|
263
|
-
|
|
275
|
+
throw this.unavailableRead();
|
|
264
276
|
}
|
|
265
277
|
|
|
266
278
|
async loadByProject(_projectId: string, _options?: { status?: string; limit?: number; offset?: number; afterId?: number; newestFirst?: boolean }): Promise<Observation[]> {
|
|
267
|
-
|
|
279
|
+
throw this.unavailableRead();
|
|
268
280
|
}
|
|
269
281
|
|
|
270
282
|
async countByProject(_projectId: string, _options?: { status?: string; visibility?: 'project' }): Promise<number> {
|
|
271
|
-
|
|
283
|
+
throw this.unavailableRead();
|
|
272
284
|
}
|
|
273
285
|
|
|
274
286
|
async getById(_id: number): Promise<Observation | undefined> {
|
|
275
|
-
|
|
287
|
+
throw this.unavailableRead();
|
|
276
288
|
}
|
|
277
289
|
|
|
278
290
|
async loadIdCounter(): Promise<number> {
|
|
279
|
-
|
|
291
|
+
throw this.unavailableRead();
|
|
280
292
|
}
|
|
281
293
|
|
|
282
294
|
async countAll(): Promise<number> {
|
|
283
|
-
|
|
295
|
+
throw this.unavailableRead();
|
|
284
296
|
}
|
|
285
297
|
|
|
286
298
|
async listProjectIds(): Promise<string[]> {
|
|
287
|
-
|
|
299
|
+
throw this.unavailableRead();
|
|
288
300
|
}
|
|
289
301
|
|
|
290
302
|
async searchLexical(_options: LexicalSearchOptions): Promise<LexicalSearchHit[]> {
|
|
291
|
-
|
|
303
|
+
throw this.unavailableRead();
|
|
292
304
|
}
|
|
293
305
|
|
|
294
306
|
hasLexicalIndex(): boolean {
|
|
@@ -300,31 +312,31 @@ export class DegradedBackend implements ObservationStore {
|
|
|
300
312
|
}
|
|
301
313
|
|
|
302
314
|
async insert(_obs: Observation): Promise<void> {
|
|
303
|
-
throw
|
|
315
|
+
throw degradedWriteError('observations');
|
|
304
316
|
}
|
|
305
317
|
|
|
306
318
|
async update(_obs: Observation): Promise<void> {
|
|
307
|
-
throw
|
|
319
|
+
throw degradedWriteError('observations');
|
|
308
320
|
}
|
|
309
321
|
|
|
310
322
|
async remove(_id: number): Promise<void> {
|
|
311
|
-
throw
|
|
323
|
+
throw degradedWriteError('observations');
|
|
312
324
|
}
|
|
313
325
|
|
|
314
326
|
async bulkReplace(_obs: Observation[]): Promise<void> {
|
|
315
|
-
throw
|
|
327
|
+
throw degradedWriteError('observations');
|
|
316
328
|
}
|
|
317
329
|
|
|
318
330
|
async bulkRemoveByIds(_ids: number[]): Promise<void> {
|
|
319
|
-
throw
|
|
331
|
+
throw degradedWriteError('observations');
|
|
320
332
|
}
|
|
321
333
|
|
|
322
334
|
async saveIdCounter(_nextId: number): Promise<void> {
|
|
323
|
-
throw
|
|
335
|
+
throw degradedWriteError('observations');
|
|
324
336
|
}
|
|
325
337
|
|
|
326
338
|
async atomic<T>(_fn: (tx: StoreTransaction) => Promise<T>): Promise<T> {
|
|
327
|
-
throw
|
|
339
|
+
throw degradedWriteError('observations');
|
|
328
340
|
}
|
|
329
341
|
|
|
330
342
|
async ensureFresh(): Promise<boolean> {
|
|
@@ -342,4 +354,8 @@ export class DegradedBackend implements ObservationStore {
|
|
|
342
354
|
getBackendName(): 'sqlite' | 'degraded' {
|
|
343
355
|
return 'degraded';
|
|
344
356
|
}
|
|
357
|
+
|
|
358
|
+
getBackendReason(): string {
|
|
359
|
+
return this.reason;
|
|
360
|
+
}
|
|
345
361
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Backends:
|
|
5
5
|
* - SessionSqliteStore — canonical store, uses shared DB handle from sqlite-db.ts
|
|
6
|
-
* - SessionGracefulDegrade —
|
|
6
|
+
* - SessionGracefulDegrade — explicit read-only fallback when SQLite is unavailable
|
|
7
7
|
*
|
|
8
8
|
* Phase 2 debt-zero: SQLite is the only canonical store for sessions.
|
|
9
9
|
* JSON files are migration source only. No writable JSON fallback exists.
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import type { Session } from '../types.js';
|
|
13
13
|
import { getDatabase } from './sqlite-db.js';
|
|
14
|
+
import { degradedReadError, degradedWriteError, formatSqliteFailure, initializeSqliteStore, isSqliteUnavailableError, retrySqliteBusy } from './sqlite-reliability.js';
|
|
14
15
|
import { loadSessionsJson } from './persistence.js';
|
|
15
16
|
import path from 'node:path';
|
|
16
17
|
import fs from 'node:fs';
|
|
@@ -33,6 +34,7 @@ export interface SessionStoreInterface {
|
|
|
33
34
|
*/
|
|
34
35
|
atomicRolloverInsert(newSession: Session, projectIds: string[], now: string): Promise<number>;
|
|
35
36
|
getBackendName(): 'sqlite' | 'degraded';
|
|
37
|
+
getBackendReason?(): string | undefined;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
// ── Row <-> Session serialization ───────────────────────────────────
|
|
@@ -175,7 +177,7 @@ export class SessionSqliteStore implements SessionStoreInterface {
|
|
|
175
177
|
const stmtComplete = this._stmtCompleteActive;
|
|
176
178
|
const stmtIns = this.stmtInsert;
|
|
177
179
|
|
|
178
|
-
|
|
180
|
+
return retrySqliteBusy(async () => this.db.transaction(() => {
|
|
179
181
|
let completedCount = 0;
|
|
180
182
|
for (const pid of projectIds) {
|
|
181
183
|
const info = stmtComplete.run({ pid, now });
|
|
@@ -183,8 +185,7 @@ export class SessionSqliteStore implements SessionStoreInterface {
|
|
|
183
185
|
}
|
|
184
186
|
stmtIns.run(sessionToRow(newSession));
|
|
185
187
|
return completedCount;
|
|
186
|
-
})();
|
|
187
|
-
return result;
|
|
188
|
+
})(), 'Session rollover');
|
|
188
189
|
}
|
|
189
190
|
|
|
190
191
|
getBackendName(): 'sqlite' | 'degraded' {
|
|
@@ -195,15 +196,21 @@ export class SessionSqliteStore implements SessionStoreInterface {
|
|
|
195
196
|
// ── Graceful Degrade Fallback ────────────────────────────────────────
|
|
196
197
|
//
|
|
197
198
|
// Phase 2 debt-zero rule: sessions have NO writable JSON fallback.
|
|
198
|
-
// In
|
|
199
|
-
// and writes
|
|
199
|
+
// In environments without a supported SQLite runtime, reads return an
|
|
200
|
+
// explicit unavailable error and writes fail rather than pretending success.
|
|
200
201
|
|
|
201
202
|
export class SessionGracefulDegrade implements SessionStoreInterface {
|
|
202
203
|
private warned = false;
|
|
203
204
|
|
|
205
|
+
constructor(private readonly reason = 'SQLite runtime unavailable') {}
|
|
206
|
+
|
|
207
|
+
private unavailableRead(): Error {
|
|
208
|
+
return degradedReadError('sessions');
|
|
209
|
+
}
|
|
210
|
+
|
|
204
211
|
private warn(): void {
|
|
205
212
|
if (!this.warned) {
|
|
206
|
-
console.error('[memorix] SessionStore: SQLite unavailable — sessions
|
|
213
|
+
console.error('[memorix] SessionStore: SQLite unavailable — sessions cannot be read or written. Install a supported SQLite runtime.');
|
|
207
214
|
this.warned = true;
|
|
208
215
|
}
|
|
209
216
|
}
|
|
@@ -212,17 +219,22 @@ export class SessionGracefulDegrade implements SessionStoreInterface {
|
|
|
212
219
|
this.warn();
|
|
213
220
|
}
|
|
214
221
|
|
|
215
|
-
async loadAll(): Promise<Session[]> {
|
|
216
|
-
async getById(_id: string): Promise<Session | undefined> {
|
|
217
|
-
async loadByProject(_projectId: string): Promise<Session[]> {
|
|
218
|
-
async loadActive(_projectId: string): Promise<Session[]> {
|
|
222
|
+
async loadAll(): Promise<Session[]> { throw this.unavailableRead(); }
|
|
223
|
+
async getById(_id: string): Promise<Session | undefined> { throw this.unavailableRead(); }
|
|
224
|
+
async loadByProject(_projectId: string): Promise<Session[]> { throw this.unavailableRead(); }
|
|
225
|
+
async loadActive(_projectId: string): Promise<Session[]> { throw this.unavailableRead(); }
|
|
219
226
|
|
|
220
|
-
async insert(_session: Session): Promise<void> { this.warn(); }
|
|
221
|
-
async update(_session: Session): Promise<void> { this.warn(); }
|
|
222
|
-
async bulkUpdate(_sessions: Session[]): Promise<void> { this.warn(); }
|
|
223
|
-
async atomicRolloverInsert(_newSession: Session, _projectIds: string[], _now: string): Promise<number> {
|
|
227
|
+
async insert(_session: Session): Promise<void> { this.warn(); throw degradedWriteError('sessions'); }
|
|
228
|
+
async update(_session: Session): Promise<void> { this.warn(); throw degradedWriteError('sessions'); }
|
|
229
|
+
async bulkUpdate(_sessions: Session[]): Promise<void> { this.warn(); throw degradedWriteError('sessions'); }
|
|
230
|
+
async atomicRolloverInsert(_newSession: Session, _projectIds: string[], _now: string): Promise<number> {
|
|
231
|
+
this.warn();
|
|
232
|
+
throw degradedWriteError('sessions');
|
|
233
|
+
}
|
|
224
234
|
|
|
225
235
|
getBackendName(): 'sqlite' | 'degraded' { return 'degraded'; }
|
|
236
|
+
|
|
237
|
+
getBackendReason(): string { return this.reason; }
|
|
226
238
|
}
|
|
227
239
|
|
|
228
240
|
// ── Singleton access ────────────────────────────────────────────────
|
|
@@ -248,19 +260,21 @@ export async function initSessionStore(dataDir: string): Promise<SessionStoreInt
|
|
|
248
260
|
_store = null;
|
|
249
261
|
_storeDataDir = null;
|
|
250
262
|
|
|
251
|
-
//
|
|
263
|
+
// Only a missing SQLite runtime may use the intentional read-only fallback.
|
|
264
|
+
let degradedReason = 'SQLite runtime unavailable';
|
|
252
265
|
try {
|
|
253
|
-
const store = new SessionSqliteStore();
|
|
254
|
-
await store.init(dataDir);
|
|
266
|
+
const store = await initializeSqliteStore(() => new SessionSqliteStore(), dataDir, 'Session store');
|
|
255
267
|
_store = store;
|
|
256
268
|
_storeDataDir = dataDir;
|
|
257
269
|
return store;
|
|
258
270
|
} catch (err) {
|
|
259
|
-
|
|
271
|
+
if (!isSqliteUnavailableError(err)) throw err;
|
|
272
|
+
degradedReason = formatSqliteFailure(err);
|
|
273
|
+
console.error(`[memorix] SessionSqliteStore unavailable, running in degraded read-only mode: ${degradedReason}`);
|
|
260
274
|
}
|
|
261
275
|
|
|
262
|
-
// Fallback:
|
|
263
|
-
const store = new SessionGracefulDegrade();
|
|
276
|
+
// Fallback: explicit read-only mode (no writable JSON backend per debt-zero rule)
|
|
277
|
+
const store = new SessionGracefulDegrade(degradedReason);
|
|
264
278
|
await store.init(dataDir);
|
|
265
279
|
_store = store;
|
|
266
280
|
_storeDataDir = dataDir;
|
package/src/store/sqlite-db.ts
CHANGED
|
@@ -1126,12 +1126,15 @@ export function getDatabase(dataDir: string): any {
|
|
|
1126
1126
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
1127
1127
|
|
|
1128
1128
|
const dbPath = path.join(dataDir, 'memorix.db');
|
|
1129
|
-
|
|
1129
|
+
let db: any;
|
|
1130
|
+
try {
|
|
1131
|
+
db = createDatabase(dbPath);
|
|
1130
1132
|
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1133
|
+
// Set the connection-local wait policy before the journal-mode transition.
|
|
1134
|
+
db.pragma('busy_timeout = 5000');
|
|
1135
|
+
// WAL allows readers to continue while one short writer transaction runs.
|
|
1136
|
+
db.pragma('journal_mode = WAL');
|
|
1137
|
+
db.pragma('foreign_keys = ON');
|
|
1135
1138
|
|
|
1136
1139
|
// Create all tables
|
|
1137
1140
|
db.exec(CREATE_OBSERVATIONS_TABLE);
|
|
@@ -1188,8 +1191,14 @@ export function getDatabase(dataDir: string): any {
|
|
|
1188
1191
|
db.prepare(`INSERT OR IGNORE INTO meta (key, value) VALUES ('next_id', '1')`).run();
|
|
1189
1192
|
db.prepare(`INSERT OR IGNORE INTO meta (key, value) VALUES ('mini_skills_generation', '0')`).run();
|
|
1190
1193
|
|
|
1191
|
-
|
|
1192
|
-
|
|
1194
|
+
_dbCache.set(normalized, db);
|
|
1195
|
+
return db;
|
|
1196
|
+
} catch (error) {
|
|
1197
|
+
// A schema/migration/FTS failure must not leave an uncached connection
|
|
1198
|
+
// holding a file lock while callers retry initialization.
|
|
1199
|
+
try { db?.close(); } catch { /* best-effort cleanup */ }
|
|
1200
|
+
throw error;
|
|
1201
|
+
}
|
|
1193
1202
|
}
|
|
1194
1203
|
|
|
1195
1204
|
/**
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { loadBetterSqlite3 } from './sqlite-db.js';
|
|
2
|
+
|
|
3
|
+
const SQLITE_BUSY_RETRY_DELAYS_MS = [50, 150, 400, 1000, 2500] as const;
|
|
4
|
+
|
|
5
|
+
export class SqliteUnavailableError extends Error {
|
|
6
|
+
readonly code = 'MEMORIX_SQLITE_UNAVAILABLE';
|
|
7
|
+
|
|
8
|
+
constructor(cause?: unknown) {
|
|
9
|
+
super(
|
|
10
|
+
cause instanceof Error && cause.message
|
|
11
|
+
? cause.message
|
|
12
|
+
: '[memorix] SQLite is unavailable (install a supported SQLite runtime)',
|
|
13
|
+
);
|
|
14
|
+
this.name = 'SqliteUnavailableError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** SQLite BUSY means another connection is currently holding the database lock. */
|
|
19
|
+
export function isTransientSqliteError(error: unknown): boolean {
|
|
20
|
+
const code = (error as { code?: unknown } | null)?.code;
|
|
21
|
+
if (typeof code === 'string') {
|
|
22
|
+
// SQLITE_LOCKED is a same-connection/shared-cache conflict. Retrying it
|
|
23
|
+
// would hide a transaction bug; only BUSY is cross-connection contention.
|
|
24
|
+
return /^SQLITE_BUSY(?:_|$)/i.test(code);
|
|
25
|
+
}
|
|
26
|
+
return error instanceof Error && /\bdatabase is locked\b|\bdatabase is busy\b/i.test(error.message);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function isSqliteUnavailableError(error: unknown): boolean {
|
|
30
|
+
return error instanceof SqliteUnavailableError
|
|
31
|
+
|| (error instanceof Error && /SQLite is not available|better-sqlite3.*failed|node:sqlite.*failed|bun:sqlite.*failed/i.test(error.message));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function degradedReadError(storeName: string): Error {
|
|
35
|
+
return new Error(`[memorix] Cannot read ${storeName}: SQLite backend unavailable (memory is not loaded)`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function degradedWriteError(storeName: string): Error {
|
|
39
|
+
return new Error(`[memorix] Cannot write ${storeName}: SQLite backend unavailable (degraded mode; read-only)`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function formatSqliteFailure(error: unknown): string {
|
|
43
|
+
return error instanceof Error && error.message ? error.message : String(error);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function delay(ms: number): Promise<void> {
|
|
47
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Retry only cross-process SQLite contention, keeping each attempt bounded. */
|
|
51
|
+
export async function retrySqliteBusy<T>(operation: () => Promise<T>, label: string): Promise<T> {
|
|
52
|
+
for (let attempt = 0; ; attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
return await operation();
|
|
55
|
+
} catch (error) {
|
|
56
|
+
if (!isTransientSqliteError(error) || attempt >= SQLITE_BUSY_RETRY_DELAYS_MS.length) throw error;
|
|
57
|
+
const waitMs = SQLITE_BUSY_RETRY_DELAYS_MS[attempt];
|
|
58
|
+
console.error(
|
|
59
|
+
`[memorix] ${label} SQLite busy (attempt ${attempt + 1}/${SQLITE_BUSY_RETRY_DELAYS_MS.length + 1}), retrying in ${waitMs}ms`,
|
|
60
|
+
);
|
|
61
|
+
await delay(waitMs);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Establish one complete store instance. Runtime lock errors are retried with
|
|
68
|
+
* fresh instances; a missing SQLite runtime is classified separately so the
|
|
69
|
+
* caller can choose the intentional degraded backend.
|
|
70
|
+
*/
|
|
71
|
+
export async function initializeSqliteStore<T extends { init(dataDir: string): Promise<void> }>(
|
|
72
|
+
factory: () => T,
|
|
73
|
+
dataDir: string,
|
|
74
|
+
label: string,
|
|
75
|
+
): Promise<T> {
|
|
76
|
+
try {
|
|
77
|
+
loadBetterSqlite3();
|
|
78
|
+
} catch (error) {
|
|
79
|
+
throw new SqliteUnavailableError(error);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return retrySqliteBusy(async () => {
|
|
83
|
+
const store = factory();
|
|
84
|
+
await store.init(dataDir);
|
|
85
|
+
return store;
|
|
86
|
+
}, label);
|
|
87
|
+
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import type { Observation } from '../types.js';
|
|
19
19
|
import type { ObservationStore, StoreTransaction } from './obs-store.js';
|
|
20
20
|
import { getDatabase, closeDatabase } from './sqlite-db.js';
|
|
21
|
+
import { retrySqliteBusy } from './sqlite-reliability.js';
|
|
21
22
|
import {
|
|
22
23
|
isObservationLexicalIndexEnabled,
|
|
23
24
|
rebuildObservationLexicalIndex,
|
|
@@ -462,7 +463,9 @@ export class SqliteBackend implements ObservationStore {
|
|
|
462
463
|
const run = this._atomicQueue
|
|
463
464
|
.catch(() => undefined)
|
|
464
465
|
.then(async () => {
|
|
465
|
-
|
|
466
|
+
await retrySqliteBusy(async () => {
|
|
467
|
+
this.db.prepare('BEGIN IMMEDIATE').run();
|
|
468
|
+
}, 'Observation atomic write');
|
|
466
469
|
try {
|
|
467
470
|
const tx: StoreTransaction = {
|
|
468
471
|
loadAll: async () => this.rawLoadAll(),
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="560" viewBox="0 0 1200 560" role="img" aria-labelledby="title description">
|
|
3
|
-
<title id="title">AVIDS2/memorix Star History</title>
|
|
4
|
-
<desc id="description">Cumulative GitHub stars for AVIDS2/memorix, generated from GitHub stargazer events.</desc>
|
|
5
|
-
<defs>
|
|
6
|
-
<linearGradient id="star-history-fill-dark" x1="0" x2="0" y1="0" y2="1">
|
|
7
|
-
<stop offset="0%" stop-color="#3dd6ae" stop-opacity="0.35" />
|
|
8
|
-
<stop offset="100%" stop-color="#3dd6ae" stop-opacity="0" />
|
|
9
|
-
</linearGradient>
|
|
10
|
-
</defs>
|
|
11
|
-
<rect width="1200" height="560" rx="10" fill="#0d1117" />
|
|
12
|
-
<text x="76" y="48" fill="#e6edf3" font-size="28" font-weight="700" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">Star History</text>
|
|
13
|
-
<text x="76" y="78" fill="#9ba8b7" font-size="16" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">AVIDS2/memorix</text>
|
|
14
|
-
<text x="1152" y="56" text-anchor="end" fill="#b9f7e5" font-size="24" font-weight="700" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">706 stars</text>
|
|
15
|
-
<g font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">
|
|
16
|
-
<line x1="76" y1="486" x2="1152" y2="486" stroke="#30363d" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="490" text-anchor="end" fill="#9ba8b7" font-size="14">0</text>
|
|
17
|
-
<line x1="76" y1="392.5" x2="1152" y2="392.5" stroke="#30363d" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="396.5" text-anchor="end" fill="#9ba8b7" font-size="14">200</text>
|
|
18
|
-
<line x1="76" y1="299" x2="1152" y2="299" stroke="#30363d" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="303" text-anchor="end" fill="#9ba8b7" font-size="14">400</text>
|
|
19
|
-
<line x1="76" y1="205.5" x2="1152" y2="205.5" stroke="#30363d" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="209.5" text-anchor="end" fill="#9ba8b7" font-size="14">600</text>
|
|
20
|
-
<line x1="76" y1="112" x2="1152" y2="112" stroke="#30363d" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="116" text-anchor="end" fill="#9ba8b7" font-size="14">800</text>
|
|
21
|
-
<path d="M 115.85 485.53 L 116.29 485.06 L 116.62 484.6 L 116.86 484.13 L 116.89 483.66 L 117.56 483.19 L 117.89 482.73 L 118.08 482.26 L 118.09 481.79 L 118.9 481.32 L 121.46 480.86 L 121.48 480.39 L 121.49 479.92 L 121.75 479.45 L 121.84 478.99 L 121.9 478.52 L 121.92 478.05 L 122.03 477.58 L 122.13 477.12 L 122.14 476.65 L 122.2 476.18 L 122.28 475.71 L 122.37 475.25 L 122.61 474.78 L 122.84 474.31 L 122.95 473.85 L 123.11 473.38 L 123.25 472.91 L 123.29 472.44 L 123.36 471.98 L 123.53 471.51 L 123.54 471.04 L 123.71 470.57 L 123.77 470.11 L 123.87 469.64 L 123.96 469.17 L 124.04 468.7 L 124.09 468.24 L 124.1 467.77 L 124.1 467.3 L 124.11 466.83 L 124.11 466.37 L 124.18 465.9 L 124.18 465.43 L 124.23 464.96 L 124.28 464.5 L 124.51 464.03 L 124.69 463.56 L 124.78 463.09 L 125.47 462.63 L 125.5 462.16 L 126.49 461.69 L 126.55 461.22 L 126.56 460.75 L 126.66 460.29 L 126.72 459.82 L 126.93 459.35 L 127.32 458.88 L 127.53 458.42 L 127.53 457.95 L 127.57 457.48 L 127.83 457.01 L 128 456.55 L 128.24 456.08 L 128.28 455.61 L 128.7 455.14 L 129 454.68 L 129.21 454.21 L 129.45 453.74 L 129.67 453.27 L 129.91 452.81 L 129.97 452.34 L 130.12 451.87 L 130.13 451.4 L 130.29 450.94 L 130.54 450.47 L 131.86 450 L 131.88 449.53 L 132.34 449.07 L 132.46 448.6 L 132.5 448.13 L 132.51 447.67 L 132.56 447.2 L 132.81 446.73 L 132.95 446.26 L 132.98 445.8 L 132.99 445.33 L 133.04 444.86 L 133.18 444.39 L 133.26 443.93 L 133.28 443.46 L 133.4 442.99 L 133.45 442.52 L 133.45 442.06 L 133.64 441.59 L 133.89 441.12 L 133.92 440.65 L 134.13 440.19 L 134.23 439.72 L 134.47 439.25 L 134.84 438.78 L 134.86 438.31 L 134.93 437.85 L 135.08 437.38 L 135.14 436.91 L 135.5 436.44 L 136.81 435.98 L 136.87 435.51 L 137.1 435.04 L 137.41 434.57 L 137.6 434.11 L 137.83 433.64 L 139.54 433.17 L 140.15 432.7 L 140.38 432.24 L 140.96 431.77 L 142.88 431.3 L 142.9 430.83 L 143.15 430.37 L 143.17 429.9 L 143.44 429.43 L 143.72 428.97 L 143.96 428.5 L 144.01 428.03 L 144.22 427.56 L 144.44 427.1 L 144.73 426.63 L 144.86 426.16 L 145.24 425.69 L 149.6 425.23 L 150.92 424.76 L 151.07 424.29 L 151.16 423.82 L 153.18 423.36 L 153.21 422.89 L 153.93 422.42 L 157.75 421.95 L 159.84 421.49 L 160.2 421.02 L 161 420.55 L 161.46 420.08 L 164.37 419.62 L 166.26 419.15 L 166.5 418.68 L 168.74 418.21 L 169.08 417.75 L 169.89 417.28 L 171.34 416.81 L 174.36 416.34 L 174.47 415.88 L 175.62 415.41 L 175.72 414.94 L 176.77 414.47 L 179.84 414 L 179.94 413.54 L 180.77 413.07 L 185.58 412.6 L 185.82 412.13 L 187.07 411.67 L 189.23 411.2 L 189.96 410.73 L 190.17 410.26 L 190.25 409.8 L 190.36 409.33 L 190.49 408.86 L 190.69 408.39 L 190.81 407.93 L 191.19 407.46 L 193.44 406.99 L 194.85 406.52 L 196.11 406.06 L 197.07 405.59 L 198 405.12 L 198.06 404.65 L 199.39 404.19 L 199.84 403.72 L 199.85 403.25 L 200.08 402.78 L 200.81 402.32 L 200.92 401.85 L 201.39 401.38 L 201.69 400.91 L 201.81 400.45 L 201.99 399.98 L 202.2 399.51 L 202.48 399.05 L 202.54 398.58 L 203.23 398.11 L 203.27 397.64 L 203.39 397.18 L 203.41 396.71 L 203.55 396.24 L 204.42 395.77 L 205.78 395.31 L 206.03 394.84 L 207 394.37 L 208.31 393.9 L 208.99 393.44 L 209.11 392.97 L 209.62 392.5 L 211.25 392.03 L 211.51 391.56 L 211.79 391.1 L 212.75 390.63 L 213.79 390.16 L 213.92 389.69 L 215.12 389.23 L 215.14 388.76 L 216.83 388.29 L 218.18 387.82 L 221.98 387.36 L 222.18 386.89 L 222.83 386.42 L 225.36 385.95 L 226.59 385.49 L 226.74 385.02 L 227.1 384.55 L 227.61 384.08 L 227.62 383.62 L 227.74 383.15 L 227.88 382.68 L 228.24 382.21 L 229.19 381.75 L 229.36 381.28 L 229.5 380.81 L 229.83 380.35 L 230.42 379.88 L 231.49 379.41 L 231.97 378.94 L 232.5 378.48 L 232.95 378.01 L 233.63 377.54 L 234.03 377.07 L 234.76 376.61 L 235.26 376.14 L 236.79 375.67 L 237.17 375.2 L 237.45 374.74 L 238.34 374.27 L 239.05 373.8 L 239.17 373.33 L 240.67 372.87 L 240.89 372.4 L 241.74 371.93 L 242.48 371.46 L 242.54 371 L 243.74 370.53 L 243.8 370.06 L 248.42 369.59 L 248.57 369.13 L 249.27 368.66 L 249.28 368.19 L 249.55 367.72 L 250.12 367.25 L 250.14 366.79 L 250.76 366.32 L 250.76 365.85 L 253.61 365.38 L 255.26 364.92 L 256.02 364.45 L 256.38 363.98 L 258.66 363.51 L 260.13 363.05 L 261.37 362.58 L 263.87 362.11 L 264.92 361.64 L 264.95 361.18 L 265.18 360.71 L 265.99 360.24 L 266.02 359.77 L 266.05 359.31 L 269.71 358.84 L 270.08 358.37 L 271.06 357.9 L 271.22 357.44 L 271.76 356.97 L 274.13 356.5 L 281.93 356.03 L 281.93 355.57 L 281.93 355.1 L 281.94 354.63 L 281.94 354.17 L 286.03 353.7 L 287.21 353.23 L 287.84 352.76 L 291.57 352.3 L 291.93 351.83 L 292.22 351.36 L 293.78 350.89 L 295.19 350.43 L 297.07 349.96 L 298.22 349.49 L 299.36 349.02 L 304.2 348.56 L 306.98 348.09 L 307.25 347.62 L 307.59 347.15 L 311.02 346.69 L 316.86 346.22 L 319.19 345.75 L 321.68 345.28 L 322.93 344.81 L 323 344.35 L 323.68 343.88 L 323.81 343.41 L 330.48 342.94 L 332.83 342.48 L 334.32 342.01 L 334.41 341.54 L 336.17 341.07 L 336.35 340.61 L 338.2 340.14 L 344.33 339.67 L 346.74 339.2 L 348.17 338.74 L 350.16 338.27 L 361.45 337.8 L 361.71 337.33 L 371.26 336.87 L 371.44 336.4 L 375.06 335.93 L 376.41 335.47 L 377.21 335 L 378.55 334.53 L 379.86 334.06 L 382.06 333.6 L 384.47 333.13 L 384.56 332.66 L 389.31 332.19 L 389.59 331.73 L 390.18 331.26 L 391.95 330.79 L 392.41 330.32 L 397.61 329.86 L 398.32 329.39 L 398.42 328.92 L 403.09 328.45 L 403.22 327.99 L 404.79 327.52 L 407.83 327.05 L 407.95 326.58 L 411.95 326.12 L 412.31 325.65 L 412.88 325.18 L 419.1 324.71 L 419.2 324.25 L 419.59 323.78 L 422.72 323.31 L 423.02 322.84 L 432.39 322.38 L 434.3 321.91 L 434.97 321.44 L 434.98 320.97 L 436.69 320.5 L 437.71 320.04 L 440.04 319.57 L 440.16 319.1 L 440.42 318.63 L 441.1 318.17 L 443.62 317.7 L 448.04 317.23 L 450.63 316.76 L 454.4 316.3 L 454.77 315.83 L 454.83 315.36 L 454.83 314.89 L 454.85 314.43 L 466.31 313.96 L 467.42 313.49 L 468.32 313.02 L 470.38 312.56 L 471.84 312.09 L 476.99 311.62 L 478.64 311.15 L 490.17 310.69 L 496.82 310.22 L 496.96 309.75 L 497.37 309.28 L 497.43 308.82 L 498.18 308.35 L 498.4 307.88 L 503 307.42 L 503.97 306.95 L 507.45 306.48 L 513.27 306.01 L 514.32 305.55 L 517.16 305.08 L 519.89 304.61 L 521.03 304.14 L 526.45 303.68 L 528.78 303.21 L 530.08 302.74 L 531.89 302.27 L 532.16 301.81 L 538.74 301.34 L 541.23 300.87 L 543.37 300.4 L 548.18 299.94 L 550.18 299.47 L 555.15 299 L 566.01 298.53 L 569.24 298.07 L 570.31 297.6 L 570.37 297.13 L 570.7 296.66 L 571.58 296.2 L 573.32 295.73 L 573.36 295.26 L 576.73 294.79 L 577.38 294.33 L 603.02 293.86 L 604.38 293.39 L 607.43 292.92 L 607.49 292.46 L 613.04 291.99 L 614.82 291.52 L 616.23 291.05 L 616.47 290.59 L 620.56 290.12 L 628.05 289.65 L 630.45 289.18 L 634.59 288.72 L 634.59 288.25 L 634.59 287.78 L 634.6 287.31 L 634.6 286.85 L 634.6 286.38 L 634.6 285.91 L 634.6 285.44 L 634.6 284.98 L 634.6 284.51 L 634.6 284.04 L 634.6 283.57 L 634.6 283.11 L 634.6 282.64 L 634.6 282.17 L 634.6 281.7 L 634.6 281.24 L 634.6 280.77 L 634.6 280.3 L 634.6 279.83 L 634.6 279.37 L 634.6 278.9 L 634.6 278.43 L 634.6 277.96 L 634.6 277.5 L 634.6 277.03 L 634.6 276.56 L 634.6 276.09 L 634.6 275.63 L 634.6 275.16 L 634.6 274.69 L 634.6 274.22 L 634.6 273.75 L 634.6 273.29 L 634.6 272.82 L 634.6 272.35 L 634.6 271.88 L 634.61 271.42 L 634.94 270.95 L 638.43 270.48 L 639.16 270.01 L 649.89 269.55 L 651.2 269.08 L 655.47 268.61 L 658.7 268.14 L 660.18 267.68 L 661.7 267.21 L 664.37 266.74 L 665.68 266.27 L 668.44 265.81 L 670.18 265.34 L 672.78 264.87 L 676.81 264.4 L 681.38 263.94 L 684.9 263.47 L 685.02 263 L 686.05 262.53 L 687.9 262.07 L 691.11 261.6 L 691.53 261.13 L 691.71 260.66 L 693.38 260.2 L 694.9 259.73 L 696.2 259.26 L 697.32 258.79 L 702.95 258.33 L 705.79 257.86 L 712.84 257.39 L 713.51 256.92 L 713.64 256.46 L 717.81 255.99 L 724.39 255.52 L 735.48 255.05 L 736 254.59 L 739.97 254.12 L 740.08 253.65 L 750.59 253.18 L 760.84 252.72 L 761.02 252.25 L 770.39 251.78 L 771.91 251.32 L 781 250.85 L 783.29 250.38 L 786.26 249.91 L 788.38 249.45 L 792.02 248.98 L 795.48 248.51 L 798.29 248.04 L 804.49 247.58 L 810.75 247.11 L 817.39 246.64 L 822.17 246.17 L 827.85 245.71 L 828.28 245.24 L 828.45 244.77 L 829.15 244.3 L 830.41 243.84 L 831.54 243.37 L 834.83 242.9 L 834.99 242.43 L 839.4 241.97 L 839.78 241.5 L 842.45 241.03 L 843.01 240.56 L 845.71 240.09 L 849.54 239.63 L 849.67 239.16 L 849.68 238.69 L 850.43 238.22 L 851.22 237.76 L 853.49 237.29 L 853.65 236.82 L 856.41 236.36 L 856.63 235.89 L 858.28 235.42 L 864.12 234.95 L 864.15 234.49 L 864.69 234.02 L 865.89 233.55 L 867.7 233.08 L 869.4 232.62 L 870.2 232.15 L 871.01 231.68 L 874.57 231.21 L 874.69 230.75 L 875.51 230.28 L 875.73 229.81 L 875.83 229.34 L 880.95 228.88 L 885.28 228.41 L 886.39 227.94 L 887.35 227.47 L 887.39 227 L 891.17 226.54 L 891.7 226.07 L 892.35 225.6 L 896.8 225.13 L 901.09 224.67 L 907.23 224.2 L 907.89 223.73 L 908.79 223.26 L 909.11 222.8 L 909.29 222.33 L 910.34 221.86 L 911.54 221.39 L 913.86 220.93 L 914.9 220.46 L 916.88 219.99 L 917.45 219.52 L 918.76 219.06 L 919.32 218.59 L 922.3 218.12 L 925.4 217.65 L 927.31 217.19 L 928.7 216.72 L 929.27 216.25 L 929.78 215.78 L 934.27 215.32 L 935.36 214.85 L 935.63 214.38 L 935.97 213.91 L 937.57 213.45 L 937.7 212.98 L 940.38 212.51 L 953.82 212.04 L 953.88 211.58 L 954.78 211.11 L 956.11 210.64 L 963.55 210.18 L 965.35 209.71 L 966.12 209.24 L 966.64 208.77 L 966.97 208.31 L 968.7 207.84 L 969.07 207.37 L 969.34 206.9 L 969.42 206.44 L 969.94 205.97 L 970.32 205.5 L 971.89 205.03 L 974.15 204.56 L 975.81 204.1 L 976.31 203.63 L 976.65 203.16 L 978.33 202.69 L 978.33 202.23 L 979.64 201.76 L 987.75 201.29 L 991.83 200.82 L 992.16 200.36 L 992.2 199.89 L 992.86 199.42 L 1003.02 198.96 L 1005.06 198.49 L 1007.36 198.02 L 1010.3 197.55 L 1010.69 197.09 L 1011.1 196.62 L 1012.5 196.15 L 1012.73 195.68 L 1013.25 195.22 L 1016.89 194.75 L 1017.94 194.28 L 1018.89 193.81 L 1020.11 193.35 L 1020.23 192.88 L 1020.82 192.41 L 1022.87 191.94 L 1023.15 191.48 L 1023.24 191.01 L 1023.28 190.54 L 1023.37 190.07 L 1023.78 189.61 L 1027.61 189.14 L 1028.14 188.67 L 1028.33 188.2 L 1028.91 187.74 L 1030.44 187.27 L 1031.93 186.8 L 1032.16 186.33 L 1032.84 185.87 L 1033.66 185.4 L 1034.06 184.93 L 1034.27 184.46 L 1035.11 184 L 1035.49 183.53 L 1037.57 183.06 L 1037.93 182.59 L 1037.93 182.13 L 1039.04 181.66 L 1040.31 181.19 L 1040.46 180.72 L 1042.86 180.25 L 1045.04 179.79 L 1045.14 179.32 L 1045.89 178.85 L 1047.05 178.38 L 1048.52 177.92 L 1050.02 177.45 L 1050.27 176.98 L 1053.63 176.51 L 1055.1 176.05 L 1055.96 175.58 L 1056.11 175.11 L 1056.4 174.64 L 1056.54 174.18 L 1058.57 173.71 L 1058.59 173.24 L 1059.91 172.77 L 1060.59 172.31 L 1063.29 171.84 L 1064.35 171.37 L 1064.75 170.9 L 1064.97 170.44 L 1069.64 169.97 L 1070.45 169.5 L 1070.76 169.03 L 1072.49 168.57 L 1076.21 168.1 L 1078.29 167.63 L 1078.34 167.16 L 1078.65 166.7 L 1078.78 166.23 L 1079.07 165.76 L 1079.93 165.29 L 1080.52 164.83 L 1081.55 164.36 L 1082.43 163.89 L 1084.66 163.43 L 1087.93 162.96 L 1088.22 162.49 L 1089.74 162.02 L 1090.09 161.56 L 1090.32 161.09 L 1091.1 160.62 L 1091.82 160.15 L 1092.29 159.69 L 1093.42 159.22 L 1093.55 158.75 L 1095.66 158.28 L 1097.06 157.81 L 1100.63 157.35 L 1101.01 156.88 L 1112.1 156.41 L 1112.15 155.94 L 1112.15 486 L 115.85 486 Z" fill="url(#star-history-fill-dark)" />
|
|
22
|
-
<path d="M 115.85 485.53 L 116.29 485.06 L 116.62 484.6 L 116.86 484.13 L 116.89 483.66 L 117.56 483.19 L 117.89 482.73 L 118.08 482.26 L 118.09 481.79 L 118.9 481.32 L 121.46 480.86 L 121.48 480.39 L 121.49 479.92 L 121.75 479.45 L 121.84 478.99 L 121.9 478.52 L 121.92 478.05 L 122.03 477.58 L 122.13 477.12 L 122.14 476.65 L 122.2 476.18 L 122.28 475.71 L 122.37 475.25 L 122.61 474.78 L 122.84 474.31 L 122.95 473.85 L 123.11 473.38 L 123.25 472.91 L 123.29 472.44 L 123.36 471.98 L 123.53 471.51 L 123.54 471.04 L 123.71 470.57 L 123.77 470.11 L 123.87 469.64 L 123.96 469.17 L 124.04 468.7 L 124.09 468.24 L 124.1 467.77 L 124.1 467.3 L 124.11 466.83 L 124.11 466.37 L 124.18 465.9 L 124.18 465.43 L 124.23 464.96 L 124.28 464.5 L 124.51 464.03 L 124.69 463.56 L 124.78 463.09 L 125.47 462.63 L 125.5 462.16 L 126.49 461.69 L 126.55 461.22 L 126.56 460.75 L 126.66 460.29 L 126.72 459.82 L 126.93 459.35 L 127.32 458.88 L 127.53 458.42 L 127.53 457.95 L 127.57 457.48 L 127.83 457.01 L 128 456.55 L 128.24 456.08 L 128.28 455.61 L 128.7 455.14 L 129 454.68 L 129.21 454.21 L 129.45 453.74 L 129.67 453.27 L 129.91 452.81 L 129.97 452.34 L 130.12 451.87 L 130.13 451.4 L 130.29 450.94 L 130.54 450.47 L 131.86 450 L 131.88 449.53 L 132.34 449.07 L 132.46 448.6 L 132.5 448.13 L 132.51 447.67 L 132.56 447.2 L 132.81 446.73 L 132.95 446.26 L 132.98 445.8 L 132.99 445.33 L 133.04 444.86 L 133.18 444.39 L 133.26 443.93 L 133.28 443.46 L 133.4 442.99 L 133.45 442.52 L 133.45 442.06 L 133.64 441.59 L 133.89 441.12 L 133.92 440.65 L 134.13 440.19 L 134.23 439.72 L 134.47 439.25 L 134.84 438.78 L 134.86 438.31 L 134.93 437.85 L 135.08 437.38 L 135.14 436.91 L 135.5 436.44 L 136.81 435.98 L 136.87 435.51 L 137.1 435.04 L 137.41 434.57 L 137.6 434.11 L 137.83 433.64 L 139.54 433.17 L 140.15 432.7 L 140.38 432.24 L 140.96 431.77 L 142.88 431.3 L 142.9 430.83 L 143.15 430.37 L 143.17 429.9 L 143.44 429.43 L 143.72 428.97 L 143.96 428.5 L 144.01 428.03 L 144.22 427.56 L 144.44 427.1 L 144.73 426.63 L 144.86 426.16 L 145.24 425.69 L 149.6 425.23 L 150.92 424.76 L 151.07 424.29 L 151.16 423.82 L 153.18 423.36 L 153.21 422.89 L 153.93 422.42 L 157.75 421.95 L 159.84 421.49 L 160.2 421.02 L 161 420.55 L 161.46 420.08 L 164.37 419.62 L 166.26 419.15 L 166.5 418.68 L 168.74 418.21 L 169.08 417.75 L 169.89 417.28 L 171.34 416.81 L 174.36 416.34 L 174.47 415.88 L 175.62 415.41 L 175.72 414.94 L 176.77 414.47 L 179.84 414 L 179.94 413.54 L 180.77 413.07 L 185.58 412.6 L 185.82 412.13 L 187.07 411.67 L 189.23 411.2 L 189.96 410.73 L 190.17 410.26 L 190.25 409.8 L 190.36 409.33 L 190.49 408.86 L 190.69 408.39 L 190.81 407.93 L 191.19 407.46 L 193.44 406.99 L 194.85 406.52 L 196.11 406.06 L 197.07 405.59 L 198 405.12 L 198.06 404.65 L 199.39 404.19 L 199.84 403.72 L 199.85 403.25 L 200.08 402.78 L 200.81 402.32 L 200.92 401.85 L 201.39 401.38 L 201.69 400.91 L 201.81 400.45 L 201.99 399.98 L 202.2 399.51 L 202.48 399.05 L 202.54 398.58 L 203.23 398.11 L 203.27 397.64 L 203.39 397.18 L 203.41 396.71 L 203.55 396.24 L 204.42 395.77 L 205.78 395.31 L 206.03 394.84 L 207 394.37 L 208.31 393.9 L 208.99 393.44 L 209.11 392.97 L 209.62 392.5 L 211.25 392.03 L 211.51 391.56 L 211.79 391.1 L 212.75 390.63 L 213.79 390.16 L 213.92 389.69 L 215.12 389.23 L 215.14 388.76 L 216.83 388.29 L 218.18 387.82 L 221.98 387.36 L 222.18 386.89 L 222.83 386.42 L 225.36 385.95 L 226.59 385.49 L 226.74 385.02 L 227.1 384.55 L 227.61 384.08 L 227.62 383.62 L 227.74 383.15 L 227.88 382.68 L 228.24 382.21 L 229.19 381.75 L 229.36 381.28 L 229.5 380.81 L 229.83 380.35 L 230.42 379.88 L 231.49 379.41 L 231.97 378.94 L 232.5 378.48 L 232.95 378.01 L 233.63 377.54 L 234.03 377.07 L 234.76 376.61 L 235.26 376.14 L 236.79 375.67 L 237.17 375.2 L 237.45 374.74 L 238.34 374.27 L 239.05 373.8 L 239.17 373.33 L 240.67 372.87 L 240.89 372.4 L 241.74 371.93 L 242.48 371.46 L 242.54 371 L 243.74 370.53 L 243.8 370.06 L 248.42 369.59 L 248.57 369.13 L 249.27 368.66 L 249.28 368.19 L 249.55 367.72 L 250.12 367.25 L 250.14 366.79 L 250.76 366.32 L 250.76 365.85 L 253.61 365.38 L 255.26 364.92 L 256.02 364.45 L 256.38 363.98 L 258.66 363.51 L 260.13 363.05 L 261.37 362.58 L 263.87 362.11 L 264.92 361.64 L 264.95 361.18 L 265.18 360.71 L 265.99 360.24 L 266.02 359.77 L 266.05 359.31 L 269.71 358.84 L 270.08 358.37 L 271.06 357.9 L 271.22 357.44 L 271.76 356.97 L 274.13 356.5 L 281.93 356.03 L 281.93 355.57 L 281.93 355.1 L 281.94 354.63 L 281.94 354.17 L 286.03 353.7 L 287.21 353.23 L 287.84 352.76 L 291.57 352.3 L 291.93 351.83 L 292.22 351.36 L 293.78 350.89 L 295.19 350.43 L 297.07 349.96 L 298.22 349.49 L 299.36 349.02 L 304.2 348.56 L 306.98 348.09 L 307.25 347.62 L 307.59 347.15 L 311.02 346.69 L 316.86 346.22 L 319.19 345.75 L 321.68 345.28 L 322.93 344.81 L 323 344.35 L 323.68 343.88 L 323.81 343.41 L 330.48 342.94 L 332.83 342.48 L 334.32 342.01 L 334.41 341.54 L 336.17 341.07 L 336.35 340.61 L 338.2 340.14 L 344.33 339.67 L 346.74 339.2 L 348.17 338.74 L 350.16 338.27 L 361.45 337.8 L 361.71 337.33 L 371.26 336.87 L 371.44 336.4 L 375.06 335.93 L 376.41 335.47 L 377.21 335 L 378.55 334.53 L 379.86 334.06 L 382.06 333.6 L 384.47 333.13 L 384.56 332.66 L 389.31 332.19 L 389.59 331.73 L 390.18 331.26 L 391.95 330.79 L 392.41 330.32 L 397.61 329.86 L 398.32 329.39 L 398.42 328.92 L 403.09 328.45 L 403.22 327.99 L 404.79 327.52 L 407.83 327.05 L 407.95 326.58 L 411.95 326.12 L 412.31 325.65 L 412.88 325.18 L 419.1 324.71 L 419.2 324.25 L 419.59 323.78 L 422.72 323.31 L 423.02 322.84 L 432.39 322.38 L 434.3 321.91 L 434.97 321.44 L 434.98 320.97 L 436.69 320.5 L 437.71 320.04 L 440.04 319.57 L 440.16 319.1 L 440.42 318.63 L 441.1 318.17 L 443.62 317.7 L 448.04 317.23 L 450.63 316.76 L 454.4 316.3 L 454.77 315.83 L 454.83 315.36 L 454.83 314.89 L 454.85 314.43 L 466.31 313.96 L 467.42 313.49 L 468.32 313.02 L 470.38 312.56 L 471.84 312.09 L 476.99 311.62 L 478.64 311.15 L 490.17 310.69 L 496.82 310.22 L 496.96 309.75 L 497.37 309.28 L 497.43 308.82 L 498.18 308.35 L 498.4 307.88 L 503 307.42 L 503.97 306.95 L 507.45 306.48 L 513.27 306.01 L 514.32 305.55 L 517.16 305.08 L 519.89 304.61 L 521.03 304.14 L 526.45 303.68 L 528.78 303.21 L 530.08 302.74 L 531.89 302.27 L 532.16 301.81 L 538.74 301.34 L 541.23 300.87 L 543.37 300.4 L 548.18 299.94 L 550.18 299.47 L 555.15 299 L 566.01 298.53 L 569.24 298.07 L 570.31 297.6 L 570.37 297.13 L 570.7 296.66 L 571.58 296.2 L 573.32 295.73 L 573.36 295.26 L 576.73 294.79 L 577.38 294.33 L 603.02 293.86 L 604.38 293.39 L 607.43 292.92 L 607.49 292.46 L 613.04 291.99 L 614.82 291.52 L 616.23 291.05 L 616.47 290.59 L 620.56 290.12 L 628.05 289.65 L 630.45 289.18 L 634.59 288.72 L 634.59 288.25 L 634.59 287.78 L 634.6 287.31 L 634.6 286.85 L 634.6 286.38 L 634.6 285.91 L 634.6 285.44 L 634.6 284.98 L 634.6 284.51 L 634.6 284.04 L 634.6 283.57 L 634.6 283.11 L 634.6 282.64 L 634.6 282.17 L 634.6 281.7 L 634.6 281.24 L 634.6 280.77 L 634.6 280.3 L 634.6 279.83 L 634.6 279.37 L 634.6 278.9 L 634.6 278.43 L 634.6 277.96 L 634.6 277.5 L 634.6 277.03 L 634.6 276.56 L 634.6 276.09 L 634.6 275.63 L 634.6 275.16 L 634.6 274.69 L 634.6 274.22 L 634.6 273.75 L 634.6 273.29 L 634.6 272.82 L 634.6 272.35 L 634.6 271.88 L 634.61 271.42 L 634.94 270.95 L 638.43 270.48 L 639.16 270.01 L 649.89 269.55 L 651.2 269.08 L 655.47 268.61 L 658.7 268.14 L 660.18 267.68 L 661.7 267.21 L 664.37 266.74 L 665.68 266.27 L 668.44 265.81 L 670.18 265.34 L 672.78 264.87 L 676.81 264.4 L 681.38 263.94 L 684.9 263.47 L 685.02 263 L 686.05 262.53 L 687.9 262.07 L 691.11 261.6 L 691.53 261.13 L 691.71 260.66 L 693.38 260.2 L 694.9 259.73 L 696.2 259.26 L 697.32 258.79 L 702.95 258.33 L 705.79 257.86 L 712.84 257.39 L 713.51 256.92 L 713.64 256.46 L 717.81 255.99 L 724.39 255.52 L 735.48 255.05 L 736 254.59 L 739.97 254.12 L 740.08 253.65 L 750.59 253.18 L 760.84 252.72 L 761.02 252.25 L 770.39 251.78 L 771.91 251.32 L 781 250.85 L 783.29 250.38 L 786.26 249.91 L 788.38 249.45 L 792.02 248.98 L 795.48 248.51 L 798.29 248.04 L 804.49 247.58 L 810.75 247.11 L 817.39 246.64 L 822.17 246.17 L 827.85 245.71 L 828.28 245.24 L 828.45 244.77 L 829.15 244.3 L 830.41 243.84 L 831.54 243.37 L 834.83 242.9 L 834.99 242.43 L 839.4 241.97 L 839.78 241.5 L 842.45 241.03 L 843.01 240.56 L 845.71 240.09 L 849.54 239.63 L 849.67 239.16 L 849.68 238.69 L 850.43 238.22 L 851.22 237.76 L 853.49 237.29 L 853.65 236.82 L 856.41 236.36 L 856.63 235.89 L 858.28 235.42 L 864.12 234.95 L 864.15 234.49 L 864.69 234.02 L 865.89 233.55 L 867.7 233.08 L 869.4 232.62 L 870.2 232.15 L 871.01 231.68 L 874.57 231.21 L 874.69 230.75 L 875.51 230.28 L 875.73 229.81 L 875.83 229.34 L 880.95 228.88 L 885.28 228.41 L 886.39 227.94 L 887.35 227.47 L 887.39 227 L 891.17 226.54 L 891.7 226.07 L 892.35 225.6 L 896.8 225.13 L 901.09 224.67 L 907.23 224.2 L 907.89 223.73 L 908.79 223.26 L 909.11 222.8 L 909.29 222.33 L 910.34 221.86 L 911.54 221.39 L 913.86 220.93 L 914.9 220.46 L 916.88 219.99 L 917.45 219.52 L 918.76 219.06 L 919.32 218.59 L 922.3 218.12 L 925.4 217.65 L 927.31 217.19 L 928.7 216.72 L 929.27 216.25 L 929.78 215.78 L 934.27 215.32 L 935.36 214.85 L 935.63 214.38 L 935.97 213.91 L 937.57 213.45 L 937.7 212.98 L 940.38 212.51 L 953.82 212.04 L 953.88 211.58 L 954.78 211.11 L 956.11 210.64 L 963.55 210.18 L 965.35 209.71 L 966.12 209.24 L 966.64 208.77 L 966.97 208.31 L 968.7 207.84 L 969.07 207.37 L 969.34 206.9 L 969.42 206.44 L 969.94 205.97 L 970.32 205.5 L 971.89 205.03 L 974.15 204.56 L 975.81 204.1 L 976.31 203.63 L 976.65 203.16 L 978.33 202.69 L 978.33 202.23 L 979.64 201.76 L 987.75 201.29 L 991.83 200.82 L 992.16 200.36 L 992.2 199.89 L 992.86 199.42 L 1003.02 198.96 L 1005.06 198.49 L 1007.36 198.02 L 1010.3 197.55 L 1010.69 197.09 L 1011.1 196.62 L 1012.5 196.15 L 1012.73 195.68 L 1013.25 195.22 L 1016.89 194.75 L 1017.94 194.28 L 1018.89 193.81 L 1020.11 193.35 L 1020.23 192.88 L 1020.82 192.41 L 1022.87 191.94 L 1023.15 191.48 L 1023.24 191.01 L 1023.28 190.54 L 1023.37 190.07 L 1023.78 189.61 L 1027.61 189.14 L 1028.14 188.67 L 1028.33 188.2 L 1028.91 187.74 L 1030.44 187.27 L 1031.93 186.8 L 1032.16 186.33 L 1032.84 185.87 L 1033.66 185.4 L 1034.06 184.93 L 1034.27 184.46 L 1035.11 184 L 1035.49 183.53 L 1037.57 183.06 L 1037.93 182.59 L 1037.93 182.13 L 1039.04 181.66 L 1040.31 181.19 L 1040.46 180.72 L 1042.86 180.25 L 1045.04 179.79 L 1045.14 179.32 L 1045.89 178.85 L 1047.05 178.38 L 1048.52 177.92 L 1050.02 177.45 L 1050.27 176.98 L 1053.63 176.51 L 1055.1 176.05 L 1055.96 175.58 L 1056.11 175.11 L 1056.4 174.64 L 1056.54 174.18 L 1058.57 173.71 L 1058.59 173.24 L 1059.91 172.77 L 1060.59 172.31 L 1063.29 171.84 L 1064.35 171.37 L 1064.75 170.9 L 1064.97 170.44 L 1069.64 169.97 L 1070.45 169.5 L 1070.76 169.03 L 1072.49 168.57 L 1076.21 168.1 L 1078.29 167.63 L 1078.34 167.16 L 1078.65 166.7 L 1078.78 166.23 L 1079.07 165.76 L 1079.93 165.29 L 1080.52 164.83 L 1081.55 164.36 L 1082.43 163.89 L 1084.66 163.43 L 1087.93 162.96 L 1088.22 162.49 L 1089.74 162.02 L 1090.09 161.56 L 1090.32 161.09 L 1091.1 160.62 L 1091.82 160.15 L 1092.29 159.69 L 1093.42 159.22 L 1093.55 158.75 L 1095.66 158.28 L 1097.06 157.81 L 1100.63 157.35 L 1101.01 156.88 L 1112.1 156.41 L 1112.15 155.94" fill="none" stroke="#3dd6ae" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
|
|
23
|
-
<circle cx="1112.15" cy="155.94" r="6" fill="#3dd6ae" stroke="#0d1117" stroke-width="3" />
|
|
24
|
-
<text x="76" y="530" text-anchor="middle" fill="#9ba8b7" font-size="14">Feb 2026</text>
|
|
25
|
-
<text x="345" y="530" text-anchor="middle" fill="#9ba8b7" font-size="14">Apr 2026</text>
|
|
26
|
-
<text x="614" y="530" text-anchor="middle" fill="#9ba8b7" font-size="14">May 2026</text>
|
|
27
|
-
<text x="883" y="530" text-anchor="middle" fill="#9ba8b7" font-size="14">Jul 2026</text>
|
|
28
|
-
<text x="1152" y="530" text-anchor="middle" fill="#9ba8b7" font-size="14">Sep 2026</text>
|
|
29
|
-
</g>
|
|
30
|
-
</svg>
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="560" viewBox="0 0 1200 560" role="img" aria-labelledby="title description">
|
|
3
|
-
<title id="title">AVIDS2/memorix Star History</title>
|
|
4
|
-
<desc id="description">Cumulative GitHub stars for AVIDS2/memorix, generated from GitHub stargazer events.</desc>
|
|
5
|
-
<defs>
|
|
6
|
-
<linearGradient id="star-history-fill-light" x1="0" x2="0" y1="0" y2="1">
|
|
7
|
-
<stop offset="0%" stop-color="#147d64" stop-opacity="0.35" />
|
|
8
|
-
<stop offset="100%" stop-color="#147d64" stop-opacity="0" />
|
|
9
|
-
</linearGradient>
|
|
10
|
-
</defs>
|
|
11
|
-
<rect width="1200" height="560" rx="10" fill="#ffffff" />
|
|
12
|
-
<text x="76" y="48" fill="#182230" font-size="28" font-weight="700" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">Star History</text>
|
|
13
|
-
<text x="76" y="78" fill="#65758b" font-size="16" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">AVIDS2/memorix</text>
|
|
14
|
-
<text x="1152" y="56" text-anchor="end" fill="#0d5f4f" font-size="24" font-weight="700" font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">706 stars</text>
|
|
15
|
-
<g font-family="-apple-system, BlinkMacSystemFont, Segoe UI, sans-serif">
|
|
16
|
-
<line x1="76" y1="486" x2="1152" y2="486" stroke="#d9e1ea" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="490" text-anchor="end" fill="#65758b" font-size="14">0</text>
|
|
17
|
-
<line x1="76" y1="392.5" x2="1152" y2="392.5" stroke="#d9e1ea" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="396.5" text-anchor="end" fill="#65758b" font-size="14">200</text>
|
|
18
|
-
<line x1="76" y1="299" x2="1152" y2="299" stroke="#d9e1ea" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="303" text-anchor="end" fill="#65758b" font-size="14">400</text>
|
|
19
|
-
<line x1="76" y1="205.5" x2="1152" y2="205.5" stroke="#d9e1ea" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="209.5" text-anchor="end" fill="#65758b" font-size="14">600</text>
|
|
20
|
-
<line x1="76" y1="112" x2="1152" y2="112" stroke="#d9e1ea" stroke-width="1" stroke-dasharray="5 6" /><text x="62" y="116" text-anchor="end" fill="#65758b" font-size="14">800</text>
|
|
21
|
-
<path d="M 115.85 485.53 L 116.29 485.06 L 116.62 484.6 L 116.86 484.13 L 116.89 483.66 L 117.56 483.19 L 117.89 482.73 L 118.08 482.26 L 118.09 481.79 L 118.9 481.32 L 121.46 480.86 L 121.48 480.39 L 121.49 479.92 L 121.75 479.45 L 121.84 478.99 L 121.9 478.52 L 121.92 478.05 L 122.03 477.58 L 122.13 477.12 L 122.14 476.65 L 122.2 476.18 L 122.28 475.71 L 122.37 475.25 L 122.61 474.78 L 122.84 474.31 L 122.95 473.85 L 123.11 473.38 L 123.25 472.91 L 123.29 472.44 L 123.36 471.98 L 123.53 471.51 L 123.54 471.04 L 123.71 470.57 L 123.77 470.11 L 123.87 469.64 L 123.96 469.17 L 124.04 468.7 L 124.09 468.24 L 124.1 467.77 L 124.1 467.3 L 124.11 466.83 L 124.11 466.37 L 124.18 465.9 L 124.18 465.43 L 124.23 464.96 L 124.28 464.5 L 124.51 464.03 L 124.69 463.56 L 124.78 463.09 L 125.47 462.63 L 125.5 462.16 L 126.49 461.69 L 126.55 461.22 L 126.56 460.75 L 126.66 460.29 L 126.72 459.82 L 126.93 459.35 L 127.32 458.88 L 127.53 458.42 L 127.53 457.95 L 127.57 457.48 L 127.83 457.01 L 128 456.55 L 128.24 456.08 L 128.28 455.61 L 128.7 455.14 L 129 454.68 L 129.21 454.21 L 129.45 453.74 L 129.67 453.27 L 129.91 452.81 L 129.97 452.34 L 130.12 451.87 L 130.13 451.4 L 130.29 450.94 L 130.54 450.47 L 131.86 450 L 131.88 449.53 L 132.34 449.07 L 132.46 448.6 L 132.5 448.13 L 132.51 447.67 L 132.56 447.2 L 132.81 446.73 L 132.95 446.26 L 132.98 445.8 L 132.99 445.33 L 133.04 444.86 L 133.18 444.39 L 133.26 443.93 L 133.28 443.46 L 133.4 442.99 L 133.45 442.52 L 133.45 442.06 L 133.64 441.59 L 133.89 441.12 L 133.92 440.65 L 134.13 440.19 L 134.23 439.72 L 134.47 439.25 L 134.84 438.78 L 134.86 438.31 L 134.93 437.85 L 135.08 437.38 L 135.14 436.91 L 135.5 436.44 L 136.81 435.98 L 136.87 435.51 L 137.1 435.04 L 137.41 434.57 L 137.6 434.11 L 137.83 433.64 L 139.54 433.17 L 140.15 432.7 L 140.38 432.24 L 140.96 431.77 L 142.88 431.3 L 142.9 430.83 L 143.15 430.37 L 143.17 429.9 L 143.44 429.43 L 143.72 428.97 L 143.96 428.5 L 144.01 428.03 L 144.22 427.56 L 144.44 427.1 L 144.73 426.63 L 144.86 426.16 L 145.24 425.69 L 149.6 425.23 L 150.92 424.76 L 151.07 424.29 L 151.16 423.82 L 153.18 423.36 L 153.21 422.89 L 153.93 422.42 L 157.75 421.95 L 159.84 421.49 L 160.2 421.02 L 161 420.55 L 161.46 420.08 L 164.37 419.62 L 166.26 419.15 L 166.5 418.68 L 168.74 418.21 L 169.08 417.75 L 169.89 417.28 L 171.34 416.81 L 174.36 416.34 L 174.47 415.88 L 175.62 415.41 L 175.72 414.94 L 176.77 414.47 L 179.84 414 L 179.94 413.54 L 180.77 413.07 L 185.58 412.6 L 185.82 412.13 L 187.07 411.67 L 189.23 411.2 L 189.96 410.73 L 190.17 410.26 L 190.25 409.8 L 190.36 409.33 L 190.49 408.86 L 190.69 408.39 L 190.81 407.93 L 191.19 407.46 L 193.44 406.99 L 194.85 406.52 L 196.11 406.06 L 197.07 405.59 L 198 405.12 L 198.06 404.65 L 199.39 404.19 L 199.84 403.72 L 199.85 403.25 L 200.08 402.78 L 200.81 402.32 L 200.92 401.85 L 201.39 401.38 L 201.69 400.91 L 201.81 400.45 L 201.99 399.98 L 202.2 399.51 L 202.48 399.05 L 202.54 398.58 L 203.23 398.11 L 203.27 397.64 L 203.39 397.18 L 203.41 396.71 L 203.55 396.24 L 204.42 395.77 L 205.78 395.31 L 206.03 394.84 L 207 394.37 L 208.31 393.9 L 208.99 393.44 L 209.11 392.97 L 209.62 392.5 L 211.25 392.03 L 211.51 391.56 L 211.79 391.1 L 212.75 390.63 L 213.79 390.16 L 213.92 389.69 L 215.12 389.23 L 215.14 388.76 L 216.83 388.29 L 218.18 387.82 L 221.98 387.36 L 222.18 386.89 L 222.83 386.42 L 225.36 385.95 L 226.59 385.49 L 226.74 385.02 L 227.1 384.55 L 227.61 384.08 L 227.62 383.62 L 227.74 383.15 L 227.88 382.68 L 228.24 382.21 L 229.19 381.75 L 229.36 381.28 L 229.5 380.81 L 229.83 380.35 L 230.42 379.88 L 231.49 379.41 L 231.97 378.94 L 232.5 378.48 L 232.95 378.01 L 233.63 377.54 L 234.03 377.07 L 234.76 376.61 L 235.26 376.14 L 236.79 375.67 L 237.17 375.2 L 237.45 374.74 L 238.34 374.27 L 239.05 373.8 L 239.17 373.33 L 240.67 372.87 L 240.89 372.4 L 241.74 371.93 L 242.48 371.46 L 242.54 371 L 243.74 370.53 L 243.8 370.06 L 248.42 369.59 L 248.57 369.13 L 249.27 368.66 L 249.28 368.19 L 249.55 367.72 L 250.12 367.25 L 250.14 366.79 L 250.76 366.32 L 250.76 365.85 L 253.61 365.38 L 255.26 364.92 L 256.02 364.45 L 256.38 363.98 L 258.66 363.51 L 260.13 363.05 L 261.37 362.58 L 263.87 362.11 L 264.92 361.64 L 264.95 361.18 L 265.18 360.71 L 265.99 360.24 L 266.02 359.77 L 266.05 359.31 L 269.71 358.84 L 270.08 358.37 L 271.06 357.9 L 271.22 357.44 L 271.76 356.97 L 274.13 356.5 L 281.93 356.03 L 281.93 355.57 L 281.93 355.1 L 281.94 354.63 L 281.94 354.17 L 286.03 353.7 L 287.21 353.23 L 287.84 352.76 L 291.57 352.3 L 291.93 351.83 L 292.22 351.36 L 293.78 350.89 L 295.19 350.43 L 297.07 349.96 L 298.22 349.49 L 299.36 349.02 L 304.2 348.56 L 306.98 348.09 L 307.25 347.62 L 307.59 347.15 L 311.02 346.69 L 316.86 346.22 L 319.19 345.75 L 321.68 345.28 L 322.93 344.81 L 323 344.35 L 323.68 343.88 L 323.81 343.41 L 330.48 342.94 L 332.83 342.48 L 334.32 342.01 L 334.41 341.54 L 336.17 341.07 L 336.35 340.61 L 338.2 340.14 L 344.33 339.67 L 346.74 339.2 L 348.17 338.74 L 350.16 338.27 L 361.45 337.8 L 361.71 337.33 L 371.26 336.87 L 371.44 336.4 L 375.06 335.93 L 376.41 335.47 L 377.21 335 L 378.55 334.53 L 379.86 334.06 L 382.06 333.6 L 384.47 333.13 L 384.56 332.66 L 389.31 332.19 L 389.59 331.73 L 390.18 331.26 L 391.95 330.79 L 392.41 330.32 L 397.61 329.86 L 398.32 329.39 L 398.42 328.92 L 403.09 328.45 L 403.22 327.99 L 404.79 327.52 L 407.83 327.05 L 407.95 326.58 L 411.95 326.12 L 412.31 325.65 L 412.88 325.18 L 419.1 324.71 L 419.2 324.25 L 419.59 323.78 L 422.72 323.31 L 423.02 322.84 L 432.39 322.38 L 434.3 321.91 L 434.97 321.44 L 434.98 320.97 L 436.69 320.5 L 437.71 320.04 L 440.04 319.57 L 440.16 319.1 L 440.42 318.63 L 441.1 318.17 L 443.62 317.7 L 448.04 317.23 L 450.63 316.76 L 454.4 316.3 L 454.77 315.83 L 454.83 315.36 L 454.83 314.89 L 454.85 314.43 L 466.31 313.96 L 467.42 313.49 L 468.32 313.02 L 470.38 312.56 L 471.84 312.09 L 476.99 311.62 L 478.64 311.15 L 490.17 310.69 L 496.82 310.22 L 496.96 309.75 L 497.37 309.28 L 497.43 308.82 L 498.18 308.35 L 498.4 307.88 L 503 307.42 L 503.97 306.95 L 507.45 306.48 L 513.27 306.01 L 514.32 305.55 L 517.16 305.08 L 519.89 304.61 L 521.03 304.14 L 526.45 303.68 L 528.78 303.21 L 530.08 302.74 L 531.89 302.27 L 532.16 301.81 L 538.74 301.34 L 541.23 300.87 L 543.37 300.4 L 548.18 299.94 L 550.18 299.47 L 555.15 299 L 566.01 298.53 L 569.24 298.07 L 570.31 297.6 L 570.37 297.13 L 570.7 296.66 L 571.58 296.2 L 573.32 295.73 L 573.36 295.26 L 576.73 294.79 L 577.38 294.33 L 603.02 293.86 L 604.38 293.39 L 607.43 292.92 L 607.49 292.46 L 613.04 291.99 L 614.82 291.52 L 616.23 291.05 L 616.47 290.59 L 620.56 290.12 L 628.05 289.65 L 630.45 289.18 L 634.59 288.72 L 634.59 288.25 L 634.59 287.78 L 634.6 287.31 L 634.6 286.85 L 634.6 286.38 L 634.6 285.91 L 634.6 285.44 L 634.6 284.98 L 634.6 284.51 L 634.6 284.04 L 634.6 283.57 L 634.6 283.11 L 634.6 282.64 L 634.6 282.17 L 634.6 281.7 L 634.6 281.24 L 634.6 280.77 L 634.6 280.3 L 634.6 279.83 L 634.6 279.37 L 634.6 278.9 L 634.6 278.43 L 634.6 277.96 L 634.6 277.5 L 634.6 277.03 L 634.6 276.56 L 634.6 276.09 L 634.6 275.63 L 634.6 275.16 L 634.6 274.69 L 634.6 274.22 L 634.6 273.75 L 634.6 273.29 L 634.6 272.82 L 634.6 272.35 L 634.6 271.88 L 634.61 271.42 L 634.94 270.95 L 638.43 270.48 L 639.16 270.01 L 649.89 269.55 L 651.2 269.08 L 655.47 268.61 L 658.7 268.14 L 660.18 267.68 L 661.7 267.21 L 664.37 266.74 L 665.68 266.27 L 668.44 265.81 L 670.18 265.34 L 672.78 264.87 L 676.81 264.4 L 681.38 263.94 L 684.9 263.47 L 685.02 263 L 686.05 262.53 L 687.9 262.07 L 691.11 261.6 L 691.53 261.13 L 691.71 260.66 L 693.38 260.2 L 694.9 259.73 L 696.2 259.26 L 697.32 258.79 L 702.95 258.33 L 705.79 257.86 L 712.84 257.39 L 713.51 256.92 L 713.64 256.46 L 717.81 255.99 L 724.39 255.52 L 735.48 255.05 L 736 254.59 L 739.97 254.12 L 740.08 253.65 L 750.59 253.18 L 760.84 252.72 L 761.02 252.25 L 770.39 251.78 L 771.91 251.32 L 781 250.85 L 783.29 250.38 L 786.26 249.91 L 788.38 249.45 L 792.02 248.98 L 795.48 248.51 L 798.29 248.04 L 804.49 247.58 L 810.75 247.11 L 817.39 246.64 L 822.17 246.17 L 827.85 245.71 L 828.28 245.24 L 828.45 244.77 L 829.15 244.3 L 830.41 243.84 L 831.54 243.37 L 834.83 242.9 L 834.99 242.43 L 839.4 241.97 L 839.78 241.5 L 842.45 241.03 L 843.01 240.56 L 845.71 240.09 L 849.54 239.63 L 849.67 239.16 L 849.68 238.69 L 850.43 238.22 L 851.22 237.76 L 853.49 237.29 L 853.65 236.82 L 856.41 236.36 L 856.63 235.89 L 858.28 235.42 L 864.12 234.95 L 864.15 234.49 L 864.69 234.02 L 865.89 233.55 L 867.7 233.08 L 869.4 232.62 L 870.2 232.15 L 871.01 231.68 L 874.57 231.21 L 874.69 230.75 L 875.51 230.28 L 875.73 229.81 L 875.83 229.34 L 880.95 228.88 L 885.28 228.41 L 886.39 227.94 L 887.35 227.47 L 887.39 227 L 891.17 226.54 L 891.7 226.07 L 892.35 225.6 L 896.8 225.13 L 901.09 224.67 L 907.23 224.2 L 907.89 223.73 L 908.79 223.26 L 909.11 222.8 L 909.29 222.33 L 910.34 221.86 L 911.54 221.39 L 913.86 220.93 L 914.9 220.46 L 916.88 219.99 L 917.45 219.52 L 918.76 219.06 L 919.32 218.59 L 922.3 218.12 L 925.4 217.65 L 927.31 217.19 L 928.7 216.72 L 929.27 216.25 L 929.78 215.78 L 934.27 215.32 L 935.36 214.85 L 935.63 214.38 L 935.97 213.91 L 937.57 213.45 L 937.7 212.98 L 940.38 212.51 L 953.82 212.04 L 953.88 211.58 L 954.78 211.11 L 956.11 210.64 L 963.55 210.18 L 965.35 209.71 L 966.12 209.24 L 966.64 208.77 L 966.97 208.31 L 968.7 207.84 L 969.07 207.37 L 969.34 206.9 L 969.42 206.44 L 969.94 205.97 L 970.32 205.5 L 971.89 205.03 L 974.15 204.56 L 975.81 204.1 L 976.31 203.63 L 976.65 203.16 L 978.33 202.69 L 978.33 202.23 L 979.64 201.76 L 987.75 201.29 L 991.83 200.82 L 992.16 200.36 L 992.2 199.89 L 992.86 199.42 L 1003.02 198.96 L 1005.06 198.49 L 1007.36 198.02 L 1010.3 197.55 L 1010.69 197.09 L 1011.1 196.62 L 1012.5 196.15 L 1012.73 195.68 L 1013.25 195.22 L 1016.89 194.75 L 1017.94 194.28 L 1018.89 193.81 L 1020.11 193.35 L 1020.23 192.88 L 1020.82 192.41 L 1022.87 191.94 L 1023.15 191.48 L 1023.24 191.01 L 1023.28 190.54 L 1023.37 190.07 L 1023.78 189.61 L 1027.61 189.14 L 1028.14 188.67 L 1028.33 188.2 L 1028.91 187.74 L 1030.44 187.27 L 1031.93 186.8 L 1032.16 186.33 L 1032.84 185.87 L 1033.66 185.4 L 1034.06 184.93 L 1034.27 184.46 L 1035.11 184 L 1035.49 183.53 L 1037.57 183.06 L 1037.93 182.59 L 1037.93 182.13 L 1039.04 181.66 L 1040.31 181.19 L 1040.46 180.72 L 1042.86 180.25 L 1045.04 179.79 L 1045.14 179.32 L 1045.89 178.85 L 1047.05 178.38 L 1048.52 177.92 L 1050.02 177.45 L 1050.27 176.98 L 1053.63 176.51 L 1055.1 176.05 L 1055.96 175.58 L 1056.11 175.11 L 1056.4 174.64 L 1056.54 174.18 L 1058.57 173.71 L 1058.59 173.24 L 1059.91 172.77 L 1060.59 172.31 L 1063.29 171.84 L 1064.35 171.37 L 1064.75 170.9 L 1064.97 170.44 L 1069.64 169.97 L 1070.45 169.5 L 1070.76 169.03 L 1072.49 168.57 L 1076.21 168.1 L 1078.29 167.63 L 1078.34 167.16 L 1078.65 166.7 L 1078.78 166.23 L 1079.07 165.76 L 1079.93 165.29 L 1080.52 164.83 L 1081.55 164.36 L 1082.43 163.89 L 1084.66 163.43 L 1087.93 162.96 L 1088.22 162.49 L 1089.74 162.02 L 1090.09 161.56 L 1090.32 161.09 L 1091.1 160.62 L 1091.82 160.15 L 1092.29 159.69 L 1093.42 159.22 L 1093.55 158.75 L 1095.66 158.28 L 1097.06 157.81 L 1100.63 157.35 L 1101.01 156.88 L 1112.1 156.41 L 1112.15 155.94 L 1112.15 486 L 115.85 486 Z" fill="url(#star-history-fill-light)" />
|
|
22
|
-
<path d="M 115.85 485.53 L 116.29 485.06 L 116.62 484.6 L 116.86 484.13 L 116.89 483.66 L 117.56 483.19 L 117.89 482.73 L 118.08 482.26 L 118.09 481.79 L 118.9 481.32 L 121.46 480.86 L 121.48 480.39 L 121.49 479.92 L 121.75 479.45 L 121.84 478.99 L 121.9 478.52 L 121.92 478.05 L 122.03 477.58 L 122.13 477.12 L 122.14 476.65 L 122.2 476.18 L 122.28 475.71 L 122.37 475.25 L 122.61 474.78 L 122.84 474.31 L 122.95 473.85 L 123.11 473.38 L 123.25 472.91 L 123.29 472.44 L 123.36 471.98 L 123.53 471.51 L 123.54 471.04 L 123.71 470.57 L 123.77 470.11 L 123.87 469.64 L 123.96 469.17 L 124.04 468.7 L 124.09 468.24 L 124.1 467.77 L 124.1 467.3 L 124.11 466.83 L 124.11 466.37 L 124.18 465.9 L 124.18 465.43 L 124.23 464.96 L 124.28 464.5 L 124.51 464.03 L 124.69 463.56 L 124.78 463.09 L 125.47 462.63 L 125.5 462.16 L 126.49 461.69 L 126.55 461.22 L 126.56 460.75 L 126.66 460.29 L 126.72 459.82 L 126.93 459.35 L 127.32 458.88 L 127.53 458.42 L 127.53 457.95 L 127.57 457.48 L 127.83 457.01 L 128 456.55 L 128.24 456.08 L 128.28 455.61 L 128.7 455.14 L 129 454.68 L 129.21 454.21 L 129.45 453.74 L 129.67 453.27 L 129.91 452.81 L 129.97 452.34 L 130.12 451.87 L 130.13 451.4 L 130.29 450.94 L 130.54 450.47 L 131.86 450 L 131.88 449.53 L 132.34 449.07 L 132.46 448.6 L 132.5 448.13 L 132.51 447.67 L 132.56 447.2 L 132.81 446.73 L 132.95 446.26 L 132.98 445.8 L 132.99 445.33 L 133.04 444.86 L 133.18 444.39 L 133.26 443.93 L 133.28 443.46 L 133.4 442.99 L 133.45 442.52 L 133.45 442.06 L 133.64 441.59 L 133.89 441.12 L 133.92 440.65 L 134.13 440.19 L 134.23 439.72 L 134.47 439.25 L 134.84 438.78 L 134.86 438.31 L 134.93 437.85 L 135.08 437.38 L 135.14 436.91 L 135.5 436.44 L 136.81 435.98 L 136.87 435.51 L 137.1 435.04 L 137.41 434.57 L 137.6 434.11 L 137.83 433.64 L 139.54 433.17 L 140.15 432.7 L 140.38 432.24 L 140.96 431.77 L 142.88 431.3 L 142.9 430.83 L 143.15 430.37 L 143.17 429.9 L 143.44 429.43 L 143.72 428.97 L 143.96 428.5 L 144.01 428.03 L 144.22 427.56 L 144.44 427.1 L 144.73 426.63 L 144.86 426.16 L 145.24 425.69 L 149.6 425.23 L 150.92 424.76 L 151.07 424.29 L 151.16 423.82 L 153.18 423.36 L 153.21 422.89 L 153.93 422.42 L 157.75 421.95 L 159.84 421.49 L 160.2 421.02 L 161 420.55 L 161.46 420.08 L 164.37 419.62 L 166.26 419.15 L 166.5 418.68 L 168.74 418.21 L 169.08 417.75 L 169.89 417.28 L 171.34 416.81 L 174.36 416.34 L 174.47 415.88 L 175.62 415.41 L 175.72 414.94 L 176.77 414.47 L 179.84 414 L 179.94 413.54 L 180.77 413.07 L 185.58 412.6 L 185.82 412.13 L 187.07 411.67 L 189.23 411.2 L 189.96 410.73 L 190.17 410.26 L 190.25 409.8 L 190.36 409.33 L 190.49 408.86 L 190.69 408.39 L 190.81 407.93 L 191.19 407.46 L 193.44 406.99 L 194.85 406.52 L 196.11 406.06 L 197.07 405.59 L 198 405.12 L 198.06 404.65 L 199.39 404.19 L 199.84 403.72 L 199.85 403.25 L 200.08 402.78 L 200.81 402.32 L 200.92 401.85 L 201.39 401.38 L 201.69 400.91 L 201.81 400.45 L 201.99 399.98 L 202.2 399.51 L 202.48 399.05 L 202.54 398.58 L 203.23 398.11 L 203.27 397.64 L 203.39 397.18 L 203.41 396.71 L 203.55 396.24 L 204.42 395.77 L 205.78 395.31 L 206.03 394.84 L 207 394.37 L 208.31 393.9 L 208.99 393.44 L 209.11 392.97 L 209.62 392.5 L 211.25 392.03 L 211.51 391.56 L 211.79 391.1 L 212.75 390.63 L 213.79 390.16 L 213.92 389.69 L 215.12 389.23 L 215.14 388.76 L 216.83 388.29 L 218.18 387.82 L 221.98 387.36 L 222.18 386.89 L 222.83 386.42 L 225.36 385.95 L 226.59 385.49 L 226.74 385.02 L 227.1 384.55 L 227.61 384.08 L 227.62 383.62 L 227.74 383.15 L 227.88 382.68 L 228.24 382.21 L 229.19 381.75 L 229.36 381.28 L 229.5 380.81 L 229.83 380.35 L 230.42 379.88 L 231.49 379.41 L 231.97 378.94 L 232.5 378.48 L 232.95 378.01 L 233.63 377.54 L 234.03 377.07 L 234.76 376.61 L 235.26 376.14 L 236.79 375.67 L 237.17 375.2 L 237.45 374.74 L 238.34 374.27 L 239.05 373.8 L 239.17 373.33 L 240.67 372.87 L 240.89 372.4 L 241.74 371.93 L 242.48 371.46 L 242.54 371 L 243.74 370.53 L 243.8 370.06 L 248.42 369.59 L 248.57 369.13 L 249.27 368.66 L 249.28 368.19 L 249.55 367.72 L 250.12 367.25 L 250.14 366.79 L 250.76 366.32 L 250.76 365.85 L 253.61 365.38 L 255.26 364.92 L 256.02 364.45 L 256.38 363.98 L 258.66 363.51 L 260.13 363.05 L 261.37 362.58 L 263.87 362.11 L 264.92 361.64 L 264.95 361.18 L 265.18 360.71 L 265.99 360.24 L 266.02 359.77 L 266.05 359.31 L 269.71 358.84 L 270.08 358.37 L 271.06 357.9 L 271.22 357.44 L 271.76 356.97 L 274.13 356.5 L 281.93 356.03 L 281.93 355.57 L 281.93 355.1 L 281.94 354.63 L 281.94 354.17 L 286.03 353.7 L 287.21 353.23 L 287.84 352.76 L 291.57 352.3 L 291.93 351.83 L 292.22 351.36 L 293.78 350.89 L 295.19 350.43 L 297.07 349.96 L 298.22 349.49 L 299.36 349.02 L 304.2 348.56 L 306.98 348.09 L 307.25 347.62 L 307.59 347.15 L 311.02 346.69 L 316.86 346.22 L 319.19 345.75 L 321.68 345.28 L 322.93 344.81 L 323 344.35 L 323.68 343.88 L 323.81 343.41 L 330.48 342.94 L 332.83 342.48 L 334.32 342.01 L 334.41 341.54 L 336.17 341.07 L 336.35 340.61 L 338.2 340.14 L 344.33 339.67 L 346.74 339.2 L 348.17 338.74 L 350.16 338.27 L 361.45 337.8 L 361.71 337.33 L 371.26 336.87 L 371.44 336.4 L 375.06 335.93 L 376.41 335.47 L 377.21 335 L 378.55 334.53 L 379.86 334.06 L 382.06 333.6 L 384.47 333.13 L 384.56 332.66 L 389.31 332.19 L 389.59 331.73 L 390.18 331.26 L 391.95 330.79 L 392.41 330.32 L 397.61 329.86 L 398.32 329.39 L 398.42 328.92 L 403.09 328.45 L 403.22 327.99 L 404.79 327.52 L 407.83 327.05 L 407.95 326.58 L 411.95 326.12 L 412.31 325.65 L 412.88 325.18 L 419.1 324.71 L 419.2 324.25 L 419.59 323.78 L 422.72 323.31 L 423.02 322.84 L 432.39 322.38 L 434.3 321.91 L 434.97 321.44 L 434.98 320.97 L 436.69 320.5 L 437.71 320.04 L 440.04 319.57 L 440.16 319.1 L 440.42 318.63 L 441.1 318.17 L 443.62 317.7 L 448.04 317.23 L 450.63 316.76 L 454.4 316.3 L 454.77 315.83 L 454.83 315.36 L 454.83 314.89 L 454.85 314.43 L 466.31 313.96 L 467.42 313.49 L 468.32 313.02 L 470.38 312.56 L 471.84 312.09 L 476.99 311.62 L 478.64 311.15 L 490.17 310.69 L 496.82 310.22 L 496.96 309.75 L 497.37 309.28 L 497.43 308.82 L 498.18 308.35 L 498.4 307.88 L 503 307.42 L 503.97 306.95 L 507.45 306.48 L 513.27 306.01 L 514.32 305.55 L 517.16 305.08 L 519.89 304.61 L 521.03 304.14 L 526.45 303.68 L 528.78 303.21 L 530.08 302.74 L 531.89 302.27 L 532.16 301.81 L 538.74 301.34 L 541.23 300.87 L 543.37 300.4 L 548.18 299.94 L 550.18 299.47 L 555.15 299 L 566.01 298.53 L 569.24 298.07 L 570.31 297.6 L 570.37 297.13 L 570.7 296.66 L 571.58 296.2 L 573.32 295.73 L 573.36 295.26 L 576.73 294.79 L 577.38 294.33 L 603.02 293.86 L 604.38 293.39 L 607.43 292.92 L 607.49 292.46 L 613.04 291.99 L 614.82 291.52 L 616.23 291.05 L 616.47 290.59 L 620.56 290.12 L 628.05 289.65 L 630.45 289.18 L 634.59 288.72 L 634.59 288.25 L 634.59 287.78 L 634.6 287.31 L 634.6 286.85 L 634.6 286.38 L 634.6 285.91 L 634.6 285.44 L 634.6 284.98 L 634.6 284.51 L 634.6 284.04 L 634.6 283.57 L 634.6 283.11 L 634.6 282.64 L 634.6 282.17 L 634.6 281.7 L 634.6 281.24 L 634.6 280.77 L 634.6 280.3 L 634.6 279.83 L 634.6 279.37 L 634.6 278.9 L 634.6 278.43 L 634.6 277.96 L 634.6 277.5 L 634.6 277.03 L 634.6 276.56 L 634.6 276.09 L 634.6 275.63 L 634.6 275.16 L 634.6 274.69 L 634.6 274.22 L 634.6 273.75 L 634.6 273.29 L 634.6 272.82 L 634.6 272.35 L 634.6 271.88 L 634.61 271.42 L 634.94 270.95 L 638.43 270.48 L 639.16 270.01 L 649.89 269.55 L 651.2 269.08 L 655.47 268.61 L 658.7 268.14 L 660.18 267.68 L 661.7 267.21 L 664.37 266.74 L 665.68 266.27 L 668.44 265.81 L 670.18 265.34 L 672.78 264.87 L 676.81 264.4 L 681.38 263.94 L 684.9 263.47 L 685.02 263 L 686.05 262.53 L 687.9 262.07 L 691.11 261.6 L 691.53 261.13 L 691.71 260.66 L 693.38 260.2 L 694.9 259.73 L 696.2 259.26 L 697.32 258.79 L 702.95 258.33 L 705.79 257.86 L 712.84 257.39 L 713.51 256.92 L 713.64 256.46 L 717.81 255.99 L 724.39 255.52 L 735.48 255.05 L 736 254.59 L 739.97 254.12 L 740.08 253.65 L 750.59 253.18 L 760.84 252.72 L 761.02 252.25 L 770.39 251.78 L 771.91 251.32 L 781 250.85 L 783.29 250.38 L 786.26 249.91 L 788.38 249.45 L 792.02 248.98 L 795.48 248.51 L 798.29 248.04 L 804.49 247.58 L 810.75 247.11 L 817.39 246.64 L 822.17 246.17 L 827.85 245.71 L 828.28 245.24 L 828.45 244.77 L 829.15 244.3 L 830.41 243.84 L 831.54 243.37 L 834.83 242.9 L 834.99 242.43 L 839.4 241.97 L 839.78 241.5 L 842.45 241.03 L 843.01 240.56 L 845.71 240.09 L 849.54 239.63 L 849.67 239.16 L 849.68 238.69 L 850.43 238.22 L 851.22 237.76 L 853.49 237.29 L 853.65 236.82 L 856.41 236.36 L 856.63 235.89 L 858.28 235.42 L 864.12 234.95 L 864.15 234.49 L 864.69 234.02 L 865.89 233.55 L 867.7 233.08 L 869.4 232.62 L 870.2 232.15 L 871.01 231.68 L 874.57 231.21 L 874.69 230.75 L 875.51 230.28 L 875.73 229.81 L 875.83 229.34 L 880.95 228.88 L 885.28 228.41 L 886.39 227.94 L 887.35 227.47 L 887.39 227 L 891.17 226.54 L 891.7 226.07 L 892.35 225.6 L 896.8 225.13 L 901.09 224.67 L 907.23 224.2 L 907.89 223.73 L 908.79 223.26 L 909.11 222.8 L 909.29 222.33 L 910.34 221.86 L 911.54 221.39 L 913.86 220.93 L 914.9 220.46 L 916.88 219.99 L 917.45 219.52 L 918.76 219.06 L 919.32 218.59 L 922.3 218.12 L 925.4 217.65 L 927.31 217.19 L 928.7 216.72 L 929.27 216.25 L 929.78 215.78 L 934.27 215.32 L 935.36 214.85 L 935.63 214.38 L 935.97 213.91 L 937.57 213.45 L 937.7 212.98 L 940.38 212.51 L 953.82 212.04 L 953.88 211.58 L 954.78 211.11 L 956.11 210.64 L 963.55 210.18 L 965.35 209.71 L 966.12 209.24 L 966.64 208.77 L 966.97 208.31 L 968.7 207.84 L 969.07 207.37 L 969.34 206.9 L 969.42 206.44 L 969.94 205.97 L 970.32 205.5 L 971.89 205.03 L 974.15 204.56 L 975.81 204.1 L 976.31 203.63 L 976.65 203.16 L 978.33 202.69 L 978.33 202.23 L 979.64 201.76 L 987.75 201.29 L 991.83 200.82 L 992.16 200.36 L 992.2 199.89 L 992.86 199.42 L 1003.02 198.96 L 1005.06 198.49 L 1007.36 198.02 L 1010.3 197.55 L 1010.69 197.09 L 1011.1 196.62 L 1012.5 196.15 L 1012.73 195.68 L 1013.25 195.22 L 1016.89 194.75 L 1017.94 194.28 L 1018.89 193.81 L 1020.11 193.35 L 1020.23 192.88 L 1020.82 192.41 L 1022.87 191.94 L 1023.15 191.48 L 1023.24 191.01 L 1023.28 190.54 L 1023.37 190.07 L 1023.78 189.61 L 1027.61 189.14 L 1028.14 188.67 L 1028.33 188.2 L 1028.91 187.74 L 1030.44 187.27 L 1031.93 186.8 L 1032.16 186.33 L 1032.84 185.87 L 1033.66 185.4 L 1034.06 184.93 L 1034.27 184.46 L 1035.11 184 L 1035.49 183.53 L 1037.57 183.06 L 1037.93 182.59 L 1037.93 182.13 L 1039.04 181.66 L 1040.31 181.19 L 1040.46 180.72 L 1042.86 180.25 L 1045.04 179.79 L 1045.14 179.32 L 1045.89 178.85 L 1047.05 178.38 L 1048.52 177.92 L 1050.02 177.45 L 1050.27 176.98 L 1053.63 176.51 L 1055.1 176.05 L 1055.96 175.58 L 1056.11 175.11 L 1056.4 174.64 L 1056.54 174.18 L 1058.57 173.71 L 1058.59 173.24 L 1059.91 172.77 L 1060.59 172.31 L 1063.29 171.84 L 1064.35 171.37 L 1064.75 170.9 L 1064.97 170.44 L 1069.64 169.97 L 1070.45 169.5 L 1070.76 169.03 L 1072.49 168.57 L 1076.21 168.1 L 1078.29 167.63 L 1078.34 167.16 L 1078.65 166.7 L 1078.78 166.23 L 1079.07 165.76 L 1079.93 165.29 L 1080.52 164.83 L 1081.55 164.36 L 1082.43 163.89 L 1084.66 163.43 L 1087.93 162.96 L 1088.22 162.49 L 1089.74 162.02 L 1090.09 161.56 L 1090.32 161.09 L 1091.1 160.62 L 1091.82 160.15 L 1092.29 159.69 L 1093.42 159.22 L 1093.55 158.75 L 1095.66 158.28 L 1097.06 157.81 L 1100.63 157.35 L 1101.01 156.88 L 1112.1 156.41 L 1112.15 155.94" fill="none" stroke="#147d64" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" />
|
|
23
|
-
<circle cx="1112.15" cy="155.94" r="6" fill="#147d64" stroke="#ffffff" stroke-width="3" />
|
|
24
|
-
<text x="76" y="530" text-anchor="middle" fill="#65758b" font-size="14">Feb 2026</text>
|
|
25
|
-
<text x="345" y="530" text-anchor="middle" fill="#65758b" font-size="14">Apr 2026</text>
|
|
26
|
-
<text x="614" y="530" text-anchor="middle" fill="#65758b" font-size="14">May 2026</text>
|
|
27
|
-
<text x="883" y="530" text-anchor="middle" fill="#65758b" font-size="14">Jul 2026</text>
|
|
28
|
-
<text x="1152" y="530" text-anchor="middle" fill="#65758b" font-size="14">Sep 2026</text>
|
|
29
|
-
</g>
|
|
30
|
-
</svg>
|