@galacean/engine-loader 1.2.0-alpha.9 → 1.2.0-beta.1

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/module.js CHANGED
@@ -1002,9 +1002,9 @@ var HierarchyParser = /*#__PURE__*/ function() {
1002
1002
  }
1003
1003
  components.set(path + ":" + name + "/" + componentIndexMap[name]++, component);
1004
1004
  });
1005
- for(var i = 0; i < entity.children.length; i++){
1005
+ for(var i = 0, n = entity.children.length; i < n; i++){
1006
1006
  var child = entity.children[i];
1007
- var childPath = path ? path + "/" + child.name : child.name;
1007
+ var childPath = path ? path + "/" + i : "" + i;
1008
1008
  this._traverseAddEntityToMap(child, context, childPath);
1009
1009
  }
1010
1010
  };
@@ -2160,111 +2160,68 @@ function registerGLTFParser(pipeline) {
2160
2160
  };
2161
2161
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
2162
2162
  var componentType = accessor.componentType;
2163
- var bufferView = bufferViews[accessor.bufferView];
2164
- return context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
2165
- var bufferIndex = bufferView.buffer;
2166
- var _bufferViewData_byteOffset;
2167
- var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
2168
- var _accessor_byteOffset;
2169
- var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
2170
- var TypedArray = GLTFUtils.getComponentType(componentType);
2171
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2172
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
2173
- var elementStride = dataElementSize * dataElementBytes;
2174
- var accessorCount = accessor.count;
2175
- var bufferStride = bufferView.byteStride;
2176
- var bufferInfo;
2177
- // According to the glTF official documentation only byteStride not undefined is allowed
2178
- if (bufferStride !== undefined && bufferStride !== elementStride) {
2179
- var bufferSlice = Math.floor(byteOffset / bufferStride);
2180
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
2181
- var accessorBufferCache = context.accessorBufferCache;
2182
- bufferInfo = accessorBufferCache[bufferCacheKey];
2183
- if (!bufferInfo) {
2184
- var offset = bufferByteOffset + bufferSlice * bufferStride;
2185
- var count = accessorCount * (bufferStride / dataElementBytes);
2186
- var data = new TypedArray(bufferViewData.buffer, offset, count);
2187
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
2188
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
2163
+ var TypedArray = GLTFUtils.getComponentType(componentType);
2164
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2165
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
2166
+ var elementStride = dataElementSize * dataElementBytes;
2167
+ var accessorCount = accessor.count;
2168
+ var promise;
2169
+ if (accessor.bufferView !== undefined) {
2170
+ var bufferViewIndex = accessor.bufferView;
2171
+ var bufferView = bufferViews[bufferViewIndex];
2172
+ promise = context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
2173
+ var bufferIndex = bufferView.buffer;
2174
+ var _bufferViewData_byteOffset;
2175
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
2176
+ var _accessor_byteOffset;
2177
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
2178
+ var bufferStride = bufferView.byteStride;
2179
+ var bufferInfo;
2180
+ // According to the glTF official documentation only byteStride not undefined is allowed
2181
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
2182
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
2183
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
2184
+ var accessorBufferCache = context.accessorBufferCache;
2185
+ bufferInfo = accessorBufferCache[bufferCacheKey];
2186
+ if (!bufferInfo) {
2187
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
2188
+ var count = accessorCount * (bufferStride / dataElementBytes);
2189
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
2190
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
2191
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
2192
+ }
2193
+ } else {
2194
+ var offset1 = bufferByteOffset + byteOffset;
2195
+ var count1 = accessorCount * dataElementSize;
2196
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
2197
+ bufferInfo = new BufferInfo(data1, false, elementStride);
2198
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
2189
2199
  }
2190
- } else {
2191
- var offset1 = bufferByteOffset + byteOffset;
2192
- var count1 = accessorCount * dataElementSize;
2193
- var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
2194
- bufferInfo = new BufferInfo(data1, false, elementStride);
2195
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
2196
- }
2197
- if (accessor.sparse) {
2198
- return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
2199
- return bufferInfo;
2200
- });
2201
- }
2202
- return bufferInfo;
2203
- });
2200
+ return bufferInfo;
2201
+ });
2202
+ } else {
2203
+ var count = accessorCount * dataElementSize;
2204
+ var data = new TypedArray(count);
2205
+ var bufferInfo = new BufferInfo(data, false, elementStride);
2206
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
2207
+ promise = Promise.resolve(bufferInfo);
2208
+ }
2209
+ return accessor.sparse ? promise.then(function(bufferInfo) {
2210
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
2211
+ return bufferInfo;
2212
+ });
2213
+ }) : promise;
2204
2214
  };
