From 5e0bd20e223fc74f5f2d57b1172ba71da60397fc Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 18:35:46 -0800 Subject: [PATCH 01/14] Reduce point cloud data to positional data --- src/clients/reconstruction-client.js | 7 +++-- src/lib/getDestructuredPointCloud.js | 39 ++++++++++++++++++++++++++++ src/lib/index.js | 2 ++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/lib/getDestructuredPointCloud.js create mode 100644 src/lib/index.js diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 3e4cae49..5a5dfc12 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -22,6 +22,7 @@ import { distanceFloats2Canvas, depthFloats2Canvas, } from '../generators/sg-debug.js'; +import { getDestructuredPointCloud } from '../lib/index.js'; // @@ -462,7 +463,9 @@ export async function getPointCloud(blob, { }); if (res.ok) { const headers = Object.fromEntries(res.headers.entries()); - const arrayBuffer = await res.arrayBuffer(); + const arrayBuffer = getDestructuredPointCloud( + await res.arrayBuffer() + ).points; return { headers, arrayBuffer, @@ -516,4 +519,4 @@ export function pointCloudArrayBufferToColorAttributeArray(labelImageData, uint8 // none } } -} \ No newline at end of file +} diff --git a/src/lib/getDestructuredPointCloud.js b/src/lib/getDestructuredPointCloud.js new file mode 100644 index 00000000..3c12e797 --- /dev/null +++ b/src/lib/getDestructuredPointCloud.js @@ -0,0 +1,39 @@ + +const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; + + +/** + * Destructure a point cloud into its component parts. + */ +export function getDestructuredPointCloud(arrayBuffer) { + const numPoints = arrayBuffer.byteLength / pointcloudStride; + const points = new Float32Array(numPoints * 3); + const colors = new Uint8Array(numPoints * 3); + const intensities = new Uint8Array(numPoints); + const classifications = new Uint8Array(numPoints); + + let pointIndex = 0; + let colorIndex = 0; + let intensityIndex = 0; + let classificationIndex = 0; + + for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i, true); + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 4, true); + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 8, true); + + colors[colorIndex++] = arrayBuffer[i + 12]; + colors[colorIndex++] = arrayBuffer[i + 13]; + colors[colorIndex++] = arrayBuffer[i + 14]; + + intensities[intensityIndex++] = arrayBuffer[i + 15]; + classifications[classificationIndex++] = arrayBuffer[i + 16]; + } + + return { + points: points.buffer, + colors: colors.buffer, + intensities: intensities.buffer, + classifications: classifications.buffer, + }; +} diff --git a/src/lib/index.js b/src/lib/index.js new file mode 100644 index 00000000..b52f8024 --- /dev/null +++ b/src/lib/index.js @@ -0,0 +1,2 @@ + +export { getDestructuredPointCloud } from './getDestructuredPointCloud.js'; From fb7c7ef81b3ea7c03014f8295f6ed033453fc3d4 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 20:27:26 -0800 Subject: [PATCH 02/14] Cache data view --- src/lib/getDestructuredPointCloud.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/getDestructuredPointCloud.js b/src/lib/getDestructuredPointCloud.js index 3c12e797..96c3faf1 100644 --- a/src/lib/getDestructuredPointCloud.js +++ b/src/lib/getDestructuredPointCloud.js @@ -11,6 +11,7 @@ export function getDestructuredPointCloud(arrayBuffer) { const colors = new Uint8Array(numPoints * 3); const intensities = new Uint8Array(numPoints); const classifications = new Uint8Array(numPoints); + const dataView = new DataView(arrayBuffer); let pointIndex = 0; let colorIndex = 0; @@ -18,9 +19,9 @@ export function getDestructuredPointCloud(arrayBuffer) { let classificationIndex = 0; for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i, true); - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 4, true); - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 8, true); + points[pointIndex++] = dataView.getFloat32(i, true); + points[pointIndex++] = dataView.getFloat32(i + 4, true); + points[pointIndex++] = dataView.getFloat32(i + 8, true); colors[colorIndex++] = arrayBuffer[i + 12]; colors[colorIndex++] = arrayBuffer[i + 13]; From 14a5f6053b8e5269d5f369a626d04598180c27a3 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 20:34:48 -0800 Subject: [PATCH 03/14] Use local variable instead of inner await --- src/clients/reconstruction-client.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 5a5dfc12..6ff82c05 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -463,9 +463,11 @@ export async function getPointCloud(blob, { }); if (res.ok) { const headers = Object.fromEntries(res.headers.entries()); - const arrayBuffer = getDestructuredPointCloud( - await res.arrayBuffer() - ).points; + + // This will probably be handled server-side eventually. + const _arrayBuffer = await res.arrayBuffer(); + const arrayBuffer = getDestructuredPointCloud(_arrayBuffer).points; + return { headers, arrayBuffer, From 1a81b82cf155cb85bd91b49e8ae9dc4f66636eda Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 13:52:20 -0800 Subject: [PATCH 04/14] rename getDestructuredPointCloud move to utils --- src/clients/reconstruction-client.js | 4 ++-- src/lib/index.js | 2 -- .../getDestructuredPointCloud.js => utils/point-cloud.js} | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 src/lib/index.js rename src/{lib/getDestructuredPointCloud.js => utils/point-cloud.js} (95%) diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 6ff82c05..cdc6c278 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -22,7 +22,7 @@ import { distanceFloats2Canvas, depthFloats2Canvas, } from '../generators/sg-debug.js'; -import { getDestructuredPointCloud } from '../lib/index.js'; +import { destructurePointCloud } from '../utils/point-cloud.js'; // @@ -466,7 +466,7 @@ export async function getPointCloud(blob, { // This will probably be handled server-side eventually. const _arrayBuffer = await res.arrayBuffer(); - const arrayBuffer = getDestructuredPointCloud(_arrayBuffer).points; + const arrayBuffer = destructurePointCloud(_arrayBuffer).points; return { headers, diff --git a/src/lib/index.js b/src/lib/index.js deleted file mode 100644 index b52f8024..00000000 --- a/src/lib/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -export { getDestructuredPointCloud } from './getDestructuredPointCloud.js'; diff --git a/src/lib/getDestructuredPointCloud.js b/src/utils/point-cloud.js similarity index 95% rename from src/lib/getDestructuredPointCloud.js rename to src/utils/point-cloud.js index 96c3faf1..c1be6b2e 100644 --- a/src/lib/getDestructuredPointCloud.js +++ b/src/utils/point-cloud.js @@ -5,7 +5,7 @@ const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; /** * Destructure a point cloud into its component parts. */ -export function getDestructuredPointCloud(arrayBuffer) { +export function destructurePointCloud( arrayBuffer) { const numPoints = arrayBuffer.byteLength / pointcloudStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); From a1e0919f51eb4cb31d4aa0cf6af3cd790d22f87f Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:16:59 -0800 Subject: [PATCH 05/14] Use memoized point cloud stride --- src/utils/point-cloud.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/utils/point-cloud.js b/src/utils/point-cloud.js index c1be6b2e..122db811 100644 --- a/src/utils/point-cloud.js +++ b/src/utils/point-cloud.js @@ -1,12 +1,11 @@ - -const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; +import { pointCloudFullStride } from '../zine/zine-constants.js' /** * Destructure a point cloud into its component parts. */ export function destructurePointCloud( arrayBuffer) { - const numPoints = arrayBuffer.byteLength / pointcloudStride; + const numPoints = arrayBuffer.byteLength / pointCloudFullStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); const intensities = new Uint8Array(numPoints); @@ -18,7 +17,7 @@ export function destructurePointCloud( arrayBuffer) { let intensityIndex = 0; let classificationIndex = 0; - for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { + for (let i = 0; i < arrayBuffer.byteLength; i += pointCloudFullStride) { points[pointIndex++] = dataView.getFloat32(i, true); points[pointIndex++] = dataView.getFloat32(i + 4, true); points[pointIndex++] = dataView.getFloat32(i + 8, true); From 34ebdea3c42ab566afa555ff0fc280c30f3a4439 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:17:57 -0800 Subject: [PATCH 06/14] Lint code --- src/utils/point-cloud.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/point-cloud.js b/src/utils/point-cloud.js index 122db811..3e5f8dd4 100644 --- a/src/utils/point-cloud.js +++ b/src/utils/point-cloud.js @@ -4,7 +4,7 @@ import { pointCloudFullStride } from '../zine/zine-constants.js' /** * Destructure a point cloud into its component parts. */ -export function destructurePointCloud( arrayBuffer) { +export function destructurePointCloud(arrayBuffer) { const numPoints = arrayBuffer.byteLength / pointCloudFullStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); From 19c2a41c208312d26fa1b52569d3ab89c4e5c0da Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 18:35:46 -0800 Subject: [PATCH 07/14] Reduce point cloud data to positional data --- src/clients/reconstruction-client.js | 7 +++-- src/lib/getDestructuredPointCloud.js | 39 ++++++++++++++++++++++++++++ src/lib/index.js | 2 ++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/lib/getDestructuredPointCloud.js create mode 100644 src/lib/index.js diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 3e4cae49..5a5dfc12 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -22,6 +22,7 @@ import { distanceFloats2Canvas, depthFloats2Canvas, } from '../generators/sg-debug.js'; +import { getDestructuredPointCloud } from '../lib/index.js'; // @@ -462,7 +463,9 @@ export async function getPointCloud(blob, { }); if (res.ok) { const headers = Object.fromEntries(res.headers.entries()); - const arrayBuffer = await res.arrayBuffer(); + const arrayBuffer = getDestructuredPointCloud( + await res.arrayBuffer() + ).points; return { headers, arrayBuffer, @@ -516,4 +519,4 @@ export function pointCloudArrayBufferToColorAttributeArray(labelImageData, uint8 // none } } -} \ No newline at end of file +} diff --git a/src/lib/getDestructuredPointCloud.js b/src/lib/getDestructuredPointCloud.js new file mode 100644 index 00000000..3c12e797 --- /dev/null +++ b/src/lib/getDestructuredPointCloud.js @@ -0,0 +1,39 @@ + +const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; + + +/** + * Destructure a point cloud into its component parts. + */ +export function getDestructuredPointCloud(arrayBuffer) { + const numPoints = arrayBuffer.byteLength / pointcloudStride; + const points = new Float32Array(numPoints * 3); + const colors = new Uint8Array(numPoints * 3); + const intensities = new Uint8Array(numPoints); + const classifications = new Uint8Array(numPoints); + + let pointIndex = 0; + let colorIndex = 0; + let intensityIndex = 0; + let classificationIndex = 0; + + for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i, true); + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 4, true); + points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 8, true); + + colors[colorIndex++] = arrayBuffer[i + 12]; + colors[colorIndex++] = arrayBuffer[i + 13]; + colors[colorIndex++] = arrayBuffer[i + 14]; + + intensities[intensityIndex++] = arrayBuffer[i + 15]; + classifications[classificationIndex++] = arrayBuffer[i + 16]; + } + + return { + points: points.buffer, + colors: colors.buffer, + intensities: intensities.buffer, + classifications: classifications.buffer, + }; +} diff --git a/src/lib/index.js b/src/lib/index.js new file mode 100644 index 00000000..b52f8024 --- /dev/null +++ b/src/lib/index.js @@ -0,0 +1,2 @@ + +export { getDestructuredPointCloud } from './getDestructuredPointCloud.js'; From 8dfcebe7f3f7d3d2414221f166527ae438a2c4b4 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 20:27:26 -0800 Subject: [PATCH 08/14] Cache data view --- src/lib/getDestructuredPointCloud.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/getDestructuredPointCloud.js b/src/lib/getDestructuredPointCloud.js index 3c12e797..96c3faf1 100644 --- a/src/lib/getDestructuredPointCloud.js +++ b/src/lib/getDestructuredPointCloud.js @@ -11,6 +11,7 @@ export function getDestructuredPointCloud(arrayBuffer) { const colors = new Uint8Array(numPoints * 3); const intensities = new Uint8Array(numPoints); const classifications = new Uint8Array(numPoints); + const dataView = new DataView(arrayBuffer); let pointIndex = 0; let colorIndex = 0; @@ -18,9 +19,9 @@ export function getDestructuredPointCloud(arrayBuffer) { let classificationIndex = 0; for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i, true); - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 4, true); - points[pointIndex++] = new DataView(arrayBuffer).getFloat32(i + 8, true); + points[pointIndex++] = dataView.getFloat32(i, true); + points[pointIndex++] = dataView.getFloat32(i + 4, true); + points[pointIndex++] = dataView.getFloat32(i + 8, true); colors[colorIndex++] = arrayBuffer[i + 12]; colors[colorIndex++] = arrayBuffer[i + 13]; From 5fd2a14aa764f6af3036cfad0f2341ea315f04e0 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Sat, 17 Dec 2022 20:34:48 -0800 Subject: [PATCH 09/14] Use local variable instead of inner await --- src/clients/reconstruction-client.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 5a5dfc12..6ff82c05 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -463,9 +463,11 @@ export async function getPointCloud(blob, { }); if (res.ok) { const headers = Object.fromEntries(res.headers.entries()); - const arrayBuffer = getDestructuredPointCloud( - await res.arrayBuffer() - ).points; + + // This will probably be handled server-side eventually. + const _arrayBuffer = await res.arrayBuffer(); + const arrayBuffer = getDestructuredPointCloud(_arrayBuffer).points; + return { headers, arrayBuffer, From b755d06b586a8d9d4b07816ec08d5f007e21b3e4 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 13:52:20 -0800 Subject: [PATCH 10/14] rename getDestructuredPointCloud move to utils --- src/clients/reconstruction-client.js | 4 ++-- src/lib/index.js | 2 -- .../getDestructuredPointCloud.js => utils/point-cloud.js} | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 src/lib/index.js rename src/{lib/getDestructuredPointCloud.js => utils/point-cloud.js} (95%) diff --git a/src/clients/reconstruction-client.js b/src/clients/reconstruction-client.js index 6ff82c05..cdc6c278 100644 --- a/src/clients/reconstruction-client.js +++ b/src/clients/reconstruction-client.js @@ -22,7 +22,7 @@ import { distanceFloats2Canvas, depthFloats2Canvas, } from '../generators/sg-debug.js'; -import { getDestructuredPointCloud } from '../lib/index.js'; +import { destructurePointCloud } from '../utils/point-cloud.js'; // @@ -466,7 +466,7 @@ export async function getPointCloud(blob, { // This will probably be handled server-side eventually. const _arrayBuffer = await res.arrayBuffer(); - const arrayBuffer = getDestructuredPointCloud(_arrayBuffer).points; + const arrayBuffer = destructurePointCloud(_arrayBuffer).points; return { headers, diff --git a/src/lib/index.js b/src/lib/index.js deleted file mode 100644 index b52f8024..00000000 --- a/src/lib/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -export { getDestructuredPointCloud } from './getDestructuredPointCloud.js'; diff --git a/src/lib/getDestructuredPointCloud.js b/src/utils/point-cloud.js similarity index 95% rename from src/lib/getDestructuredPointCloud.js rename to src/utils/point-cloud.js index 96c3faf1..c1be6b2e 100644 --- a/src/lib/getDestructuredPointCloud.js +++ b/src/utils/point-cloud.js @@ -5,7 +5,7 @@ const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; /** * Destructure a point cloud into its component parts. */ -export function getDestructuredPointCloud(arrayBuffer) { +export function destructurePointCloud( arrayBuffer) { const numPoints = arrayBuffer.byteLength / pointcloudStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); From 00cbdca436597a593268a125a95663434ac7eb32 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:16:59 -0800 Subject: [PATCH 11/14] Use memoized point cloud stride --- src/utils/point-cloud.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/utils/point-cloud.js b/src/utils/point-cloud.js index c1be6b2e..122db811 100644 --- a/src/utils/point-cloud.js +++ b/src/utils/point-cloud.js @@ -1,12 +1,11 @@ - -const pointcloudStride = 4 + 4 + 4 + 1 + 1 + 1; +import { pointCloudFullStride } from '../zine/zine-constants.js' /** * Destructure a point cloud into its component parts. */ export function destructurePointCloud( arrayBuffer) { - const numPoints = arrayBuffer.byteLength / pointcloudStride; + const numPoints = arrayBuffer.byteLength / pointCloudFullStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); const intensities = new Uint8Array(numPoints); @@ -18,7 +17,7 @@ export function destructurePointCloud( arrayBuffer) { let intensityIndex = 0; let classificationIndex = 0; - for (let i = 0; i < arrayBuffer.byteLength; i += pointcloudStride) { + for (let i = 0; i < arrayBuffer.byteLength; i += pointCloudFullStride) { points[pointIndex++] = dataView.getFloat32(i, true); points[pointIndex++] = dataView.getFloat32(i + 4, true); points[pointIndex++] = dataView.getFloat32(i + 8, true); From 04a7acbfc478a61cd0bcd64ce01137ecd493c89b Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Tue, 20 Dec 2022 14:17:57 -0800 Subject: [PATCH 12/14] Lint code --- src/utils/point-cloud.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/point-cloud.js b/src/utils/point-cloud.js index 122db811..3e5f8dd4 100644 --- a/src/utils/point-cloud.js +++ b/src/utils/point-cloud.js @@ -4,7 +4,7 @@ import { pointCloudFullStride } from '../zine/zine-constants.js' /** * Destructure a point cloud into its component parts. */ -export function destructurePointCloud( arrayBuffer) { +export function destructurePointCloud(arrayBuffer) { const numPoints = arrayBuffer.byteLength / pointCloudFullStride; const points = new Float32Array(numPoints * 3); const colors = new Uint8Array(numPoints * 3); From 3995f5a4ccd8d7e8f4582dd278f3001ccfeb57a8 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Thu, 22 Dec 2022 02:50:47 -0800 Subject: [PATCH 13/14] Bump zine --- src/zine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zine b/src/zine index 0f31982b..fb3fd8c1 160000 --- a/src/zine +++ b/src/zine @@ -1 +1 @@ -Subproject commit 0f31982b9bc3ec848ce82d25a9383d5034f38439 +Subproject commit fb3fd8c1b186b1d01e205a7a03c49a5a7dfa303c From 6610583f335e2dca74f3ff87689dfd722318eb73 Mon Sep 17 00:00:00 2001 From: soulofmischief <30357883+soulofmischief@users.noreply.github.com> Date: Thu, 22 Dec 2022 03:11:30 -0800 Subject: [PATCH 14/14] Bump zine --- src/zine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zine b/src/zine index fb3fd8c1..ccfb4037 160000 --- a/src/zine +++ b/src/zine @@ -1 +1 @@ -Subproject commit fb3fd8c1b186b1d01e205a7a03c49a5a7dfa303c +Subproject commit ccfb403754cd0f94a1c410dbda26dc37d33c5aab