doc-detective 4.30.0 → 4.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/tests/ffmpegRecorder.d.ts +14 -2
- package/dist/core/tests/ffmpegRecorder.d.ts.map +1 -1
- package/dist/core/tests/ffmpegRecorder.js +96 -3
- package/dist/core/tests/ffmpegRecorder.js.map +1 -1
- package/dist/core/tests/saveScreenshot.d.ts.map +1 -1
- package/dist/core/tests/saveScreenshot.js +15 -0
- package/dist/core/tests/saveScreenshot.js.map +1 -1
- package/dist/core/tests/startSurface.d.ts.map +1 -1
- package/dist/core/tests/startSurface.js +17 -12
- package/dist/core/tests/startSurface.js.map +1 -1
- package/dist/core/tests/stopRecording.d.ts.map +1 -1
- package/dist/core/tests/stopRecording.js +24 -2
- package/dist/core/tests/stopRecording.js.map +1 -1
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +33 -19
- package/dist/core/tests.js.map +1 -1
- package/dist/core/utils.d.ts +73 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +100 -0
- package/dist/core/utils.js.map +1 -1
- package/dist/index.cjs +172 -21
- package/dist/reporters/htmlReporter.js +3 -1
- package/dist/reporters/htmlReporter.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -634107,6 +634107,49 @@ function logLevelEnabled(config, level) {
|
|
|
634107
634107
|
return true;
|
|
634108
634108
|
return false;
|
|
634109
634109
|
}
|
|
634110
|
+
function viewportMismatchWarning(requested, actual, tolerance = 0) {
|
|
634111
|
+
const parts = [];
|
|
634112
|
+
for (const dim of ["width", "height"]) {
|
|
634113
|
+
const req = Number(requested?.[dim]);
|
|
634114
|
+
if (!(req > 0))
|
|
634115
|
+
continue;
|
|
634116
|
+
const act = Number(actual?.[dim]);
|
|
634117
|
+
if (!Number.isFinite(act)) {
|
|
634118
|
+
parts.push(`${dim} requested ${req}px, rendered unknown`);
|
|
634119
|
+
} else if (Math.abs(act - req) > tolerance) {
|
|
634120
|
+
parts.push(`${dim} requested ${req}px, rendered ${act}px`);
|
|
634121
|
+
}
|
|
634122
|
+
}
|
|
634123
|
+
if (parts.length === 0)
|
|
634124
|
+
return null;
|
|
634125
|
+
return `Requested viewport not fully realized \u2014 the browser or OS enforces a minimum window size: ${parts.join("; ")}. Screenshots and measurements reflect the rendered size, not the requested size.`;
|
|
634126
|
+
}
|
|
634127
|
+
function resolveViewportTarget(requested, current) {
|
|
634128
|
+
const w = Number(requested?.width);
|
|
634129
|
+
const h = Number(requested?.height);
|
|
634130
|
+
return {
|
|
634131
|
+
width: w > 0 ? w : Number(current?.width),
|
|
634132
|
+
height: h > 0 ? h : Number(current?.height)
|
|
634133
|
+
};
|
|
634134
|
+
}
|
|
634135
|
+
async function readViewport(driver) {
|
|
634136
|
+
const v = await driver.execute("return { width: window.innerWidth, height: window.innerHeight }", []);
|
|
634137
|
+
return { width: Number(v?.width), height: Number(v?.height) };
|
|
634138
|
+
}
|
|
634139
|
+
async function realizeViewport(driver, requested, config = {}, label) {
|
|
634140
|
+
const current = await readViewport(driver);
|
|
634141
|
+
const target = resolveViewportTarget(requested, current);
|
|
634142
|
+
const windowSize = await driver.getWindowSize();
|
|
634143
|
+
const deltaWidth = Number.isFinite(current.width) && Number.isFinite(target.width) ? target.width - current.width : 0;
|
|
634144
|
+
const deltaHeight = Number.isFinite(current.height) && Number.isFinite(target.height) ? target.height - current.height : 0;
|
|
634145
|
+
await driver.setWindowSize(Math.round(windowSize.width + deltaWidth), Math.round(windowSize.height + deltaHeight));
|
|
634146
|
+
const actual = await readViewport(driver);
|
|
634147
|
+
const warning = viewportMismatchWarning(requested, actual, VIEWPORT_TOLERANCE_PX);
|
|
634148
|
+
if (warning) {
|
|
634149
|
+
await log(config, "warning", label ? `${label}: ${warning}` : warning);
|
|
634150
|
+
}
|
|
634151
|
+
return actual;
|
|
634152
|
+
}
|
|
634110
634153
|
async function log(config, level, message) {
|
|
634111
634154
|
if (message === void 0) {
|
|
634112
634155
|
message = config;
|
|
@@ -634441,7 +634484,7 @@ function llevenshteinDistance(s, t) {
|
|
|
634441
634484
|
}
|
|
634442
634485
|
return arr[t.length][s.length];
|
|
634443
634486
|
}
|
|
634444
|
-
var import_node_fs7, import_node_os2, import_node_path5, import_node_crypto2, import_promises, import_node_net, import_axios, import_node_child_process4, BACKGROUND_BUFFER_LIMIT, PTY_PACKAGE, READY_POLL_INTERVAL_MS, TRANSIENT_SESSION_ERROR, SESSION_TIMEOUT_ABORT, TRANSIENT_PROCESS_INIT_EXIT_CODES, SETTLE_CEILING_MAX_MS, PRESERVED_TEMP_ENTRIES, FETCH_BINARY_DEFAULTS, ENV_VAR_REGEX, posixBashProbe;
|
|
634487
|
+
var import_node_fs7, import_node_os2, import_node_path5, import_node_crypto2, import_promises, import_node_net, import_axios, import_node_child_process4, BACKGROUND_BUFFER_LIMIT, PTY_PACKAGE, READY_POLL_INTERVAL_MS, TRANSIENT_SESSION_ERROR, SESSION_TIMEOUT_ABORT, TRANSIENT_PROCESS_INIT_EXIT_CODES, SETTLE_CEILING_MAX_MS, PRESERVED_TEMP_ENTRIES, FETCH_BINARY_DEFAULTS, VIEWPORT_TOLERANCE_PX, ENV_VAR_REGEX, posixBashProbe;
|
|
634445
634488
|
var init_utils = __esm({
|
|
634446
634489
|
"dist/core/utils.js"() {
|
|
634447
634490
|
"use strict";
|
|
@@ -634483,6 +634526,7 @@ var init_utils = __esm({
|
|
|
634483
634526
|
maxBodyLength: 50 * 1024 * 1024,
|
|
634484
634527
|
maxRedirects: 5
|
|
634485
634528
|
};
|
|
634529
|
+
VIEWPORT_TOLERANCE_PX = 16;
|
|
634486
634530
|
ENV_VAR_REGEX = /\$[a-zA-Z0-9_]+(?![a-zA-Z0-9_$])/g;
|
|
634487
634531
|
}
|
|
634488
634532
|
});
|
|
@@ -643416,6 +643460,69 @@ function parseCaptureFrameSize(stderr) {
|
|
|
643416
643460
|
return null;
|
|
643417
643461
|
return { w: Number(m[1]), h: Number(m[2]) };
|
|
643418
643462
|
}
|
|
643463
|
+
function parseMediaProbeStderr(stderr) {
|
|
643464
|
+
const meta = {};
|
|
643465
|
+
const text = stderr ?? "";
|
|
643466
|
+
const duration = /\bDuration:\s*(\d+):(\d{2}):(\d{2}(?:\.\d+)?)/.exec(text);
|
|
643467
|
+
if (duration) {
|
|
643468
|
+
meta.duration = Number(duration[1]) * 3600 + Number(duration[2]) * 60 + Number(duration[3]);
|
|
643469
|
+
}
|
|
643470
|
+
const videoLine = /Stream #\d+:\d+.*?Video:.*/.exec(text)?.[0];
|
|
643471
|
+
if (videoLine) {
|
|
643472
|
+
const size = /\b(\d{2,5})x(\d{2,5})\b/.exec(videoLine);
|
|
643473
|
+
if (size) {
|
|
643474
|
+
meta.width = Number(size[1]);
|
|
643475
|
+
meta.height = Number(size[2]);
|
|
643476
|
+
}
|
|
643477
|
+
const fps = /([\d.]+)\s+fps\b/.exec(videoLine) ?? /([\d.]+)\s+tbr\b/.exec(videoLine);
|
|
643478
|
+
if (fps && Number.isFinite(Number(fps[1]))) {
|
|
643479
|
+
meta.fps = Number(fps[1]);
|
|
643480
|
+
}
|
|
643481
|
+
}
|
|
643482
|
+
return meta;
|
|
643483
|
+
}
|
|
643484
|
+
async function probeVideoMetadata({ cacheDir, filePath }) {
|
|
643485
|
+
try {
|
|
643486
|
+
const ffmpegPath = await getFfmpegPath({ cacheDir, autoInstall: false });
|
|
643487
|
+
const stderr = await new Promise((resolve) => {
|
|
643488
|
+
let head = "";
|
|
643489
|
+
let settled = false;
|
|
643490
|
+
let proc = null;
|
|
643491
|
+
let timer;
|
|
643492
|
+
const done = (v) => {
|
|
643493
|
+
if (settled)
|
|
643494
|
+
return;
|
|
643495
|
+
settled = true;
|
|
643496
|
+
clearTimeout(timer);
|
|
643497
|
+
try {
|
|
643498
|
+
proc?.kill();
|
|
643499
|
+
} catch {
|
|
643500
|
+
}
|
|
643501
|
+
resolve(v);
|
|
643502
|
+
};
|
|
643503
|
+
try {
|
|
643504
|
+
proc = (0, import_node_child_process11.spawn)(ffmpegPath, ["-hide_banner", "-i", filePath], {
|
|
643505
|
+
stdio: ["ignore", "ignore", "pipe"]
|
|
643506
|
+
});
|
|
643507
|
+
proc.stderr?.on("data", (chunk) => {
|
|
643508
|
+
if (head.length < 4e3) {
|
|
643509
|
+
head = (head + chunk.toString()).slice(0, 4e3);
|
|
643510
|
+
}
|
|
643511
|
+
});
|
|
643512
|
+
proc.on("error", () => done(null));
|
|
643513
|
+
proc.on("close", () => done(head));
|
|
643514
|
+
timer = setTimeout(() => done(head.length > 0 ? head : null), 5e3);
|
|
643515
|
+
} catch {
|
|
643516
|
+
done(null);
|
|
643517
|
+
}
|
|
643518
|
+
});
|
|
643519
|
+
if (stderr === null)
|
|
643520
|
+
return null;
|
|
643521
|
+
return parseMediaProbeStderr(stderr);
|
|
643522
|
+
} catch {
|
|
643523
|
+
return null;
|
|
643524
|
+
}
|
|
643525
|
+
}
|
|
643419
643526
|
function deriveCropScale({ platform, frameSize, displayPointSize }) {
|
|
643420
643527
|
if (platform !== "darwin")
|
|
643421
643528
|
return 1;
|
|
@@ -643549,8 +643656,11 @@ function jobExclusiveResources(job, { allowOverlappingCaptures = false }) {
|
|
|
643549
643656
|
return [];
|
|
643550
643657
|
return ["display"];
|
|
643551
643658
|
}
|
|
643552
|
-
async function getFfmpegPath(
|
|
643553
|
-
const mod = await loadHeavyDep("@ffmpeg-installer/ffmpeg", {
|
|
643659
|
+
async function getFfmpegPath({ cacheDir, autoInstall = true } = {}) {
|
|
643660
|
+
const mod = await loadHeavyDep("@ffmpeg-installer/ffmpeg", {
|
|
643661
|
+
ctx: { cacheDir },
|
|
643662
|
+
autoInstall
|
|
643663
|
+
});
|
|
643554
643664
|
const candidate = mod && (mod.path ?? mod.default?.path);
|
|
643555
643665
|
if (typeof candidate !== "string" || candidate.length === 0) {
|
|
643556
643666
|
throw new Error("ffmpeg binary path is missing or malformed in the installed @ffmpeg-installer/ffmpeg package. Try `doc-detective install runtime --force` to reinstall.");
|
|
@@ -646563,6 +646673,14 @@ async function saveScreenshot({ config, step, driver, appSession }) {
|
|
|
646563
646673
|
return result;
|
|
646564
646674
|
}
|
|
646565
646675
|
}
|
|
646676
|
+
try {
|
|
646677
|
+
const savedMeta = await sharp(finalBuffer).metadata();
|
|
646678
|
+
if (savedMeta.width && savedMeta.height) {
|
|
646679
|
+
result.outputs.width = savedMeta.width;
|
|
646680
|
+
result.outputs.height = savedMeta.height;
|
|
646681
|
+
}
|
|
646682
|
+
} catch {
|
|
646683
|
+
}
|
|
646566
646684
|
const writeFinalPng = (destination) => {
|
|
646567
646685
|
try {
|
|
646568
646686
|
import_node_fs20.default.writeFileSync(destination, finalBuffer);
|
|
@@ -647311,6 +647429,25 @@ async function stopRecording({ config, step, driver, deps = {} }) {
|
|
|
647311
647429
|
dropHandle();
|
|
647312
647430
|
return result;
|
|
647313
647431
|
}
|
|
647432
|
+
result.outputs = {
|
|
647433
|
+
recordingPath: import_node_path19.default.resolve(recording.targetPath),
|
|
647434
|
+
format: import_node_path19.default.extname(recording.targetPath).slice(1)
|
|
647435
|
+
};
|
|
647436
|
+
const meta = await probeVideoMetadata({
|
|
647437
|
+
cacheDir: config?.cacheDir,
|
|
647438
|
+
filePath: recording.targetPath
|
|
647439
|
+
});
|
|
647440
|
+
if (meta?.duration !== void 0)
|
|
647441
|
+
result.outputs.duration = meta.duration;
|
|
647442
|
+
if (meta?.width !== void 0)
|
|
647443
|
+
result.outputs.width = meta.width;
|
|
647444
|
+
if (meta?.height !== void 0)
|
|
647445
|
+
result.outputs.height = meta.height;
|
|
647446
|
+
if (meta?.fps !== void 0)
|
|
647447
|
+
result.outputs.fps = meta.fps;
|
|
647448
|
+
if (!meta || Object.keys(meta).length === 0) {
|
|
647449
|
+
log(config, "debug", `Couldn't probe recording metadata for ${recording.targetPath}.`);
|
|
647450
|
+
}
|
|
647314
647451
|
return result;
|
|
647315
647452
|
}
|
|
647316
647453
|
async function transcode({ config, sourcePath, targetPath, deleteSource, crop }) {
|
|
@@ -648764,20 +648901,31 @@ async function startSurfaceStep({ config, step, platform, driver, processRegistr
|
|
|
648764
648901
|
}
|
|
648765
648902
|
const vw = Number(d.viewport?.width);
|
|
648766
648903
|
const vh = Number(d.viewport?.height);
|
|
648904
|
+
let viewportOutput;
|
|
648767
648905
|
if (vw > 0 || vh > 0) {
|
|
648906
|
+
const requested = {
|
|
648907
|
+
...vw > 0 ? { width: vw } : {},
|
|
648908
|
+
...vh > 0 ? { height: vh } : {}
|
|
648909
|
+
};
|
|
648910
|
+
let rendered;
|
|
648768
648911
|
try {
|
|
648769
|
-
await
|
|
648912
|
+
rendered = await realizeViewport(opened.driver, requested, config, `startSurface "${opened.name}"`);
|
|
648770
648913
|
} catch (error) {
|
|
648771
648914
|
return {
|
|
648772
648915
|
status: "FAIL",
|
|
648773
648916
|
description: `Opened browser surface "${opened.name}" but couldn't apply the viewport: ${error?.message ?? error}`
|
|
648774
648917
|
};
|
|
648775
648918
|
}
|
|
648919
|
+
viewportOutput = { requested, actual: rendered };
|
|
648776
648920
|
}
|
|
648777
648921
|
return {
|
|
648778
648922
|
status: "PASS",
|
|
648779
648923
|
description: `Opened browser surface "${opened.name}" (${engine}).`,
|
|
648780
|
-
outputs: {
|
|
648924
|
+
outputs: {
|
|
648925
|
+
name: opened.name,
|
|
648926
|
+
engine,
|
|
648927
|
+
...viewportOutput ? { viewport: viewportOutput } : {}
|
|
648928
|
+
}
|
|
648781
648929
|
};
|
|
648782
648930
|
};
|
|
648783
648931
|
const runProcessDescriptor = async (d) => {
|
|
@@ -648892,13 +649040,6 @@ async function startSurfaceStep({ config, step, platform, driver, processRegistr
|
|
|
648892
649040
|
outputs: { surfaces: results }
|
|
648893
649041
|
};
|
|
648894
649042
|
}
|
|
648895
|
-
async function applyViewport(driver, viewport) {
|
|
648896
|
-
const viewportSize = await driver.execute("return { width: window.innerWidth, height: window.innerHeight }", []);
|
|
648897
|
-
const windowSize = await driver.getWindowSize();
|
|
648898
|
-
const deltaWidth = (viewport.width || viewportSize.width) - viewportSize.width;
|
|
648899
|
-
const deltaHeight = (viewport.height || viewportSize.height) - viewportSize.height;
|
|
648900
|
-
await driver.setWindowSize(windowSize.width + deltaWidth, windowSize.height + deltaHeight);
|
|
648901
|
-
}
|
|
648902
649043
|
|
|
648903
649044
|
// dist/core/tests/mobileBrowser.js
|
|
648904
649045
|
var import_node_path24 = __toESM(require("node:path"), 1);
|
|
@@ -650108,6 +650249,10 @@ function getDriverCapabilities({ runnerDetails, name, options }) {
|
|
|
650108
650249
|
// 10 minutes
|
|
650109
650250
|
"appium:executable": chromium.driver,
|
|
650110
650251
|
browserName: "chrome",
|
|
650252
|
+
// Classic WebDriver, no BiDi socket. Enabling `webSocketUrl` for
|
|
650253
|
+
// viewport emulation (driver.setViewport) crashed headed recording
|
|
650254
|
+
// contexts with a stack overflow and can't be gated off recording
|
|
650255
|
+
// (viewport+recording is a supported combo) — see ADR 01072 (rejected).
|
|
650111
650256
|
"wdio:enforceWebDriverClassic": true,
|
|
650112
650257
|
// Disable BiDi, use classic mode
|
|
650113
650258
|
"goog:chromeOptions": {
|
|
@@ -650465,14 +650610,18 @@ function driverSkipDiagnostic({ requestedName, platform, platformMatches, attemp
|
|
|
650465
650610
|
msg += ` A present-but-broken driver (for example a partially downloaded ${driverHint}) can cause this; reinstall the driver or its browser.`;
|
|
650466
650611
|
return msg;
|
|
650467
650612
|
}
|
|
650468
|
-
async function setViewportSize(context, driver) {
|
|
650469
|
-
|
|
650470
|
-
|
|
650471
|
-
|
|
650472
|
-
const
|
|
650473
|
-
|
|
650474
|
-
|
|
650613
|
+
async function setViewportSize(context, driver, config = {}) {
|
|
650614
|
+
const vw = Number(context.browser?.viewport?.width);
|
|
650615
|
+
const vh = Number(context.browser?.viewport?.height);
|
|
650616
|
+
if (vw > 0 || vh > 0) {
|
|
650617
|
+
const requested = {
|
|
650618
|
+
...vw > 0 ? { width: vw } : {},
|
|
650619
|
+
...vh > 0 ? { height: vh } : {}
|
|
650620
|
+
};
|
|
650621
|
+
const label = `viewport for ${context.browser?.name ?? "browser"} on ${context.platform ?? "host"}`;
|
|
650622
|
+
return realizeViewport(driver, requested, config, label);
|
|
650475
650623
|
}
|
|
650624
|
+
return void 0;
|
|
650476
650625
|
}
|
|
650477
650626
|
async function allowUnsafeSteps({ config }) {
|
|
650478
650627
|
if (config.allowUnsafeSteps === true)
|
|
@@ -652191,8 +652340,10 @@ ${JSON.stringify(context, null, 2)}`);
|
|
|
652191
652340
|
driver
|
|
652192
652341
|
});
|
|
652193
652342
|
}
|
|
652194
|
-
|
|
652195
|
-
|
|
652343
|
+
const viewportW = Number(context.browser?.viewport?.width);
|
|
652344
|
+
const viewportH = Number(context.browser?.viewport?.height);
|
|
652345
|
+
if (viewportW > 0 || viewportH > 0) {
|
|
652346
|
+
await setViewportSize(context, driver, config);
|
|
652196
652347
|
} else if (context.browser?.window?.width || context.browser?.window?.height) {
|
|
652197
652348
|
const windowSize = await driver.getWindowSize();
|
|
652198
652349
|
await driver.setWindowSize(context.browser?.window?.width || windowSize.width, context.browser?.window?.height || windowSize.height);
|
|
@@ -1040,7 +1040,9 @@ function collectMedia(step) {
|
|
|
1040
1040
|
if (step.record && (step.record.path || outs.recordingPath)) {
|
|
1041
1041
|
media.push({ kind: "video", path: outs.recordingPath || step.record.path });
|
|
1042
1042
|
}
|
|
1043
|
-
|
|
1043
|
+
// Match the runner's dispatch (presence, not truthiness): stopRecord null
|
|
1044
|
+
// is a valid untargeted stop that still saves a video.
|
|
1045
|
+
if (typeof step.stopRecord !== "undefined" && outs.recordingPath) {
|
|
1044
1046
|
media.push({ kind: "video", path: outs.recordingPath });
|
|
1045
1047
|
}
|
|
1046
1048
|
return media;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlReporter.js","sourceRoot":"","sources":["../../src/reporters/htmlReporter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"htmlReporter.js","sourceRoot":"","sources":["../../src/reporters/htmlReporter.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmwBnB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuuBlB,CAAC"}
|