2205
- GLTFUtils.bufferToVector3Array = function bufferToVector3Array(data, byteStride, accessorByteOffset, count) {
2206
- var bytesPerElement = data.BYTES_PER_ELEMENT;
2207
- var offset = accessorByteOffset % byteStride / bytesPerElement;
2208
- var stride = byteStride / bytesPerElement;
2209
- var vector3s = new Array(count);
2215
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
2216
+ var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
2217
+ var stride = buffer.length / count;
2218
+ var vertices = new Array(count);
2219
+ var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
2210
2220
  for(var i = 0; i < count; i++){
2211
- var index = offset + i * stride;
2212
- vector3s[i] = new Vector3(data[index], data[index + 1], data[index + 2]);
2221
+ var index = baseOffset + i * stride;
2222
+ vertices[i] = new Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
2213
2223
  }
2214
- return vector3s;
2215
- };
2216
- /**
2217
- * @deprecated
2218
- * Get accessor data.
2219
- */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
2220
- var bufferViews = glTF.bufferViews;
2221
- var bufferView = bufferViews[accessor.bufferView];
2222
- var arrayBuffer = buffers[bufferView.buffer];
2223
- var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
2224
- var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
2225
- var byteOffset = accessorByteOffset + bufferViewByteOffset;
2226
- var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
2227
- var length = accessorTypeSize * accessor.count;
2228
- var _bufferView_byteStride;
2229
- var byteStride = (_bufferView_byteStride = bufferView.byteStride) != null ? _bufferView_byteStride : 0;
2230
- var arrayType = GLTFUtils.getComponentType(accessor.componentType);
2231
- var uint8Array;
2232
- if (byteStride) {
2233
- var accessorByteSize = accessorTypeSize * arrayType.BYTES_PER_ELEMENT;
2234
- uint8Array = new Uint8Array(accessor.count * accessorByteSize);
2235
- var originalBufferView = new Uint8Array(arrayBuffer, bufferViewByteOffset, bufferView.byteLength);
2236
- for(var i = 0; i < accessor.count; i++){
2237
- for(var j = 0; j < accessorByteSize; j++){
2238
- uint8Array[i * accessorByteSize + j] = originalBufferView[i * byteStride + accessorByteOffset + j];
2239
- }
2240
- }
2241
- } else {
2242
- uint8Array = new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + length * arrayType.BYTES_PER_ELEMENT));
2243
- }
2244
- var typedArray = new arrayType(uint8Array.buffer);
2245
- if (accessor.sparse) {
2246
- var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
2247
- var indicesBufferView = bufferViews[indices.bufferView];
2248
- var valuesBufferView = bufferViews[values.bufferView];
2249
- var indicesArrayBuffer = buffers[indicesBufferView.buffer];
2250
- var valuesArrayBuffer = buffers[valuesBufferView.buffer];
2251
- var _indices_byteOffset, _indicesBufferView_byteOffset;
2252
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
2253
- var indicesByteLength = indicesBufferView.byteLength;
2254
- var _values_byteOffset, _valuesBufferView_byteOffset;
2255
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
2256
- var valuesByteLength = valuesBufferView.byteLength;
2257
- var indicesType = GLTFUtils.getComponentType(indices.componentType);
2258
- var indicesArray = new indicesType(indicesArrayBuffer, indicesByteOffset, indicesByteLength / indicesType.BYTES_PER_ELEMENT);
2259
- var valuesArray = new arrayType(valuesArrayBuffer, valuesByteOffset, valuesByteLength / arrayType.BYTES_PER_ELEMENT);
2260
- for(var i1 = 0; i1 < count; i1++){
2261
- var replaceIndex = indicesArray[i1];
2262
- for(var j1 = 0; j1 < accessorTypeSize; j1++){
2263
- typedArray[replaceIndex * accessorTypeSize + j1] = valuesArray[i1 * accessorTypeSize + j1];
2264
- }
2265
- }
2266
- }
2267
- return typedArray;
2224
+ return vertices;
2268
2225
  };
