threenative-asset-mcp 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +3 -1
  2. package/dist/bundle/client.d.ts +2 -0
  3. package/dist/bundle/client.d.ts.map +1 -1
  4. package/dist/bundle/client.js +6 -0
  5. package/dist/bundle/client.js.map +1 -1
  6. package/dist/download/direct-asset-downloader.d.ts +3 -0
  7. package/dist/download/direct-asset-downloader.d.ts.map +1 -1
  8. package/dist/download/direct-asset-downloader.js +4 -1
  9. package/dist/download/direct-asset-downloader.js.map +1 -1
  10. package/dist/fab/api-download.d.ts.map +1 -1
  11. package/dist/fab/api-download.js +5 -1
  12. package/dist/fab/api-download.js.map +1 -1
  13. package/dist/fab/client.d.ts.map +1 -1
  14. package/dist/fab/client.js +5 -10
  15. package/dist/fab/client.js.map +1 -1
  16. package/dist/fab/direct-transport.d.ts +3 -0
  17. package/dist/fab/direct-transport.d.ts.map +1 -1
  18. package/dist/fab/direct-transport.js.map +1 -1
  19. package/dist/fab/download-store.d.ts.map +1 -1
  20. package/dist/fab/download-store.js +6 -0
  21. package/dist/fab/download-store.js.map +1 -1
  22. package/dist/fab/fabcli.d.ts +1 -1
  23. package/dist/fab/fabcli.d.ts.map +1 -1
  24. package/dist/fab/fabcli.js +12 -3
  25. package/dist/fab/fabcli.js.map +1 -1
  26. package/dist/gltf-size.d.ts +19 -0
  27. package/dist/gltf-size.d.ts.map +1 -0
  28. package/dist/gltf-size.js +33 -0
  29. package/dist/gltf-size.js.map +1 -0
  30. package/dist/server.js +5 -5
  31. package/dist/server.js.map +1 -1
  32. package/dist/tools/bundle.d.ts +10 -0
  33. package/dist/tools/bundle.d.ts.map +1 -1
  34. package/dist/tools/bundle.js +6 -0
  35. package/dist/tools/bundle.js.map +1 -1
  36. package/dist/tools/direct-download.d.ts +10 -0
  37. package/dist/tools/direct-download.d.ts.map +1 -1
  38. package/dist/tools/direct-download.js +7 -0
  39. package/dist/tools/direct-download.js.map +1 -1
  40. package/dist/tools/download-free-asset.d.ts +10 -0
  41. package/dist/tools/download-free-asset.d.ts.map +1 -1
  42. package/dist/tools/download-free-asset.js +6 -0
  43. package/dist/tools/download-free-asset.js.map +1 -1
  44. package/dist/tools/import-unreal.d.ts +40 -0
  45. package/dist/tools/import-unreal.d.ts.map +1 -1
  46. package/dist/tools/import-unreal.js +13 -0
  47. package/dist/tools/import-unreal.js.map +1 -1
  48. package/dist/tools/list-filters.d.ts +1 -15
  49. package/dist/tools/list-filters.d.ts.map +1 -1
  50. package/dist/tools/list-filters.js +1 -3
  51. package/dist/tools/list-filters.js.map +1 -1
  52. package/dist/tools/search-assets.d.ts +2 -4
  53. package/dist/tools/search-assets.d.ts.map +1 -1
  54. package/dist/tools/search-assets.js +1 -2
  55. package/dist/tools/search-assets.js.map +1 -1
  56. package/dist/unreal/cooking.d.ts +7 -0
  57. package/dist/unreal/cooking.d.ts.map +1 -1
  58. package/dist/unreal/cooking.js +101 -62
  59. package/dist/unreal/cooking.js.map +1 -1
  60. package/dist/unreal/importer.d.ts +3 -1
  61. package/dist/unreal/importer.d.ts.map +1 -1
  62. package/dist/unreal/importer.js +129 -59
  63. package/dist/unreal/importer.js.map +1 -1
  64. package/dist/unreal/scenes.d.ts +7 -0
  65. package/dist/unreal/scenes.d.ts.map +1 -1
  66. package/dist/unreal/scenes.js +13 -1
  67. package/dist/unreal/scenes.js.map +1 -1
  68. package/dist/unreal/toolchain.d.ts.map +1 -1
  69. package/dist/unreal/toolchain.js +11 -1
  70. package/dist/unreal/toolchain.js.map +1 -1
  71. package/package.json +1 -1
  72. package/dist/polyhaven/pack.d.ts +0 -53
  73. package/dist/polyhaven/pack.d.ts.map +0 -1
  74. package/dist/polyhaven/pack.js +0 -104
  75. package/dist/polyhaven/pack.js.map +0 -1
  76. package/dist/tools/polyhaven-import.d.ts +0 -58
  77. package/dist/tools/polyhaven-import.d.ts.map +0 -1
  78. package/dist/tools/polyhaven-import.js +0 -121
  79. package/dist/tools/polyhaven-import.js.map +0 -1
@@ -17,82 +17,121 @@ const EDITOR_ONLY_MARKERS = Object.freeze([
17
17
  "RawMeshBulkData",
18
18
  "MeshDescriptionBulkData",
19
19
  ]);
