@chkit/plugin-backfill 0.1.0-beta.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.
@@ -0,0 +1,438 @@
1
+ import { join } from 'node:path';
2
+ import { BackfillConfigError } from './errors.js';
3
+ import { backfillPaths, collectActiveRunTargets, computeBackfillStateDir, createRunState, ensureRunCompatibility, listPlanIds, nowIso, persistRunAndEvent, readPlan, readRun, summarizeRunStatus, } from './state.js';
4
+ export async function evaluateBackfillCheck(input) {
5
+ const stateDir = computeBackfillStateDir(input.config, input.configPath, input.options);
6
+ const plansDir = join(stateDir, 'plans');
7
+ const runsDir = join(stateDir, 'runs');
8
+ const planIds = await listPlanIds(plansDir);
9
+ if (planIds.length === 0) {
10
+ return {
11
+ plugin: 'backfill',
12
+ evaluated: true,
13
+ ok: true,
14
+ findings: [],
15
+ metadata: {
16
+ requiredCount: 0,
17
+ activeRuns: 0,
18
+ failedRuns: 0,
19
+ },
20
+ };
21
+ }
22
+ let requiredCount = 0;
23
+ let activeRuns = 0;
24
+ let failedRuns = 0;
25
+ for (const planId of planIds) {
26
+ const runPath = join(runsDir, `${planId}.json`);
27
+ const run = await readRun(runPath);
28
+ if (!run) {
29
+ requiredCount += 1;
30
+ continue;
31
+ }
32
+ if (run.status === 'running')
33
+ activeRuns += 1;
34
+ if (run.status === 'failed')
35
+ failedRuns += 1;
36
+ if (run.status !== 'completed')
37
+ requiredCount += 1;
38
+ }
39
+ const findings = [];
40
+ if (requiredCount > 0) {
41
+ findings.push({
42
+ code: 'backfill_required_pending',
43
+ message: `Required backfills pending completion: ${requiredCount}`,
44
+ severity: input.options.policy.failCheckOnRequiredPendingBackfill ? 'error' : 'warn',
45
+ metadata: {
46
+ requiredCount,
47
+ },
48
+ });
49
+ }
50
+ if (failedRuns > 0) {
51
+ findings.push({
52
+ code: 'backfill_chunk_failed_retry_exhausted',
53
+ message: `Backfill runs failed after retry budget: ${failedRuns}`,
54
+ severity: 'error',
55
+ metadata: {
56
+ failedRuns,
57
+ },
58
+ });
59
+ }
60
+ if (!input.options.policy.failCheckOnRequiredPendingBackfill) {
61
+ findings.push({
62
+ code: 'backfill_policy_relaxed',
63
+ message: 'Backfill check policy is relaxed: failCheckOnRequiredPendingBackfill=false.',
64
+ severity: 'warn',
65
+ });
66
+ }
67
+ const ok = findings.every((finding) => finding.severity !== 'error');
68
+ return {
69
+ plugin: 'backfill',
70
+ evaluated: true,
71
+ ok,
72
+ findings,
73
+ metadata: {
74
+ requiredCount,
75
+ activeRuns,
76
+ failedRuns,
77
+ },
78
+ };
79
+ }
80
+ async function executeChunk(input) {
81
+ const failureBudget = input.simulation?.failCount ?? 0;
82
+ while (input.chunk.attempts < input.maxRetries) {
83
+ input.chunk.status = 'running';
84
+ input.chunk.attempts += 1;
85
+ input.chunk.startedAt = nowIso();
86
+ await persistRunAndEvent({
87
+ run: input.run,
88
+ runPath: input.runPath,
89
+ eventPath: input.eventPath,
90
+ event: {
91
+ type: 'chunk_started',
92
+ planId: input.run.planId,
93
+ chunkId: input.chunk.id,
94
+ attempt: input.chunk.attempts,
95
+ },
96
+ });
97
+ const shouldSimulateFailure = input.simulation?.failChunkId === input.chunk.id && input.chunk.attempts <= failureBudget;
98
+ if (!shouldSimulateFailure) {
99
+ input.chunk.status = 'done';
100
+ input.chunk.completedAt = nowIso();
101
+ input.chunk.lastError = undefined;
102
+ await persistRunAndEvent({
103
+ run: input.run,
104
+ runPath: input.runPath,
105
+ eventPath: input.eventPath,
106
+ event: {
107
+ type: 'chunk_done',
108
+ planId: input.run.planId,
109
+ chunkId: input.chunk.id,
110
+ attempt: input.chunk.attempts,
111
+ },
112
+ });
113
+ return { ok: true };
114
+ }
115
+ const errorMessage = `Simulated failure for chunk ${input.chunk.id} attempt ${input.chunk.attempts}`;
116
+ input.chunk.lastError = errorMessage;
117
+ if (input.chunk.attempts >= input.maxRetries) {
118
+ input.chunk.status = 'failed';
119
+ input.run.status = 'failed';
120
+ input.run.lastError = errorMessage;
121
+ await persistRunAndEvent({
122
+ run: input.run,
123
+ runPath: input.runPath,
124
+ eventPath: input.eventPath,
125
+ event: {
126
+ type: 'chunk_failed_retry_exhausted',
127
+ planId: input.run.planId,
128
+ chunkId: input.chunk.id,
129
+ attempt: input.chunk.attempts,
130
+ message: errorMessage,
131
+ },
132
+ });
133
+ return { ok: false, error: errorMessage };
134
+ }
135
+ input.chunk.status = 'pending';
136
+ await persistRunAndEvent({
137
+ run: input.run,
138
+ runPath: input.runPath,
139
+ eventPath: input.eventPath,
140
+ event: {
141
+ type: 'chunk_retry_scheduled',
142
+ planId: input.run.planId,
143
+ chunkId: input.chunk.id,
144
+ attempt: input.chunk.attempts,
145
+ nextAttempt: input.chunk.attempts + 1,
146
+ },
147
+ });
148
+ }
149
+ return {
150
+ ok: false,
151
+ error: `Retry budget exhausted for chunk ${input.chunk.id}`,
152
+ };
153
+ }
154
+ async function executeRunLoop(input) {
155
+ const maxRetries = input.plan.options.maxRetriesPerChunk;
156
+ input.run.status = 'running';
157
+ input.run.replayDone = input.execution.replayDone ?? false;
158
+ input.run.replayFailed = input.execution.replayFailed ?? false;
159
+ await persistRunAndEvent({
160
+ run: input.run,
161
+ runPath: input.paths.runPath,
162
+ eventPath: input.paths.eventPath,
163
+ event: {
164
+ type: 'run_started',
165
+ planId: input.plan.planId,
166
+ replayDone: input.run.replayDone,
167
+ replayFailed: input.run.replayFailed,
168
+ },
169
+ });
170
+ for (const chunk of input.run.chunks) {
171
+ if (chunk.status === 'done' && !input.run.replayDone)
172
+ continue;
173
+ if (chunk.status === 'failed') {
174
+ if (!input.run.replayFailed) {
175
+ input.run.status = 'failed';
176
+ input.run.lastError =
177
+ chunk.lastError ??
178
+ `Chunk ${chunk.id} is failed and resume requires --replay-failed to re-run failed chunks.`;
179
+ await persistRunAndEvent({
180
+ run: input.run,
181
+ runPath: input.paths.runPath,
182
+ eventPath: input.paths.eventPath,
183
+ event: {
184
+ type: 'run_blocked_failed_chunk',
185
+ planId: input.plan.planId,
186
+ chunkId: chunk.id,
187
+ message: input.run.lastError,
188
+ },
189
+ });
190
+ return {
191
+ run: input.run,
192
+ status: summarizeRunStatus(input.run, input.paths.runPath, input.paths.eventPath),
193
+ runPath: input.paths.runPath,
194
+ eventPath: input.paths.eventPath,
195
+ };
196
+ }
197
+ chunk.status = 'pending';
198
+ chunk.attempts = 0;
199
+ chunk.lastError = undefined;
200
+ chunk.startedAt = undefined;
201
+ chunk.completedAt = undefined;
202
+ }
203
+ if (chunk.status === 'running') {
204
+ chunk.status = 'pending';
205
+ }
206
+ const executed = await executeChunk({
207
+ run: input.run,
208
+ chunk,
209
+ maxRetries,
210
+ runPath: input.paths.runPath,
211
+ eventPath: input.paths.eventPath,
212
+ simulation: input.execution.simulation,
213
+ });
214
+ if (!executed.ok) {
215
+ input.run.completedAt = nowIso();
216
+ return {
217
+ run: input.run,
218
+ status: summarizeRunStatus(input.run, input.paths.runPath, input.paths.eventPath),
219
+ runPath: input.paths.runPath,
220
+ eventPath: input.paths.eventPath,
221
+ };
222
+ }
223
+ }
224
+ input.run.status = 'completed';
225
+ input.run.completedAt = nowIso();
226
+ input.run.lastError = undefined;
227
+ await persistRunAndEvent({
228
+ run: input.run,
229
+ runPath: input.paths.runPath,
230
+ eventPath: input.paths.eventPath,
231
+ event: {
232
+ type: 'run_completed',
233
+ planId: input.plan.planId,
234
+ },
235
+ });
236
+ return {
237
+ run: input.run,
238
+ status: summarizeRunStatus(input.run, input.paths.runPath, input.paths.eventPath),
239
+ runPath: input.paths.runPath,
240
+ eventPath: input.paths.eventPath,
241
+ };
242
+ }
243
+ async function assertNoOverlappingActiveRun(input) {
244
+ const activeTargets = await collectActiveRunTargets(input.runsDir);
245
+ for (const [activePlanId, activeTarget] of activeTargets.entries()) {
246
+ if (activePlanId === input.planId)
247
+ continue;
248
+ if (activeTarget !== input.target)
249
+ continue;
250
+ throw new BackfillConfigError(`Overlapping active run detected for target ${input.target} (plan ${activePlanId}). Retry with --force-overlap to override.`);
251
+ }
252
+ }
253
+ export async function executeBackfillRun(input) {
254
+ const execution = input.execution ?? {};
255
+ const { plan, stateDir } = await readPlan({
256
+ planId: input.planId,
257
+ configPath: input.configPath,
258
+ config: input.config,
259
+ options: input.options,
260
+ });
261
+ const paths = backfillPaths(stateDir, plan.planId);
262
+ if (input.options.policy.blockOverlappingRuns && !execution.forceOverlap) {
263
+ await assertNoOverlappingActiveRun({
264
+ runsDir: paths.runsDir,
265
+ planId: plan.planId,
266
+ target: plan.target,
267
+ });
268
+ }
269
+ let run = await readRun(paths.runPath);
270
+ if (!run) {
271
+ run = createRunState({
272
+ plan,
273
+ options: input.options,
274
+ execution,
275
+ });
276
+ }
277
+ else {
278
+ ensureRunCompatibility({
279
+ run,
280
+ plan,
281
+ options: input.options,
282
+ forceCompatibility: execution.forceCompatibility ?? false,
283
+ });
284
+ }
285
+ if (run.status === 'completed' && !execution.replayDone && !execution.replayFailed) {
286
+ throw new BackfillConfigError(`Run already completed for plan ${plan.planId}. Use --replay-done to run completed chunks again.`);
287
+ }
288
+ if (run.status === 'cancelled') {
289
+ throw new BackfillConfigError(`Run is cancelled for plan ${plan.planId}. Create a new plan or inspect with backfill doctor.`);
290
+ }
291
+ return executeRunLoop({
292
+ plan,
293
+ run,
294
+ paths,
295
+ execution,
296
+ });
297
+ }
298
+ export async function resumeBackfillRun(input) {
299
+ const { plan, stateDir } = await readPlan({
300
+ planId: input.planId,
301
+ configPath: input.configPath,
302
+ config: input.config,
303
+ options: input.options,
304
+ });
305
+ const paths = backfillPaths(stateDir, plan.planId);
306
+ const run = await readRun(paths.runPath);
307
+ if (!run) {
308
+ throw new BackfillConfigError(`Run state not found for plan ${plan.planId}. Start with backfill run before resume.`);
309
+ }
310
+ ensureRunCompatibility({
311
+ run,
312
+ plan,
313
+ options: input.options,
314
+ forceCompatibility: input.execution?.forceCompatibility ?? false,
315
+ });
316
+ if (input.options.policy.blockOverlappingRuns && !input.execution?.forceOverlap) {
317
+ await assertNoOverlappingActiveRun({
318
+ runsDir: paths.runsDir,
319
+ planId: plan.planId,
320
+ target: plan.target,
321
+ });
322
+ }
323
+ if (run.status === 'cancelled') {
324
+ throw new BackfillConfigError(`Run is cancelled for plan ${plan.planId}. Create a new plan or inspect with backfill doctor.`);
325
+ }
326
+ return executeRunLoop({
327
+ plan,
328
+ run,
329
+ paths,
330
+ execution: input.execution ?? {},
331
+ });
332
+ }
333
+ export async function getBackfillStatus(input) {
334
+ const { plan, stateDir } = await readPlan({
335
+ planId: input.planId,
336
+ configPath: input.configPath,
337
+ config: input.config,
338
+ options: input.options,
339
+ });
340
+ const paths = backfillPaths(stateDir, plan.planId);
341
+ const run = await readRun(paths.runPath);
342
+ if (!run) {
343
+ return {
344
+ planId: plan.planId,
345
+ target: plan.target,
346
+ status: 'planned',
347
+ totals: {
348
+ total: plan.chunks.length,
349
+ pending: plan.chunks.length,
350
+ running: 0,
351
+ done: 0,
352
+ failed: 0,
353
+ skipped: 0,
354
+ },
355
+ attempts: 0,
356
+ updatedAt: plan.createdAt,
357
+ runPath: paths.runPath,
358
+ eventPath: paths.eventPath,
359
+ };
360
+ }
361
+ return summarizeRunStatus(run, paths.runPath, paths.eventPath);
362
+ }
363
+ export async function cancelBackfillRun(input) {
364
+ const { plan, stateDir } = await readPlan({
365
+ planId: input.planId,
366
+ configPath: input.configPath,
367
+ config: input.config,
368
+ options: input.options,
369
+ });
370
+ const paths = backfillPaths(stateDir, plan.planId);
371
+ const run = await readRun(paths.runPath);
372
+ if (!run) {
373
+ throw new BackfillConfigError(`Run state not found for plan ${plan.planId}. Start with backfill run before cancel.`);
374
+ }
375
+ if (run.status === 'completed') {
376
+ throw new BackfillConfigError(`Run already completed for plan ${plan.planId}; cannot cancel.`);
377
+ }
378
+ if (run.status === 'cancelled') {
379
+ return summarizeRunStatus(run, paths.runPath, paths.eventPath);
380
+ }
381
+ run.status = 'cancelled';
382
+ run.completedAt = nowIso();
383
+ run.lastError = 'Cancelled by operator';
384
+ for (const chunk of run.chunks) {
385
+ if (chunk.status === 'running') {
386
+ chunk.status = 'pending';
387
+ }
388
+ }
389
+ await persistRunAndEvent({
390
+ run,
391
+ runPath: paths.runPath,
392
+ eventPath: paths.eventPath,
393
+ event: {
394
+ type: 'run_cancelled',
395
+ planId: plan.planId,
396
+ },
397
+ });
398
+ return summarizeRunStatus(run, paths.runPath, paths.eventPath);
399
+ }
400
+ export async function getBackfillDoctorReport(input) {
401
+ const status = await getBackfillStatus(input);
402
+ const issueCodes = [];
403
+ const recommendations = [];
404
+ const failedChunkIds = [];
405
+ const run = await readRun(status.runPath);
406
+ for (const chunk of run?.chunks ?? []) {
407
+ if (chunk.status === 'failed')
408
+ failedChunkIds.push(chunk.id);
409
+ }
410
+ if (status.status === 'planned') {
411
+ issueCodes.push('backfill_plan_missing');
412
+ recommendations.push(`Run: chx plugin backfill run --plan-id ${status.planId}`);
413
+ }
414
+ if (status.status === 'failed') {
415
+ issueCodes.push('backfill_chunk_failed_retry_exhausted');
416
+ recommendations.push(`Inspect status: chx plugin backfill status --plan-id ${status.planId}`);
417
+ recommendations.push(`Retry failed chunks: chx plugin backfill resume --plan-id ${status.planId} --replay-failed`);
418
+ }
419
+ if (status.status === 'cancelled') {
420
+ issueCodes.push('backfill_required_pending');
421
+ recommendations.push(`Resume execution: chx plugin backfill resume --plan-id ${status.planId} --replay-failed`);
422
+ }
423
+ if (status.status === 'running') {
424
+ issueCodes.push('backfill_required_pending');
425
+ recommendations.push(`Monitor progress: chx plugin backfill status --plan-id ${status.planId}`);
426
+ }
427
+ if (issueCodes.length === 0) {
428
+ recommendations.push('No remediation required.');
429
+ }
430
+ return {
431
+ planId: status.planId,
432
+ status: status.status,
433
+ issueCodes,
434
+ recommendations,
435
+ failedChunkIds,
436
+ };
437
+ }
438
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ResolvedChxConfig } from '@chkit/core';
2
+ import type { BackfillExecutionOptions, BackfillPathSet, BackfillPlanState, BackfillRunState, BackfillStatusSummary, NormalizedBackfillPluginOptions, ReadPlanOutput } from './types.js';
3
+ export declare function hashId(input: string): string;
4
+ export declare function nowIso(): string;
5
+ export declare function stableSerialize(value: unknown): string;
6
+ export declare function computeCompatibilityToken(input: {
7
+ plan: BackfillPlanState;
8
+ options: NormalizedBackfillPluginOptions;
9
+ }): string;
10
+ export declare function planIdentity(target: string, from: string, to: string, chunkHours: number): string;
11
+ export declare function computeBackfillStateDir(config: Pick<ResolvedChxConfig, 'metaDir'>, configPath: string, options: NormalizedBackfillPluginOptions): string;
12
+ export declare function backfillPaths(stateDir: string, planId: string): BackfillPathSet;
13
+ export declare function writeJson(filePath: string, value: unknown): Promise<void>;
14
+ export declare function readExistingPlan(planPath: string): Promise<BackfillPlanState | null>;
15
+ export declare function readPlan(input: {
16
+ planId: string;
17
+ configPath: string;
18
+ config: Pick<ResolvedChxConfig, 'metaDir'>;
19
+ options: NormalizedBackfillPluginOptions;
20
+ }): Promise<ReadPlanOutput>;
21
+ export declare function readRun(runPath: string): Promise<BackfillRunState | null>;
22
+ export declare function createRunState(input: {
23
+ plan: BackfillPlanState;
24
+ options: NormalizedBackfillPluginOptions;
25
+ execution: BackfillExecutionOptions;
26
+ }): BackfillRunState;
27
+ export declare function collectActiveRunTargets(runsDir: string): Promise<Map<string, string>>;
28
+ export declare function listPlanIds(plansDir: string): Promise<string[]>;
29
+ export declare function summarizeRunStatus(run: BackfillRunState, runPath: string, eventPath: string): BackfillStatusSummary;
30
+ export declare function persistRunAndEvent(input: {
31
+ run: BackfillRunState;
32
+ runPath: string;
33
+ eventPath: string;
34
+ event: Record<string, unknown>;
35
+ }): Promise<void>;
36
+ export declare function ensureRunCompatibility(input: {
37
+ run: BackfillRunState;
38
+ plan: BackfillPlanState;
39
+ options: NormalizedBackfillPluginOptions;
40
+ forceCompatibility: boolean;
41
+ }): void;
42
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpD,OAAO,KAAK,EACV,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,+BAA+B,EAC/B,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAatD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,+BAA+B,CAAA;CACzC,GAAG,MAAM,CAaT;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjG;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,+BAA+B,GACvC,MAAM,CAKR;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAa/E;AAOD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/E;AAOD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAE1F;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;IAC1C,OAAO,EAAE,+BAA+B,CAAA;CACzC,GAAG,OAAO,CAAC,cAAc,CAAC,CAY1B;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAE/E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,+BAA+B,CAAA;IACxC,SAAS,EAAE,wBAAwB,CAAA;CACpC,GAAG,gBAAgB,CA0BnB;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAe3F;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrE;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,qBAAqB,CA+BvB;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,GAAG,EAAE,gBAAgB,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,GAAG,EAAE,gBAAgB,CAAA;IACrB,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,EAAE,+BAA+B,CAAA;IACxC,kBAAkB,EAAE,OAAO,CAAA;CAC5B,GAAG,IAAI,CAYP"}