2269
2226
  GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
2270
2227
  var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
@@ -2398,7 +2355,7 @@ function registerGLTFParser(pipeline) {
2398
2355
  };
2399
2356
  /**
2400
2357
  * Parse the glb format.
2401
- */ GLTFUtils.parseGLB = function parseGLB(context, glb) {
2358
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2402
2359
  var UINT32_LENGTH = 4;
2403
2360
  var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2404
2361
  var GLB_HEADER_LENGTH = 12;
@@ -2406,7 +2363,7 @@ function registerGLTFParser(pipeline) {
2406
2363
  JSON: 0x4e4f534a,
2407
2364
  BIN: 0x004e4942
2408
2365
  };
2409
- var dataView = new DataView(glb);
2366
+ var dataView = new DataView(originBuffer);
2410
2367
  // read header
2411
2368
  var header = {
2412
2369
  magic: dataView.getUint32(0, true),
@@ -2414,8 +2371,9 @@ function registerGLTFParser(pipeline) {
2414
2371
  length: dataView.getUint32(2 * UINT32_LENGTH, true)
2415
2372
  };
2416
2373
  if (header.magic !== GLB_HEADER_MAGIC) {
2417
- console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
2418
- return null;
2374
+ return {
2375
+ originBuffer: originBuffer
2376
+ };
2419
2377
  }
2420
2378
  // read main data
2421
2379
  var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
@@ -2425,7 +2383,7 @@ function registerGLTFParser(pipeline) {
2425
2383
  console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2426
2384
  return null;
2427
2385
  }
2428
- var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2386
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2429
2387
  var glTF = JSON.parse(Utils.decodeText(glTFData));
2430
2388
  // read all buffers
2431
2389
  var buffers = [];
@@ -2439,7 +2397,7 @@ function registerGLTFParser(pipeline) {
2439
2397
  return null;
2440
2398
  }
2441
2399
  var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2442
- var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
2400
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2443
2401
  buffers.push(buffer);
2444
2402
  restoreGLBBufferSlice.push(new Vector2(currentOffset, chunkLength));
2445
2403
  byteOffset += chunkLength + 2 * UINT32_LENGTH;
@@ -3578,16 +3536,16 @@ var KTX2Transcoder;
3578
3536
  var frame = restoreInfo.blendShape.frames[0];
3579
3537
  var position = restoreInfo.position;
3580
3538
  var positionData = _this._getBufferData(buffers, position.buffer);
3581
- frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.stride, position.byteOffset, position.count);
3539
+ frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.byteOffset, position.count, position.normalized, position.componentType);
3582
3540
  if (restoreInfo.normal) {
3583
3541
  var normal = restoreInfo.normal;
3584
3542
  var normalData = _this._getBufferData(buffers, normal.buffer);
3585
- frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.stride, normal.byteOffset, normal.count);
3543
+ frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.byteOffset, normal.count, normal.normalized, normal.componentType);
3586
3544
  }
3587
3545
  if (restoreInfo.tangent) {
3588
3546
  var tangent = restoreInfo.tangent;
3589
3547
  var tangentData = _this._getBufferData(buffers, tangent.buffer);
3590
- frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.stride, tangent.byteOffset, tangent.count);
3548
+ frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.byteOffset, tangent.count, tangent.normalized, tangent.componentType);
3591
3549
  }
3592
3550
  }
3593
3551
  mesh.uploadData(true);
@@ -3599,8 +3557,13 @@ var KTX2Transcoder;
3599
3557
  };