20
- /** Reads a bounded prefix of one Unreal package and reports whether it is uncooked editor source.
21
- *
22
- * This exists because the failure it detects is otherwise invisible until far too late: `umodel
23
- * -list` happily reports `StaticMesh` for an uncooked package, so classification passes, and only
24
- * the export produces nothing — after the whole pack has been downloaded and every package walked.
25
- * A Fab marketplace pack is Unreal *source*, so this is the common case, not the exotic one. */
26
- export async function readPackageCooking(file) {
20
+ /** What a file that is not a readable package reports: no signal, never a negative one. */
21
+ const UNKNOWN = Object.freeze({
22
+ state: "unknown",
23
+ markers: [],
24
+ legacyFileVersion: undefined,
25
+ fileVersionUE4: undefined,
26
+ fileVersionUE5: undefined,
27
+ naniteHint: false,
28
+ meshKindHint: undefined,
29
+ textureHint: false,
30
+ cubemapHint: false,
31
+ soundHint: false,
32
+ dataClassHint: undefined,
33
+ textureStackClassHint: undefined,
34
+ fontHint: false,
35
+ materialHint: false,
36
+ levelHint: false,
37
+ blueprintPrefabHint: false,
38
+ });
39
+ /** Reads the bounded prefix of one package, or undefined when it cannot be read. */
40
+ async function readHead(file) {
27
41
  let handle;
28
42
  try {
29
43
  handle = await open(file, "r");
30
44
  }
31
45
  catch {
32
- return { state: "unknown", markers: [], legacyFileVersion: undefined, fileVersionUE4: undefined, meshKindHint: undefined, textureHint: false, cubemapHint: false, soundHint: false, dataClassHint: undefined, textureStackClassHint: undefined, fontHint: false, materialHint: false, levelHint: false, blueprintPrefabHint: false };
46
+ return undefined;
33
47
  }
34
48
  try {
35
49
  const buffer = Buffer.alloc(PREFIX_BYTES);
36
50
  const { bytesRead } = await handle.read(buffer, 0, PREFIX_BYTES, 0);
37
- if (bytesRead < 16)
38
- return { state: "unknown", markers: [], legacyFileVersion: undefined, fileVersionUE4: undefined, meshKindHint: undefined, textureHint: false, cubemapHint: false, soundHint: false, dataClassHint: undefined, textureStackClassHint: undefined, fontHint: false, materialHint: false, levelHint: false, blueprintPrefabHint: false };
39
- const head = buffer.subarray(0, bytesRead);
40
- if (head.readUInt32LE(0) !== PACKAGE_MAGIC) {
41
- return { state: "unknown", markers: [], legacyFileVersion: undefined, fileVersionUE4: undefined, meshKindHint: undefined, textureHint: false, cubemapHint: false, soundHint: false, dataClassHint: undefined, textureStackClassHint: undefined, fontHint: false, materialHint: false, levelHint: false, blueprintPrefabHint: false };
42
- }
43
- // Names are stored as length-prefixed ASCII, so a byte search finds them without walking the
44
- // name table — whose layout varies by engine version in ways this check must not depend on.
45
- const markers = EDITOR_ONLY_MARKERS.filter((marker) => head.includes(marker, 0, "latin1"));
46
- const legacyFileVersion = head.readInt32LE(4);
47
- const hasSkeletalClass = head.includes("SkeletalMesh", 0, "latin1");
48
- const hasSkeletalEditorData = head.includes("SkeletalMeshEditorData", 0, "latin1") ||
49
- head.includes("MeshEditorDataObject", 0, "latin1");
50
- const hasStaticClass = head.includes("StaticMesh", 0, "latin1");
51
- const hasDefaultSkeletalClass = head.includes("Default__SkeletalMesh", 0, "latin1");
52
- const hasDefaultStaticClass = head.includes("Default__StaticMesh", 0, "latin1");
53
- const hasTextureClass = head.includes("Texture2D", 0, "latin1");
54
- const hasCubemapClass = head.includes("TextureCube", 0, "latin1");
55
- const hasSoundClass = head.includes("SoundWave", 0, "latin1");
56
- const dataClassHint = ["DataTable", "CurveTable", "StringTable", "CurveFloat", "CurveVector", "CurveLinearColor"]
57
- .find((className) => head.includes(`Default__${className}`, 0, "latin1"));
58
- const textureStackClassHint = ["Texture2DArray", "TextureCubeArray", "VolumeTexture"]
59
- .find((className) => head.includes(`Default__${className}`, 0, "latin1"));
60
- const fontHint = head.includes("Default__FontFace", 0, "latin1") ||
61
- (head.includes("FontBulkData", 0, "latin1") && head.includes("CompositeFont", 0, "latin1"));
62
- const materialHint = head.includes("MaterialEditorOnlyData", 0, "latin1") ||
63
- (head.includes("MaterialInstanceBasePropertyOverrides", 0, "latin1") && head.includes("MaterialInstanceConstant", 0, "latin1"));
64
- const levelHint = file.toLowerCase().endsWith(".umap") &&
65
- head.includes("PersistentLevel", 0, "latin1") && head.includes("WorldSettings", 0, "latin1");
66
- const blueprintPrefabHint = file.toLowerCase().endsWith(".uasset") &&
67
- head.includes("BlueprintGeneratedClass", 0, "latin1") && head.includes("SimpleConstructionScript", 0, "latin1");
68
- return {
69
- state: markers.length > 0 ? "uncooked" : "unknown",
70
- markers,
71
- legacyFileVersion,
72
- fileVersionUE4: head.readInt32LE(12),
73
- meshKindHint: hasSkeletalClass && (hasSkeletalEditorData || (legacyFileVersion <= -8 && hasDefaultSkeletalClass))
74
- ? "skeletal"
75
- : hasStaticClass &&
76
- (markers.some((marker) => marker === "SourceModels" || marker === "MeshDescriptionBulkData") ||
77
- (legacyFileVersion <= -8 && hasDefaultStaticClass))
78
- ? "static"
79
- : undefined,
80
- textureHint: hasTextureClass && markers.includes("AssetImportData"),
81
- cubemapHint: hasCubemapClass && markers.includes("AssetImportData"),
82
- soundHint: hasSoundClass && markers.includes("AssetImportData"),
83
- dataClassHint,
84
- textureStackClassHint,
85
- fontHint,
86
- materialHint,
87
- levelHint,
88
- blueprintPrefabHint,
89
- };
51
+ return bytesRead >= 16 ? buffer.subarray(0, bytesRead) : undefined;
90
52
  }
91
53
  catch {
92
- return { state: "unknown", markers: [], legacyFileVersion: undefined, fileVersionUE4: undefined, meshKindHint: undefined, textureHint: false, cubemapHint: false, soundHint: false, dataClassHint: undefined, textureStackClassHint: undefined, fontHint: false, materialHint: false, levelHint: false, blueprintPrefabHint: false };
54
+ return undefined;
93
55
  }
94
56
  finally {
95
57
  await handle.close();
96
58
  }
97
59
  }
60
+ /** Object names a package names in the name and import tables at its head: the packages it
61
+ * references, such as a static mesh's materials and textures. Those are separate files on disk. */
62
+ export async function readPackageObjectNames(file) {
63
+ const head = await readHead(file);
64
+ const names = new Set();
65
+ if (!head)
66
+ return names;
67
+ for (const match of head.toString("latin1").matchAll(/[\x20-\x7e]{4,}/g)) {
68
+ for (const token of match[0].split(/[^\w]+/)) {
69
+ if (token.length >= 4 && token.length <= 200)
70
+ names.add(token);
71
+ }
72
+ }
73
+ return names;
74
+ }
75
+ /** Reads a bounded prefix of one Unreal package and reports whether it is uncooked editor source.
76
+ *
77
+ * This exists because the failure it detects is otherwise invisible until far too late: `umodel
78
+ * -list` happily reports `StaticMesh` for an uncooked package, so classification passes, and only
79
+ * the export produces nothing — after the whole pack has been downloaded and every package walked.
80
+ * A Fab marketplace pack is Unreal *source*, so this is the common case, not the exotic one. */
81
+ export async function readPackageCooking(file) {
82
+ const head = await readHead(file);
83
+ if (!head || head.readUInt32LE(0) !== PACKAGE_MAGIC)
84
+ return UNKNOWN;
85
+ // Names are stored as length-prefixed ASCII, so a byte search finds them without walking the
86
+ // name table — whose layout varies by engine version in ways this check must not depend on.
87
+ const markers = EDITOR_ONLY_MARKERS.filter((marker) => head.includes(marker, 0, "latin1"));
88
+ const legacyFileVersion = head.readInt32LE(4);
89
+ const hasSkeletalClass = head.includes("SkeletalMesh", 0, "latin1");
90
+ const hasSkeletalEditorData = head.includes("SkeletalMeshEditorData", 0, "latin1") ||
91
+ head.includes("MeshEditorDataObject", 0, "latin1");
92
+ const hasStaticClass = head.includes("StaticMesh", 0, "latin1");
93
+ const hasDefaultSkeletalClass = head.includes("Default__SkeletalMesh", 0, "latin1");
94
+ const hasDefaultStaticClass = head.includes("Default__StaticMesh", 0, "latin1");
95
+ const hasTextureClass = head.includes("Texture2D", 0, "latin1");
96
+ const hasCubemapClass = head.includes("TextureCube", 0, "latin1");
97
+ const hasSoundClass = head.includes("SoundWave", 0, "latin1");
98
+ const dataClassHint = ["DataTable", "CurveTable", "StringTable", "CurveFloat", "CurveVector", "CurveLinearColor"]
99
+ .find((className) => head.includes(`Default__${className}`, 0, "latin1"));
100
+ const textureStackClassHint = ["Texture2DArray", "TextureCubeArray", "VolumeTexture"]
101
+ .find((className) => head.includes(`Default__${className}`, 0, "latin1"));
102
+ const fontHint = head.includes("Default__FontFace", 0, "latin1") ||
103
+ (head.includes("FontBulkData", 0, "latin1") && head.includes("CompositeFont", 0, "latin1"));
104
+ const materialHint = head.includes("MaterialEditorOnlyData", 0, "latin1") ||
105
+ (head.includes("MaterialInstanceBasePropertyOverrides", 0, "latin1") && head.includes("MaterialInstanceConstant", 0, "latin1"));
106
+ const levelHint = file.toLowerCase().endsWith(".umap") &&
107
+ head.includes("PersistentLevel", 0, "latin1") && head.includes("WorldSettings", 0, "latin1");
108
+ const blueprintPrefabHint = file.toLowerCase().endsWith(".uasset") &&
109
+ head.includes("BlueprintGeneratedClass", 0, "latin1") && head.includes("SimpleConstructionScript", 0, "latin1");
110
+ return {
111
+ state: markers.length > 0 ? "uncooked" : "unknown",
112
+ markers,
113
+ legacyFileVersion,
114
+ fileVersionUE4: head.readInt32LE(12),
115
+ // A UE4 header carries no UE5 version at this offset: it holds FileVersionLicenseeUE4, which is
116
+ // a licensee build number. Only a negative legacy version marks the UE5 header layout.
117
+ fileVersionUE5: legacyFileVersion <= -8 ? head.readInt32LE(16) : undefined,
118
+ naniteHint: head.includes("NaniteSettings", 0, "latin1"),
119
+ meshKindHint: hasSkeletalClass && (hasSkeletalEditorData || (legacyFileVersion <= -8 && hasDefaultSkeletalClass))
120
+ ? "skeletal"
121
+ : hasStaticClass &&
122
+ (markers.some((marker) => marker === "SourceModels" || marker === "MeshDescriptionBulkData") ||
123
+ (legacyFileVersion <= -8 && hasDefaultStaticClass))
124
+ ? "static"
125
+ : undefined,
126
+ textureHint: hasTextureClass && markers.includes("AssetImportData"),
127
+ cubemapHint: hasCubemapClass && markers.includes("AssetImportData"),
128
+ soundHint: hasSoundClass && markers.includes("AssetImportData"),
129
+ dataClassHint,
130
+ textureStackClassHint,
131
+ fontHint,
132
+ materialHint,
133
+ levelHint,
134
+ blueprintPrefabHint,
135
+ };
136
+ }
98
137
  //# sourceMappingURL=cooking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cooking.js","sourceRoot":"","sources":["../../src/unreal/cooking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cooking.js","sourceRoot":"","sources":["../../src/unreal/cooking.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type TextureTransform } from "./materials.js";
3
3
  import { type ImportedScene } from "./scenes.js";
4
4
  import { type ExternalTool } from "./toolchain.js";
5
5
  /** Bumped whenever the conversion contract changes; it participates in the reuse cache key. */
6
- export declare const IMPORTER_VERSION = 45;
6
+ export declare const IMPORTER_VERSION = 46;
7
7
  /** Which tool decodes an uncooked mesh package, or undefined when it must be refused. */
8
8
  export declare function uncookedMeshRoute(meshKind: "static" | "skeletal", fileVersionUE4: number | undefined): "umodel" | "mesh-description" | "modern" | undefined;
9
9
  export type ImportErrorCode = "UNREAL_SOURCE_NOT_FOUND" | "UNREAL_SOURCE_EMPTY" | "UNREAL_OUTPUT_INVALID" | "UNREAL_OUTPUT_COLLISION" | "UNREAL_DISK_SPACE" | "UNREAL_EXPORT_EMPTY" | "UNREAL_SOURCE_UNCOOKED" | "UNREAL_SOURCE_UNSUPPORTED" | "UNREAL_GLB_INVALID";
@@ -276,6 +276,8 @@ export interface ImportUnrealRequest {
276
276
  readonly concurrency?: number;
277
277
  readonly keepStaging?: boolean;
278
278
  readonly environment?: NodeJS.ProcessEnv;
279
+ /** Free bytes reported for every volume the pre-flight measures. Injected by tests. */
280
+ readonly freeSpaceBytes?: number | undefined;
279
281
  readonly log?: (message: string) => void;
280
282
  readonly umodel?: ExternalTool;
281
283
  /** Injected by tests or advanced installations; production provisions the pinned converter. */
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../src/unreal/importer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../src/unreal/importer.ts"],"names":[],"mappings":"AASA,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAoBxB,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,YAAY,EAAmD,MAAM,gBAAgB,CAAC;AAIpG,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,KAAK,CAAC;AASnC,yFAAyF;AACzF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,GAAG,UAAU,EAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,QAAQ,GAAG,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAItD;AAED,MAAM,MAAM,eAAe,GACvB,yBAAyB,GACzB,qBAAqB,GACrB,uBAAuB,GACvB,yBAAyB,GACzB,mBAAmB,GACnB,qBAAqB,GACrB,wBAAwB,GACxB,2BAA2B,GAC3B,oBAAoB,CAAC;AAEzB,qBAAa,WAAY,SAAQ,KAAK;IAElC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAE9B,QAAQ,CAAC,SAAS;IAHpB,YACW,IAAI,EAAE,eAAe,EAC9B,OAAO,EAAE,MAAM,EACN,SAAS,UAAQ,EAI3B;CACF;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACtC,EAAE,CAAC;IACJ,QAAQ,CAAC,WAAW,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,oBAAoB,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,KAAK,GAAG,KAAK,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;CACtD;AAED,+FAA+F;AAC/F,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;QACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,6FAA6F;QAC7F,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;QACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,yEAAyE;QACzE,QAAQ,CAAC,OAAO,EACZ;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;SAAE,GACxF,SAAS,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9C,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClF,QAAQ,CAAC,gBAAgB,EAAE;QACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,kGAAkG;QAClG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,2FAA2F;IAC3F,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACxD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sFAAsF;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,+FAA+F;IAC/F,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,EACb;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GACxF,SAAS,CAAC;IACd,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,+FAA+F;IAC/F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC;IAC1C,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC;CACzC;AA2BD,2GAA2G;AAC3G,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,SAAI,GAAG,MAAM,CAI7E;AAKD;gGACgG;AAChG,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF;AAmCD,0FAA0F;AAC1F,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAC/C,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUvE;AAwBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAUxF;AAsBD,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAkFD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,gBAAgB,EAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA6D7C;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAKD,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwD3E;AAUD,qBAAa,qBAAqB;;IAI1B,GAAG,CACP,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAa7C;CACF;AA8BD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAoED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,yFAAyF;IACzF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,iGAAiG;IACjG,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,0FAA0F;IAC1F,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC/D,GAAG,OAAO,CAAC,aAAa,CAAC,CAkPzB;AAiBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsB1D;AAED,8EAA8E;AAC9E,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACnD,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC5C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAU5E;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAyCzE;AAwFD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC,CA2jEvB"}
@@ -8,7 +8,7 @@ import { Document, NodeIO, VertexLayout } from "@gltf-transform/core";
8
8
  import { EXTMeshGPUInstancing, KHRLightsPunctual, KHRMaterialsUnlit } from "@gltf-transform/extensions";
9
9
  import { attachPsaAnimations, parsePsa } from "./psa.js";
10
10
  import { resolveMaterial, } from "./materials.js";
11
- import { readPackageCooking } from "./cooking.js";
11
+ import { readPackageCooking, readPackageObjectNames } from "./cooking.js";
12
12
  import { extractUnrealFonts } from "./fonts.js";
13
13
  import { parseOfflineFontDescriptor, writeOfflineFont } from "./bitmap-fonts.js";
14
14
  import { paperObjectPathToPackage, parsePaperFlipbookDescriptor, parsePaperSpriteDescriptor, writePaperSpriteGlb, } from "./paper2d.js";
@@ -18,7 +18,7 @@ import { assembleSceneGlb, parseUnrealSceneSource, } from "./scenes.js";
18
18
  import { ToolchainError, assertSupportedHost, runBounded } from "./toolchain.js";
19
19
  const statfsAsync = promisify(statfs);
20
20
  /** Bumped whenever the conversion contract changes; it participates in the reuse cache key. */
21
- export const IMPORTER_VERSION = 45;
21
+ export const IMPORTER_VERSION = 46;
22
22
  /** First and last UE4 object versions whose uncooked StaticMesh source models are FMeshDescription
23
23
  * bulk data (UE4.25–4.27), which only the engine-free converter reads. Below that window UE Viewer
24
24
  * reads uncooked source geometry itself, static and skeletal alike: verified on FAB packs saved at
@@ -846,7 +846,9 @@ export function inspectWebAudio(data) {
846
846
  }
847
847
  return undefined;
848
848
  }
849
- async function freeBytes(path) {
849
+ async function freeBytes(path, override) {
850
+ if (override !== undefined)
851
+ return override;
850
852
  try {
851
853
  const info = await statfsAsync(path);
852
854
  return Number(info.bavail) * Number(info.bsize);
@@ -855,6 +857,66 @@ async function freeBytes(path) {
855
857
  return Number.POSITIVE_INFINITY;
856
858
  }
857
859
  }
860
+ /** `Foo.uasset` is accompanied by `Foo.uexp`, `Foo.ubulk`, and `Foo.uptnl`; a partial import
861
+ * reads every file of the stem it converts, and only files of that stem. */
862
+ function packageStem(file) {
863
+ return join(dirname(file), basename(file, extname(file)));
864
+ }
865
+ /** Source bytes a filtered import will actually read: the requested packages, their sidecars, and
866
+ * the packages they name in their import tables — a mesh's materials and textures are separate
867
+ * packages and hold most of a pack's bytes. Counting the whole tree instead refuses every
868
+ * partial import on a full volume, and counting only the requested `.uasset` would let an import
869
+ * start that cannot finish. */
870
+ async function importedPackageBytes(files, wanted) {
871
+ const groups = new Map();
872
+ for (const file of files) {
873
+ const stem = packageStem(file.path);
874
+ const group = groups.get(stem) ?? { primary: file.path, bytes: 0 };
875
+ group.bytes += file.size;
876
+ if ([".uasset", ".umap"].includes(extname(file.path).toLowerCase()))
877
+ group.primary = file.path;
878
+ groups.set(stem, group);
879
+ }
880
+ const stemsByName = new Map();
881
+ for (const stem of groups.keys()) {
882
+ const name = basename(stem);
883
+ stemsByName.set(name, [...(stemsByName.get(name) ?? []), stem]);
884
+ }
885
+ let total = 0;
886
+ const counted = new Set();
887
+ let frontier = [...groups.keys()].filter((stem) => wanted.has(basename(stem)));
888
+ while (frontier.length > 0) {
889
+ const next = [];
890
+ for (const stem of frontier) {
891
+ counted.add(stem);
892
+ total += groups.get(stem).bytes;
893
+ // ponytail: a bounded byte scan for names, not a parsed import table. A name that merely
894
+ // shares a string with the package counts its bytes; a name in another encoding does not.
895
+ for (const name of await readPackageObjectNames(groups.get(stem).primary)) {
896
+ for (const referenced of stemsByName.get(name) ?? []) {
897
+ if (counted.has(referenced))
898
+ continue;
899
+ next.push(referenced);
900
+ }
901
+ }
902
+ }
903
+ frontier = next;
904
+ }
905
+ return total;
906
+ }
907
+ /**
908
+ * Why the modern converter produced nothing, in the terms that decide the next move: what it
909
+ * printed (its last lines, not only the one it exits on), which engine wrote the package, and
910
+ * whether the mesh is Nanite — the commonest reason a UE5 editor mesh has no render data.
911
+ */
912
+ function describeModernFailure(stderr, packages) {
913
+ const lines = stderr.trim().split(/\r?\n/).filter((line) => line.trim()).slice(-20);
914
+ const versions = packages.map(({ entry, legacyFileVersion, fileVersionUE4, fileVersionUE5, naniteHint }) => `${entry.package} is ${legacyFileVersion !== undefined && legacyFileVersion <= -8 ? "UE5" : "UE4"} (legacy file version ${legacyFileVersion ?? "unknown"}), UE4 object version ${fileVersionUE4 ?? "unknown"}, UE5 object version ${fileVersionUE5 ?? "unknown"}; Nanite: ${naniteHint ? "likely (NaniteSettings present)" : "not detected"}`);
915
+ return [
916
+ ...versions,
917
+ ...(lines.length > 0 ? [`Converter output (last ${lines.length} lines):`, ...lines.map((line) => ` ${line.trim()}`)] : []),
918
+ ].join(" ");
919
+ }
858
920
  /**
859
921
  * Converts a local Unreal asset directory into self-contained source GLBs plus a provenance
860
922
  * report. Provider-independent: a pack downloaded by FabCLI and one unzipped by hand take the
@@ -885,6 +947,11 @@ export async function importUnrealDirectory(request) {
885
947
  throw new ImportError("UNREAL_SOURCE_EMPTY", `"${sourceDir}" contains no .uasset or .umap files.`);
886
948
  }
887
949
  const totalBytes = files.reduce((sum, file) => sum + file.size, 0);
950
+ // Only a single-package request is actually filtered: both converters take `--filter` for one
951
+ // package alone and convert the whole tree otherwise, so two or more still need the whole tree.
952
+ const neededBytes = request.onlyPackages?.length === 1 && request.onlyPackages[0]
953
+ ? await importedPackageBytes(files, new Set(request.onlyPackages))
954
+ : totalBytes;
888
955
  const sourceHash = await hashSourceTree(sourceDir, files);
889
956
  const umodel = request.umodel ?? (await ensureUmodel(environment, log));
890
957
  const cacheKey = createHash("sha256")
@@ -931,17 +998,17 @@ export async function importUnrealDirectory(request) {
931
998
  // Unbounded scene assembly can temporarily hold model GLBs plus a source-sized aggregate GLB.
932
999
  // Staging and output may be different volumes, so checking only the cache volume is insufficient.
933
1000
  const minimum = 2 * 1024 ** 3;
934
- const stagingRequired = totalBytes;
935
- const outputRequired = totalBytes * (request.maxTextureSize === undefined ? 2 : 1);
1001
+ const stagingRequired = neededBytes;
1002
+ const outputRequired = neededBytes * (request.maxTextureSize === undefined ? 2 : 1);
936
1003
  const stagingDevice = (await stat(staging)).dev;
937
1004
  const outputDevice = (await stat(promotionParent)).dev;
938
1005
  const required = Math.max(stagingDevice === outputDevice ? stagingRequired + outputRequired : outputRequired, minimum);
939
- const available = await freeBytes(promotionParent);
1006
+ const available = await freeBytes(promotionParent, request.freeSpaceBytes);
940
1007
  if (available < required) {
941
1008
  throw new ImportError("UNREAL_DISK_SPACE", `The import needs about ${Math.ceil(required / 1024 ** 3)} GiB on the output volume; ${Math.floor(available / 1024 ** 3)} GiB is free at ${promotionParent}. Use --max-texture-size or choose an output on a larger volume.`);
942
1009
  }
943
1010
  if (stagingDevice !== outputDevice) {
944
- const stagingAvailable = await freeBytes(staging);
1011
+ const stagingAvailable = await freeBytes(staging, request.freeSpaceBytes);
945
1012
  const separateStagingRequired = Math.max(stagingRequired, minimum);
946
1013
  if (stagingAvailable < separateStagingRequired) {
947
1014
  throw new ImportError("UNREAL_DISK_SPACE", `The import needs about ${Math.ceil(separateStagingRequired / 1024 ** 3)} GiB of staging space; ${Math.floor(stagingAvailable / 1024 ** 3)} GiB is free at ${staging}.`);
@@ -1182,45 +1249,29 @@ export async function importUnrealDirectory(request) {
1182
1249
  const versions = [...new Set(unsupportedUncooked.map((entry) => entry.fileVersionUE4 ?? "unknown"))];
1183
1250
  throw new ImportError("UNREAL_SOURCE_UNSUPPORTED", `${unsupportedUncooked.length} uncooked static-mesh package${unsupportedUncooked.length === 1 ? " uses" : "s use"} UE4 object version ${versions.join(", ")}. UE Viewer reads versions below 517 and the engine-free MeshDescription path reads 517–522 (UE4.25–4.27-era source assets); refusing to guess at a different binary layout.`);
1184
1251
  }
1185
- // Packages share textures, so two exporters can write the same PNG at once and `-nooverwrite`
1186
- // would see a half-written file as done. Listing is read-only and parallel; exporting is not.
1187
- log(`Exporting ${exportableMeshPackages.length} static/skeletal mesh packages with UE Viewer…`);
1188
- const exportFailures = await mapWithConcurrency(exportableMeshPackages, 1, async (entry) => {
1252
+ /** UE Viewer's mesh export, in one place: the primary route for a mesh package, and the retry
1253
+ * for one the modern converter could not read. Returns the reason it failed, or undefined. */
1254
+ const exportMeshWithUmodel = async (entry, out) => {
1255
+ const run = () => runBounded(umodel.path, [`-path=${sourceDir}`, "-export", "-gltf", "-png", "-nooverwrite", `-out=${out}`, entry.selector], { timeoutMs: 1_800_000, maxOutputBytes: 32 * 1024 * 1024 });
1189
1256
  try {
1190
- let run = await runBounded(umodel.path, [
1191
- `-path=${sourceDir}`,
1192
- "-export",
1193
- "-gltf",
1194
- "-png",
1195
- "-nooverwrite",
1196
- `-out=${raw}`,
1197
- entry.selector,
1198
- ], { timeoutMs: 1_800_000, maxOutputBytes: 32 * 1024 * 1024 });
1199
1257
  // UE Viewer occasionally exits non-zero for one package under filesystem pressure even
1200
1258
  // though the same read-only export succeeds immediately afterward. One bounded retry keeps
1201
1259
  // a transient process failure from silently removing a mesh from an otherwise valid pack.
1202
- if (run.code !== 0) {
1203
- run = await runBounded(umodel.path, [
1204
- `-path=${sourceDir}`,
1205
- "-export",
1206
- "-gltf",
1207
- "-png",
1208
- "-nooverwrite",
1209
- `-out=${raw}`,
1210
- entry.selector,
1211
- ], { timeoutMs: 1_800_000, maxOutputBytes: 32 * 1024 * 1024 });
1212
- }
1213
- if (run.code !== 0) {
1214
- return { package: entry.package, reason: `UE Viewer export exited ${run.code}.` };
1215
- }
1216
- return undefined;
1260
+ let outcome = await run();
1261
+ if (outcome.code !== 0)
1262
+ outcome = await run();
1263
+ return outcome.code === 0 ? undefined : `UE Viewer export exited ${outcome.code}.`;
1217
1264
  }
1218
1265
  catch (error) {
1219
- return {
1220
- package: entry.package,
1221
- reason: error instanceof ToolchainError ? error.message : "UE Viewer export failed.",
1222
- };
1266
+ return error instanceof ToolchainError ? error.message : "UE Viewer export failed.";
1223
1267
  }
1268
+ };
1269
+ // Packages share textures, so two exporters can write the same PNG at once and `-nooverwrite`
1270
+ // would see a half-written file as done. Listing is read-only and parallel; exporting is not.
1271
+ log(`Exporting ${exportableMeshPackages.length} static/skeletal mesh packages with UE Viewer…`);
1272
+ const exportFailures = await mapWithConcurrency(exportableMeshPackages, 1, async (entry) => {
1273
+ const reason = await exportMeshWithUmodel(entry, raw);
1274
+ return reason ? { package: entry.package, reason } : undefined;
1224
1275
  });
1225
1276
  for (const failure of exportFailures)
1226
1277
  if (failure)
@@ -1445,6 +1496,8 @@ export async function importUnrealDirectory(request) {
1445
1496
  let uncookedGlbs = new Map();
1446
1497
  let modernConverter;
1447
1498
  let modernGlbs = new Map();
1499
+ /** Meshes UE Viewer exported after the modern converter failed on them. */
1500
+ const recoveredByUmodel = new Set();
1448
1501
  const modernSceneModelSources = [];
1449
1502
  const sceneSources = join(staging, "scene-sources");
1450
1503
  const sceneSourcePaths = new Map();
@@ -1499,26 +1552,41 @@ export async function importUnrealDirectory(request) {
1499
1552
  maxOutputBytes: 64 * 1024 * 1024,
1500
1553
  });
1501
1554
  if (converted.code !== 0) {
1502
- const diagnosticLines = converted.stderr.trim().split(/\r?\n/);
1503
- const diagnostic = diagnosticLines.find((line) => line.includes(".usmap")) ??
1504
- diagnosticLines.find((line) => /exception:/i.test(line)) ??
1505
- diagnosticLines.at(-1);
1506
- throw new ToolchainError("UNREAL_TOOL_FAILED", `The modern UE5 asset converter exited ${converted.code}; no partial output was promoted.${diagnostic ? ` ${diagnostic.trim()}` : ""}`);
1507
- }
1508
- modernGlbs = await indexGlbs(modernRaw);
1509
- assets = mergeExported(assets, await indexExported(modernRaw));
1510
- for (const entry of modernTexturePackages) {
1511
- const name = basename(entry.package, extname(entry.package));
1512
- const source = assets.png.get(name);
1513
- if (source)
1514
- textureSources.set(entry.file, source);
1515
- else
1516
- failed.push({
1517
- package: entry.package,
1518
- reason: "The modern UE5 texture converter produced no PNG for this package.",
1519
- });
1555
+ // A static mesh old enough for UE Viewer never needed the modern converter, so one
1556
+ // converter crash must not take a mesh UE Viewer can read down with it. That fallback is only
1557
+ // honest when it covers everything: recovering part of the request would drop the rest
1558
+ // silently, so anything UE Viewer cannot supply reports the converter's own diagnostic.
1559
+ const retryable = modernPackages.filter(({ entry, fileVersionUE4 }) => entry.meshKind === "static" && uncookedMeshRoute("static", fileVersionUE4) === "umodel");
1560
+ const retried = await mapWithConcurrency(retryable, 1, async ({ entry }) => ({
1561
+ entry,
1562
+ reason: await exportMeshWithUmodel(entry, raw),
1563
+ }));
1564
+ const incomplete = retried.find((result) => result.reason !== undefined);
1565
+ if (retryable.length !== modernPackages.length || incomplete) {
1566
+ throw new ToolchainError("UNREAL_TOOL_FAILED", `The modern UE5 asset converter exited ${converted.code}; no partial output was promoted. ${describeModernFailure(converted.stderr, modernPackages)}`);
1567
+ }
1568
+ for (const result of retried) {
1569
+ recoveredByUmodel.add(basename(result.entry.package, extname(result.entry.package)));
1570
+ }
1571
+ assets = mergeExported(assets, await indexExported(raw));
1572
+ warnings.push(`The modern UE5 asset converter exited ${converted.code}; UE Viewer decoded ${recoveredByUmodel.size} static mesh package${recoveredByUmodel.size === 1 ? "" : "s"} it could read itself.`);
1573
+ }
1574
+ else {
1575
+ modernGlbs = await indexGlbs(modernRaw);
1576
+ assets = mergeExported(assets, await indexExported(modernRaw));
1577
+ for (const entry of modernTexturePackages) {
1578
+ const name = basename(entry.package, extname(entry.package));
1579
+ const source = assets.png.get(name);
1580
+ if (source)
1581
+ textureSources.set(entry.file, source);
1582
+ else
1583
+ failed.push({
1584
+ package: entry.package,
1585
+ reason: "The modern UE5 texture converter produced no PNG for this package.",
1586
+ });
1587
+ }
1588
+ warnings.push(`Decoded ${modernAssetCount} requested modern UE5 asset package${modernAssetCount === 1 ? "" : "s"} without Unreal Engine.`);
1520
1589
  }
1521
- warnings.push(`Decoded ${modernAssetCount} requested modern UE5 asset package${modernAssetCount === 1 ? "" : "s"} without Unreal Engine.`);
1522
1590
  }
1523
1591
  if (modernMapPackages.length > 0) {
1524
1592
  modernConverter ??= request.modernConverter ?? (await ensureModernConverter(environment, log));
@@ -1791,7 +1859,9 @@ export async function importUnrealDirectory(request) {
1791
1859
  }
1792
1860
  warnings.push(`Decoded ${paperPackages.length} requested Paper2D package${paperPackages.length === 1 ? "" : "s"} without Unreal Engine.`);
1793
1861
  }
1794
- const modernNames = new Set(modernPackages.map(({ entry }) => basename(entry.package, extname(entry.package))));
1862
+ const modernNames = new Set(modernPackages
1863
+ .map(({ entry }) => basename(entry.package, extname(entry.package)))
1864
+ .filter((name) => !recoveredByUmodel.has(name)));
1795
1865
  const promotion = await mkdtemp(join(promotionParent, ".threenative-import-"));
1796
1866
  // Only a verified entitlement earns a copyright line. A local pack whose licence nobody
1797
1867
  // checked stays blank so the game's asset health check keeps saying "unknown".