@social-mail/social-mail-web-server 1.5.71 → 1.5.73
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/common/ImagesFolder.d.ts +10 -8
- package/dist/common/ImagesFolder.d.ts.map +1 -1
- package/dist/common/ImagesFolder.js +16 -11
- package/dist/common/ImagesFolder.js.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.js +119 -55
- package/dist/server/services/image-converter/ImageConverterService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/images/png/protected.png +0 -0
- package/images/png/unavailable.png +0 -0
- package/package.json +2 -2
- package/src/common/ImagesFolder.ts +18 -12
- package/src/server/services/image-converter/ImageConverterService.ts +13 -15
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
2
|
+
declare class PackageFolder {
|
|
3
|
+
readonly folder: string;
|
|
4
|
+
constructor(folder: string);
|
|
5
|
+
file(...names: any[]): string;
|
|
6
|
+
localFile(...names: any[]): LocalFile;
|
|
7
|
+
}
|
|
8
|
+
export declare const ImagesFolder: PackageFolder;
|
|
9
|
+
export declare const contentFolder: PackageFolder;
|
|
10
|
+
export {};
|
|
9
11
|
//# sourceMappingURL=ImagesFolder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagesFolder.d.ts","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImagesFolder.d.ts","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAM/E,cAAM,aAAa;aACa,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;IAI1C,IAAI,CAAC,GAAI,KAAK,OAAA;IAId,SAAS,CAAC,GAAI,KAAK,OAAA;CAItB;AAED,eAAO,MAAM,YAAY,eAAyD,CAAC;AAEnF,eAAO,MAAM,aAAa,eAA0D,CAAC"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
1
2
|
import { dirname, join } from "path";
|
|
2
3
|
import { fileURLToPath } from "url";
|
|
3
|
-
const metaDir = dirname(import.meta.url);
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
const metaDir = fileURLToPath(dirname(import.meta.url));
|
|
5
|
+
class PackageFolder {
|
|
6
|
+
constructor(folder) {
|
|
7
|
+
this.folder = folder;
|
|
8
|
+
}
|
|
9
|
+
file(...names) {
|
|
10
|
+
return join(this.folder, ...names);
|
|
11
|
+
}
|
|
12
|
+
localFile(...names) {
|
|
13
|
+
const path = join(this.folder, ...names);
|
|
14
|
+
return new LocalFile(path, names.pop(), void 0, () => void 0);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const ImagesFolder = new PackageFolder(join(metaDir, "..", "..", "images"));
|
|
18
|
+
export const contentFolder = new PackageFolder(join(metaDir, "..", "..", "content"));
|
|
14
19
|
//# sourceMappingURL=ImagesFolder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagesFolder.js","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ImagesFolder.js","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAExD,MAAM,aAAa;IACf,YAA4B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAE1C,CAAC;IAED,IAAI,CAAC,GAAI,KAAK;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAI,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,GAAI,KAAK;QACf,MAAM,IAAI,GAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAI,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import TempFileService from "../../storage/TempFileService.js";
|
|
|
2
2
|
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
3
3
|
export default class ImageConverterService {
|
|
4
4
|
tempFileService: TempFileService;
|
|
5
|
-
getImage(file: LocalFile, pageNumber?: any): Promise<LocalFile>;
|
|
5
|
+
getImage(file: LocalFile, pageNumber?: any, retry?: boolean): Promise<LocalFile>;
|
|
6
6
|
transform(type: any, file: LocalFile, outputFileName?: string): Promise<LocalFile>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=ImageConverterService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageConverterService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageConverterService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAc/E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAGtC,eAAe,EAAE,eAAe,CAAC;IAE3B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,KAAA,EAAE,KAAK,UAAO;IAqEnD,SAAS,CAAC,IAAI,KAAA,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,SAAa;CAkErE"}
|
|
@@ -7,6 +7,53 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
11
|
+
if (value !== null && value !== void 0) {
|
|
12
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
13
|
+
var dispose, inner;
|
|
14
|
+
if (async) {
|
|
15
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
16
|
+
dispose = value[Symbol.asyncDispose];
|
|
17
|
+
}
|
|
18
|
+
if (dispose === void 0) {
|
|
19
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
20
|
+
dispose = value[Symbol.dispose];
|
|
21
|
+
if (async) inner = dispose;
|
|
22
|
+
}
|
|
23
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
24
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
25
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
26
|
+
}
|
|
27
|
+
else if (async) {
|
|
28
|
+
env.stack.push({ async: true });
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
};
|
|
32
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
33
|
+
return function (env) {
|
|
34
|
+
function fail(e) {
|
|
35
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
36
|
+
env.hasError = true;
|
|
37
|
+
}
|
|
38
|
+
function next() {
|
|
39
|
+
while (env.stack.length) {
|
|
40
|
+
var rec = env.stack.pop();
|
|
41
|
+
try {
|
|
42
|
+
var result = rec.dispose && rec.dispose.call(rec.value);
|
|
43
|
+
if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
fail(e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (env.hasError) throw env.error;
|
|
50
|
+
}
|
|
51
|
+
return next();
|
|
52
|
+
};
|
|
53
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
54
|
+
var e = new Error(message);
|
|
55
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
56
|
+
});
|
|
10
57
|
import Inject, { RegisterTransient } from "@entity-access/entity-access/dist/di/di.js";
|
|
11
58
|
import TempFileService from "../../storage/TempFileService.js";
|
|
12
59
|
import { join, parse } from "path";
|
|
@@ -16,69 +63,83 @@ import { spawnPromise } from "../../../common/spawnPromise.js";
|
|
|
16
63
|
import { copyFile, readdir } from "fs/promises";
|
|
17
64
|
import FFCommand from "../convert/FFCommand.js";
|
|
18
65
|
import ensureDir from "../../../common/FileApi.js";
|
|
19
|
-
import {
|
|
20
|
-
import { ContentFolder } from "../../../common/ImagesFolder.js";
|
|
66
|
+
import { ImagesFolder } from "../../../common/ImagesFolder.js";
|
|
21
67
|
const cachePath = `./data/img-cache/`;
|
|
22
68
|
ensureDir(cachePath);
|
|
23
69
|
let ImageConverterService = class ImageConverterService {
|
|
24
|
-
async getImage(file, pageNumber) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
if (/pdf/i.test(file.contentType)) {
|
|
51
|
-
const args = [
|
|
52
|
-
"-singlefile",
|
|
53
|
-
"-png",
|
|
54
|
-
copy.path,
|
|
55
|
-
"png"
|
|
56
|
-
];
|
|
57
|
-
if (pageNumber) {
|
|
58
|
-
args.push("-f");
|
|
59
|
-
args.push(Number(pageNumber).toString());
|
|
60
|
-
}
|
|
61
|
-
await spawnPromise("pdftoppm", args, {
|
|
62
|
-
cwd: folder.folder
|
|
63
|
-
});
|
|
64
|
-
const isPng = /\.png$/i;
|
|
65
|
-
for (const child of await readdir(folder.folder, { withFileTypes: true })) {
|
|
66
|
-
const output = join(child.path, child.name);
|
|
67
|
-
if (isPng.test(child.name)) {
|
|
68
|
-
await copyFile(output, outputFile.path);
|
|
69
|
-
return outputFile;
|
|
70
|
+
async getImage(file, pageNumber, retry = true) {
|
|
71
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
72
|
+
try {
|
|
73
|
+
let outputFile;
|
|
74
|
+
let copy;
|
|
75
|
+
if (/^image\//.test(file.contentType)) {
|
|
76
|
+
if (/\.bmp$/i.test(file.fileName)) {
|
|
77
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
78
|
+
try {
|
|
79
|
+
const f1 = __addDisposableResource(env_2, new TempFolder(), false);
|
|
80
|
+
copy = await f1.copy(file.fileName, file, file.contentType);
|
|
81
|
+
outputFile = await this.tempFileService.createTempFile(".bmp", "bmp", "image/bmp");
|
|
82
|
+
await spawnPromise("convert", [
|
|
83
|
+
copy.path,
|
|
84
|
+
outputFile.path
|
|
85
|
+
]);
|
|
86
|
+
return outputFile;
|
|
87
|
+
}
|
|
88
|
+
catch (e_1) {
|
|
89
|
+
env_2.error = e_1;
|
|
90
|
+
env_2.hasError = true;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
__disposeResources(env_2);
|
|
94
|
+
}
|
|
70
95
|
}
|
|
96
|
+
return file;
|
|
71
97
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
98
|
+
const folder = __addDisposableResource(env_1, new TempFolder(), false);
|
|
99
|
+
copy = await folder.copy(file.fileName, file, file.contentType);
|
|
100
|
+
outputFile = await this.tempFileService.createTempFile(".png", "png", "image/png");
|
|
101
|
+
if (/^video\//.test(file.contentType)) {
|
|
102
|
+
// this is a video..
|
|
103
|
+
await FFCommand.thumbnail(file, outputFile);
|
|
76
104
|
return outputFile;
|
|
77
105
|
}
|
|
106
|
+
if (/pdf/i.test(file.contentType)) {
|
|
107
|
+
const args = [
|
|
108
|
+
"-singlefile",
|
|
109
|
+
"-png",
|
|
110
|
+
copy.path,
|
|
111
|
+
"png"
|
|
112
|
+
];
|
|
113
|
+
if (pageNumber) {
|
|
114
|
+
args.push("-f");
|
|
115
|
+
args.push(Number(pageNumber).toString());
|
|
116
|
+
}
|
|
117
|
+
await spawnPromise("pdftoppm", args, {
|
|
118
|
+
cwd: folder.folder
|
|
119
|
+
});
|
|
120
|
+
const isPng = /\.png$/i;
|
|
121
|
+
for (const child of await readdir(folder.folder, { withFileTypes: true })) {
|
|
122
|
+
const output = join(child.parentPath, child.name);
|
|
123
|
+
if (isPng.test(child.name)) {
|
|
124
|
+
await copyFile(output, outputFile.path);
|
|
125
|
+
return outputFile;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (!outputFile.exists) {
|
|
129
|
+
return ImagesFolder.localFile("png", "protected.png");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// this is some kind of document??
|
|
133
|
+
await Convert.convert(copy, "png", outputFile.path);
|
|
134
|
+
return outputFile;
|
|
135
|
+
}
|
|
136
|
+
catch (e_2) {
|
|
137
|
+
env_1.error = e_2;
|
|
138
|
+
env_1.hasError = true;
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
__disposeResources(env_1);
|
|
78
142
|
}
|
|
79
|
-
// this is some kind of document??
|
|
80
|
-
await Convert.convert(copy, "png", outputFile.path);
|
|
81
|
-
return outputFile;
|
|
82
143
|
}
|
|
83
144
|
async transform(type, file, outputFileName = "file.jpg") {
|
|
84
145
|
let { ext } = parse(outputFileName);
|
|
@@ -112,6 +173,9 @@ let ImageConverterService = class ImageConverterService {
|
|
|
112
173
|
}
|
|
113
174
|
}
|
|
114
175
|
file = await this.getImage(file, args?.[2] ?? void 0);
|
|
176
|
+
if (!file.exists) {
|
|
177
|
+
file = ImagesFolder.localFile("png", "unavailable.png");
|
|
178
|
+
}
|
|
115
179
|
const { default: fx } = await import("./formats/" + fileName + ".js");
|
|
116
180
|
let r = await fx(file, ...args);
|
|
117
181
|
switch (ext) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageConverterService.js","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImageConverterService.js","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,UAAU,MAAM,qDAAqD,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAEtC,SAAS,CAAC,SAAS,CAAC,CAAC;AAGN,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAKtC,KAAK,CAAC,QAAQ,CAAC,IAAe,EAAE,UAAW,EAAE,KAAK,GAAG,IAAI;;;YAErD,IAAI,UAAqB,CAAC;YAC1B,IAAI,IAAe,CAAC;YAEpB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAEpC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;;wBAChC,MAAM,EAAE,kCAAG,IAAI,UAAU,EAAE,QAAA,CAAC;wBAC5B,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC5D,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;wBACnF,MAAM,YAAY,CAAC,SAAS,EAAE;4BAC1B,IAAI,CAAC,IAAI;4BACT,UAAU,CAAC,IAAI;yBAClB,CAAC,CAAC;wBACH,OAAO,UAAU,CAAC;;;;;;;;;iBACrB;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC;YAGD,MAAM,MAAM,kCAAG,IAAI,UAAU,EAAE,QAAA,CAAC;YAChC,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAChE,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YAEnF,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,oBAAoB;gBACpB,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC5C,OAAO,UAAU,CAAC;YACtB,CAAC;YAED,IAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAE/B,MAAM,IAAI,GAAG;oBACT,aAAa;oBACb,MAAM;oBACN,IAAI,CAAC,IAAI;oBACT,KAAK;iBACR,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBAED,MAAM,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE;oBACjC,GAAG,EAAE,MAAM,CAAC,MAAM;iBACrB,CAAC,CAAC;gBAEH,MAAM,KAAK,GAAG,SAAS,CAAC;gBAExB,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAC,CAAC,EAAE,CAAC;oBACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAClD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACzB,MAAM,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;wBACxC,OAAO,UAAU,CAAC;oBACtB,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACrB,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBAC1D,CAAC;YACL,CAAC;YAED,kCAAkC;YAClC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,UAAU,CAAC;;;;;;;;;KACrB;IAED,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAe,EAAE,cAAc,GAAG,UAAU;QAE9D,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,OAAO,EAAE,CAAC;YACV,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC;YACzD,QAAO,QAAQ,EAAE,CAAC;gBACd,KAAK,KAAK;oBACN,GAAG,GAAG,MAAM,CAAC;oBACb,QAAQ,GAAG,MAAM,CAAC;oBAClB,MAAM;gBACV,KAAK,KAAK;oBACN,GAAG,GAAG,MAAM,CAAC;oBACb,QAAQ,GAAG,MAAM,CAAC;oBAClB,MAAM;gBACV,KAAK,KAAK;oBACN,GAAG,GAAG,MAAM,CAAC;oBACb,QAAQ,GAAG,MAAM,CAAC;oBAClB,MAAM;gBACV,KAAK,MAAM;oBACP,GAAG,GAAG,OAAO,CAAC;oBACd,QAAQ,GAAG,MAAM,CAAC;oBAClB,MAAM;gBACV,KAAK,KAAK;oBACN,GAAG,GAAG,MAAM,CAAC;oBACb,QAAQ,GAAG,MAAM,CAAC;oBAClB,MAAM;YACd,CAAC;QACL,CAAC;QAED,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,GAAgB,MAAM,EAAE,CAAC,IAAI,EAAE,GAAI,IAAI,CAAC,CAAC;QAE9C,QAAO,GAAG,EAAE,CAAC;YACT,KAAK,MAAM;gBACP,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAC,CAAC,CAAC;gBAC3B,MAAM;YACV,KAAK,MAAM;gBACP,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;oBACN,gBAAgB,EAAE,CAAC;iBACtB,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,OAAO;gBACR,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACP,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE,EAAE;iBACd,CAAC,CAAC;gBACH,MAAM;YACV,KAAK,MAAM;gBACP,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM;QACd,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1E,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;CAEJ,CAAA;AAzIG;IADC,MAAM;8BACU,eAAe;8DAAC;AAHhB,qBAAqB;IADzC,iBAAiB;GACG,qBAAqB,CA4IzC;eA5IoB,qBAAqB"}
|