3600
3558
  _proto._getBufferData = function _getBufferData(buffers, restoreInfo) {
3601
3559
  var main = restoreInfo.main;
3602
- var buffer = buffers[main.bufferIndex];
3603
- var data = new main.TypedArray(buffer, main.byteOffset, main.length);
3560
+ var data;
3561
+ if (main) {
3562
+ var buffer = buffers[main.bufferIndex];
3563
+ data = new main.TypedArray(buffer, main.byteOffset, main.length);
3564
+ } else {
3565
+ data = new main.TypedArray(main.length);
3566
+ }
3604
3567
  var sparseCount = restoreInfo.sparseCount;
3605
3568
  if (sparseCount) {
3606
3569
  var sparseIndex = restoreInfo.sparseIndices;
@@ -3673,11 +3636,12 @@ var KTX2Transcoder;
3673
3636
  };
3674
3637
  /**
3675
3638
  * @internal
3676
- */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, stride, byteOffset, count) {
3639
+ */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, byteOffset, count, normalized, componentType) {
3677
3640
  this.buffer = buffer;
3678
- this.stride = stride;
3679
3641
  this.byteOffset = byteOffset;
3680
3642
  this.count = count;
3643
+ this.normalized = normalized;
3644
+ this.componentType = componentType;
3681
3645
  };
3682
3646
 
3683
3647
  /**
@@ -3853,23 +3817,20 @@ var GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3853
3817
  var requestConfig = {
3854
3818
  type: "arraybuffer"
3855
3819
  };
3856
- var isGLB = this._isGLB(url);
3857
- contentRestorer.isGLB = isGLB;
3858
- var promise = isGLB ? request(url, requestConfig).onProgress(undefined, context._onTaskDetail).then(function(glb) {
3820
+ return request(url, requestConfig).onProgress(undefined, context._onTaskDetail).then(function(buffer) {
3859
3821
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3860
- return GLTFUtils.parseGLB(context, glb);
3861
- }).then(function(param) {
3862
- var glTF = param.glTF, buffers = param.buffers;
3863
- context.buffers = buffers;
3864
- return glTF;
3865
- }) : request(url, {
3866
- type: "json"
3867
- }).onProgress(undefined, context._onTaskDetail);
3868
- return promise;
3869
- };
3870
- _proto._isGLB = function _isGLB(url) {
3871
- var index = url.lastIndexOf(".");
3872
- return url.substring(index + 1, index + 4) === "glb";
3822
+ return GLTFUtils.parseGLB(context, buffer);
3823
+ }).then(function(result) {
3824
+ var _result;
3825
+ if ((_result = result) == null ? void 0 : _result.glTF) {
3826
+ contentRestorer.isGLB = true;
3827
+ context.buffers = result.buffers;
3828
+ return result.glTF;
3829
+ } else {
3830
+ contentRestorer.isGLB = false;
3831
+ return JSON.parse(Utils.decodeText(new Uint8Array(result.originBuffer)));
3832
+ }
3833
+ });
3873
3834
  };
3874
3835
  return GLTFSchemaParser;
3875
3836
  }(GLTFParser);
@@ -3929,13 +3890,13 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3929
3890
  break;
3930
3891
  }
3931
3892
  input[input.length - 1];
3932
- sampleDataCollection.push({
3893
+ sampleDataCollection[j] = {
3933
3894
  type: outputAccessor.type,
3934
3895
  interpolation: samplerInterpolation,
3935
3896
  input: input,
3936
3897
  output: output,
3937
3898
  outputSize: outputStride
3938
- });
3899
+ };
3939
3900
  });
3940
3901
  promises.push(promise);
3941
3902
  };
@@ -3943,11 +3904,12 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3943
3904
  var glTF = context.glTF;
3944
3905
  var accessors = glTF.accessors, bufferViews = glTF.bufferViews;
3945
3906
  var channels = animationInfo.channels, samplers = animationInfo.samplers;
3946
- var sampleDataCollection = new Array();
3907
+ var len = samplers.length;
3908
+ var sampleDataCollection = new Array(len);
3947
3909
  var entities = context.get(GLTFParserType.Entity);
3948
3910
  var promises = new Array();
3949
3911
  // parse samplers
3950
- for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3912
+ for(var j = 0, m = len; j < m; j++)_loop(j);
3951
3913
  promises.push(context.get(GLTFParserType.Scene));
3952
3914
  return Promise.all(promises).then(function() {
3953
3915
  for(var j = 0, m = channels.length; j < m; j++){
@@ -4305,23 +4267,7 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
4305
4267
  var meshRestoreInfo = new ModelMeshRestoreInfo();
4306
4268
  meshRestoreInfo.mesh = mesh1;
4307
4269
  context.contentRestorer.meshes.push(meshRestoreInfo);
4308
- GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, function(attributeSemantic) {
4309
- return null;
4310
- }, function(attributeName, shapeIndex) {
4311
- var shapeAccessorIdx = gltfPrimitive.targets[shapeIndex];
4312
- var attributeAccessorIdx = shapeAccessorIdx[attributeName];
4313
- if (attributeAccessorIdx) {
4314
- var accessor = glTF.accessors[attributeAccessorIdx];
4315
- return GLTFUtils.getAccessorBuffer(context, context.glTF.bufferViews, accessor);
4316
- } else {
4317
- return null;
4318
- }
4319
- }, function() {
4320
- var indexAccessor = glTF.accessors[gltfPrimitive.indices];
4321
- return context.get(GLTFParserType.Buffer).then(function(buffers) {
4322
- return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
4323
- });
4324
- }, context.params.keepMeshData).then(resolve);
4270
+ GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, context.params.keepMeshData).then(resolve);
4325
4271
  }
4326
4272
  });
4327
4273
  };
@@ -4334,7 +4280,7 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
4334
4280
  };
4335
4281
  /**
4336
4282
  * @internal
4337
- */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
4283
+ */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, keepMeshData) {
4338
4284
  var _loop = function(attribute) {
4339
4285
  var accessor = accessors[attributes[attribute]];
4340
4286
  var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor).then(function(accessorBuffer) {
@@ -4429,61 +4375,68 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
4429
4375
  }
4430
4376
  // BlendShapes
4431
4377
  if (targets) {
4432
- promises.push(GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, accessors, targets, getBlendShapeData));
4378
+ promises.push(GLTFMeshParser._createBlendShape(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, targets));
4433
4379
  }
4434
4380
  return Promise.all(promises).then(function() {
4435
4381
  mesh.uploadData(!keepMeshData);
4436
- return Promise.resolve(mesh);
4382
+ return mesh;
4437
4383
  });
4438
4384
  });
4439
4385
  };
4386
+ GLTFMeshParser1._getBlendShapeData = function _getBlendShapeData(context, glTF, accessor) {
4387
+ return GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).then(function(bufferInfo) {
4388
+ var buffer = bufferInfo.data;
4389
+ var _accessor_byteOffset;
4390
+ var byteOffset = bufferInfo.interleaved ? ((_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0) % bufferInfo.stride : 0;
4391
+ var count = accessor.count, normalized = accessor.normalized, componentType = accessor.componentType;
4392
+ var vertices = GLTFUtils.bufferToVector3Array(buffer, byteOffset, count, normalized, componentType);
4393
+ var restoreInfo = new BlendShapeDataRestoreInfo(bufferInfo.restoreInfo, byteOffset, count, normalized, componentType);
4394
+ return {
4395
+ vertices: vertices,
4396
+ restoreInfo: restoreInfo
4397
+ };
4398
+ });
4399
+ };
4440
4400
  /**
4441
4401
  * @internal
4442
- */ GLTFMeshParser1._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, accessors, glTFTargets, getBlendShapeData) {
4443
- var _loop = function(i, n) {
4402
+ */ GLTFMeshParser1._createBlendShape = function _createBlendShape(context, mesh, meshRestoreInfo, glTFMesh, gltfPrimitive, glTFTargets) {
4403
+ var _this = this, _loop = function(i) {
4404
+ var blendShapeData = {};
4405
+ blendShapeCollection[i] = blendShapeData;
4444
4406
  var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
4407
+ var targets = gltfPrimitive.targets[i];
4408
+ var normalTarget = targets["NORMAL"];
4409
+ var tangentTarget = targets["TANGENT"];
4410
+ var hasNormal = normalTarget !== undefined;
4411
+ var hasTangent = tangentTarget !== undefined;
4445
4412
  var promise = Promise.all([
4446
- getBlendShapeData("POSITION", i),
4447
- getBlendShapeData("NORMAL", i),
4448
- getBlendShapeData("TANGENT", i)
4449
- ]).then(function(infos) {
4450
- var posBufferInfo = infos[0];
4451
- var norBufferInfo = infos[1];
4452
- var tanBufferInfo = infos[2];
4453
- var target = glTFTargets[i];
4454
- var posAccessor;
4455
- var norAccessor;
4456
- var tanAccessor;
4457
- var positions = null;
4458
- if (posBufferInfo) {
4459
- posAccessor = accessors[target["POSITION"]];
4460
- var _posAccessor_byteOffset;
4461
- positions = GLTFUtils.bufferToVector3Array(posBufferInfo.data, posBufferInfo.stride, (_posAccessor_byteOffset = posAccessor.byteOffset) != null ? _posAccessor_byteOffset : 0, posAccessor.count);
4462
- }
4463
- var normals = null;
4464
- if (norBufferInfo) {
4465
- norAccessor = accessors[target["NORMAL"]];
4466
- var _norAccessor_byteOffset;
4467
- normals = GLTFUtils.bufferToVector3Array(norBufferInfo.data, norBufferInfo.stride, (_norAccessor_byteOffset = norAccessor.byteOffset) != null ? _norAccessor_byteOffset : 0, norAccessor.count);
4468
- }
4469
- var tangents = null;
4470
- if (tanBufferInfo) {
4471
- tanAccessor = accessors[target["NORMAL"]];
4472
- var _tanAccessor_byteOffset;
4473
- tangents = GLTFUtils.bufferToVector3Array(tanBufferInfo.data, tanBufferInfo.stride, (_tanAccessor_byteOffset = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset : 0, tanAccessor.count);
4474
- }
4413
+ _this._getBlendShapeData(context, glTF, accessors[targets["POSITION"]]),
4414
+ hasNormal ? _this._getBlendShapeData(context, glTF, accessors[normalTarget]) : null,
4415
+ hasTangent ? _this._getBlendShapeData(context, glTF, accessors[tangentTarget]) : null
4416
+ ]).then(function(vertices) {
4417
+ var _tangentData;
4418
+ var positionData = vertices[0], normalData = vertices[1], tangentData = vertices[2];
4475
4419
  var blendShape = new BlendShape(name);
4476
- blendShape.addFrame(1.0, positions, normals, tangents);
4477
- mesh.addBlendShape(blendShape);
4478
- var _posAccessor_byteOffset1, _norAccessor_byteOffset1, _tanAccessor_byteOffset1;
4479
- meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, new BlendShapeDataRestoreInfo(posBufferInfo.restoreInfo, posBufferInfo.stride, (_posAccessor_byteOffset1 = posAccessor.byteOffset) != null ? _posAccessor_byteOffset1 : 0, posAccessor.count), norBufferInfo ? new BlendShapeDataRestoreInfo(norBufferInfo.restoreInfo, norBufferInfo.stride, (_norAccessor_byteOffset1 = norAccessor.byteOffset) != null ? _norAccessor_byteOffset1 : 0, norAccessor.count) : null, tanBufferInfo ? new BlendShapeDataRestoreInfo(tanBufferInfo.restoreInfo, tanBufferInfo.stride, (_tanAccessor_byteOffset1 = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset1 : 0, tanAccessor.count) : null));
4420
+ blendShape.addFrame(1.0, positionData.vertices, hasNormal ? normalData.vertices : null, hasTangent ? tangentData.vertices : null);
4421
+ blendShapeData.blendShape = blendShape;
4422
+ blendShapeData.restoreInfo = new BlendShapeRestoreInfo(blendShape, positionData.restoreInfo, hasNormal ? normalData.restoreInfo : null, hasTangent ? (_tangentData = tangentData) == null ? void 0 : _tangentData.restoreInfo : null);
4480
4423
  });
4481
4424
  promises.push(promise);
4482
4425
  };
4426
+ var glTF = context.glTF;
4427
+ var accessors = glTF.accessors;
4483
4428
  var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
4484
4429
  var promises = new Array();
4485
- for(var i = 0, n = glTFTargets.length; i < n; i++)_loop(i);
4486
- return Promise.all(promises);
4430
+ var blendShapeCount = glTFTargets.length;
4431
+ var blendShapeCollection = new Array(blendShapeCount);
4432
+ for(var i = 0; i < blendShapeCount; i++)_loop(i);
4433
+ return Promise.all(promises).then(function() {
4434
+ for(var _iterator = _create_for_of_iterator_helper_loose(blendShapeCollection), _step; !(_step = _iterator()).done;){
4435
+ var blendShape = _step.value;
4436
+ mesh.addBlendShape(blendShape.blendShape);
4437
+ meshRestoreInfo.blendShapes.push(blendShape.restoreInfo);
4438
+ }
4439
+ });
4487
4440
  };
4488
4441
  return GLTFMeshParser1;
4489
4442
  }(GLTFParser), function() {
@@ -4928,7 +4881,7 @@ var MeshoptDecoder = function() {
4928
4881
  return worker;
4929
4882
  };
4930
4883
  var initWorkers = function initWorkers(count) {
4931
- var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});" + "self.onmessage = workerProcess;" + decode.toString() + workerProcess.toString();
4884
+ var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});\n" + "self.onmessage = workerProcess;\n" + 'function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = (count + 3) & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res == 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res != 0) {\n throw new Error("Malformed buffer data: " + res);\n }\n }\n' + 'function workerProcess(event) {\n ready.then(function () {\n const data = event.data;\n try {\n const target = new Uint8Array(data.count * data.size);\n decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);\n self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [target.buffer]);\n } catch (error) {\n self.postMessage({\n id: data.id,\n count: data.count,\n action: "reject",\n value: error\n });\n }\n });\n }';
4932
4885
  var blob = new Blob([
4933
4886
  source
4934
4887
  ], {
@@ -4967,30 +4920,6 @@ var MeshoptDecoder = function() {
4967
4920
  ]);
4968
4921
  });
4969
4922
  };
4970
- var workerProcess = function workerProcess(event) {
4971
- ready.then(function() {
4972
- var data = event.data;
4973
- try {
4974
- var target = new Uint8Array(data.count * data.size);
4975
- decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
4976
- self.postMessage({
4977
- id: data.id,
4978
- count: data.count,
4979
- action: "resolve",
4980
- value: target
4981
- }, [
4982
- target.buffer
4983
- ]);
4984
- } catch (error) {
4985
- self.postMessage({
4986
- id: data.id,
4987
- count: data.count,
4988
- action: "reject",
4989
- value: error
4990
- });
4991
- }
4992
- });
4993
- };
4994
4923
  var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
4995
4924
  var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
4996
4925
  var wasmpack = new Uint8Array([
@@ -6274,7 +6203,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6274
6203
  // parse ambient light
6275
6204
  var ambient = data.scene.ambient;
6276
6205
  if (ambient) {
6277
- var useCustomAmbient = ambient.specularMode === "Custom";
6206
+ var useCustomAmbient = ambient.specularMode === SpecularMode.Custom;
6278
6207
  var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
6279
6208
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
6280
6209
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
@@ -6302,6 +6231,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6302
6231
  }));
6303
6232
  }
6304
6233
  }
6234
+ // parse background
6305
6235
  var background = data.scene.background;
6306
6236
  scene.background.mode = background.mode;
6307
6237
  switch(scene.background.mode){
@@ -6345,6 +6275,17 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
6345
6275
  var _shadow_shadowTwoCascadeSplits;
6346
6276
  scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
6347
6277
  shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
6278
+ var _shadow_shadowFadeBorder;
6279
+ scene.shadowFadeBorder = (_shadow_shadowFadeBorder = shadow.shadowFadeBorder) != null ? _shadow_shadowFadeBorder : scene.shadowFadeBorder;
6280
+ }
6281
+ // parse fog
6282
+ var fog = data.scene.fog;
6283
+ if (fog) {
6284
+ if (fog.fogMode != undefined) scene.fogMode = fog.fogMode;
6285
+ if (fog.fogStart != undefined) scene.fogStart = fog.fogStart;
6286
+ if (fog.fogEnd != undefined) scene.fogEnd = fog.fogEnd;
6287
+ if (fog.fogDensity != undefined) scene.fogDensity = fog.fogDensity;
6288
+ if (fog.fogColor != undefined) scene.fogColor.copyFrom(fog.fogColor);
6348
6289
  }
6349
6290
  return Promise.all(promises).then(function() {
6350
6291
  resolve(scene);