From a5574c5a4da7ea1af59782ea5f87f9dc4dcbfd0a Mon Sep 17 00:00:00 2001 From: Aarne Laur Date: Mon, 2 Mar 2026 17:29:59 +0100 Subject: [PATCH 1/4] Outline for the possible load test setup --- loadtest/.gitignore | 2 + loadtest/README.md | 90 +++++ loadtest/bridge-graphql/Dockerfile | 12 + loadtest/bridge-graphql/bridge-graphql.ts | 67 ++++ loadtest/bridge-graphql/endpoints.bridge | 78 ++++ loadtest/bridge-graphql/package.json | 10 + loadtest/bridge-graphql/schema.graphql | 41 +++ loadtest/bridge-graphql/tsconfig.json | 10 + loadtest/bridge-standalone/Dockerfile | 12 + .../bridge-standalone/bridge-standalone.ts | 54 +++ loadtest/bridge-standalone/endpoints.bridge | 78 ++++ loadtest/bridge-standalone/package.json | 8 + loadtest/bridge-standalone/tsconfig.json | 10 + loadtest/dependency/Dockerfile | 11 + loadtest/dependency/data/catalog.json | 1 + loadtest/dependency/data/list.json | 1 + loadtest/dependency/data/simple.json | 1 + loadtest/dependency/data/variant-1.json | 1 + loadtest/dependency/data/variant-10.json | 1 + loadtest/dependency/data/variant-2.json | 1 + loadtest/dependency/data/variant-3.json | 1 + loadtest/dependency/data/variant-4.json | 1 + loadtest/dependency/data/variant-5.json | 1 + loadtest/dependency/data/variant-6.json | 1 + loadtest/dependency/data/variant-7.json | 1 + loadtest/dependency/data/variant-8.json | 1 + loadtest/dependency/data/variant-9.json | 1 + loadtest/dependency/nginx.conf | 21 ++ loadtest/docker-compose.yml | 84 +++++ loadtest/handcoded/Dockerfile | 9 + loadtest/handcoded/handcoded.ts | 110 ++++++ loadtest/handcoded/tsconfig.json | 10 + loadtest/k6/test.js | 282 +++++++++++++++ loadtest/package.json | 14 + loadtest/scripts/generate-data.mjs | 98 +++++ loadtest/scripts/report.mjs | 341 ++++++++++++++++++ 36 files changed, 1465 insertions(+) create mode 100644 loadtest/.gitignore create mode 100644 loadtest/README.md create mode 100644 loadtest/bridge-graphql/Dockerfile create mode 100644 loadtest/bridge-graphql/bridge-graphql.ts create mode 100644 loadtest/bridge-graphql/endpoints.bridge create mode 100644 loadtest/bridge-graphql/package.json create mode 100644 loadtest/bridge-graphql/schema.graphql create mode 100644 loadtest/bridge-graphql/tsconfig.json create mode 100644 loadtest/bridge-standalone/Dockerfile create mode 100644 loadtest/bridge-standalone/bridge-standalone.ts create mode 100644 loadtest/bridge-standalone/endpoints.bridge create mode 100644 loadtest/bridge-standalone/package.json create mode 100644 loadtest/bridge-standalone/tsconfig.json create mode 100644 loadtest/dependency/Dockerfile create mode 100644 loadtest/dependency/data/catalog.json create mode 100644 loadtest/dependency/data/list.json create mode 100644 loadtest/dependency/data/simple.json create mode 100644 loadtest/dependency/data/variant-1.json create mode 100644 loadtest/dependency/data/variant-10.json create mode 100644 loadtest/dependency/data/variant-2.json create mode 100644 loadtest/dependency/data/variant-3.json create mode 100644 loadtest/dependency/data/variant-4.json create mode 100644 loadtest/dependency/data/variant-5.json create mode 100644 loadtest/dependency/data/variant-6.json create mode 100644 loadtest/dependency/data/variant-7.json create mode 100644 loadtest/dependency/data/variant-8.json create mode 100644 loadtest/dependency/data/variant-9.json create mode 100644 loadtest/dependency/nginx.conf create mode 100644 loadtest/docker-compose.yml create mode 100644 loadtest/handcoded/Dockerfile create mode 100644 loadtest/handcoded/handcoded.ts create mode 100644 loadtest/handcoded/tsconfig.json create mode 100644 loadtest/k6/test.js create mode 100644 loadtest/package.json create mode 100644 loadtest/scripts/generate-data.mjs create mode 100644 loadtest/scripts/report.mjs diff --git a/loadtest/.gitignore b/loadtest/.gitignore new file mode 100644 index 00000000..ea556443 --- /dev/null +++ b/loadtest/.gitignore @@ -0,0 +1,2 @@ +results/ +node_modules/ diff --git a/loadtest/README.md b/loadtest/README.md new file mode 100644 index 00000000..736d548e --- /dev/null +++ b/loadtest/README.md @@ -0,0 +1,90 @@ +# Bridge Load Test + +Compares three server implementations against a shared dependency emulator +using [k6](https://k6.io). Each service has its own Docker image. + +## Services + +| Service | What it runs | Port | +| -------------------- | --------------------------------------------- | ---- | +| `dependency` | nginx serving static JSON fixtures | 8080 | +| `bridge-standalone` | Node.js (`executeBridge`) | 3000 | +| `bridge-graphql` | Node.js (`bridgeTransform` + yoga) | 3000 | +| `handcoded` | Node.js (plain `fetch` + manual map) | 3000 | + +## Scenarios + +| Scenario | Description | +| --------- | -------------------------------------------------- | +| `simple` | Fetch one object, map 7 fields | +| `array` | Fetch 100-item list, map 4 fields per item | +| `complex` | 3 parallel fetches + array mapping + field merging | + +## Quick start + +```bash +cd loadtest + +# Build & run the full sequential benchmark (~7 min) +docker compose up -d --build +docker compose run --rm k6 +node scripts/report.mjs --out report.md +docker compose down + +# Or use the npm scripts: +npm run up && npm test && npm run report && npm run down + +# Quick smoke test (parallel, ~15s) +PROFILE=quick docker compose run --rm k6 +``` + +## Directory layout + +``` +loadtest/ +├── docker-compose.yml orchestration +├── package.json convenience npm scripts +│ +├── dependency/ nginx static JSON server +│ ├── Dockerfile +│ ├── nginx.conf +│ └── data/ pre-generated JSON fixtures +│ +├── bridge-standalone/ Node.js executeBridge server +│ ├── Dockerfile +│ ├── bridge-standalone.ts +│ ├── endpoints.bridge +│ ├── package.json +│ └── tsconfig.json +│ +├── bridge-graphql/ Node.js graphql-yoga + bridgeTransform +│ ├── Dockerfile +│ ├── bridge-graphql.ts +│ ├── endpoints.bridge +│ ├── schema.graphql +│ ├── package.json +│ └── tsconfig.json +│ +├── handcoded/ Node.js hand-coded baseline +│ ├── Dockerfile +│ ├── handcoded.ts +│ └── tsconfig.json +│ +├── k6/ +│ └── test.js k6 load test script +│ +├── scripts/ +│ ├── generate-data.mjs regenerate JSON fixtures +│ └── report.mjs parse k6 output → comparison table +│ +└── results/ k6 output (gitignored) +``` + +## Regenerating test data + +```bash +node scripts/generate-data.mjs +``` + +This writes JSON files into `dependency/data/`. The checked-in files are ready +to use — regenerate only if you want to change the fixture shape. diff --git a/loadtest/bridge-graphql/Dockerfile b/loadtest/bridge-graphql/Dockerfile new file mode 100644 index 00000000..e0e05844 --- /dev/null +++ b/loadtest/bridge-graphql/Dockerfile @@ -0,0 +1,12 @@ +# Bridge GraphQL — graphql-yoga server with bridgeTransform. + +FROM node:24-slim + +WORKDIR /app +COPY package.json . +RUN npm install --omit=dev + +COPY . . + +EXPOSE 3000 +CMD ["node", "--experimental-transform-types", "bridge-graphql.ts"] diff --git a/loadtest/bridge-graphql/bridge-graphql.ts b/loadtest/bridge-graphql/bridge-graphql.ts new file mode 100644 index 00000000..00725cca --- /dev/null +++ b/loadtest/bridge-graphql/bridge-graphql.ts @@ -0,0 +1,67 @@ +/** + * Bridge GraphQL — graphql-yoga server with bridgeTransform. + * + * Endpoints: + * POST /graphql — GraphQL endpoint + * GET /health — health check + */ + +import { createServer } from "node:http"; +import { readFileSync } from "node:fs"; +import { createSchema, createYoga } from "graphql-yoga"; +import { bridgeTransform, parseBridge } from "@stackables/bridge"; + +const PORT = parseInt(process.env.PORT || "3000", 10); + +const typeDefs = readFileSync( + new URL("./schema.graphql", import.meta.url), + "utf-8", +); + +const document = parseBridge( + readFileSync(new URL("./endpoints.bridge", import.meta.url), "utf-8"), +); + +const schema = bridgeTransform(createSchema({ typeDefs }), document); + +const yoga = createYoga({ + schema, + graphqlEndpoint: "/graphql", + logging: false, +}); + +// Wrap yoga with health check +const server = createServer(async (req, res) => { + if (req.url === "/health") { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end('{"status":"ok"}'); + return; + } + + // Delegate to yoga + const response = await yoga.fetch(`http://localhost:${PORT}${req.url}`, { + method: req.method!, + headers: req.headers as Record, + body: + req.method === "POST" + ? await new Promise((resolve) => { + let data = ""; + req.on("data", (chunk: Buffer) => { + data += chunk.toString(); + }); + req.on("end", () => resolve(data)); + }) + : undefined, + }); + + res.writeHead( + response.status, + Object.fromEntries(response.headers.entries()), + ); + const body = await response.text(); + res.end(body); +}); + +server.listen(PORT, () => { + console.log(`Bridge GraphQL server listening on :${PORT}`); +}); diff --git a/loadtest/bridge-graphql/endpoints.bridge b/loadtest/bridge-graphql/endpoints.bridge new file mode 100644 index 00000000..609ba5ce --- /dev/null +++ b/loadtest/bridge-graphql/endpoints.bridge @@ -0,0 +1,78 @@ +version 1.5 + +# ── Dependency tools ────────────────────────────────────────────────────── + +tool fetchSimple from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/simple + .cache = 0 +} + +tool fetchList from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/list + .cache = 0 +} + +tool fetchCatalog from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/catalog + .cache = 0 +} + +# ── Simple: fetch one object, map fields ────────────────────────────────── + +bridge Query.simple { + with fetchSimple as emp + with output as o + + o.id <- emp.id + o.firstName <- emp.first_name + o.lastName <- emp.last_name + o.email <- emp.email_address + o.role <- emp.role + o.department <- emp.department_info.name + o.building <- emp.department_info.building +} + +# ── Array: fetch list, map 1000 items ──────────────────────────────────── + +bridge Query.arrayMap { + with fetchList as list + with output as o + + o.items <- list[] as item { + .id <- item.item_id + .name <- item.item_name + .category <- item.item_category + .price <- item.unit_price + } +} + +# ── Complex: 3 parallel fetches + array mapping + multi-source merge ────── + +bridge Query.complex { + with fetchSimple as emp + with fetchList as list + with fetchCatalog as catalog + with output as o + + # Flat fields from the simple endpoint + o.assignee <- emp.first_name + o.email <- emp.email_address + o.department <- emp.department_info.name + + # Pull from list so the fetch isn't optimised out + o.topItem <- list[0].item_name + + # Array mapping from catalog (1000 entries) + o.entries <- catalog[] as entry { + .entryId <- entry.entry_id + .variantId <- entry.variant_id + .quantity <- entry.quantity + .warehouse <- entry.warehouse + } +} diff --git a/loadtest/bridge-graphql/package.json b/loadtest/bridge-graphql/package.json new file mode 100644 index 00000000..bbcf0ed2 --- /dev/null +++ b/loadtest/bridge-graphql/package.json @@ -0,0 +1,10 @@ +{ + "name": "bridge-loadtest-graphql", + "private": true, + "type": "module", + "dependencies": { + "@stackables/bridge": "^2.1.1", + "graphql": "^16.13.0", + "graphql-yoga": "^5.18.0" + } +} diff --git a/loadtest/bridge-graphql/schema.graphql b/loadtest/bridge-graphql/schema.graphql new file mode 100644 index 00000000..9fe739ad --- /dev/null +++ b/loadtest/bridge-graphql/schema.graphql @@ -0,0 +1,41 @@ +type Query { + simple: SimpleResult + arrayMap: ArrayResult + complex: ComplexResult +} + +type SimpleResult { + id: Int + firstName: String + lastName: String + email: String + role: String + department: String + building: String +} + +type ArrayResult { + items: [ArrayItem] +} + +type ArrayItem { + id: Int + name: String + category: String + price: Float +} + +type ComplexResult { + assignee: String + email: String + department: String + topItem: String + entries: [ComplexEntry] +} + +type ComplexEntry { + entryId: Int + variantId: Int + quantity: Int + warehouse: String +} diff --git a/loadtest/bridge-graphql/tsconfig.json b/loadtest/bridge-graphql/tsconfig.json new file mode 100644 index 00000000..c511cce8 --- /dev/null +++ b/loadtest/bridge-graphql/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2024", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + } +} diff --git a/loadtest/bridge-standalone/Dockerfile b/loadtest/bridge-standalone/Dockerfile new file mode 100644 index 00000000..9b47fbc3 --- /dev/null +++ b/loadtest/bridge-standalone/Dockerfile @@ -0,0 +1,12 @@ +# Bridge Standalone — Node.js executeBridge server (no GraphQL). + +FROM node:24-slim + +WORKDIR /app +COPY package.json . +RUN npm install --omit=dev + +COPY . . + +EXPOSE 3000 +CMD ["node", "--experimental-transform-types", "bridge-standalone.ts"] diff --git a/loadtest/bridge-standalone/bridge-standalone.ts b/loadtest/bridge-standalone/bridge-standalone.ts new file mode 100644 index 00000000..68ee1a47 --- /dev/null +++ b/loadtest/bridge-standalone/bridge-standalone.ts @@ -0,0 +1,54 @@ +/** + * Bridge Standalone (no GraphQL) — HTTP server using executeBridge. + * + * Endpoints: + * GET /simple — fetch + field mapping + * GET /array — fetch + array mapping (100 items) + * GET /complex — fetch catalog + fan-out variant sub-requests + * GET /health — health check + */ + +import { createServer } from "node:http"; +import { readFileSync } from "node:fs"; +import { parseBridge, executeBridge } from "@stackables/bridge"; + +const PORT = parseInt(process.env.PORT || "3000", 10); + +const document = parseBridge( + readFileSync(new URL("./endpoints.bridge", import.meta.url), "utf-8"), +); + +const server = createServer(async (req, res) => { + try { + if (req.url === "/health") { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end('{"status":"ok"}'); + return; + } + + const operations: Record = { + "/simple": "Query.simple", + "/array": "Query.arrayMap", + "/complex": "Query.complex", + }; + + const operation = operations[req.url ?? ""]; + if (!operation) { + res.writeHead(404); + res.end('{"error":"not found"}'); + return; + } + + const { data } = await executeBridge({ document, operation }); + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify(data)); + } catch (err) { + console.error("Error:", err); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } +}); + +server.listen(PORT, () => { + console.log(`Bridge standalone listening on :${PORT}`); +}); diff --git a/loadtest/bridge-standalone/endpoints.bridge b/loadtest/bridge-standalone/endpoints.bridge new file mode 100644 index 00000000..609ba5ce --- /dev/null +++ b/loadtest/bridge-standalone/endpoints.bridge @@ -0,0 +1,78 @@ +version 1.5 + +# ── Dependency tools ────────────────────────────────────────────────────── + +tool fetchSimple from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/simple + .cache = 0 +} + +tool fetchList from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/list + .cache = 0 +} + +tool fetchCatalog from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/catalog + .cache = 0 +} + +# ── Simple: fetch one object, map fields ────────────────────────────────── + +bridge Query.simple { + with fetchSimple as emp + with output as o + + o.id <- emp.id + o.firstName <- emp.first_name + o.lastName <- emp.last_name + o.email <- emp.email_address + o.role <- emp.role + o.department <- emp.department_info.name + o.building <- emp.department_info.building +} + +# ── Array: fetch list, map 1000 items ──────────────────────────────────── + +bridge Query.arrayMap { + with fetchList as list + with output as o + + o.items <- list[] as item { + .id <- item.item_id + .name <- item.item_name + .category <- item.item_category + .price <- item.unit_price + } +} + +# ── Complex: 3 parallel fetches + array mapping + multi-source merge ────── + +bridge Query.complex { + with fetchSimple as emp + with fetchList as list + with fetchCatalog as catalog + with output as o + + # Flat fields from the simple endpoint + o.assignee <- emp.first_name + o.email <- emp.email_address + o.department <- emp.department_info.name + + # Pull from list so the fetch isn't optimised out + o.topItem <- list[0].item_name + + # Array mapping from catalog (1000 entries) + o.entries <- catalog[] as entry { + .entryId <- entry.entry_id + .variantId <- entry.variant_id + .quantity <- entry.quantity + .warehouse <- entry.warehouse + } +} diff --git a/loadtest/bridge-standalone/package.json b/loadtest/bridge-standalone/package.json new file mode 100644 index 00000000..3239f964 --- /dev/null +++ b/loadtest/bridge-standalone/package.json @@ -0,0 +1,8 @@ +{ + "name": "bridge-loadtest-standalone", + "private": true, + "type": "module", + "dependencies": { + "@stackables/bridge": "^2.1.1" + } +} diff --git a/loadtest/bridge-standalone/tsconfig.json b/loadtest/bridge-standalone/tsconfig.json new file mode 100644 index 00000000..c511cce8 --- /dev/null +++ b/loadtest/bridge-standalone/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2024", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + } +} diff --git a/loadtest/dependency/Dockerfile b/loadtest/dependency/Dockerfile new file mode 100644 index 00000000..6c71fc37 --- /dev/null +++ b/loadtest/dependency/Dockerfile @@ -0,0 +1,11 @@ +# Dependency emulator — nginx serving static JSON fixtures. +# +# Simulates an external REST API with zero compute cost. +# Endpoints: /api/simple, /api/list, /api/catalog, /api/variant/{1..10} + +FROM nginx:1-alpine + +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY data/ /data/ + +EXPOSE 8080 diff --git a/loadtest/dependency/data/catalog.json b/loadtest/dependency/data/catalog.json new file mode 100644 index 00000000..b86d178c --- /dev/null +++ b/loadtest/dependency/data/catalog.json @@ -0,0 +1 @@ +[{"entry_id":1,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":2,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":3,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":4,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":5,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":6,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":7,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":8,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":9,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":10,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":11,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":12,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":13,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":14,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":15,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":16,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":17,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":18,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":19,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":20,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":21,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":22,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":23,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":24,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":25,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":26,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":27,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":28,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":29,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":30,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":31,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":32,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":33,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":34,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":35,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":36,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":37,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":38,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":39,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":40,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":41,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":42,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":43,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":44,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":45,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":46,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":47,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":48,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":49,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":50,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":51,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":52,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":53,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":54,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":55,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":56,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":57,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":58,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":59,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":60,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":61,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":62,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":63,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":64,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":65,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":66,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":67,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":68,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":69,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":70,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":71,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":72,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":73,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":74,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":75,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":76,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":77,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":78,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":79,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":80,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":81,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":82,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":83,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":84,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":85,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":86,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":87,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":88,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":89,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":90,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":91,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":92,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":93,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":94,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":95,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":96,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":97,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":98,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":99,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":100,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":101,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":102,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":103,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":104,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":105,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":106,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":107,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":108,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":109,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":110,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":111,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":112,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":113,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":114,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":115,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":116,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":117,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":118,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":119,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":120,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":121,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":122,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":123,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":124,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":125,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":126,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":127,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":128,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":129,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":130,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":131,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":132,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":133,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":134,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":135,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":136,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":137,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":138,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":139,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":140,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":141,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":142,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":143,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":144,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":145,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":146,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":147,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":148,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":149,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":150,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":151,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":152,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":153,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":154,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":155,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":156,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":157,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":158,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":159,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":160,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":161,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":162,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":163,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":164,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":165,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":166,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":167,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":168,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":169,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":170,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":171,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":172,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":173,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":174,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":175,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":176,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":177,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":178,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":179,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":180,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":181,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":182,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":183,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":184,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":185,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":186,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":187,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":188,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":189,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":190,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":191,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":192,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":193,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":194,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":195,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":196,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":197,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":198,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":199,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":200,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":201,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":202,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":203,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":204,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":205,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":206,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":207,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":208,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":209,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":210,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":211,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":212,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":213,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":214,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":215,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":216,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":217,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":218,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":219,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":220,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":221,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":222,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":223,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":224,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":225,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":226,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":227,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":228,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":229,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":230,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":231,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":232,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":233,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":234,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":235,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":236,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":237,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":238,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":239,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":240,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":241,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":242,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":243,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":244,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":245,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":246,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":247,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":248,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":249,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":250,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":251,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":252,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":253,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":254,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":255,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":256,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":257,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":258,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":259,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":260,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":261,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":262,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":263,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":264,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":265,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":266,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":267,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":268,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":269,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":270,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":271,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":272,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":273,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":274,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":275,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":276,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":277,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":278,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":279,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":280,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":281,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":282,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":283,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":284,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":285,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":286,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":287,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":288,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":289,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":290,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":291,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":292,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":293,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":294,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":295,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":296,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":297,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":298,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":299,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":300,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":301,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":302,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":303,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":304,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":305,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":306,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":307,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":308,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":309,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":310,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":311,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":312,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":313,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":314,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":315,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":316,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":317,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":318,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":319,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":320,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":321,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":322,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":323,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":324,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":325,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":326,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":327,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":328,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":329,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":330,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":331,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":332,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":333,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":334,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":335,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":336,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":337,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":338,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":339,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":340,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":341,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":342,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":343,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":344,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":345,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":346,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":347,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":348,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":349,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":350,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":351,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":352,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":353,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":354,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":355,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":356,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":357,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":358,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":359,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":360,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":361,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":362,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":363,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":364,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":365,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":366,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":367,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":368,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":369,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":370,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":371,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":372,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":373,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":374,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":375,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":376,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":377,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":378,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":379,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":380,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":381,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":382,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":383,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":384,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":385,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":386,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":387,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":388,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":389,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":390,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":391,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":392,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":393,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":394,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":395,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":396,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":397,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":398,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":399,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":400,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":401,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":402,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":403,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":404,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":405,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":406,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":407,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":408,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":409,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":410,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":411,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":412,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":413,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":414,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":415,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":416,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":417,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":418,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":419,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":420,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":421,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":422,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":423,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":424,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":425,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":426,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":427,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":428,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":429,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":430,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":431,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":432,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":433,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":434,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":435,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":436,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":437,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":438,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":439,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":440,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":441,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":442,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":443,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":444,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":445,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":446,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":447,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":448,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":449,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":450,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":451,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":452,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":453,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":454,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":455,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":456,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":457,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":458,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":459,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":460,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":461,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":462,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":463,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":464,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":465,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":466,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":467,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":468,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":469,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":470,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":471,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":472,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":473,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":474,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":475,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":476,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":477,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":478,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":479,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":480,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":481,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":482,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":483,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":484,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":485,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":486,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":487,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":488,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":489,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":490,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":491,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":492,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":493,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":494,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":495,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":496,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":497,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":498,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":499,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":500,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":501,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":502,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":503,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":504,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":505,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":506,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":507,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":508,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":509,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":510,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":511,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":512,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":513,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":514,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":515,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":516,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":517,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":518,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":519,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":520,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":521,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":522,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":523,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":524,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":525,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":526,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":527,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":528,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":529,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":530,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":531,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":532,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":533,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":534,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":535,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":536,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":537,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":538,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":539,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":540,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":541,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":542,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":543,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":544,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":545,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":546,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":547,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":548,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":549,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":550,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":551,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":552,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":553,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":554,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":555,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":556,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":557,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":558,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":559,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":560,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":561,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":562,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":563,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":564,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":565,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":566,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":567,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":568,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":569,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":570,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":571,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":572,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":573,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":574,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":575,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":576,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":577,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":578,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":579,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":580,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":581,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":582,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":583,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":584,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":585,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":586,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":587,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":588,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":589,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":590,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":591,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":592,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":593,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":594,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":595,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":596,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":597,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":598,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":599,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":600,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":601,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":602,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":603,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":604,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":605,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":606,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":607,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":608,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":609,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":610,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":611,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":612,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":613,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":614,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":615,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":616,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":617,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":618,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":619,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":620,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":621,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":622,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":623,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":624,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":625,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":626,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":627,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":628,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":629,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":630,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":631,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":632,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":633,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":634,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":635,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":636,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":637,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":638,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":639,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":640,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":641,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":642,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":643,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":644,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":645,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":646,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":647,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":648,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":649,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":650,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":651,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":652,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":653,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":654,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":655,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":656,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":657,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":658,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":659,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":660,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":661,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":662,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":663,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":664,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":665,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":666,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":667,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":668,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":669,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":670,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":671,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":672,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":673,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":674,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":675,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":676,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":677,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":678,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":679,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":680,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":681,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":682,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":683,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":684,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":685,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":686,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":687,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":688,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":689,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":690,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":691,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":692,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":693,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":694,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":695,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":696,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":697,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":698,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":699,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":700,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":701,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":702,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":703,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":704,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":705,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":706,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":707,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":708,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":709,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":710,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":711,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":712,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":713,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":714,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":715,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":716,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":717,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":718,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":719,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":720,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":721,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":722,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":723,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":724,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":725,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":726,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":727,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":728,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":729,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":730,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":731,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":732,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":733,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":734,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":735,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":736,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":737,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":738,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":739,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":740,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":741,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":742,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":743,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":744,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":745,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":746,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":747,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":748,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":749,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":750,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":751,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":752,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":753,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":754,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":755,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":756,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":757,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":758,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":759,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":760,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":761,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":762,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":763,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":764,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":765,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":766,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":767,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":768,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":769,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":770,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":771,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":772,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":773,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":774,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":775,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":776,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":777,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":778,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":779,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":780,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":781,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":782,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":783,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":784,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":785,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":786,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":787,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":788,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":789,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":790,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":791,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":792,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":793,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":794,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":795,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":796,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":797,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":798,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":799,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":800,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":801,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":802,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":803,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":804,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":805,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":806,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":807,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":808,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":809,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":810,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":811,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":812,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":813,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":814,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":815,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":816,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":817,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":818,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":819,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":820,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":821,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":822,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":823,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":824,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":825,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":826,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":827,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":828,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":829,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":830,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":831,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":832,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":833,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":834,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":835,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":836,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":837,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":838,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":839,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":840,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":841,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":842,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":843,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":844,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":845,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":846,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":847,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":848,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":849,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":850,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":851,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":852,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":853,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":854,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":855,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":856,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":857,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":858,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":859,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":860,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":861,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":862,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":863,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":864,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":865,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":866,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":867,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":868,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":869,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":870,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":871,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":872,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":873,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":874,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":875,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":876,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":877,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":878,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":879,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":880,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":881,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":882,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":883,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":884,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":885,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":886,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":887,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":888,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":889,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":890,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":891,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":892,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":893,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":894,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":895,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":896,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":897,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":898,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":899,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":900,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":901,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":902,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":903,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":904,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":905,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":906,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":907,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":908,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":909,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":910,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":911,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":912,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":913,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":914,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":915,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":916,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":917,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":918,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":919,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":920,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":921,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":922,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":923,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":924,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":925,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":926,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":927,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":928,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":929,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":930,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":931,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":932,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":933,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":934,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":935,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":936,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":937,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":938,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":939,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":940,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":941,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":942,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":943,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":944,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":945,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":946,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":947,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":948,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":949,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":950,"variant_id":10,"quantity":47,"warehouse":"WH-E"},{"entry_id":951,"variant_id":1,"quantity":4,"warehouse":"WH-A"},{"entry_id":952,"variant_id":2,"quantity":11,"warehouse":"WH-B"},{"entry_id":953,"variant_id":3,"quantity":18,"warehouse":"WH-C"},{"entry_id":954,"variant_id":4,"quantity":25,"warehouse":"WH-D"},{"entry_id":955,"variant_id":5,"quantity":32,"warehouse":"WH-E"},{"entry_id":956,"variant_id":6,"quantity":39,"warehouse":"WH-A"},{"entry_id":957,"variant_id":7,"quantity":46,"warehouse":"WH-B"},{"entry_id":958,"variant_id":8,"quantity":3,"warehouse":"WH-C"},{"entry_id":959,"variant_id":9,"quantity":10,"warehouse":"WH-D"},{"entry_id":960,"variant_id":10,"quantity":17,"warehouse":"WH-E"},{"entry_id":961,"variant_id":1,"quantity":24,"warehouse":"WH-A"},{"entry_id":962,"variant_id":2,"quantity":31,"warehouse":"WH-B"},{"entry_id":963,"variant_id":3,"quantity":38,"warehouse":"WH-C"},{"entry_id":964,"variant_id":4,"quantity":45,"warehouse":"WH-D"},{"entry_id":965,"variant_id":5,"quantity":2,"warehouse":"WH-E"},{"entry_id":966,"variant_id":6,"quantity":9,"warehouse":"WH-A"},{"entry_id":967,"variant_id":7,"quantity":16,"warehouse":"WH-B"},{"entry_id":968,"variant_id":8,"quantity":23,"warehouse":"WH-C"},{"entry_id":969,"variant_id":9,"quantity":30,"warehouse":"WH-D"},{"entry_id":970,"variant_id":10,"quantity":37,"warehouse":"WH-E"},{"entry_id":971,"variant_id":1,"quantity":44,"warehouse":"WH-A"},{"entry_id":972,"variant_id":2,"quantity":1,"warehouse":"WH-B"},{"entry_id":973,"variant_id":3,"quantity":8,"warehouse":"WH-C"},{"entry_id":974,"variant_id":4,"quantity":15,"warehouse":"WH-D"},{"entry_id":975,"variant_id":5,"quantity":22,"warehouse":"WH-E"},{"entry_id":976,"variant_id":6,"quantity":29,"warehouse":"WH-A"},{"entry_id":977,"variant_id":7,"quantity":36,"warehouse":"WH-B"},{"entry_id":978,"variant_id":8,"quantity":43,"warehouse":"WH-C"},{"entry_id":979,"variant_id":9,"quantity":50,"warehouse":"WH-D"},{"entry_id":980,"variant_id":10,"quantity":7,"warehouse":"WH-E"},{"entry_id":981,"variant_id":1,"quantity":14,"warehouse":"WH-A"},{"entry_id":982,"variant_id":2,"quantity":21,"warehouse":"WH-B"},{"entry_id":983,"variant_id":3,"quantity":28,"warehouse":"WH-C"},{"entry_id":984,"variant_id":4,"quantity":35,"warehouse":"WH-D"},{"entry_id":985,"variant_id":5,"quantity":42,"warehouse":"WH-E"},{"entry_id":986,"variant_id":6,"quantity":49,"warehouse":"WH-A"},{"entry_id":987,"variant_id":7,"quantity":6,"warehouse":"WH-B"},{"entry_id":988,"variant_id":8,"quantity":13,"warehouse":"WH-C"},{"entry_id":989,"variant_id":9,"quantity":20,"warehouse":"WH-D"},{"entry_id":990,"variant_id":10,"quantity":27,"warehouse":"WH-E"},{"entry_id":991,"variant_id":1,"quantity":34,"warehouse":"WH-A"},{"entry_id":992,"variant_id":2,"quantity":41,"warehouse":"WH-B"},{"entry_id":993,"variant_id":3,"quantity":48,"warehouse":"WH-C"},{"entry_id":994,"variant_id":4,"quantity":5,"warehouse":"WH-D"},{"entry_id":995,"variant_id":5,"quantity":12,"warehouse":"WH-E"},{"entry_id":996,"variant_id":6,"quantity":19,"warehouse":"WH-A"},{"entry_id":997,"variant_id":7,"quantity":26,"warehouse":"WH-B"},{"entry_id":998,"variant_id":8,"quantity":33,"warehouse":"WH-C"},{"entry_id":999,"variant_id":9,"quantity":40,"warehouse":"WH-D"},{"entry_id":1000,"variant_id":10,"quantity":47,"warehouse":"WH-E"}] \ No newline at end of file diff --git a/loadtest/dependency/data/list.json b/loadtest/dependency/data/list.json new file mode 100644 index 00000000..67420fef --- /dev/null +++ b/loadtest/dependency/data/list.json @@ -0,0 +1 @@ +[{"item_id":1,"item_name":"Widget A1","item_category":"electronics","unit_price":17,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":2,"item_name":"Widget B1","item_category":"clothing","unit_price":34,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":3,"item_name":"Widget C1","item_category":"food","unit_price":51,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":4,"item_name":"Widget D1","item_category":"tools","unit_price":68,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":5,"item_name":"Widget E1","item_category":"furniture","unit_price":85,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":6,"item_name":"Widget F1","item_category":"toys","unit_price":102,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":7,"item_name":"Widget G1","item_category":"books","unit_price":119,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":8,"item_name":"Widget H1","item_category":"sports","unit_price":136,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":9,"item_name":"Widget I1","item_category":"garden","unit_price":153,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":10,"item_name":"Widget J1","item_category":"automotive","unit_price":170,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":11,"item_name":"Widget K1","item_category":"electronics","unit_price":187,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":12,"item_name":"Widget L1","item_category":"clothing","unit_price":204,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":13,"item_name":"Widget M1","item_category":"food","unit_price":221,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":14,"item_name":"Widget N1","item_category":"tools","unit_price":238,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":15,"item_name":"Widget O1","item_category":"furniture","unit_price":255,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":16,"item_name":"Widget P1","item_category":"toys","unit_price":272,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":17,"item_name":"Widget Q1","item_category":"books","unit_price":289,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":18,"item_name":"Widget R1","item_category":"sports","unit_price":306,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":19,"item_name":"Widget S1","item_category":"garden","unit_price":323,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":20,"item_name":"Widget T1","item_category":"automotive","unit_price":340,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":21,"item_name":"Widget U1","item_category":"electronics","unit_price":357,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":22,"item_name":"Widget V1","item_category":"clothing","unit_price":374,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":23,"item_name":"Widget W1","item_category":"food","unit_price":391,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":24,"item_name":"Widget X1","item_category":"tools","unit_price":408,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":25,"item_name":"Widget Y1","item_category":"furniture","unit_price":425,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":26,"item_name":"Widget Z1","item_category":"toys","unit_price":442,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":27,"item_name":"Widget A2","item_category":"books","unit_price":459,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":28,"item_name":"Widget B2","item_category":"sports","unit_price":476,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":29,"item_name":"Widget C2","item_category":"garden","unit_price":493,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":30,"item_name":"Widget D2","item_category":"automotive","unit_price":510,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":31,"item_name":"Widget E2","item_category":"electronics","unit_price":527,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":32,"item_name":"Widget F2","item_category":"clothing","unit_price":544,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":33,"item_name":"Widget G2","item_category":"food","unit_price":561,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":34,"item_name":"Widget H2","item_category":"tools","unit_price":578,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":35,"item_name":"Widget I2","item_category":"furniture","unit_price":595,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":36,"item_name":"Widget J2","item_category":"toys","unit_price":612,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":37,"item_name":"Widget K2","item_category":"books","unit_price":629,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":38,"item_name":"Widget L2","item_category":"sports","unit_price":646,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":39,"item_name":"Widget M2","item_category":"garden","unit_price":663,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":40,"item_name":"Widget N2","item_category":"automotive","unit_price":680,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":41,"item_name":"Widget O2","item_category":"electronics","unit_price":697,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":42,"item_name":"Widget P2","item_category":"clothing","unit_price":714,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":43,"item_name":"Widget Q2","item_category":"food","unit_price":731,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":44,"item_name":"Widget R2","item_category":"tools","unit_price":748,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":45,"item_name":"Widget S2","item_category":"furniture","unit_price":765,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":46,"item_name":"Widget T2","item_category":"toys","unit_price":782,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":47,"item_name":"Widget U2","item_category":"books","unit_price":799,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":48,"item_name":"Widget V2","item_category":"sports","unit_price":816,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":49,"item_name":"Widget W2","item_category":"garden","unit_price":833,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":50,"item_name":"Widget X2","item_category":"automotive","unit_price":850,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":51,"item_name":"Widget Y2","item_category":"electronics","unit_price":867,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":52,"item_name":"Widget Z2","item_category":"clothing","unit_price":884,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":53,"item_name":"Widget A3","item_category":"food","unit_price":901,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":54,"item_name":"Widget B3","item_category":"tools","unit_price":918,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":55,"item_name":"Widget C3","item_category":"furniture","unit_price":935,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":56,"item_name":"Widget D3","item_category":"toys","unit_price":952,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":57,"item_name":"Widget E3","item_category":"books","unit_price":969,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":58,"item_name":"Widget F3","item_category":"sports","unit_price":986,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":59,"item_name":"Widget G3","item_category":"garden","unit_price":13,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":60,"item_name":"Widget H3","item_category":"automotive","unit_price":30,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":61,"item_name":"Widget I3","item_category":"electronics","unit_price":47,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":62,"item_name":"Widget J3","item_category":"clothing","unit_price":64,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":63,"item_name":"Widget K3","item_category":"food","unit_price":81,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":64,"item_name":"Widget L3","item_category":"tools","unit_price":98,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":65,"item_name":"Widget M3","item_category":"furniture","unit_price":115,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":66,"item_name":"Widget N3","item_category":"toys","unit_price":132,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":67,"item_name":"Widget O3","item_category":"books","unit_price":149,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":68,"item_name":"Widget P3","item_category":"sports","unit_price":166,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":69,"item_name":"Widget Q3","item_category":"garden","unit_price":183,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":70,"item_name":"Widget R3","item_category":"automotive","unit_price":200,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":71,"item_name":"Widget S3","item_category":"electronics","unit_price":217,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":72,"item_name":"Widget T3","item_category":"clothing","unit_price":234,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":73,"item_name":"Widget U3","item_category":"food","unit_price":251,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":74,"item_name":"Widget V3","item_category":"tools","unit_price":268,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":75,"item_name":"Widget W3","item_category":"furniture","unit_price":285,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":76,"item_name":"Widget X3","item_category":"toys","unit_price":302,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":77,"item_name":"Widget Y3","item_category":"books","unit_price":319,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":78,"item_name":"Widget Z3","item_category":"sports","unit_price":336,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":79,"item_name":"Widget A4","item_category":"garden","unit_price":353,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":80,"item_name":"Widget B4","item_category":"automotive","unit_price":370,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":81,"item_name":"Widget C4","item_category":"electronics","unit_price":387,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":82,"item_name":"Widget D4","item_category":"clothing","unit_price":404,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":83,"item_name":"Widget E4","item_category":"food","unit_price":421,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":84,"item_name":"Widget F4","item_category":"tools","unit_price":438,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":85,"item_name":"Widget G4","item_category":"furniture","unit_price":455,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":86,"item_name":"Widget H4","item_category":"toys","unit_price":472,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":87,"item_name":"Widget I4","item_category":"books","unit_price":489,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":88,"item_name":"Widget J4","item_category":"sports","unit_price":506,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":89,"item_name":"Widget K4","item_category":"garden","unit_price":523,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":90,"item_name":"Widget L4","item_category":"automotive","unit_price":540,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":91,"item_name":"Widget M4","item_category":"electronics","unit_price":557,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":92,"item_name":"Widget N4","item_category":"clothing","unit_price":574,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":93,"item_name":"Widget O4","item_category":"food","unit_price":591,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":94,"item_name":"Widget P4","item_category":"tools","unit_price":608,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":95,"item_name":"Widget Q4","item_category":"furniture","unit_price":625,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":96,"item_name":"Widget R4","item_category":"toys","unit_price":642,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":97,"item_name":"Widget S4","item_category":"books","unit_price":659,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":98,"item_name":"Widget T4","item_category":"sports","unit_price":676,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":99,"item_name":"Widget U4","item_category":"garden","unit_price":693,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":100,"item_name":"Widget V4","item_category":"automotive","unit_price":710,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":101,"item_name":"Widget W4","item_category":"electronics","unit_price":727,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":102,"item_name":"Widget X4","item_category":"clothing","unit_price":744,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":103,"item_name":"Widget Y4","item_category":"food","unit_price":761,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":104,"item_name":"Widget Z4","item_category":"tools","unit_price":778,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":105,"item_name":"Widget A5","item_category":"furniture","unit_price":795,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":106,"item_name":"Widget B5","item_category":"toys","unit_price":812,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":107,"item_name":"Widget C5","item_category":"books","unit_price":829,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":108,"item_name":"Widget D5","item_category":"sports","unit_price":846,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":109,"item_name":"Widget E5","item_category":"garden","unit_price":863,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":110,"item_name":"Widget F5","item_category":"automotive","unit_price":880,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":111,"item_name":"Widget G5","item_category":"electronics","unit_price":897,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":112,"item_name":"Widget H5","item_category":"clothing","unit_price":914,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":113,"item_name":"Widget I5","item_category":"food","unit_price":931,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":114,"item_name":"Widget J5","item_category":"tools","unit_price":948,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":115,"item_name":"Widget K5","item_category":"furniture","unit_price":965,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":116,"item_name":"Widget L5","item_category":"toys","unit_price":982,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":117,"item_name":"Widget M5","item_category":"books","unit_price":999,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":118,"item_name":"Widget N5","item_category":"sports","unit_price":26,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":119,"item_name":"Widget O5","item_category":"garden","unit_price":43,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":120,"item_name":"Widget P5","item_category":"automotive","unit_price":60,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":121,"item_name":"Widget Q5","item_category":"electronics","unit_price":77,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":122,"item_name":"Widget R5","item_category":"clothing","unit_price":94,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":123,"item_name":"Widget S5","item_category":"food","unit_price":111,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":124,"item_name":"Widget T5","item_category":"tools","unit_price":128,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":125,"item_name":"Widget U5","item_category":"furniture","unit_price":145,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":126,"item_name":"Widget V5","item_category":"toys","unit_price":162,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":127,"item_name":"Widget W5","item_category":"books","unit_price":179,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":128,"item_name":"Widget X5","item_category":"sports","unit_price":196,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":129,"item_name":"Widget Y5","item_category":"garden","unit_price":213,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":130,"item_name":"Widget Z5","item_category":"automotive","unit_price":230,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":131,"item_name":"Widget A6","item_category":"electronics","unit_price":247,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":132,"item_name":"Widget B6","item_category":"clothing","unit_price":264,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":133,"item_name":"Widget C6","item_category":"food","unit_price":281,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":134,"item_name":"Widget D6","item_category":"tools","unit_price":298,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":135,"item_name":"Widget E6","item_category":"furniture","unit_price":315,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":136,"item_name":"Widget F6","item_category":"toys","unit_price":332,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":137,"item_name":"Widget G6","item_category":"books","unit_price":349,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":138,"item_name":"Widget H6","item_category":"sports","unit_price":366,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":139,"item_name":"Widget I6","item_category":"garden","unit_price":383,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":140,"item_name":"Widget J6","item_category":"automotive","unit_price":400,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":141,"item_name":"Widget K6","item_category":"electronics","unit_price":417,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":142,"item_name":"Widget L6","item_category":"clothing","unit_price":434,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":143,"item_name":"Widget M6","item_category":"food","unit_price":451,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":144,"item_name":"Widget N6","item_category":"tools","unit_price":468,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":145,"item_name":"Widget O6","item_category":"furniture","unit_price":485,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":146,"item_name":"Widget P6","item_category":"toys","unit_price":502,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":147,"item_name":"Widget Q6","item_category":"books","unit_price":519,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":148,"item_name":"Widget R6","item_category":"sports","unit_price":536,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":149,"item_name":"Widget S6","item_category":"garden","unit_price":553,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":150,"item_name":"Widget T6","item_category":"automotive","unit_price":570,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":151,"item_name":"Widget U6","item_category":"electronics","unit_price":587,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":152,"item_name":"Widget V6","item_category":"clothing","unit_price":604,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":153,"item_name":"Widget W6","item_category":"food","unit_price":621,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":154,"item_name":"Widget X6","item_category":"tools","unit_price":638,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":155,"item_name":"Widget Y6","item_category":"furniture","unit_price":655,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":156,"item_name":"Widget Z6","item_category":"toys","unit_price":672,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":157,"item_name":"Widget A7","item_category":"books","unit_price":689,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":158,"item_name":"Widget B7","item_category":"sports","unit_price":706,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":159,"item_name":"Widget C7","item_category":"garden","unit_price":723,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":160,"item_name":"Widget D7","item_category":"automotive","unit_price":740,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":161,"item_name":"Widget E7","item_category":"electronics","unit_price":757,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":162,"item_name":"Widget F7","item_category":"clothing","unit_price":774,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":163,"item_name":"Widget G7","item_category":"food","unit_price":791,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":164,"item_name":"Widget H7","item_category":"tools","unit_price":808,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":165,"item_name":"Widget I7","item_category":"furniture","unit_price":825,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":166,"item_name":"Widget J7","item_category":"toys","unit_price":842,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":167,"item_name":"Widget K7","item_category":"books","unit_price":859,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":168,"item_name":"Widget L7","item_category":"sports","unit_price":876,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":169,"item_name":"Widget M7","item_category":"garden","unit_price":893,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":170,"item_name":"Widget N7","item_category":"automotive","unit_price":910,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":171,"item_name":"Widget O7","item_category":"electronics","unit_price":927,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":172,"item_name":"Widget P7","item_category":"clothing","unit_price":944,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":173,"item_name":"Widget Q7","item_category":"food","unit_price":961,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":174,"item_name":"Widget R7","item_category":"tools","unit_price":978,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":175,"item_name":"Widget S7","item_category":"furniture","unit_price":995,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":176,"item_name":"Widget T7","item_category":"toys","unit_price":22,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":177,"item_name":"Widget U7","item_category":"books","unit_price":39,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":178,"item_name":"Widget V7","item_category":"sports","unit_price":56,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":179,"item_name":"Widget W7","item_category":"garden","unit_price":73,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":180,"item_name":"Widget X7","item_category":"automotive","unit_price":90,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":181,"item_name":"Widget Y7","item_category":"electronics","unit_price":107,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":182,"item_name":"Widget Z7","item_category":"clothing","unit_price":124,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":183,"item_name":"Widget A8","item_category":"food","unit_price":141,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":184,"item_name":"Widget B8","item_category":"tools","unit_price":158,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":185,"item_name":"Widget C8","item_category":"furniture","unit_price":175,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":186,"item_name":"Widget D8","item_category":"toys","unit_price":192,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":187,"item_name":"Widget E8","item_category":"books","unit_price":209,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":188,"item_name":"Widget F8","item_category":"sports","unit_price":226,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":189,"item_name":"Widget G8","item_category":"garden","unit_price":243,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":190,"item_name":"Widget H8","item_category":"automotive","unit_price":260,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":191,"item_name":"Widget I8","item_category":"electronics","unit_price":277,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":192,"item_name":"Widget J8","item_category":"clothing","unit_price":294,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":193,"item_name":"Widget K8","item_category":"food","unit_price":311,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":194,"item_name":"Widget L8","item_category":"tools","unit_price":328,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":195,"item_name":"Widget M8","item_category":"furniture","unit_price":345,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":196,"item_name":"Widget N8","item_category":"toys","unit_price":362,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":197,"item_name":"Widget O8","item_category":"books","unit_price":379,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":198,"item_name":"Widget P8","item_category":"sports","unit_price":396,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":199,"item_name":"Widget Q8","item_category":"garden","unit_price":413,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":200,"item_name":"Widget R8","item_category":"automotive","unit_price":430,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":201,"item_name":"Widget S8","item_category":"electronics","unit_price":447,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":202,"item_name":"Widget T8","item_category":"clothing","unit_price":464,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":203,"item_name":"Widget U8","item_category":"food","unit_price":481,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":204,"item_name":"Widget V8","item_category":"tools","unit_price":498,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":205,"item_name":"Widget W8","item_category":"furniture","unit_price":515,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":206,"item_name":"Widget X8","item_category":"toys","unit_price":532,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":207,"item_name":"Widget Y8","item_category":"books","unit_price":549,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":208,"item_name":"Widget Z8","item_category":"sports","unit_price":566,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":209,"item_name":"Widget A9","item_category":"garden","unit_price":583,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":210,"item_name":"Widget B9","item_category":"automotive","unit_price":600,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":211,"item_name":"Widget C9","item_category":"electronics","unit_price":617,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":212,"item_name":"Widget D9","item_category":"clothing","unit_price":634,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":213,"item_name":"Widget E9","item_category":"food","unit_price":651,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":214,"item_name":"Widget F9","item_category":"tools","unit_price":668,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":215,"item_name":"Widget G9","item_category":"furniture","unit_price":685,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":216,"item_name":"Widget H9","item_category":"toys","unit_price":702,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":217,"item_name":"Widget I9","item_category":"books","unit_price":719,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":218,"item_name":"Widget J9","item_category":"sports","unit_price":736,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":219,"item_name":"Widget K9","item_category":"garden","unit_price":753,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":220,"item_name":"Widget L9","item_category":"automotive","unit_price":770,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":221,"item_name":"Widget M9","item_category":"electronics","unit_price":787,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":222,"item_name":"Widget N9","item_category":"clothing","unit_price":804,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":223,"item_name":"Widget O9","item_category":"food","unit_price":821,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":224,"item_name":"Widget P9","item_category":"tools","unit_price":838,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":225,"item_name":"Widget Q9","item_category":"furniture","unit_price":855,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":226,"item_name":"Widget R9","item_category":"toys","unit_price":872,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":227,"item_name":"Widget S9","item_category":"books","unit_price":889,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":228,"item_name":"Widget T9","item_category":"sports","unit_price":906,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":229,"item_name":"Widget U9","item_category":"garden","unit_price":923,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":230,"item_name":"Widget V9","item_category":"automotive","unit_price":940,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":231,"item_name":"Widget W9","item_category":"electronics","unit_price":957,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":232,"item_name":"Widget X9","item_category":"clothing","unit_price":974,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":233,"item_name":"Widget Y9","item_category":"food","unit_price":991,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":234,"item_name":"Widget Z9","item_category":"tools","unit_price":18,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":235,"item_name":"Widget A10","item_category":"furniture","unit_price":35,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":236,"item_name":"Widget B10","item_category":"toys","unit_price":52,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":237,"item_name":"Widget C10","item_category":"books","unit_price":69,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":238,"item_name":"Widget D10","item_category":"sports","unit_price":86,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":239,"item_name":"Widget E10","item_category":"garden","unit_price":103,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":240,"item_name":"Widget F10","item_category":"automotive","unit_price":120,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":241,"item_name":"Widget G10","item_category":"electronics","unit_price":137,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":242,"item_name":"Widget H10","item_category":"clothing","unit_price":154,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":243,"item_name":"Widget I10","item_category":"food","unit_price":171,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":244,"item_name":"Widget J10","item_category":"tools","unit_price":188,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":245,"item_name":"Widget K10","item_category":"furniture","unit_price":205,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":246,"item_name":"Widget L10","item_category":"toys","unit_price":222,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":247,"item_name":"Widget M10","item_category":"books","unit_price":239,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":248,"item_name":"Widget N10","item_category":"sports","unit_price":256,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":249,"item_name":"Widget O10","item_category":"garden","unit_price":273,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":250,"item_name":"Widget P10","item_category":"automotive","unit_price":290,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":251,"item_name":"Widget Q10","item_category":"electronics","unit_price":307,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":252,"item_name":"Widget R10","item_category":"clothing","unit_price":324,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":253,"item_name":"Widget S10","item_category":"food","unit_price":341,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":254,"item_name":"Widget T10","item_category":"tools","unit_price":358,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":255,"item_name":"Widget U10","item_category":"furniture","unit_price":375,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":256,"item_name":"Widget V10","item_category":"toys","unit_price":392,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":257,"item_name":"Widget W10","item_category":"books","unit_price":409,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":258,"item_name":"Widget X10","item_category":"sports","unit_price":426,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":259,"item_name":"Widget Y10","item_category":"garden","unit_price":443,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":260,"item_name":"Widget Z10","item_category":"automotive","unit_price":460,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":261,"item_name":"Widget A11","item_category":"electronics","unit_price":477,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":262,"item_name":"Widget B11","item_category":"clothing","unit_price":494,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":263,"item_name":"Widget C11","item_category":"food","unit_price":511,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":264,"item_name":"Widget D11","item_category":"tools","unit_price":528,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":265,"item_name":"Widget E11","item_category":"furniture","unit_price":545,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":266,"item_name":"Widget F11","item_category":"toys","unit_price":562,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":267,"item_name":"Widget G11","item_category":"books","unit_price":579,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":268,"item_name":"Widget H11","item_category":"sports","unit_price":596,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":269,"item_name":"Widget I11","item_category":"garden","unit_price":613,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":270,"item_name":"Widget J11","item_category":"automotive","unit_price":630,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":271,"item_name":"Widget K11","item_category":"electronics","unit_price":647,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":272,"item_name":"Widget L11","item_category":"clothing","unit_price":664,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":273,"item_name":"Widget M11","item_category":"food","unit_price":681,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":274,"item_name":"Widget N11","item_category":"tools","unit_price":698,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":275,"item_name":"Widget O11","item_category":"furniture","unit_price":715,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":276,"item_name":"Widget P11","item_category":"toys","unit_price":732,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":277,"item_name":"Widget Q11","item_category":"books","unit_price":749,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":278,"item_name":"Widget R11","item_category":"sports","unit_price":766,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":279,"item_name":"Widget S11","item_category":"garden","unit_price":783,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":280,"item_name":"Widget T11","item_category":"automotive","unit_price":800,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":281,"item_name":"Widget U11","item_category":"electronics","unit_price":817,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":282,"item_name":"Widget V11","item_category":"clothing","unit_price":834,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":283,"item_name":"Widget W11","item_category":"food","unit_price":851,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":284,"item_name":"Widget X11","item_category":"tools","unit_price":868,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":285,"item_name":"Widget Y11","item_category":"furniture","unit_price":885,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":286,"item_name":"Widget Z11","item_category":"toys","unit_price":902,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":287,"item_name":"Widget A12","item_category":"books","unit_price":919,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":288,"item_name":"Widget B12","item_category":"sports","unit_price":936,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":289,"item_name":"Widget C12","item_category":"garden","unit_price":953,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":290,"item_name":"Widget D12","item_category":"automotive","unit_price":970,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":291,"item_name":"Widget E12","item_category":"electronics","unit_price":987,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":292,"item_name":"Widget F12","item_category":"clothing","unit_price":14,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":293,"item_name":"Widget G12","item_category":"food","unit_price":31,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":294,"item_name":"Widget H12","item_category":"tools","unit_price":48,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":295,"item_name":"Widget I12","item_category":"furniture","unit_price":65,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":296,"item_name":"Widget J12","item_category":"toys","unit_price":82,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":297,"item_name":"Widget K12","item_category":"books","unit_price":99,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":298,"item_name":"Widget L12","item_category":"sports","unit_price":116,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":299,"item_name":"Widget M12","item_category":"garden","unit_price":133,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":300,"item_name":"Widget N12","item_category":"automotive","unit_price":150,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":301,"item_name":"Widget O12","item_category":"electronics","unit_price":167,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":302,"item_name":"Widget P12","item_category":"clothing","unit_price":184,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":303,"item_name":"Widget Q12","item_category":"food","unit_price":201,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":304,"item_name":"Widget R12","item_category":"tools","unit_price":218,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":305,"item_name":"Widget S12","item_category":"furniture","unit_price":235,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":306,"item_name":"Widget T12","item_category":"toys","unit_price":252,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":307,"item_name":"Widget U12","item_category":"books","unit_price":269,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":308,"item_name":"Widget V12","item_category":"sports","unit_price":286,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":309,"item_name":"Widget W12","item_category":"garden","unit_price":303,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":310,"item_name":"Widget X12","item_category":"automotive","unit_price":320,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":311,"item_name":"Widget Y12","item_category":"electronics","unit_price":337,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":312,"item_name":"Widget Z12","item_category":"clothing","unit_price":354,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":313,"item_name":"Widget A13","item_category":"food","unit_price":371,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":314,"item_name":"Widget B13","item_category":"tools","unit_price":388,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":315,"item_name":"Widget C13","item_category":"furniture","unit_price":405,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":316,"item_name":"Widget D13","item_category":"toys","unit_price":422,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":317,"item_name":"Widget E13","item_category":"books","unit_price":439,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":318,"item_name":"Widget F13","item_category":"sports","unit_price":456,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":319,"item_name":"Widget G13","item_category":"garden","unit_price":473,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":320,"item_name":"Widget H13","item_category":"automotive","unit_price":490,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":321,"item_name":"Widget I13","item_category":"electronics","unit_price":507,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":322,"item_name":"Widget J13","item_category":"clothing","unit_price":524,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":323,"item_name":"Widget K13","item_category":"food","unit_price":541,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":324,"item_name":"Widget L13","item_category":"tools","unit_price":558,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":325,"item_name":"Widget M13","item_category":"furniture","unit_price":575,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":326,"item_name":"Widget N13","item_category":"toys","unit_price":592,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":327,"item_name":"Widget O13","item_category":"books","unit_price":609,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":328,"item_name":"Widget P13","item_category":"sports","unit_price":626,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":329,"item_name":"Widget Q13","item_category":"garden","unit_price":643,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":330,"item_name":"Widget R13","item_category":"automotive","unit_price":660,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":331,"item_name":"Widget S13","item_category":"electronics","unit_price":677,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":332,"item_name":"Widget T13","item_category":"clothing","unit_price":694,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":333,"item_name":"Widget U13","item_category":"food","unit_price":711,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":334,"item_name":"Widget V13","item_category":"tools","unit_price":728,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":335,"item_name":"Widget W13","item_category":"furniture","unit_price":745,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":336,"item_name":"Widget X13","item_category":"toys","unit_price":762,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":337,"item_name":"Widget Y13","item_category":"books","unit_price":779,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":338,"item_name":"Widget Z13","item_category":"sports","unit_price":796,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":339,"item_name":"Widget A14","item_category":"garden","unit_price":813,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":340,"item_name":"Widget B14","item_category":"automotive","unit_price":830,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":341,"item_name":"Widget C14","item_category":"electronics","unit_price":847,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":342,"item_name":"Widget D14","item_category":"clothing","unit_price":864,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":343,"item_name":"Widget E14","item_category":"food","unit_price":881,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":344,"item_name":"Widget F14","item_category":"tools","unit_price":898,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":345,"item_name":"Widget G14","item_category":"furniture","unit_price":915,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":346,"item_name":"Widget H14","item_category":"toys","unit_price":932,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":347,"item_name":"Widget I14","item_category":"books","unit_price":949,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":348,"item_name":"Widget J14","item_category":"sports","unit_price":966,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":349,"item_name":"Widget K14","item_category":"garden","unit_price":983,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":350,"item_name":"Widget L14","item_category":"automotive","unit_price":10,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":351,"item_name":"Widget M14","item_category":"electronics","unit_price":27,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":352,"item_name":"Widget N14","item_category":"clothing","unit_price":44,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":353,"item_name":"Widget O14","item_category":"food","unit_price":61,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":354,"item_name":"Widget P14","item_category":"tools","unit_price":78,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":355,"item_name":"Widget Q14","item_category":"furniture","unit_price":95,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":356,"item_name":"Widget R14","item_category":"toys","unit_price":112,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":357,"item_name":"Widget S14","item_category":"books","unit_price":129,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":358,"item_name":"Widget T14","item_category":"sports","unit_price":146,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":359,"item_name":"Widget U14","item_category":"garden","unit_price":163,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":360,"item_name":"Widget V14","item_category":"automotive","unit_price":180,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":361,"item_name":"Widget W14","item_category":"electronics","unit_price":197,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":362,"item_name":"Widget X14","item_category":"clothing","unit_price":214,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":363,"item_name":"Widget Y14","item_category":"food","unit_price":231,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":364,"item_name":"Widget Z14","item_category":"tools","unit_price":248,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":365,"item_name":"Widget A15","item_category":"furniture","unit_price":265,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":366,"item_name":"Widget B15","item_category":"toys","unit_price":282,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":367,"item_name":"Widget C15","item_category":"books","unit_price":299,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":368,"item_name":"Widget D15","item_category":"sports","unit_price":316,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":369,"item_name":"Widget E15","item_category":"garden","unit_price":333,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":370,"item_name":"Widget F15","item_category":"automotive","unit_price":350,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":371,"item_name":"Widget G15","item_category":"electronics","unit_price":367,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":372,"item_name":"Widget H15","item_category":"clothing","unit_price":384,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":373,"item_name":"Widget I15","item_category":"food","unit_price":401,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":374,"item_name":"Widget J15","item_category":"tools","unit_price":418,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":375,"item_name":"Widget K15","item_category":"furniture","unit_price":435,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":376,"item_name":"Widget L15","item_category":"toys","unit_price":452,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":377,"item_name":"Widget M15","item_category":"books","unit_price":469,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":378,"item_name":"Widget N15","item_category":"sports","unit_price":486,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":379,"item_name":"Widget O15","item_category":"garden","unit_price":503,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":380,"item_name":"Widget P15","item_category":"automotive","unit_price":520,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":381,"item_name":"Widget Q15","item_category":"electronics","unit_price":537,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":382,"item_name":"Widget R15","item_category":"clothing","unit_price":554,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":383,"item_name":"Widget S15","item_category":"food","unit_price":571,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":384,"item_name":"Widget T15","item_category":"tools","unit_price":588,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":385,"item_name":"Widget U15","item_category":"furniture","unit_price":605,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":386,"item_name":"Widget V15","item_category":"toys","unit_price":622,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":387,"item_name":"Widget W15","item_category":"books","unit_price":639,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":388,"item_name":"Widget X15","item_category":"sports","unit_price":656,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":389,"item_name":"Widget Y15","item_category":"garden","unit_price":673,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":390,"item_name":"Widget Z15","item_category":"automotive","unit_price":690,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":391,"item_name":"Widget A16","item_category":"electronics","unit_price":707,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":392,"item_name":"Widget B16","item_category":"clothing","unit_price":724,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":393,"item_name":"Widget C16","item_category":"food","unit_price":741,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":394,"item_name":"Widget D16","item_category":"tools","unit_price":758,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":395,"item_name":"Widget E16","item_category":"furniture","unit_price":775,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":396,"item_name":"Widget F16","item_category":"toys","unit_price":792,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":397,"item_name":"Widget G16","item_category":"books","unit_price":809,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":398,"item_name":"Widget H16","item_category":"sports","unit_price":826,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":399,"item_name":"Widget I16","item_category":"garden","unit_price":843,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":400,"item_name":"Widget J16","item_category":"automotive","unit_price":860,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":401,"item_name":"Widget K16","item_category":"electronics","unit_price":877,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":402,"item_name":"Widget L16","item_category":"clothing","unit_price":894,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":403,"item_name":"Widget M16","item_category":"food","unit_price":911,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":404,"item_name":"Widget N16","item_category":"tools","unit_price":928,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":405,"item_name":"Widget O16","item_category":"furniture","unit_price":945,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":406,"item_name":"Widget P16","item_category":"toys","unit_price":962,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":407,"item_name":"Widget Q16","item_category":"books","unit_price":979,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":408,"item_name":"Widget R16","item_category":"sports","unit_price":996,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":409,"item_name":"Widget S16","item_category":"garden","unit_price":23,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":410,"item_name":"Widget T16","item_category":"automotive","unit_price":40,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":411,"item_name":"Widget U16","item_category":"electronics","unit_price":57,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":412,"item_name":"Widget V16","item_category":"clothing","unit_price":74,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":413,"item_name":"Widget W16","item_category":"food","unit_price":91,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":414,"item_name":"Widget X16","item_category":"tools","unit_price":108,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":415,"item_name":"Widget Y16","item_category":"furniture","unit_price":125,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":416,"item_name":"Widget Z16","item_category":"toys","unit_price":142,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":417,"item_name":"Widget A17","item_category":"books","unit_price":159,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":418,"item_name":"Widget B17","item_category":"sports","unit_price":176,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":419,"item_name":"Widget C17","item_category":"garden","unit_price":193,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":420,"item_name":"Widget D17","item_category":"automotive","unit_price":210,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":421,"item_name":"Widget E17","item_category":"electronics","unit_price":227,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":422,"item_name":"Widget F17","item_category":"clothing","unit_price":244,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":423,"item_name":"Widget G17","item_category":"food","unit_price":261,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":424,"item_name":"Widget H17","item_category":"tools","unit_price":278,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":425,"item_name":"Widget I17","item_category":"furniture","unit_price":295,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":426,"item_name":"Widget J17","item_category":"toys","unit_price":312,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":427,"item_name":"Widget K17","item_category":"books","unit_price":329,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":428,"item_name":"Widget L17","item_category":"sports","unit_price":346,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":429,"item_name":"Widget M17","item_category":"garden","unit_price":363,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":430,"item_name":"Widget N17","item_category":"automotive","unit_price":380,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":431,"item_name":"Widget O17","item_category":"electronics","unit_price":397,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":432,"item_name":"Widget P17","item_category":"clothing","unit_price":414,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":433,"item_name":"Widget Q17","item_category":"food","unit_price":431,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":434,"item_name":"Widget R17","item_category":"tools","unit_price":448,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":435,"item_name":"Widget S17","item_category":"furniture","unit_price":465,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":436,"item_name":"Widget T17","item_category":"toys","unit_price":482,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":437,"item_name":"Widget U17","item_category":"books","unit_price":499,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":438,"item_name":"Widget V17","item_category":"sports","unit_price":516,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":439,"item_name":"Widget W17","item_category":"garden","unit_price":533,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":440,"item_name":"Widget X17","item_category":"automotive","unit_price":550,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":441,"item_name":"Widget Y17","item_category":"electronics","unit_price":567,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":442,"item_name":"Widget Z17","item_category":"clothing","unit_price":584,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":443,"item_name":"Widget A18","item_category":"food","unit_price":601,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":444,"item_name":"Widget B18","item_category":"tools","unit_price":618,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":445,"item_name":"Widget C18","item_category":"furniture","unit_price":635,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":446,"item_name":"Widget D18","item_category":"toys","unit_price":652,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":447,"item_name":"Widget E18","item_category":"books","unit_price":669,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":448,"item_name":"Widget F18","item_category":"sports","unit_price":686,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":449,"item_name":"Widget G18","item_category":"garden","unit_price":703,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":450,"item_name":"Widget H18","item_category":"automotive","unit_price":720,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":451,"item_name":"Widget I18","item_category":"electronics","unit_price":737,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":452,"item_name":"Widget J18","item_category":"clothing","unit_price":754,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":453,"item_name":"Widget K18","item_category":"food","unit_price":771,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":454,"item_name":"Widget L18","item_category":"tools","unit_price":788,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":455,"item_name":"Widget M18","item_category":"furniture","unit_price":805,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":456,"item_name":"Widget N18","item_category":"toys","unit_price":822,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":457,"item_name":"Widget O18","item_category":"books","unit_price":839,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":458,"item_name":"Widget P18","item_category":"sports","unit_price":856,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":459,"item_name":"Widget Q18","item_category":"garden","unit_price":873,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":460,"item_name":"Widget R18","item_category":"automotive","unit_price":890,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":461,"item_name":"Widget S18","item_category":"electronics","unit_price":907,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":462,"item_name":"Widget T18","item_category":"clothing","unit_price":924,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":463,"item_name":"Widget U18","item_category":"food","unit_price":941,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":464,"item_name":"Widget V18","item_category":"tools","unit_price":958,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":465,"item_name":"Widget W18","item_category":"furniture","unit_price":975,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":466,"item_name":"Widget X18","item_category":"toys","unit_price":992,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":467,"item_name":"Widget Y18","item_category":"books","unit_price":19,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":468,"item_name":"Widget Z18","item_category":"sports","unit_price":36,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":469,"item_name":"Widget A19","item_category":"garden","unit_price":53,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":470,"item_name":"Widget B19","item_category":"automotive","unit_price":70,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":471,"item_name":"Widget C19","item_category":"electronics","unit_price":87,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":472,"item_name":"Widget D19","item_category":"clothing","unit_price":104,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":473,"item_name":"Widget E19","item_category":"food","unit_price":121,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":474,"item_name":"Widget F19","item_category":"tools","unit_price":138,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":475,"item_name":"Widget G19","item_category":"furniture","unit_price":155,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":476,"item_name":"Widget H19","item_category":"toys","unit_price":172,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":477,"item_name":"Widget I19","item_category":"books","unit_price":189,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":478,"item_name":"Widget J19","item_category":"sports","unit_price":206,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":479,"item_name":"Widget K19","item_category":"garden","unit_price":223,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":480,"item_name":"Widget L19","item_category":"automotive","unit_price":240,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":481,"item_name":"Widget M19","item_category":"electronics","unit_price":257,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":482,"item_name":"Widget N19","item_category":"clothing","unit_price":274,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":483,"item_name":"Widget O19","item_category":"food","unit_price":291,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":484,"item_name":"Widget P19","item_category":"tools","unit_price":308,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":485,"item_name":"Widget Q19","item_category":"furniture","unit_price":325,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":486,"item_name":"Widget R19","item_category":"toys","unit_price":342,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":487,"item_name":"Widget S19","item_category":"books","unit_price":359,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":488,"item_name":"Widget T19","item_category":"sports","unit_price":376,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":489,"item_name":"Widget U19","item_category":"garden","unit_price":393,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":490,"item_name":"Widget V19","item_category":"automotive","unit_price":410,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":491,"item_name":"Widget W19","item_category":"electronics","unit_price":427,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":492,"item_name":"Widget X19","item_category":"clothing","unit_price":444,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":493,"item_name":"Widget Y19","item_category":"food","unit_price":461,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":494,"item_name":"Widget Z19","item_category":"tools","unit_price":478,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":495,"item_name":"Widget A20","item_category":"furniture","unit_price":495,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":496,"item_name":"Widget B20","item_category":"toys","unit_price":512,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":497,"item_name":"Widget C20","item_category":"books","unit_price":529,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":498,"item_name":"Widget D20","item_category":"sports","unit_price":546,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":499,"item_name":"Widget E20","item_category":"garden","unit_price":563,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":500,"item_name":"Widget F20","item_category":"automotive","unit_price":580,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":501,"item_name":"Widget G20","item_category":"electronics","unit_price":597,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":502,"item_name":"Widget H20","item_category":"clothing","unit_price":614,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":503,"item_name":"Widget I20","item_category":"food","unit_price":631,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":504,"item_name":"Widget J20","item_category":"tools","unit_price":648,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":505,"item_name":"Widget K20","item_category":"furniture","unit_price":665,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":506,"item_name":"Widget L20","item_category":"toys","unit_price":682,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":507,"item_name":"Widget M20","item_category":"books","unit_price":699,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":508,"item_name":"Widget N20","item_category":"sports","unit_price":716,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":509,"item_name":"Widget O20","item_category":"garden","unit_price":733,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":510,"item_name":"Widget P20","item_category":"automotive","unit_price":750,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":511,"item_name":"Widget Q20","item_category":"electronics","unit_price":767,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":512,"item_name":"Widget R20","item_category":"clothing","unit_price":784,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":513,"item_name":"Widget S20","item_category":"food","unit_price":801,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":514,"item_name":"Widget T20","item_category":"tools","unit_price":818,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":515,"item_name":"Widget U20","item_category":"furniture","unit_price":835,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":516,"item_name":"Widget V20","item_category":"toys","unit_price":852,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":517,"item_name":"Widget W20","item_category":"books","unit_price":869,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":518,"item_name":"Widget X20","item_category":"sports","unit_price":886,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":519,"item_name":"Widget Y20","item_category":"garden","unit_price":903,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":520,"item_name":"Widget Z20","item_category":"automotive","unit_price":920,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":521,"item_name":"Widget A21","item_category":"electronics","unit_price":937,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":522,"item_name":"Widget B21","item_category":"clothing","unit_price":954,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":523,"item_name":"Widget C21","item_category":"food","unit_price":971,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":524,"item_name":"Widget D21","item_category":"tools","unit_price":988,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":525,"item_name":"Widget E21","item_category":"furniture","unit_price":15,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":526,"item_name":"Widget F21","item_category":"toys","unit_price":32,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":527,"item_name":"Widget G21","item_category":"books","unit_price":49,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":528,"item_name":"Widget H21","item_category":"sports","unit_price":66,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":529,"item_name":"Widget I21","item_category":"garden","unit_price":83,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":530,"item_name":"Widget J21","item_category":"automotive","unit_price":100,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":531,"item_name":"Widget K21","item_category":"electronics","unit_price":117,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":532,"item_name":"Widget L21","item_category":"clothing","unit_price":134,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":533,"item_name":"Widget M21","item_category":"food","unit_price":151,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":534,"item_name":"Widget N21","item_category":"tools","unit_price":168,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":535,"item_name":"Widget O21","item_category":"furniture","unit_price":185,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":536,"item_name":"Widget P21","item_category":"toys","unit_price":202,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":537,"item_name":"Widget Q21","item_category":"books","unit_price":219,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":538,"item_name":"Widget R21","item_category":"sports","unit_price":236,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":539,"item_name":"Widget S21","item_category":"garden","unit_price":253,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":540,"item_name":"Widget T21","item_category":"automotive","unit_price":270,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":541,"item_name":"Widget U21","item_category":"electronics","unit_price":287,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":542,"item_name":"Widget V21","item_category":"clothing","unit_price":304,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":543,"item_name":"Widget W21","item_category":"food","unit_price":321,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":544,"item_name":"Widget X21","item_category":"tools","unit_price":338,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":545,"item_name":"Widget Y21","item_category":"furniture","unit_price":355,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":546,"item_name":"Widget Z21","item_category":"toys","unit_price":372,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":547,"item_name":"Widget A22","item_category":"books","unit_price":389,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":548,"item_name":"Widget B22","item_category":"sports","unit_price":406,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":549,"item_name":"Widget C22","item_category":"garden","unit_price":423,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":550,"item_name":"Widget D22","item_category":"automotive","unit_price":440,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":551,"item_name":"Widget E22","item_category":"electronics","unit_price":457,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":552,"item_name":"Widget F22","item_category":"clothing","unit_price":474,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":553,"item_name":"Widget G22","item_category":"food","unit_price":491,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":554,"item_name":"Widget H22","item_category":"tools","unit_price":508,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":555,"item_name":"Widget I22","item_category":"furniture","unit_price":525,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":556,"item_name":"Widget J22","item_category":"toys","unit_price":542,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":557,"item_name":"Widget K22","item_category":"books","unit_price":559,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":558,"item_name":"Widget L22","item_category":"sports","unit_price":576,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":559,"item_name":"Widget M22","item_category":"garden","unit_price":593,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":560,"item_name":"Widget N22","item_category":"automotive","unit_price":610,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":561,"item_name":"Widget O22","item_category":"electronics","unit_price":627,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":562,"item_name":"Widget P22","item_category":"clothing","unit_price":644,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":563,"item_name":"Widget Q22","item_category":"food","unit_price":661,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":564,"item_name":"Widget R22","item_category":"tools","unit_price":678,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":565,"item_name":"Widget S22","item_category":"furniture","unit_price":695,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":566,"item_name":"Widget T22","item_category":"toys","unit_price":712,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":567,"item_name":"Widget U22","item_category":"books","unit_price":729,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":568,"item_name":"Widget V22","item_category":"sports","unit_price":746,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":569,"item_name":"Widget W22","item_category":"garden","unit_price":763,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":570,"item_name":"Widget X22","item_category":"automotive","unit_price":780,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":571,"item_name":"Widget Y22","item_category":"electronics","unit_price":797,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":572,"item_name":"Widget Z22","item_category":"clothing","unit_price":814,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":573,"item_name":"Widget A23","item_category":"food","unit_price":831,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":574,"item_name":"Widget B23","item_category":"tools","unit_price":848,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":575,"item_name":"Widget C23","item_category":"furniture","unit_price":865,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":576,"item_name":"Widget D23","item_category":"toys","unit_price":882,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":577,"item_name":"Widget E23","item_category":"books","unit_price":899,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":578,"item_name":"Widget F23","item_category":"sports","unit_price":916,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":579,"item_name":"Widget G23","item_category":"garden","unit_price":933,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":580,"item_name":"Widget H23","item_category":"automotive","unit_price":950,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":581,"item_name":"Widget I23","item_category":"electronics","unit_price":967,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":582,"item_name":"Widget J23","item_category":"clothing","unit_price":984,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":583,"item_name":"Widget K23","item_category":"food","unit_price":11,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":584,"item_name":"Widget L23","item_category":"tools","unit_price":28,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":585,"item_name":"Widget M23","item_category":"furniture","unit_price":45,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":586,"item_name":"Widget N23","item_category":"toys","unit_price":62,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":587,"item_name":"Widget O23","item_category":"books","unit_price":79,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":588,"item_name":"Widget P23","item_category":"sports","unit_price":96,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":589,"item_name":"Widget Q23","item_category":"garden","unit_price":113,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":590,"item_name":"Widget R23","item_category":"automotive","unit_price":130,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":591,"item_name":"Widget S23","item_category":"electronics","unit_price":147,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":592,"item_name":"Widget T23","item_category":"clothing","unit_price":164,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":593,"item_name":"Widget U23","item_category":"food","unit_price":181,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":594,"item_name":"Widget V23","item_category":"tools","unit_price":198,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":595,"item_name":"Widget W23","item_category":"furniture","unit_price":215,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":596,"item_name":"Widget X23","item_category":"toys","unit_price":232,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":597,"item_name":"Widget Y23","item_category":"books","unit_price":249,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":598,"item_name":"Widget Z23","item_category":"sports","unit_price":266,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":599,"item_name":"Widget A24","item_category":"garden","unit_price":283,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":600,"item_name":"Widget B24","item_category":"automotive","unit_price":300,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":601,"item_name":"Widget C24","item_category":"electronics","unit_price":317,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":602,"item_name":"Widget D24","item_category":"clothing","unit_price":334,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":603,"item_name":"Widget E24","item_category":"food","unit_price":351,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":604,"item_name":"Widget F24","item_category":"tools","unit_price":368,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":605,"item_name":"Widget G24","item_category":"furniture","unit_price":385,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":606,"item_name":"Widget H24","item_category":"toys","unit_price":402,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":607,"item_name":"Widget I24","item_category":"books","unit_price":419,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":608,"item_name":"Widget J24","item_category":"sports","unit_price":436,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":609,"item_name":"Widget K24","item_category":"garden","unit_price":453,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":610,"item_name":"Widget L24","item_category":"automotive","unit_price":470,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":611,"item_name":"Widget M24","item_category":"electronics","unit_price":487,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":612,"item_name":"Widget N24","item_category":"clothing","unit_price":504,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":613,"item_name":"Widget O24","item_category":"food","unit_price":521,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":614,"item_name":"Widget P24","item_category":"tools","unit_price":538,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":615,"item_name":"Widget Q24","item_category":"furniture","unit_price":555,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":616,"item_name":"Widget R24","item_category":"toys","unit_price":572,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":617,"item_name":"Widget S24","item_category":"books","unit_price":589,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":618,"item_name":"Widget T24","item_category":"sports","unit_price":606,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":619,"item_name":"Widget U24","item_category":"garden","unit_price":623,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":620,"item_name":"Widget V24","item_category":"automotive","unit_price":640,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":621,"item_name":"Widget W24","item_category":"electronics","unit_price":657,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":622,"item_name":"Widget X24","item_category":"clothing","unit_price":674,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":623,"item_name":"Widget Y24","item_category":"food","unit_price":691,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":624,"item_name":"Widget Z24","item_category":"tools","unit_price":708,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":625,"item_name":"Widget A25","item_category":"furniture","unit_price":725,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":626,"item_name":"Widget B25","item_category":"toys","unit_price":742,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":627,"item_name":"Widget C25","item_category":"books","unit_price":759,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":628,"item_name":"Widget D25","item_category":"sports","unit_price":776,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":629,"item_name":"Widget E25","item_category":"garden","unit_price":793,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":630,"item_name":"Widget F25","item_category":"automotive","unit_price":810,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":631,"item_name":"Widget G25","item_category":"electronics","unit_price":827,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":632,"item_name":"Widget H25","item_category":"clothing","unit_price":844,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":633,"item_name":"Widget I25","item_category":"food","unit_price":861,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":634,"item_name":"Widget J25","item_category":"tools","unit_price":878,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":635,"item_name":"Widget K25","item_category":"furniture","unit_price":895,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":636,"item_name":"Widget L25","item_category":"toys","unit_price":912,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":637,"item_name":"Widget M25","item_category":"books","unit_price":929,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":638,"item_name":"Widget N25","item_category":"sports","unit_price":946,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":639,"item_name":"Widget O25","item_category":"garden","unit_price":963,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":640,"item_name":"Widget P25","item_category":"automotive","unit_price":980,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":641,"item_name":"Widget Q25","item_category":"electronics","unit_price":997,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":642,"item_name":"Widget R25","item_category":"clothing","unit_price":24,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":643,"item_name":"Widget S25","item_category":"food","unit_price":41,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":644,"item_name":"Widget T25","item_category":"tools","unit_price":58,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":645,"item_name":"Widget U25","item_category":"furniture","unit_price":75,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":646,"item_name":"Widget V25","item_category":"toys","unit_price":92,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":647,"item_name":"Widget W25","item_category":"books","unit_price":109,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":648,"item_name":"Widget X25","item_category":"sports","unit_price":126,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":649,"item_name":"Widget Y25","item_category":"garden","unit_price":143,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":650,"item_name":"Widget Z25","item_category":"automotive","unit_price":160,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":651,"item_name":"Widget A26","item_category":"electronics","unit_price":177,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":652,"item_name":"Widget B26","item_category":"clothing","unit_price":194,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":653,"item_name":"Widget C26","item_category":"food","unit_price":211,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":654,"item_name":"Widget D26","item_category":"tools","unit_price":228,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":655,"item_name":"Widget E26","item_category":"furniture","unit_price":245,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":656,"item_name":"Widget F26","item_category":"toys","unit_price":262,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":657,"item_name":"Widget G26","item_category":"books","unit_price":279,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":658,"item_name":"Widget H26","item_category":"sports","unit_price":296,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":659,"item_name":"Widget I26","item_category":"garden","unit_price":313,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":660,"item_name":"Widget J26","item_category":"automotive","unit_price":330,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":661,"item_name":"Widget K26","item_category":"electronics","unit_price":347,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":662,"item_name":"Widget L26","item_category":"clothing","unit_price":364,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":663,"item_name":"Widget M26","item_category":"food","unit_price":381,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":664,"item_name":"Widget N26","item_category":"tools","unit_price":398,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":665,"item_name":"Widget O26","item_category":"furniture","unit_price":415,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":666,"item_name":"Widget P26","item_category":"toys","unit_price":432,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":667,"item_name":"Widget Q26","item_category":"books","unit_price":449,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":668,"item_name":"Widget R26","item_category":"sports","unit_price":466,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":669,"item_name":"Widget S26","item_category":"garden","unit_price":483,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":670,"item_name":"Widget T26","item_category":"automotive","unit_price":500,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":671,"item_name":"Widget U26","item_category":"electronics","unit_price":517,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":672,"item_name":"Widget V26","item_category":"clothing","unit_price":534,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":673,"item_name":"Widget W26","item_category":"food","unit_price":551,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":674,"item_name":"Widget X26","item_category":"tools","unit_price":568,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":675,"item_name":"Widget Y26","item_category":"furniture","unit_price":585,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":676,"item_name":"Widget Z26","item_category":"toys","unit_price":602,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":677,"item_name":"Widget A27","item_category":"books","unit_price":619,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":678,"item_name":"Widget B27","item_category":"sports","unit_price":636,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":679,"item_name":"Widget C27","item_category":"garden","unit_price":653,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":680,"item_name":"Widget D27","item_category":"automotive","unit_price":670,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":681,"item_name":"Widget E27","item_category":"electronics","unit_price":687,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":682,"item_name":"Widget F27","item_category":"clothing","unit_price":704,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":683,"item_name":"Widget G27","item_category":"food","unit_price":721,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":684,"item_name":"Widget H27","item_category":"tools","unit_price":738,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":685,"item_name":"Widget I27","item_category":"furniture","unit_price":755,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":686,"item_name":"Widget J27","item_category":"toys","unit_price":772,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":687,"item_name":"Widget K27","item_category":"books","unit_price":789,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":688,"item_name":"Widget L27","item_category":"sports","unit_price":806,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":689,"item_name":"Widget M27","item_category":"garden","unit_price":823,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":690,"item_name":"Widget N27","item_category":"automotive","unit_price":840,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":691,"item_name":"Widget O27","item_category":"electronics","unit_price":857,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":692,"item_name":"Widget P27","item_category":"clothing","unit_price":874,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":693,"item_name":"Widget Q27","item_category":"food","unit_price":891,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":694,"item_name":"Widget R27","item_category":"tools","unit_price":908,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":695,"item_name":"Widget S27","item_category":"furniture","unit_price":925,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":696,"item_name":"Widget T27","item_category":"toys","unit_price":942,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":697,"item_name":"Widget U27","item_category":"books","unit_price":959,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":698,"item_name":"Widget V27","item_category":"sports","unit_price":976,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":699,"item_name":"Widget W27","item_category":"garden","unit_price":993,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":700,"item_name":"Widget X27","item_category":"automotive","unit_price":20,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":701,"item_name":"Widget Y27","item_category":"electronics","unit_price":37,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":702,"item_name":"Widget Z27","item_category":"clothing","unit_price":54,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":703,"item_name":"Widget A28","item_category":"food","unit_price":71,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":704,"item_name":"Widget B28","item_category":"tools","unit_price":88,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":705,"item_name":"Widget C28","item_category":"furniture","unit_price":105,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":706,"item_name":"Widget D28","item_category":"toys","unit_price":122,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":707,"item_name":"Widget E28","item_category":"books","unit_price":139,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":708,"item_name":"Widget F28","item_category":"sports","unit_price":156,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":709,"item_name":"Widget G28","item_category":"garden","unit_price":173,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":710,"item_name":"Widget H28","item_category":"automotive","unit_price":190,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":711,"item_name":"Widget I28","item_category":"electronics","unit_price":207,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":712,"item_name":"Widget J28","item_category":"clothing","unit_price":224,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":713,"item_name":"Widget K28","item_category":"food","unit_price":241,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":714,"item_name":"Widget L28","item_category":"tools","unit_price":258,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":715,"item_name":"Widget M28","item_category":"furniture","unit_price":275,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":716,"item_name":"Widget N28","item_category":"toys","unit_price":292,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":717,"item_name":"Widget O28","item_category":"books","unit_price":309,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":718,"item_name":"Widget P28","item_category":"sports","unit_price":326,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":719,"item_name":"Widget Q28","item_category":"garden","unit_price":343,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":720,"item_name":"Widget R28","item_category":"automotive","unit_price":360,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":721,"item_name":"Widget S28","item_category":"electronics","unit_price":377,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":722,"item_name":"Widget T28","item_category":"clothing","unit_price":394,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":723,"item_name":"Widget U28","item_category":"food","unit_price":411,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":724,"item_name":"Widget V28","item_category":"tools","unit_price":428,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":725,"item_name":"Widget W28","item_category":"furniture","unit_price":445,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":726,"item_name":"Widget X28","item_category":"toys","unit_price":462,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":727,"item_name":"Widget Y28","item_category":"books","unit_price":479,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":728,"item_name":"Widget Z28","item_category":"sports","unit_price":496,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":729,"item_name":"Widget A29","item_category":"garden","unit_price":513,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":730,"item_name":"Widget B29","item_category":"automotive","unit_price":530,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":731,"item_name":"Widget C29","item_category":"electronics","unit_price":547,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":732,"item_name":"Widget D29","item_category":"clothing","unit_price":564,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":733,"item_name":"Widget E29","item_category":"food","unit_price":581,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":734,"item_name":"Widget F29","item_category":"tools","unit_price":598,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":735,"item_name":"Widget G29","item_category":"furniture","unit_price":615,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":736,"item_name":"Widget H29","item_category":"toys","unit_price":632,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":737,"item_name":"Widget I29","item_category":"books","unit_price":649,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":738,"item_name":"Widget J29","item_category":"sports","unit_price":666,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":739,"item_name":"Widget K29","item_category":"garden","unit_price":683,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":740,"item_name":"Widget L29","item_category":"automotive","unit_price":700,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":741,"item_name":"Widget M29","item_category":"electronics","unit_price":717,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":742,"item_name":"Widget N29","item_category":"clothing","unit_price":734,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":743,"item_name":"Widget O29","item_category":"food","unit_price":751,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":744,"item_name":"Widget P29","item_category":"tools","unit_price":768,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":745,"item_name":"Widget Q29","item_category":"furniture","unit_price":785,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":746,"item_name":"Widget R29","item_category":"toys","unit_price":802,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":747,"item_name":"Widget S29","item_category":"books","unit_price":819,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":748,"item_name":"Widget T29","item_category":"sports","unit_price":836,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":749,"item_name":"Widget U29","item_category":"garden","unit_price":853,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":750,"item_name":"Widget V29","item_category":"automotive","unit_price":870,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":751,"item_name":"Widget W29","item_category":"electronics","unit_price":887,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":752,"item_name":"Widget X29","item_category":"clothing","unit_price":904,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":753,"item_name":"Widget Y29","item_category":"food","unit_price":921,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":754,"item_name":"Widget Z29","item_category":"tools","unit_price":938,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":755,"item_name":"Widget A30","item_category":"furniture","unit_price":955,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":756,"item_name":"Widget B30","item_category":"toys","unit_price":972,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":757,"item_name":"Widget C30","item_category":"books","unit_price":989,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":758,"item_name":"Widget D30","item_category":"sports","unit_price":16,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":759,"item_name":"Widget E30","item_category":"garden","unit_price":33,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":760,"item_name":"Widget F30","item_category":"automotive","unit_price":50,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":761,"item_name":"Widget G30","item_category":"electronics","unit_price":67,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":762,"item_name":"Widget H30","item_category":"clothing","unit_price":84,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":763,"item_name":"Widget I30","item_category":"food","unit_price":101,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":764,"item_name":"Widget J30","item_category":"tools","unit_price":118,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":765,"item_name":"Widget K30","item_category":"furniture","unit_price":135,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":766,"item_name":"Widget L30","item_category":"toys","unit_price":152,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":767,"item_name":"Widget M30","item_category":"books","unit_price":169,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":768,"item_name":"Widget N30","item_category":"sports","unit_price":186,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":769,"item_name":"Widget O30","item_category":"garden","unit_price":203,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":770,"item_name":"Widget P30","item_category":"automotive","unit_price":220,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":771,"item_name":"Widget Q30","item_category":"electronics","unit_price":237,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":772,"item_name":"Widget R30","item_category":"clothing","unit_price":254,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":773,"item_name":"Widget S30","item_category":"food","unit_price":271,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":774,"item_name":"Widget T30","item_category":"tools","unit_price":288,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":775,"item_name":"Widget U30","item_category":"furniture","unit_price":305,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":776,"item_name":"Widget V30","item_category":"toys","unit_price":322,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":777,"item_name":"Widget W30","item_category":"books","unit_price":339,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":778,"item_name":"Widget X30","item_category":"sports","unit_price":356,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":779,"item_name":"Widget Y30","item_category":"garden","unit_price":373,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":780,"item_name":"Widget Z30","item_category":"automotive","unit_price":390,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":781,"item_name":"Widget A31","item_category":"electronics","unit_price":407,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":782,"item_name":"Widget B31","item_category":"clothing","unit_price":424,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":783,"item_name":"Widget C31","item_category":"food","unit_price":441,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":784,"item_name":"Widget D31","item_category":"tools","unit_price":458,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":785,"item_name":"Widget E31","item_category":"furniture","unit_price":475,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":786,"item_name":"Widget F31","item_category":"toys","unit_price":492,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":787,"item_name":"Widget G31","item_category":"books","unit_price":509,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":788,"item_name":"Widget H31","item_category":"sports","unit_price":526,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":789,"item_name":"Widget I31","item_category":"garden","unit_price":543,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":790,"item_name":"Widget J31","item_category":"automotive","unit_price":560,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":791,"item_name":"Widget K31","item_category":"electronics","unit_price":577,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":792,"item_name":"Widget L31","item_category":"clothing","unit_price":594,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":793,"item_name":"Widget M31","item_category":"food","unit_price":611,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":794,"item_name":"Widget N31","item_category":"tools","unit_price":628,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":795,"item_name":"Widget O31","item_category":"furniture","unit_price":645,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":796,"item_name":"Widget P31","item_category":"toys","unit_price":662,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":797,"item_name":"Widget Q31","item_category":"books","unit_price":679,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":798,"item_name":"Widget R31","item_category":"sports","unit_price":696,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":799,"item_name":"Widget S31","item_category":"garden","unit_price":713,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":800,"item_name":"Widget T31","item_category":"automotive","unit_price":730,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":801,"item_name":"Widget U31","item_category":"electronics","unit_price":747,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":802,"item_name":"Widget V31","item_category":"clothing","unit_price":764,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":803,"item_name":"Widget W31","item_category":"food","unit_price":781,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":804,"item_name":"Widget X31","item_category":"tools","unit_price":798,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":805,"item_name":"Widget Y31","item_category":"furniture","unit_price":815,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":806,"item_name":"Widget Z31","item_category":"toys","unit_price":832,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":807,"item_name":"Widget A32","item_category":"books","unit_price":849,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":808,"item_name":"Widget B32","item_category":"sports","unit_price":866,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":809,"item_name":"Widget C32","item_category":"garden","unit_price":883,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":810,"item_name":"Widget D32","item_category":"automotive","unit_price":900,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":811,"item_name":"Widget E32","item_category":"electronics","unit_price":917,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":812,"item_name":"Widget F32","item_category":"clothing","unit_price":934,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":813,"item_name":"Widget G32","item_category":"food","unit_price":951,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":814,"item_name":"Widget H32","item_category":"tools","unit_price":968,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":815,"item_name":"Widget I32","item_category":"furniture","unit_price":985,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":816,"item_name":"Widget J32","item_category":"toys","unit_price":12,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":817,"item_name":"Widget K32","item_category":"books","unit_price":29,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":818,"item_name":"Widget L32","item_category":"sports","unit_price":46,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":819,"item_name":"Widget M32","item_category":"garden","unit_price":63,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":820,"item_name":"Widget N32","item_category":"automotive","unit_price":80,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":821,"item_name":"Widget O32","item_category":"electronics","unit_price":97,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":822,"item_name":"Widget P32","item_category":"clothing","unit_price":114,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":823,"item_name":"Widget Q32","item_category":"food","unit_price":131,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":824,"item_name":"Widget R32","item_category":"tools","unit_price":148,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":825,"item_name":"Widget S32","item_category":"furniture","unit_price":165,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":826,"item_name":"Widget T32","item_category":"toys","unit_price":182,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":827,"item_name":"Widget U32","item_category":"books","unit_price":199,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":828,"item_name":"Widget V32","item_category":"sports","unit_price":216,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":829,"item_name":"Widget W32","item_category":"garden","unit_price":233,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":830,"item_name":"Widget X32","item_category":"automotive","unit_price":250,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":831,"item_name":"Widget Y32","item_category":"electronics","unit_price":267,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":832,"item_name":"Widget Z32","item_category":"clothing","unit_price":284,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":833,"item_name":"Widget A33","item_category":"food","unit_price":301,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":834,"item_name":"Widget B33","item_category":"tools","unit_price":318,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":835,"item_name":"Widget C33","item_category":"furniture","unit_price":335,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":836,"item_name":"Widget D33","item_category":"toys","unit_price":352,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":837,"item_name":"Widget E33","item_category":"books","unit_price":369,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":838,"item_name":"Widget F33","item_category":"sports","unit_price":386,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":839,"item_name":"Widget G33","item_category":"garden","unit_price":403,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":840,"item_name":"Widget H33","item_category":"automotive","unit_price":420,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":841,"item_name":"Widget I33","item_category":"electronics","unit_price":437,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":842,"item_name":"Widget J33","item_category":"clothing","unit_price":454,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":843,"item_name":"Widget K33","item_category":"food","unit_price":471,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":844,"item_name":"Widget L33","item_category":"tools","unit_price":488,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":845,"item_name":"Widget M33","item_category":"furniture","unit_price":505,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":846,"item_name":"Widget N33","item_category":"toys","unit_price":522,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":847,"item_name":"Widget O33","item_category":"books","unit_price":539,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":848,"item_name":"Widget P33","item_category":"sports","unit_price":556,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":849,"item_name":"Widget Q33","item_category":"garden","unit_price":573,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":850,"item_name":"Widget R33","item_category":"automotive","unit_price":590,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":851,"item_name":"Widget S33","item_category":"electronics","unit_price":607,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":852,"item_name":"Widget T33","item_category":"clothing","unit_price":624,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":853,"item_name":"Widget U33","item_category":"food","unit_price":641,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":854,"item_name":"Widget V33","item_category":"tools","unit_price":658,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":855,"item_name":"Widget W33","item_category":"furniture","unit_price":675,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":856,"item_name":"Widget X33","item_category":"toys","unit_price":692,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":857,"item_name":"Widget Y33","item_category":"books","unit_price":709,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":858,"item_name":"Widget Z33","item_category":"sports","unit_price":726,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":859,"item_name":"Widget A34","item_category":"garden","unit_price":743,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":860,"item_name":"Widget B34","item_category":"automotive","unit_price":760,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":861,"item_name":"Widget C34","item_category":"electronics","unit_price":777,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":862,"item_name":"Widget D34","item_category":"clothing","unit_price":794,"in_stock":false,"supplier_code":"SUP-002"},{"item_id":863,"item_name":"Widget E34","item_category":"food","unit_price":811,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":864,"item_name":"Widget F34","item_category":"tools","unit_price":828,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":865,"item_name":"Widget G34","item_category":"furniture","unit_price":845,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":866,"item_name":"Widget H34","item_category":"toys","unit_price":862,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":867,"item_name":"Widget I34","item_category":"books","unit_price":879,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":868,"item_name":"Widget J34","item_category":"sports","unit_price":896,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":869,"item_name":"Widget K34","item_category":"garden","unit_price":913,"in_stock":false,"supplier_code":"SUP-009"},{"item_id":870,"item_name":"Widget L34","item_category":"automotive","unit_price":930,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":871,"item_name":"Widget M34","item_category":"electronics","unit_price":947,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":872,"item_name":"Widget N34","item_category":"clothing","unit_price":964,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":873,"item_name":"Widget O34","item_category":"food","unit_price":981,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":874,"item_name":"Widget P34","item_category":"tools","unit_price":998,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":875,"item_name":"Widget Q34","item_category":"furniture","unit_price":25,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":876,"item_name":"Widget R34","item_category":"toys","unit_price":42,"in_stock":false,"supplier_code":"SUP-016"},{"item_id":877,"item_name":"Widget S34","item_category":"books","unit_price":59,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":878,"item_name":"Widget T34","item_category":"sports","unit_price":76,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":879,"item_name":"Widget U34","item_category":"garden","unit_price":93,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":880,"item_name":"Widget V34","item_category":"automotive","unit_price":110,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":881,"item_name":"Widget W34","item_category":"electronics","unit_price":127,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":882,"item_name":"Widget X34","item_category":"clothing","unit_price":144,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":883,"item_name":"Widget Y34","item_category":"food","unit_price":161,"in_stock":false,"supplier_code":"SUP-003"},{"item_id":884,"item_name":"Widget Z34","item_category":"tools","unit_price":178,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":885,"item_name":"Widget A35","item_category":"furniture","unit_price":195,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":886,"item_name":"Widget B35","item_category":"toys","unit_price":212,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":887,"item_name":"Widget C35","item_category":"books","unit_price":229,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":888,"item_name":"Widget D35","item_category":"sports","unit_price":246,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":889,"item_name":"Widget E35","item_category":"garden","unit_price":263,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":890,"item_name":"Widget F35","item_category":"automotive","unit_price":280,"in_stock":false,"supplier_code":"SUP-010"},{"item_id":891,"item_name":"Widget G35","item_category":"electronics","unit_price":297,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":892,"item_name":"Widget H35","item_category":"clothing","unit_price":314,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":893,"item_name":"Widget I35","item_category":"food","unit_price":331,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":894,"item_name":"Widget J35","item_category":"tools","unit_price":348,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":895,"item_name":"Widget K35","item_category":"furniture","unit_price":365,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":896,"item_name":"Widget L35","item_category":"toys","unit_price":382,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":897,"item_name":"Widget M35","item_category":"books","unit_price":399,"in_stock":false,"supplier_code":"SUP-017"},{"item_id":898,"item_name":"Widget N35","item_category":"sports","unit_price":416,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":899,"item_name":"Widget O35","item_category":"garden","unit_price":433,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":900,"item_name":"Widget P35","item_category":"automotive","unit_price":450,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":901,"item_name":"Widget Q35","item_category":"electronics","unit_price":467,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":902,"item_name":"Widget R35","item_category":"clothing","unit_price":484,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":903,"item_name":"Widget S35","item_category":"food","unit_price":501,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":904,"item_name":"Widget T35","item_category":"tools","unit_price":518,"in_stock":false,"supplier_code":"SUP-004"},{"item_id":905,"item_name":"Widget U35","item_category":"furniture","unit_price":535,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":906,"item_name":"Widget V35","item_category":"toys","unit_price":552,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":907,"item_name":"Widget W35","item_category":"books","unit_price":569,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":908,"item_name":"Widget X35","item_category":"sports","unit_price":586,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":909,"item_name":"Widget Y35","item_category":"garden","unit_price":603,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":910,"item_name":"Widget Z35","item_category":"automotive","unit_price":620,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":911,"item_name":"Widget A36","item_category":"electronics","unit_price":637,"in_stock":false,"supplier_code":"SUP-011"},{"item_id":912,"item_name":"Widget B36","item_category":"clothing","unit_price":654,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":913,"item_name":"Widget C36","item_category":"food","unit_price":671,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":914,"item_name":"Widget D36","item_category":"tools","unit_price":688,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":915,"item_name":"Widget E36","item_category":"furniture","unit_price":705,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":916,"item_name":"Widget F36","item_category":"toys","unit_price":722,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":917,"item_name":"Widget G36","item_category":"books","unit_price":739,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":918,"item_name":"Widget H36","item_category":"sports","unit_price":756,"in_stock":false,"supplier_code":"SUP-018"},{"item_id":919,"item_name":"Widget I36","item_category":"garden","unit_price":773,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":920,"item_name":"Widget J36","item_category":"automotive","unit_price":790,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":921,"item_name":"Widget K36","item_category":"electronics","unit_price":807,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":922,"item_name":"Widget L36","item_category":"clothing","unit_price":824,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":923,"item_name":"Widget M36","item_category":"food","unit_price":841,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":924,"item_name":"Widget N36","item_category":"tools","unit_price":858,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":925,"item_name":"Widget O36","item_category":"furniture","unit_price":875,"in_stock":false,"supplier_code":"SUP-005"},{"item_id":926,"item_name":"Widget P36","item_category":"toys","unit_price":892,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":927,"item_name":"Widget Q36","item_category":"books","unit_price":909,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":928,"item_name":"Widget R36","item_category":"sports","unit_price":926,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":929,"item_name":"Widget S36","item_category":"garden","unit_price":943,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":930,"item_name":"Widget T36","item_category":"automotive","unit_price":960,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":931,"item_name":"Widget U36","item_category":"electronics","unit_price":977,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":932,"item_name":"Widget V36","item_category":"clothing","unit_price":994,"in_stock":false,"supplier_code":"SUP-012"},{"item_id":933,"item_name":"Widget W36","item_category":"food","unit_price":21,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":934,"item_name":"Widget X36","item_category":"tools","unit_price":38,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":935,"item_name":"Widget Y36","item_category":"furniture","unit_price":55,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":936,"item_name":"Widget Z36","item_category":"toys","unit_price":72,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":937,"item_name":"Widget A37","item_category":"books","unit_price":89,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":938,"item_name":"Widget B37","item_category":"sports","unit_price":106,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":939,"item_name":"Widget C37","item_category":"garden","unit_price":123,"in_stock":false,"supplier_code":"SUP-019"},{"item_id":940,"item_name":"Widget D37","item_category":"automotive","unit_price":140,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":941,"item_name":"Widget E37","item_category":"electronics","unit_price":157,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":942,"item_name":"Widget F37","item_category":"clothing","unit_price":174,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":943,"item_name":"Widget G37","item_category":"food","unit_price":191,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":944,"item_name":"Widget H37","item_category":"tools","unit_price":208,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":945,"item_name":"Widget I37","item_category":"furniture","unit_price":225,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":946,"item_name":"Widget J37","item_category":"toys","unit_price":242,"in_stock":false,"supplier_code":"SUP-006"},{"item_id":947,"item_name":"Widget K37","item_category":"books","unit_price":259,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":948,"item_name":"Widget L37","item_category":"sports","unit_price":276,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":949,"item_name":"Widget M37","item_category":"garden","unit_price":293,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":950,"item_name":"Widget N37","item_category":"automotive","unit_price":310,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":951,"item_name":"Widget O37","item_category":"electronics","unit_price":327,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":952,"item_name":"Widget P37","item_category":"clothing","unit_price":344,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":953,"item_name":"Widget Q37","item_category":"food","unit_price":361,"in_stock":false,"supplier_code":"SUP-013"},{"item_id":954,"item_name":"Widget R37","item_category":"tools","unit_price":378,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":955,"item_name":"Widget S37","item_category":"furniture","unit_price":395,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":956,"item_name":"Widget T37","item_category":"toys","unit_price":412,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":957,"item_name":"Widget U37","item_category":"books","unit_price":429,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":958,"item_name":"Widget V37","item_category":"sports","unit_price":446,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":959,"item_name":"Widget W37","item_category":"garden","unit_price":463,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":960,"item_name":"Widget X37","item_category":"automotive","unit_price":480,"in_stock":false,"supplier_code":"SUP-020"},{"item_id":961,"item_name":"Widget Y37","item_category":"electronics","unit_price":497,"in_stock":true,"supplier_code":"SUP-001"},{"item_id":962,"item_name":"Widget Z37","item_category":"clothing","unit_price":514,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":963,"item_name":"Widget A38","item_category":"food","unit_price":531,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":964,"item_name":"Widget B38","item_category":"tools","unit_price":548,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":965,"item_name":"Widget C38","item_category":"furniture","unit_price":565,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":966,"item_name":"Widget D38","item_category":"toys","unit_price":582,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":967,"item_name":"Widget E38","item_category":"books","unit_price":599,"in_stock":false,"supplier_code":"SUP-007"},{"item_id":968,"item_name":"Widget F38","item_category":"sports","unit_price":616,"in_stock":true,"supplier_code":"SUP-008"},{"item_id":969,"item_name":"Widget G38","item_category":"garden","unit_price":633,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":970,"item_name":"Widget H38","item_category":"automotive","unit_price":650,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":971,"item_name":"Widget I38","item_category":"electronics","unit_price":667,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":972,"item_name":"Widget J38","item_category":"clothing","unit_price":684,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":973,"item_name":"Widget K38","item_category":"food","unit_price":701,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":974,"item_name":"Widget L38","item_category":"tools","unit_price":718,"in_stock":false,"supplier_code":"SUP-014"},{"item_id":975,"item_name":"Widget M38","item_category":"furniture","unit_price":735,"in_stock":true,"supplier_code":"SUP-015"},{"item_id":976,"item_name":"Widget N38","item_category":"toys","unit_price":752,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":977,"item_name":"Widget O38","item_category":"books","unit_price":769,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":978,"item_name":"Widget P38","item_category":"sports","unit_price":786,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":979,"item_name":"Widget Q38","item_category":"garden","unit_price":803,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":980,"item_name":"Widget R38","item_category":"automotive","unit_price":820,"in_stock":true,"supplier_code":"SUP-020"},{"item_id":981,"item_name":"Widget S38","item_category":"electronics","unit_price":837,"in_stock":false,"supplier_code":"SUP-001"},{"item_id":982,"item_name":"Widget T38","item_category":"clothing","unit_price":854,"in_stock":true,"supplier_code":"SUP-002"},{"item_id":983,"item_name":"Widget U38","item_category":"food","unit_price":871,"in_stock":true,"supplier_code":"SUP-003"},{"item_id":984,"item_name":"Widget V38","item_category":"tools","unit_price":888,"in_stock":true,"supplier_code":"SUP-004"},{"item_id":985,"item_name":"Widget W38","item_category":"furniture","unit_price":905,"in_stock":true,"supplier_code":"SUP-005"},{"item_id":986,"item_name":"Widget X38","item_category":"toys","unit_price":922,"in_stock":true,"supplier_code":"SUP-006"},{"item_id":987,"item_name":"Widget Y38","item_category":"books","unit_price":939,"in_stock":true,"supplier_code":"SUP-007"},{"item_id":988,"item_name":"Widget Z38","item_category":"sports","unit_price":956,"in_stock":false,"supplier_code":"SUP-008"},{"item_id":989,"item_name":"Widget A39","item_category":"garden","unit_price":973,"in_stock":true,"supplier_code":"SUP-009"},{"item_id":990,"item_name":"Widget B39","item_category":"automotive","unit_price":990,"in_stock":true,"supplier_code":"SUP-010"},{"item_id":991,"item_name":"Widget C39","item_category":"electronics","unit_price":17,"in_stock":true,"supplier_code":"SUP-011"},{"item_id":992,"item_name":"Widget D39","item_category":"clothing","unit_price":34,"in_stock":true,"supplier_code":"SUP-012"},{"item_id":993,"item_name":"Widget E39","item_category":"food","unit_price":51,"in_stock":true,"supplier_code":"SUP-013"},{"item_id":994,"item_name":"Widget F39","item_category":"tools","unit_price":68,"in_stock":true,"supplier_code":"SUP-014"},{"item_id":995,"item_name":"Widget G39","item_category":"furniture","unit_price":85,"in_stock":false,"supplier_code":"SUP-015"},{"item_id":996,"item_name":"Widget H39","item_category":"toys","unit_price":102,"in_stock":true,"supplier_code":"SUP-016"},{"item_id":997,"item_name":"Widget I39","item_category":"books","unit_price":119,"in_stock":true,"supplier_code":"SUP-017"},{"item_id":998,"item_name":"Widget J39","item_category":"sports","unit_price":136,"in_stock":true,"supplier_code":"SUP-018"},{"item_id":999,"item_name":"Widget K39","item_category":"garden","unit_price":153,"in_stock":true,"supplier_code":"SUP-019"},{"item_id":1000,"item_name":"Widget L39","item_category":"automotive","unit_price":170,"in_stock":true,"supplier_code":"SUP-020"}] \ No newline at end of file diff --git a/loadtest/dependency/data/simple.json b/loadtest/dependency/data/simple.json new file mode 100644 index 00000000..86acfd2c --- /dev/null +++ b/loadtest/dependency/data/simple.json @@ -0,0 +1 @@ +{"id":42,"first_name":"John","last_name":"Doe","email_address":"john.doe@example.com","date_of_birth":"1990-05-15","role":"Senior Engineer","department_info":{"name":"Engineering","code":"ENG-001","building":"B3","floor":4}} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-1.json b/loadtest/dependency/data/variant-1.json new file mode 100644 index 00000000..c23a0143 --- /dev/null +++ b/loadtest/dependency/data/variant-1.json @@ -0,0 +1 @@ +{"variant_id":1,"variant_name":"Variant Alpha","description":"Premium alpha variant with enhanced features and quality materials","base_price":35.5,"weight_kg":0.8,"dimensions":{"length":12,"width":9,"height":6},"tags":["premium","new","alpha"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-10.json b/loadtest/dependency/data/variant-10.json new file mode 100644 index 00000000..61e33caf --- /dev/null +++ b/loadtest/dependency/data/variant-10.json @@ -0,0 +1 @@ +{"variant_id":10,"variant_name":"Variant Kappa","description":"Premium kappa variant with enhanced features and quality materials","base_price":175,"weight_kg":3.5,"dimensions":{"length":30,"width":18,"height":15},"tags":["premium","bestseller","kappa"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-2.json b/loadtest/dependency/data/variant-2.json new file mode 100644 index 00000000..6849223a --- /dev/null +++ b/loadtest/dependency/data/variant-2.json @@ -0,0 +1 @@ +{"variant_id":2,"variant_name":"Variant Beta","description":"Premium beta variant with enhanced features and quality materials","base_price":51,"weight_kg":1.1,"dimensions":{"length":14,"width":10,"height":7},"tags":["premium","bestseller","beta"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-3.json b/loadtest/dependency/data/variant-3.json new file mode 100644 index 00000000..63e8ab18 --- /dev/null +++ b/loadtest/dependency/data/variant-3.json @@ -0,0 +1 @@ +{"variant_id":3,"variant_name":"Variant Gamma","description":"Premium gamma variant with enhanced features and quality materials","base_price":66.5,"weight_kg":1.4,"dimensions":{"length":16,"width":11,"height":8},"tags":["premium","new","gamma"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-4.json b/loadtest/dependency/data/variant-4.json new file mode 100644 index 00000000..9dc59b02 --- /dev/null +++ b/loadtest/dependency/data/variant-4.json @@ -0,0 +1 @@ +{"variant_id":4,"variant_name":"Variant Delta","description":"Premium delta variant with enhanced features and quality materials","base_price":82,"weight_kg":1.7,"dimensions":{"length":18,"width":12,"height":9},"tags":["premium","bestseller","delta"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-5.json b/loadtest/dependency/data/variant-5.json new file mode 100644 index 00000000..e30f9dfc --- /dev/null +++ b/loadtest/dependency/data/variant-5.json @@ -0,0 +1 @@ +{"variant_id":5,"variant_name":"Variant Epsilon","description":"Premium epsilon variant with enhanced features and quality materials","base_price":97.5,"weight_kg":2,"dimensions":{"length":20,"width":13,"height":10},"tags":["premium","new","epsilon"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-6.json b/loadtest/dependency/data/variant-6.json new file mode 100644 index 00000000..cf548276 --- /dev/null +++ b/loadtest/dependency/data/variant-6.json @@ -0,0 +1 @@ +{"variant_id":6,"variant_name":"Variant Zeta","description":"Premium zeta variant with enhanced features and quality materials","base_price":113,"weight_kg":2.3,"dimensions":{"length":22,"width":14,"height":11},"tags":["premium","bestseller","zeta"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-7.json b/loadtest/dependency/data/variant-7.json new file mode 100644 index 00000000..13fcbda7 --- /dev/null +++ b/loadtest/dependency/data/variant-7.json @@ -0,0 +1 @@ +{"variant_id":7,"variant_name":"Variant Eta","description":"Premium eta variant with enhanced features and quality materials","base_price":128.5,"weight_kg":2.6,"dimensions":{"length":24,"width":15,"height":12},"tags":["premium","new","eta"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-8.json b/loadtest/dependency/data/variant-8.json new file mode 100644 index 00000000..7c33bd72 --- /dev/null +++ b/loadtest/dependency/data/variant-8.json @@ -0,0 +1 @@ +{"variant_id":8,"variant_name":"Variant Theta","description":"Premium theta variant with enhanced features and quality materials","base_price":144,"weight_kg":2.9,"dimensions":{"length":26,"width":16,"height":13},"tags":["premium","bestseller","theta"]} \ No newline at end of file diff --git a/loadtest/dependency/data/variant-9.json b/loadtest/dependency/data/variant-9.json new file mode 100644 index 00000000..7ad80c0e --- /dev/null +++ b/loadtest/dependency/data/variant-9.json @@ -0,0 +1 @@ +{"variant_id":9,"variant_name":"Variant Iota","description":"Premium iota variant with enhanced features and quality materials","base_price":159.5,"weight_kg":3.2,"dimensions":{"length":28,"width":17,"height":14},"tags":["premium","new","iota"]} \ No newline at end of file diff --git a/loadtest/dependency/nginx.conf b/loadtest/dependency/nginx.conf new file mode 100644 index 00000000..8fb57c68 --- /dev/null +++ b/loadtest/dependency/nginx.conf @@ -0,0 +1,21 @@ +# Static JSON file server — simulates an external REST API. + +server { + listen 8080 default_server; + listen [::]:8080; + server_name _; + access_log off; + + default_type application/json; + add_header Cache-Control "no-store"; + + # Serve pre-generated fixtures from /data + location = /api/simple { alias /data/simple.json; } + location = /api/list { alias /data/list.json; } + location = /api/catalog { alias /data/catalog.json; } + + # /api/variant/1 … /api/variant/10 + location ~ ^/api/variant/(\d+)$ { alias /data/variant-$1.json; } + + location = /health { return 200 '{"status":"ok"}'; } +} diff --git a/loadtest/docker-compose.yml b/loadtest/docker-compose.yml new file mode 100644 index 00000000..1c2412b4 --- /dev/null +++ b/loadtest/docker-compose.yml @@ -0,0 +1,84 @@ +# Bridge load-test stack — each service has its own image. +# +# Usage: +# docker compose up -d --build # start all services +# docker compose run --rm k6 # run k6 load test +# docker compose down # tear down + +services: + dependency: + build: ./dependency + ports: ["9080:8080"] + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8080/health || exit 1"] + interval: 2s + timeout: 2s + retries: 5 + + bridge-standalone: + build: ./bridge-standalone + ports: ["3001:3000"] + depends_on: + dependency: { condition: service_healthy } + healthcheck: + test: + [ + "CMD-SHELL", + 'node -e "fetch(''http://localhost:3000/health'').then(r=>{if(!r.ok)throw r.status})"', + ] + interval: 3s + timeout: 3s + retries: 10 + start_period: 5s + + handcoded: + build: ./handcoded + ports: ["3002:3000"] + environment: + DEPENDENCY_URL: http://dependency:8080 + depends_on: + dependency: { condition: service_healthy } + healthcheck: + test: + [ + "CMD-SHELL", + 'node -e "fetch(''http://localhost:3000/health'').then(r=>{if(!r.ok)throw r.status})"', + ] + interval: 3s + timeout: 3s + retries: 10 + start_period: 5s + + bridge-graphql: + build: ./bridge-graphql + ports: ["3003:3000"] + depends_on: + dependency: { condition: service_healthy } + healthcheck: + test: + [ + "CMD-SHELL", + 'node -e "fetch(''http://localhost:3000/health'').then(r=>{if(!r.ok)throw r.status})"', + ] + interval: 3s + timeout: 3s + retries: 10 + start_period: 5s + + k6: + image: grafana/k6:latest + volumes: + - ./k6:/scripts:ro + - ./results:/results + environment: + PROFILE: "${PROFILE:-full}" + VUS: "${VUS:-20}" + DURATION: "${DURATION:-30s}" + STAGE_DURATION: "${STAGE_DURATION:-30s}" + depends_on: + bridge-standalone: { condition: service_healthy } + handcoded: { condition: service_healthy } + bridge-graphql: { condition: service_healthy } + profiles: [test] + entrypoint: + ["k6", "run", "--out", "json=/results/raw.json", "/scripts/test.js"] diff --git a/loadtest/handcoded/Dockerfile b/loadtest/handcoded/Dockerfile new file mode 100644 index 00000000..33b1befa --- /dev/null +++ b/loadtest/handcoded/Dockerfile @@ -0,0 +1,9 @@ +# Hand-coded Node.js — baseline HTTP server doing manual fetch + mapping. + +FROM node:24-slim + +WORKDIR /app +COPY . . + +EXPOSE 3000 +CMD ["node", "--experimental-transform-types", "handcoded.ts"] diff --git a/loadtest/handcoded/handcoded.ts b/loadtest/handcoded/handcoded.ts new file mode 100644 index 00000000..116c024f --- /dev/null +++ b/loadtest/handcoded/handcoded.ts @@ -0,0 +1,110 @@ +/** + * Hand-coded Node.js — baseline HTTP server doing the same work manually. + * + * Endpoints: + * GET /simple — fetch + field mapping + * GET /array — fetch + array mapping (1000 items) + * GET /complex — fetch catalog + fan-out variant sub-requests (dedup) + * GET /health — health check + */ + +import { createServer } from "node:http"; + +const PORT = parseInt(process.env.PORT || "3000", 10); +const DEP = process.env.DEPENDENCY_URL || "http://dependency:8080"; + +// ── Simple ────────────────────────────────────────────────────────────── + +async function handleSimple(): Promise { + const res = await fetch(`${DEP}/api/simple`); + const emp = (await res.json()) as any; + return JSON.stringify({ + id: emp.id, + firstName: emp.first_name, + lastName: emp.last_name, + email: emp.email_address, + role: emp.role, + department: emp.department_info.name, + building: emp.department_info.building, + }); +} + +// ── Array ─────────────────────────────────────────────────────────────── + +async function handleArray(): Promise { + const res = await fetch(`${DEP}/api/list`); + const list = (await res.json()) as any[]; + return JSON.stringify({ + items: list.map((item) => ({ + id: item.item_id, + name: item.item_name, + category: item.item_category, + price: item.unit_price, + })), + }); +} + +// ── Complex ───────────────────────────────────────────────────────────── + +async function handleComplex(): Promise { + // 3 parallel fetches — same as what the bridge engine does + const [simpleRes, _listRes, catalogRes] = await Promise.all([ + fetch(`${DEP}/api/simple`), + fetch(`${DEP}/api/list`), + fetch(`${DEP}/api/catalog`), + ]); + + const emp = (await simpleRes.json()) as any; + const list = (await _listRes.json()) as any[]; + const catalog = (await catalogRes.json()) as any[]; + + return JSON.stringify({ + assignee: emp.first_name, + email: emp.email_address, + department: emp.department_info.name, + topItem: list[0].item_name, + entries: catalog.map((entry) => ({ + entryId: entry.entry_id, + variantId: entry.variant_id, + quantity: entry.quantity, + warehouse: entry.warehouse, + })), + }); +} + +// ── Server ────────────────────────────────────────────────────────────── + +const handlers: Record Promise> = { + "/simple": handleSimple, + "/array": handleArray, + "/complex": handleComplex, +}; + +const server = createServer(async (req, res) => { + try { + if (req.url === "/health") { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end('{"status":"ok"}'); + return; + } + + const handler = handlers[req.url ?? ""]; + if (!handler) { + res.writeHead(404); + res.end('{"error":"not found"}'); + return; + } + + const body = await handler(); + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(body); + } catch (err) { + console.error("Error:", err); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } +}); + +server.listen(PORT, () => { + console.log(`Hand-coded server listening on :${PORT}`); +}); diff --git a/loadtest/handcoded/tsconfig.json b/loadtest/handcoded/tsconfig.json new file mode 100644 index 00000000..c511cce8 --- /dev/null +++ b/loadtest/handcoded/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2024", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + } +} diff --git a/loadtest/k6/test.js b/loadtest/k6/test.js new file mode 100644 index 00000000..07a3bf7c --- /dev/null +++ b/loadtest/k6/test.js @@ -0,0 +1,282 @@ +/** + * k6 load test — sequential per-target benchmarking. + * + * Each target (handcoded, bridge-standalone, bridge-graphql) is tested + * one at a time through all VU stages. This ensures the system under test + * gets 100% of available CPU and memory — no resource contention between + * services — producing accurate, publishable numbers. + * + * Data points are tagged with { target, scenario, stage } for the report. + * + * Profiles: + * full — each target sequentially: warmup → 20 → 50 → 100 → 200 VUs (default) + * quick — 10 VUs × 15s, all targets in parallel (CI smoke test) + * custom — user-specified VUS / DURATION + * + * Usage: + * k6 run test.js # full sequential run + * k6 run test.js -e PROFILE=quick # quick smoke + * k6 run test.js -e PROFILE=custom -e VUS=200 -e DURATION=60s + */ + +import http from "k6/http"; +import { check } from "k6"; +import { Trend, Counter } from "k6/metrics"; + +// ── Targets ───────────────────────────────────────────────────────────── + +const TARGETS = { + handcoded: "http://handcoded:3000", + "bridge-standalone": "http://bridge-standalone:3000", + "bridge-graphql": "http://bridge-graphql:3000", +}; + +const TARGET_KEYS = ["handcoded", "bridge_standalone", "bridge_graphql"]; +const TARGET_MAP = { + handcoded: "handcoded", + bridge_standalone: "bridge-standalone", + bridge_graphql: "bridge-graphql", +}; + +// ── Custom metrics ────────────────────────────────────────────────────── + +const metrics = {}; +for (const tk of TARGET_KEYS) { + for (const sc of ["simple", "array", "complex"]) { + const key = `${tk}_${sc}`; + metrics[key] = { + duration: new Trend(`${key}_duration`, true), + errors: new Counter(`${key}_errors`), + }; + } +} + +// ── GraphQL queries ───────────────────────────────────────────────────── + +const GQL_QUERIES = { + simple: JSON.stringify({ + query: `{ + simple { + id firstName lastName email role department building + } + }`, + }), + array: JSON.stringify({ + query: `{ + arrayMap { + items { id name category price } + } + }`, + }), + complex: JSON.stringify({ + query: `{ + complex { + assignee email department topItem + entries { entryId variantId quantity warehouse } + } + }`, + }), +}; + +// ── Request helpers ───────────────────────────────────────────────────── + +const REST_PATHS = { simple: "/simple", array: "/array", complex: "/complex" }; + +function runRest(target, baseUrl, scenario, stage) { + const res = http.get(`${baseUrl}${REST_PATHS[scenario]}`, { + tags: { target, scenario, stage }, + }); + const mk = `${target.replace(/-/g, "_")}_${scenario}`; + metrics[mk].duration.add(res.timings.duration); + const ok = check( + res, + { [`${target}/${scenario} 200`]: (r) => r.status === 200 }, + { target, scenario, stage }, + ); + if (!ok) metrics[mk].errors.add(1); +} + +function runGraphQL(target, baseUrl, scenario, stage) { + const res = http.post(`${baseUrl}/graphql`, GQL_QUERIES[scenario], { + headers: { "Content-Type": "application/json" }, + tags: { target, scenario, stage }, + }); + const mk = `${target.replace(/-/g, "_")}_${scenario}`; + metrics[mk].duration.add(res.timings.duration); + const ok = check( + res, + { + [`${target}/${scenario} 200`]: (r) => r.status === 200, + [`${target}/${scenario} ok`]: (r) => { + try { + return !JSON.parse(r.body).errors; + } catch { + return false; + } + }, + }, + { target, scenario, stage }, + ); + if (!ok) metrics[mk].errors.add(1); +} + +/** Run all 3 scenarios against a single target. */ +function hitTarget(targetKey, stage) { + const target = TARGET_MAP[targetKey]; + const baseUrl = TARGETS[target]; + for (const sc of ["simple", "array", "complex"]) { + if (target === "bridge-graphql") { + runGraphQL(target, baseUrl, sc, stage); + } else { + runRest(target, baseUrl, sc, stage); + } + } +} + +// ── Exported per-target functions (used by k6 exec) ───────────────────── + +export function handcoded() { + hitTarget("handcoded", __ENV.STAGE || "unknown"); +} + +export function bridge_standalone() { + hitTarget("bridge_standalone", __ENV.STAGE || "unknown"); +} + +export function bridge_graphql() { + hitTarget("bridge_graphql", __ENV.STAGE || "unknown"); +} + +/** Warmup / quick / custom: all targets in one iteration. */ +export function allTargets() { + const stage = __ENV.STAGE || "unknown"; + for (const tk of TARGET_KEYS) { + hitTarget(tk, stage); + } +} + +// ── Profile → k6 options ──────────────────────────────────────────────── + +const PROFILE = __ENV.PROFILE || "full"; + +function buildOptions() { + if (PROFILE === "quick") { + return { + scenarios: { + quick: { + executor: "constant-vus", + vus: parseInt(__ENV.VUS || "10"), + duration: __ENV.DURATION || "15s", + exec: "allTargets", + env: { STAGE: "quick" }, + }, + }, + }; + } + + if (PROFILE === "custom") { + const vus = parseInt(__ENV.VUS || "20"); + return { + scenarios: { + custom: { + executor: "constant-vus", + vus, + duration: __ENV.DURATION || "30s", + exec: "allTargets", + env: { STAGE: `${vus}vu` }, + }, + }, + }; + } + + // ── full profile (sequential) ─────────────────────────────────────── + // Each target is tested one at a time through all VU stages. + // Only one target receives load at any given moment, so it gets + // 100% of host CPU/memory — no contention, accurate numbers. + // + // Per target: 10s warmup → 30s at 20/50/100/200 VUs = 130s + // Total: 3 targets × 130s = ~6.5 min (with 2s gaps) + // + // Timeline: + // ──── handcoded ──────────────────────────────── + // 0-10s warmup (10 VUs) + // 12-42s 20 VUs + // 44-74s 50 VUs + // 76-106s 100 VUs + // 108-138s 200 VUs + // ──── bridge-standalone ──────────────────────── + // 140-150s warmup (10 VUs) + // 152-182s 20 VUs + // 184-214s 50 VUs + // 216-246s 100 VUs + // 248-278s 200 VUs + // ──── bridge-graphql ─────────────────────────── + // 280-290s warmup (10 VUs) + // 292-322s 20 VUs + // 324-354s 50 VUs + // 356-386s 100 VUs + // 388-418s 200 VUs + + const dur = __ENV.STAGE_DURATION || "30s"; + const warmupDur = "10s"; + const gap = 2; // seconds between phases + + const VU_STAGES = [ + { name: "20vu", vus: 20 }, + { name: "50vu", vus: 50 }, + { name: "100vu", vus: 100 }, + { name: "200vu", vus: 200 }, + ]; + + const stageDurSec = parseInt(dur) || 30; + const warmupDurSec = parseInt(warmupDur) || 10; + + // Time per target: warmup + gap + (N stages × (duration + gap)) + const stagesPerTarget = VU_STAGES.length; + const timePerTarget = + warmupDurSec + gap + stagesPerTarget * (stageDurSec + gap); + + const scenarios = {}; + + for (let ti = 0; ti < TARGET_KEYS.length; ti++) { + const tk = TARGET_KEYS[ti]; + const targetOffset = ti * timePerTarget; + + // Warmup for this target + scenarios[`${tk}_warmup`] = { + executor: "constant-vus", + vus: 10, + duration: warmupDur, + startTime: `${targetOffset}s`, + exec: tk, + env: { STAGE: "warmup" }, + }; + + // VU stages for this target + for (let si = 0; si < VU_STAGES.length; si++) { + const { name, vus } = VU_STAGES[si]; + const stageOffset = + targetOffset + warmupDurSec + gap + si * (stageDurSec + gap); + + scenarios[`${tk}_${name}`] = { + executor: "constant-vus", + vus, + duration: dur, + startTime: `${stageOffset}s`, + exec: tk, + env: { STAGE: name }, + }; + } + } + + return { scenarios }; +} + +const opts = buildOptions(); +opts.thresholds = { http_req_duration: ["p(95)<15000"] }; +export const options = opts; + +// Default function (used by quick/custom profiles) +export default function () { + allTargets(); +} diff --git a/loadtest/package.json b/loadtest/package.json new file mode 100644 index 00000000..f5d4467b --- /dev/null +++ b/loadtest/package.json @@ -0,0 +1,14 @@ +{ + "name": "bridge-loadtest", + "private": true, + "type": "module", + "scripts": { + "data": "node scripts/generate-data.mjs", + "build": "docker compose build", + "up": "docker compose up -d --build", + "down": "docker compose down", + "test": "docker compose run --rm k6", + "test:quick": "PROFILE=quick docker compose run --rm k6", + "report": "node scripts/report.mjs --out report.md" + } +} diff --git a/loadtest/scripts/generate-data.mjs b/loadtest/scripts/generate-data.mjs new file mode 100644 index 00000000..e6159f17 --- /dev/null +++ b/loadtest/scripts/generate-data.mjs @@ -0,0 +1,98 @@ +#!/usr/bin/env node +/** + * Generate static JSON fixtures for the dependency emulator (nginx). + * + * Run: node loadtest/scripts/generate-data.mjs + * + * Produces files in loadtest/dependency/data/ + */ + +import { writeFileSync, mkdirSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const dataDir = join(root, "dependency", "data"); +mkdirSync(dataDir, { recursive: true }); + +// ── simple.json ───────────────────────────────────────────────────────── +const simple = { + id: 42, + first_name: "John", + last_name: "Doe", + email_address: "john.doe@example.com", + date_of_birth: "1990-05-15", + role: "Senior Engineer", + department_info: { + name: "Engineering", + code: "ENG-001", + building: "B3", + floor: 4, + }, +}; +writeFileSync(join(dataDir, "simple.json"), JSON.stringify(simple)); + +// ── list.json ── 1000 items ───────────────────────────────────────────── +const categories = [ + "electronics", + "clothing", + "food", + "tools", + "furniture", + "toys", + "books", + "sports", + "garden", + "automotive", +]; +const list = Array.from({ length: 1000 }, (_, i) => ({ + item_id: i + 1, + item_name: `Widget ${String.fromCharCode(65 + (i % 26))}${Math.floor(i / 26) + 1}`, + item_category: categories[i % categories.length], + unit_price: parseFloat((10 + ((i * 17 + 7) % 990)).toFixed(2)), + in_stock: i % 7 !== 0, + supplier_code: `SUP-${String((i % 20) + 1).padStart(3, "0")}`, +})); +writeFileSync(join(dataDir, "list.json"), JSON.stringify(list)); + +// ── catalog.json ── 1000 entries, 10 unique variant_ids ───────────────── +const warehouses = ["WH-A", "WH-B", "WH-C", "WH-D", "WH-E"]; +const catalog = Array.from({ length: 1000 }, (_, i) => ({ + entry_id: i + 1, + variant_id: (i % 10) + 1, + quantity: ((i * 7 + 3) % 50) + 1, + warehouse: warehouses[i % warehouses.length], +})); +writeFileSync(join(dataDir, "catalog.json"), JSON.stringify(catalog)); + +// ── variant-1.json … variant-10.json ──────────────────────────────────── +const variantNames = [ + "Alpha", + "Beta", + "Gamma", + "Delta", + "Epsilon", + "Zeta", + "Eta", + "Theta", + "Iota", + "Kappa", +]; +for (let i = 1; i <= 10; i++) { + const variant = { + variant_id: i, + variant_name: `Variant ${variantNames[i - 1]}`, + description: `Premium ${variantNames[i - 1].toLowerCase()} variant with enhanced features and quality materials`, + base_price: parseFloat((20 + i * 15.5).toFixed(2)), + weight_kg: parseFloat((0.5 + i * 0.3).toFixed(2)), + dimensions: { length: 10 + i * 2, width: 8 + i, height: 5 + i }, + tags: [ + "premium", + i % 2 === 0 ? "bestseller" : "new", + variantNames[i - 1].toLowerCase(), + ], + }; + writeFileSync(join(dataDir, `variant-${i}.json`), JSON.stringify(variant)); +} + +console.log("✓ Generated data files in", dataDir); diff --git a/loadtest/scripts/report.mjs b/loadtest/scripts/report.mjs new file mode 100644 index 00000000..713a24a8 --- /dev/null +++ b/loadtest/scripts/report.mjs @@ -0,0 +1,341 @@ +#!/usr/bin/env node +/** + * Parse k6 JSON-lines output and generate a markdown benchmark report. + * + * Usage: + * node scripts/report.mjs # default: results/raw.json + * node scripts/report.mjs results/raw.json # explicit path + * node scripts/report.mjs --out report.md # write to file (default: stdout) + */ + +import { readFileSync, writeFileSync, createReadStream } from "node:fs"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { execSync } from "node:child_process"; +import { createInterface } from "node:readline"; + +const root = dirname(dirname(fileURLToPath(import.meta.url))); + +// ── CLI args ──────────────────────────────────────────────────────────── + +let inputFile = join(root, "results", "raw.json"); +let outputFile = null; + +for (let i = 2; i < process.argv.length; i++) { + if (process.argv[i] === "--out" && process.argv[i + 1]) { + outputFile = process.argv[++i]; + } else { + inputFile = process.argv[i]; + } +} + +// ── Parse k6 JSON lines (streaming — handles large files) ─────────────── + +// Bucket: { "target/scenario/stage" → [duration_ms, ...] } +const buckets = {}; +// Track per-target-per-stage timestamps for accurate per-target RPS +const bucketTimes = {}; // { "target/stage" → { min, max } } + +try { + const rl = createInterface({ + input: createReadStream(inputFile, { encoding: "utf-8" }), + crlfDelay: Infinity, + }); + + for await (const line of rl) { + let obj; + try { + obj = JSON.parse(line); + } catch { + continue; + } + + if (obj.type !== "Point" || obj.metric !== "http_req_duration") continue; + + const tags = obj.data?.tags; + if (!tags?.target || !tags?.scenario || !tags?.stage) continue; + if (tags.stage === "warmup") continue; // exclude warmup data + + const key = `${tags.target}/${tags.scenario}/${tags.stage}`; + if (!buckets[key]) buckets[key] = []; + buckets[key].push(obj.data.value); + + // Track per-target-per-stage time range for RPS calculation + const ts = new Date(obj.data.time).getTime(); + const tkey = `${tags.target}/${tags.stage}`; + if (!bucketTimes[tkey]) bucketTimes[tkey] = { min: ts, max: ts }; + bucketTimes[tkey].min = Math.min(bucketTimes[tkey].min, ts); + bucketTimes[tkey].max = Math.max(bucketTimes[tkey].max, ts); + } +} catch { + console.error(`No results file found at ${inputFile}`); + console.error("Run the load test first: docker compose run --rm k6"); + process.exit(1); +} + +if (Object.keys(buckets).length === 0) { + console.error("No tagged data points found in results file."); + console.error("Ensure k6 ran with stage/target/scenario tags."); + process.exit(1); +} + +// ── Stats helpers ─────────────────────────────────────────────────────── + +function percentile(sorted, p) { + const idx = Math.ceil((p / 100) * sorted.length) - 1; + return sorted[Math.max(0, idx)]; +} + +function stats(values) { + const sorted = [...values].sort((a, b) => a - b); + const sum = sorted.reduce((a, b) => a + b, 0); + return { + count: sorted.length, + avg: sum / sorted.length, + p50: percentile(sorted, 50), + p90: percentile(sorted, 90), + p95: percentile(sorted, 95), + p99: percentile(sorted, 99), + }; +} + +function fmt(n) { + return n.toFixed(1); +} + +// ── Discover dimensions ───────────────────────────────────────────────── + +const allKeys = Object.keys(buckets); +const stages = [ + ...new Set(allKeys.map((k) => k.split("/")[2])), +].sort((a, b) => { + // Sort by VU number + const na = parseInt(a) || 0; + const nb = parseInt(b) || 0; + return na - nb; +}); +const scenarios = [...new Set(allKeys.map((k) => k.split("/")[1]))]; +const targets = [...new Set(allKeys.map((k) => k.split("/")[0]))]; + +// Friendly names for the report +const TARGET_LABELS = { + handcoded: "Hand-coded Node.js", + "bridge-standalone": "Bridge (Standalone)", + "bridge-graphql": "Bridge (GraphQL)", +}; + +// Preferred order: handcoded first (baseline), then bridge variants +const TARGET_ORDER = ["handcoded", "bridge-standalone", "bridge-graphql"]; +const orderedTargets = TARGET_ORDER.filter((t) => targets.includes(t)); + +// ── Detect environment ────────────────────────────────────────────────── + +let nodeVersion = "unknown"; +try { + nodeVersion = execSync("node --version", { encoding: "utf-8" }).trim(); +} catch { + /* ignore */ +} + +let arch = "unknown"; +try { + arch = execSync("uname -m", { encoding: "utf-8" }).trim(); +} catch { + /* ignore */ +} + +let os = "unknown"; +try { + os = execSync("uname -s", { encoding: "utf-8" }).trim(); +} catch { + /* ignore */ +} + +// ── Build markdown ────────────────────────────────────────────────────── + +const md = []; + +md.push("# Bridge Engine — Performance Report"); +md.push(""); +md.push( + "Automated benchmark comparing Bridge's declarative execution engine against hand-coded Node.js.", +); +md.push( + "All three implementations serve the same API endpoints, fetching from an identical dependency backend.", +); +md.push(""); + +// ── Section 1: Latency (array scenario, first real stage) ─────────────── + +const latencyStage = stages[0]; // lowest VU stage (most stable latency) +const latencyScenario = "array"; + +md.push("## 1. Latency Overhead"); +md.push(""); +md.push( + `Measured at **${latencyStage.replace("vu", " VUs")}** on the \`array\` scenario (1,000-item array with field renaming).`, +); +md.push( + "This isolates pure engine overhead — the same HTTP call, the same data, only the processing layer differs.", +); +md.push(""); +md.push("| Implementation | Avg | p50 | p90 | p95 | p99 |"); +md.push("| --- | ---: | ---: | ---: | ---: | ---: |"); + +const latencyRows = []; +for (const target of orderedTargets) { + const key = `${target}/${latencyScenario}/${latencyStage}`; + if (!buckets[key]) continue; + const s = stats(buckets[key]); + latencyRows.push({ target, ...s }); +} + +for (const row of latencyRows) { + const label = TARGET_LABELS[row.target] || row.target; + md.push( + `| **${label}** | ${fmt(row.avg)} ms | ${fmt(row.p50)} ms | ${fmt(row.p90)} ms | ${fmt(row.p95)} ms | ${fmt(row.p99)} ms |`, + ); +} + +// Overhead callout +const hc = latencyRows.find((r) => r.target === "handcoded"); +const bs = latencyRows.find((r) => r.target === "bridge-standalone"); +if (hc && bs) { + const overheadAvg = bs.avg - hc.avg; + md.push(""); + if (Math.abs(overheadAvg) < 3) { + md.push( + "> Bridge Standalone matches hand-coded Node.js latency \u2014 the engine adds **no measurable overhead**.", + ); + } else if (overheadAvg > 0) { + md.push( + `> Bridge Standalone adds **~${fmt(overheadAvg)} ms** avg compared to hand-coded Node.js.`, + ); + } else { + md.push( + "> Bridge Standalone matches hand-coded Node.js latency \u2014 the engine adds **no measurable overhead** at this concurrency level.", + ); + } +} +md.push(""); + +// ── Section 2: All scenarios latency table ────────────────────────────── + +md.push("## 2. Per-Scenario Breakdown"); +md.push(""); +md.push( + `All scenarios at **${latencyStage.replace("vu", " VUs")}**. Simple = 1 fetch + 7 field mappings. Array = 1 fetch + 1,000 items × 4 fields. Complex = 3 parallel fetches + array mapping + field merging.`, +); +md.push(""); + +for (const sc of scenarios) { + const scLabel = + sc === "simple" ? "Simple" : sc === "array" ? "Array Map" : "Complex"; + md.push(`### ${scLabel}`); + md.push(""); + md.push("| Implementation | Avg | p95 | p99 |"); + md.push("| --- | ---: | ---: | ---: |"); + + for (const target of orderedTargets) { + const key = `${target}/${sc}/${latencyStage}`; + if (!buckets[key]) continue; + const s = stats(buckets[key]); + const label = TARGET_LABELS[target] || target; + md.push( + `| **${label}** | ${fmt(s.avg)} ms | ${fmt(s.p95)} ms | ${fmt(s.p99)} ms |`, + ); + } + md.push(""); +} + +// ── Section 3: Throughput (RPS across VU levels) ──────────────────────── + +md.push("## 3. Throughput Under Load"); +md.push(""); +md.push( + "Requests per second on the `complex` scenario (the heaviest workload) as concurrency increases.", +); +md.push(""); + +// Header row: | VUs | Hand-coded | Bridge Standalone | Bridge GraphQL | +const headerCells = ["Load (VUs)"]; +for (const target of orderedTargets) { + headerCells.push(TARGET_LABELS[target] || target); +} +md.push(`| ${headerCells.join(" | ")} |`); +md.push(`| --- | ${orderedTargets.map(() => "---:").join(" | ")} |`); + +for (const stage of stages) { + const vuLabel = stage.replace("vu", ""); + const cells = [`**${vuLabel} VUs**`]; + + for (const target of orderedTargets) { + const key = `${target}/complex/${stage}`; + if (!buckets[key]) { + cells.push("—"); + continue; + } + const count = buckets[key].length; + const tkey = `${target}/${stage}`; + const times = bucketTimes[tkey]; + const durationSec = times ? (times.max - times.min) / 1000 : 30; + const rps = durationSec > 0 ? Math.round(count / durationSec) : 0; + cells.push(rps.toLocaleString()); + } + + md.push(`| ${cells.join(" | ")} |`); +} + +// Throughput callout +md.push(""); +const lastStage = stages[stages.length - 1]; +const hcKey = `handcoded/complex/${lastStage}`; +const bsKey = `bridge-standalone/complex/${lastStage}`; +if (buckets[hcKey] && buckets[bsKey]) { + const hcCount = buckets[hcKey].length; + const bsCount = buckets[bsKey].length; + const ratio = bsCount / hcCount; + if (ratio >= 0.98) { + md.push( + `> At ${lastStage.replace("vu", "")} VUs Bridge Standalone **matches or exceeds** hand-coded throughput — the declarative engine adds no meaningful cost.`, + ); + } else { + md.push( + `> At ${lastStage.replace("vu", "")} VUs, Bridge Standalone maintains **${(ratio * 100).toFixed(0)}%** of hand-coded throughput.`, + ); + } +} +md.push(""); + +// ── Section 4: Methodology ───────────────────────────────────────────── + +md.push("## 4. Methodology"); +md.push(""); +md.push("All tests run inside Docker containers on the same host, communicating over a Docker bridge network."); +md.push(""); +md.push("Each target is tested **sequentially** \u2014 only one receives load at any time,"); +md.push("giving it 100% of available CPU and memory. This eliminates resource contention"); +md.push("between services and produces accurate, reproducible numbers."); +md.push(""); +md.push(`- **Node.js:** xxx`); +md.push(`- **OS / Arch:** xxx`); +md.push("- **Load generator:** [k6](https://k6.io) (containerised)"); +md.push( + `- **Per-target warmup:** 10 s at 10 VUs (excluded from results)`, +); +md.push( + `- **Stages:** ${stages.map((s) => s.replace("vu", " VUs")).join(" \u2192 ")} (${stages.length > 1 ? "30 s each per target" : "single run"})`, +); +md.push("- **Dependency:** nginx serving pre-generated static JSON (zero compute)"); +md.push(""); + +// ── Output ────────────────────────────────────────────────────────────── + +const report = md.join("\n"); + +if (outputFile) { + writeFileSync(outputFile, report); + console.log(`Report written to ${outputFile}`); +} else { + console.log(report); +} From 9130ac21a482f42dfe86666a6e85b9bdc33b91de Mon Sep 17 00:00:00 2001 From: Aarne Laur Date: Thu, 5 Mar 2026 21:44:09 +0100 Subject: [PATCH 2/4] fix: lint --- loadtest/scripts/report.mjs | 58 ++++++++++++++----------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/loadtest/scripts/report.mjs b/loadtest/scripts/report.mjs index 713a24a8..765c62bb 100644 --- a/loadtest/scripts/report.mjs +++ b/loadtest/scripts/report.mjs @@ -8,10 +8,9 @@ * node scripts/report.mjs --out report.md # write to file (default: stdout) */ -import { readFileSync, writeFileSync, createReadStream } from "node:fs"; +import { writeFileSync, createReadStream } from "node:fs"; import { join, dirname } from "node:path"; import { fileURLToPath } from "node:url"; -import { execSync } from "node:child_process"; import { createInterface } from "node:readline"; const root = dirname(dirname(fileURLToPath(import.meta.url))); @@ -106,14 +105,14 @@ function fmt(n) { // ── Discover dimensions ───────────────────────────────────────────────── const allKeys = Object.keys(buckets); -const stages = [ - ...new Set(allKeys.map((k) => k.split("/")[2])), -].sort((a, b) => { - // Sort by VU number - const na = parseInt(a) || 0; - const nb = parseInt(b) || 0; - return na - nb; -}); +const stages = [...new Set(allKeys.map((k) => k.split("/")[2]))].sort( + (a, b) => { + // Sort by VU number + const na = parseInt(a) || 0; + const nb = parseInt(b) || 0; + return na - nb; + }, +); const scenarios = [...new Set(allKeys.map((k) => k.split("/")[1]))]; const targets = [...new Set(allKeys.map((k) => k.split("/")[0]))]; @@ -130,27 +129,6 @@ const orderedTargets = TARGET_ORDER.filter((t) => targets.includes(t)); // ── Detect environment ────────────────────────────────────────────────── -let nodeVersion = "unknown"; -try { - nodeVersion = execSync("node --version", { encoding: "utf-8" }).trim(); -} catch { - /* ignore */ -} - -let arch = "unknown"; -try { - arch = execSync("uname -m", { encoding: "utf-8" }).trim(); -} catch { - /* ignore */ -} - -let os = "unknown"; -try { - os = execSync("uname -s", { encoding: "utf-8" }).trim(); -} catch { - /* ignore */ -} - // ── Build markdown ────────────────────────────────────────────────────── const md = []; @@ -311,22 +289,28 @@ md.push(""); md.push("## 4. Methodology"); md.push(""); -md.push("All tests run inside Docker containers on the same host, communicating over a Docker bridge network."); +md.push( + "All tests run inside Docker containers on the same host, communicating over a Docker bridge network.", +); md.push(""); -md.push("Each target is tested **sequentially** \u2014 only one receives load at any time,"); -md.push("giving it 100% of available CPU and memory. This eliminates resource contention"); +md.push( + "Each target is tested **sequentially** \u2014 only one receives load at any time,", +); +md.push( + "giving it 100% of available CPU and memory. This eliminates resource contention", +); md.push("between services and produces accurate, reproducible numbers."); md.push(""); md.push(`- **Node.js:** xxx`); md.push(`- **OS / Arch:** xxx`); md.push("- **Load generator:** [k6](https://k6.io) (containerised)"); +md.push(`- **Per-target warmup:** 10 s at 10 VUs (excluded from results)`); md.push( - `- **Per-target warmup:** 10 s at 10 VUs (excluded from results)`, + `- **Stages:** ${stages.map((s) => s.replace("vu", " VUs")).join(" \u2192 ")} (${stages.length > 1 ? "30 s each per target" : "single run"})`, ); md.push( - `- **Stages:** ${stages.map((s) => s.replace("vu", " VUs")).join(" \u2192 ")} (${stages.length > 1 ? "30 s each per target" : "single run"})`, + "- **Dependency:** nginx serving pre-generated static JSON (zero compute)", ); -md.push("- **Dependency:** nginx serving pre-generated static JSON (zero compute)"); md.push(""); // ── Output ────────────────────────────────────────────────────────────── From f92305687ece8e81be12d2792b80cf78fe119edd Mon Sep 17 00:00:00 2001 From: Aarne Laur Date: Thu, 5 Mar 2026 22:15:31 +0100 Subject: [PATCH 3/4] Add the compiled variant to tests --- loadtest/bridge-compiler/Dockerfile | 12 ++++ loadtest/bridge-compiler/endpoints.bridge | 78 +++++++++++++++++++++++ loadtest/bridge-compiler/package.json | 9 +++ loadtest/bridge-compiler/server.ts | 55 ++++++++++++++++ loadtest/bridge-compiler/tsconfig.json | 10 +++ loadtest/docker-compose.yml | 17 +++++ loadtest/k6/test.js | 13 +++- loadtest/report.md | 76 ++++++++++++++++++++++ loadtest/scripts/report.mjs | 8 ++- 9 files changed, 276 insertions(+), 2 deletions(-) create mode 100644 loadtest/bridge-compiler/Dockerfile create mode 100644 loadtest/bridge-compiler/endpoints.bridge create mode 100644 loadtest/bridge-compiler/package.json create mode 100644 loadtest/bridge-compiler/server.ts create mode 100644 loadtest/bridge-compiler/tsconfig.json create mode 100644 loadtest/report.md diff --git a/loadtest/bridge-compiler/Dockerfile b/loadtest/bridge-compiler/Dockerfile new file mode 100644 index 00000000..6cf4aafc --- /dev/null +++ b/loadtest/bridge-compiler/Dockerfile @@ -0,0 +1,12 @@ +# Bridge Compiler — Node.js executeBridge server (no GraphQL). + +FROM node:24-slim + +WORKDIR /app +COPY package.json . +RUN npm install --omit=dev + +COPY . . + +EXPOSE 3000 +CMD ["node", "--experimental-transform-types", "server.ts"] diff --git a/loadtest/bridge-compiler/endpoints.bridge b/loadtest/bridge-compiler/endpoints.bridge new file mode 100644 index 00000000..609ba5ce --- /dev/null +++ b/loadtest/bridge-compiler/endpoints.bridge @@ -0,0 +1,78 @@ +version 1.5 + +# ── Dependency tools ────────────────────────────────────────────────────── + +tool fetchSimple from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/simple + .cache = 0 +} + +tool fetchList from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/list + .cache = 0 +} + +tool fetchCatalog from std.httpCall { + .baseUrl = "http://dependency:8080" + .method = GET + .path = /api/catalog + .cache = 0 +} + +# ── Simple: fetch one object, map fields ────────────────────────────────── + +bridge Query.simple { + with fetchSimple as emp + with output as o + + o.id <- emp.id + o.firstName <- emp.first_name + o.lastName <- emp.last_name + o.email <- emp.email_address + o.role <- emp.role + o.department <- emp.department_info.name + o.building <- emp.department_info.building +} + +# ── Array: fetch list, map 1000 items ──────────────────────────────────── + +bridge Query.arrayMap { + with fetchList as list + with output as o + + o.items <- list[] as item { + .id <- item.item_id + .name <- item.item_name + .category <- item.item_category + .price <- item.unit_price + } +} + +# ── Complex: 3 parallel fetches + array mapping + multi-source merge ────── + +bridge Query.complex { + with fetchSimple as emp + with fetchList as list + with fetchCatalog as catalog + with output as o + + # Flat fields from the simple endpoint + o.assignee <- emp.first_name + o.email <- emp.email_address + o.department <- emp.department_info.name + + # Pull from list so the fetch isn't optimised out + o.topItem <- list[0].item_name + + # Array mapping from catalog (1000 entries) + o.entries <- catalog[] as entry { + .entryId <- entry.entry_id + .variantId <- entry.variant_id + .quantity <- entry.quantity + .warehouse <- entry.warehouse + } +} diff --git a/loadtest/bridge-compiler/package.json b/loadtest/bridge-compiler/package.json new file mode 100644 index 00000000..f4c284c8 --- /dev/null +++ b/loadtest/bridge-compiler/package.json @@ -0,0 +1,9 @@ +{ + "name": "bridge-loadtest-compiler", + "private": true, + "type": "module", + "dependencies": { + "@stackables/bridge": "^2.2.0", + "@stackables/bridge-compiler": "^2.3.0" + } +} diff --git a/loadtest/bridge-compiler/server.ts b/loadtest/bridge-compiler/server.ts new file mode 100644 index 00000000..634b7f46 --- /dev/null +++ b/loadtest/bridge-compiler/server.ts @@ -0,0 +1,55 @@ +/** + * Bridge Standalone (no GraphQL) — HTTP server using executeBridge. + * + * Endpoints: + * GET /simple — fetch + field mapping + * GET /array — fetch + array mapping (100 items) + * GET /complex — fetch catalog + fan-out variant sub-requests + * GET /health — health check + */ + +import { createServer } from "node:http"; +import { readFileSync } from "node:fs"; +import { parseBridge } from "@stackables/bridge"; +import { executeBridge } from "@stackables/bridge-compiler"; + +const PORT = parseInt(process.env.PORT || "3000", 10); + +const document = parseBridge( + readFileSync(new URL("./endpoints.bridge", import.meta.url), "utf-8"), +); + +const server = createServer(async (req, res) => { + try { + if (req.url === "/health") { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end('{"status":"ok"}'); + return; + } + + const operations: Record = { + "/simple": "Query.simple", + "/array": "Query.arrayMap", + "/complex": "Query.complex", + }; + + const operation = operations[req.url ?? ""]; + if (!operation) { + res.writeHead(404); + res.end('{"error":"not found"}'); + return; + } + + const { data } = await executeBridge({ document, operation }); + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify(data)); + } catch (err) { + console.error("Error:", err); + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: String(err) })); + } +}); + +server.listen(PORT, () => { + console.log(`Bridge standalone listening on :${PORT}`); +}); diff --git a/loadtest/bridge-compiler/tsconfig.json b/loadtest/bridge-compiler/tsconfig.json new file mode 100644 index 00000000..c511cce8 --- /dev/null +++ b/loadtest/bridge-compiler/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2024", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + } +} diff --git a/loadtest/docker-compose.yml b/loadtest/docker-compose.yml index 1c2412b4..a3335cab 100644 --- a/loadtest/docker-compose.yml +++ b/loadtest/docker-compose.yml @@ -31,6 +31,22 @@ services: retries: 10 start_period: 5s + bridge-compiler: + build: ./bridge-compiler + ports: ["3004:3000"] + depends_on: + dependency: { condition: service_healthy } + healthcheck: + test: + [ + "CMD-SHELL", + 'node -e "fetch(''http://localhost:3000/health'').then(r=>{if(!r.ok)throw r.status})"', + ] + interval: 3s + timeout: 3s + retries: 10 + start_period: 5s + handcoded: build: ./handcoded ports: ["3002:3000"] @@ -77,6 +93,7 @@ services: STAGE_DURATION: "${STAGE_DURATION:-30s}" depends_on: bridge-standalone: { condition: service_healthy } + bridge-compiler: { condition: service_healthy } handcoded: { condition: service_healthy } bridge-graphql: { condition: service_healthy } profiles: [test] diff --git a/loadtest/k6/test.js b/loadtest/k6/test.js index 07a3bf7c..ffd5c164 100644 --- a/loadtest/k6/test.js +++ b/loadtest/k6/test.js @@ -28,13 +28,20 @@ import { Trend, Counter } from "k6/metrics"; const TARGETS = { handcoded: "http://handcoded:3000", "bridge-standalone": "http://bridge-standalone:3000", + "bridge-compiler": "http://bridge-compiler:3000", "bridge-graphql": "http://bridge-graphql:3000", }; -const TARGET_KEYS = ["handcoded", "bridge_standalone", "bridge_graphql"]; +const TARGET_KEYS = [ + "handcoded", + "bridge_standalone", + "bridge_compiler", + "bridge_graphql", +]; const TARGET_MAP = { handcoded: "handcoded", bridge_standalone: "bridge-standalone", + bridge_compiler: "bridge-compiler", bridge_graphql: "bridge-graphql", }; @@ -143,6 +150,10 @@ export function bridge_standalone() { hitTarget("bridge_standalone", __ENV.STAGE || "unknown"); } +export function bridge_compiler() { + hitTarget("bridge_compiler", __ENV.STAGE || "unknown"); +} + export function bridge_graphql() { hitTarget("bridge_graphql", __ENV.STAGE || "unknown"); } diff --git a/loadtest/report.md b/loadtest/report.md new file mode 100644 index 00000000..f86f28a2 --- /dev/null +++ b/loadtest/report.md @@ -0,0 +1,76 @@ +# Bridge Engine — Performance Report + +Automated benchmark comparing Bridge's declarative execution engine against hand-coded Node.js. +All three implementations serve the same API endpoints, fetching from an identical dependency backend. + +## 1. Latency Overhead + +Measured at **20 VUs** on the `array` scenario (1,000-item array with field renaming). +This isolates pure engine overhead — the same HTTP call, the same data, only the processing layer differs. + +| Implementation | Avg | p50 | p90 | p95 | p99 | +| ----------------------- | ------: | ------: | -------: | -------: | -------: | +| **Hand-coded Node.js** | 8.5 ms | 8.1 ms | 10.6 ms | 11.8 ms | 14.8 ms | +| **Bridge (Standalone)** | 13.9 ms | 13.6 ms | 16.1 ms | 17.1 ms | 25.0 ms | +| **Bridge (Compiler)** | 8.3 ms | 8.0 ms | 9.4 ms | 10.1 ms | 13.7 ms | +| **Bridge (GraphQL)** | 89.8 ms | 89.2 ms | 109.9 ms | 118.1 ms | 135.5 ms | + +> Bridge Standalone adds **~5.4 ms** avg compared to hand-coded Node.js. + +## 2. Per-Scenario Breakdown + +All scenarios at **20 VUs**. Simple = 1 fetch + 7 field mappings. Array = 1 fetch + 1,000 items × 4 fields. Complex = 3 parallel fetches + array mapping + field merging. + +### Simple + +| Implementation | Avg | p95 | p99 | +| ----------------------- | ------: | -------: | -------: | +| **Hand-coded Node.js** | 8.0 ms | 11.3 ms | 14.2 ms | +| **Bridge (Standalone)** | 13.0 ms | 16.0 ms | 24.4 ms | +| **Bridge (Compiler)** | 7.7 ms | 9.6 ms | 12.6 ms | +| **Bridge (GraphQL)** | 88.6 ms | 116.3 ms | 137.4 ms | + +### Array Map + +| Implementation | Avg | p95 | p99 | +| ----------------------- | ------: | -------: | -------: | +| **Hand-coded Node.js** | 8.5 ms | 11.8 ms | 14.8 ms | +| **Bridge (Standalone)** | 13.9 ms | 17.1 ms | 25.0 ms | +| **Bridge (Compiler)** | 8.3 ms | 10.1 ms | 13.7 ms | +| **Bridge (GraphQL)** | 89.8 ms | 118.1 ms | 135.5 ms | + +### Complex + +| Implementation | Avg | p95 | p99 | +| ----------------------- | ------: | -------: | -------: | +| **Hand-coded Node.js** | 8.5 ms | 12.0 ms | 15.4 ms | +| **Bridge (Standalone)** | 13.6 ms | 16.9 ms | 25.3 ms | +| **Bridge (Compiler)** | 8.2 ms | 10.2 ms | 14.1 ms | +| **Bridge (GraphQL)** | 95.8 ms | 123.9 ms | 145.7 ms | + +## 3. Throughput Under Load + +Requests per second on the `complex` scenario (the heaviest workload) as concurrency increases. + +| Load (VUs) | Hand-coded Node.js | Bridge (Standalone) | Bridge (Compiler) | Bridge (GraphQL) | +| ----------- | -----------------: | ------------------: | ----------------: | ---------------: | +| **20 VUs** | 799 | 492 | 823 | 71 | +| **50 VUs** | 816 | 481 | 792 | 72 | +| **100 VUs** | 783 | 459 | 793 | 74 | +| **200 VUs** | 785 | 435 | 736 | 74 | + +> At 200 VUs, Bridge Standalone maintains **56%** of hand-coded throughput. + +## 4. Methodology + +All tests run inside Docker containers on the same host, communicating over a Docker bridge network. + +Each target is tested **sequentially** — only one receives load at any time, +giving it 100% of available CPU and memory. This eliminates resource contention +between services and produces accurate, reproducible numbers. + +- **OS / Arch:** MacBook Air M4 (4th gen, 15″) with Docker desktop +- **Load generator:** [k6](https://k6.io) (containerised) +- **Per-target warmup:** 10 s at 10 VUs (excluded from results) +- **Stages:** 20 VUs → 50 VUs → 100 VUs → 200 VUs (30 s each per target) +- **Dependency:** nginx serving pre-generated static JSON (zero compute) diff --git a/loadtest/scripts/report.mjs b/loadtest/scripts/report.mjs index 765c62bb..3b5475b6 100644 --- a/loadtest/scripts/report.mjs +++ b/loadtest/scripts/report.mjs @@ -120,11 +120,17 @@ const targets = [...new Set(allKeys.map((k) => k.split("/")[0]))]; const TARGET_LABELS = { handcoded: "Hand-coded Node.js", "bridge-standalone": "Bridge (Standalone)", + "bridge-compiler": "Bridge (Compiler)", "bridge-graphql": "Bridge (GraphQL)", }; // Preferred order: handcoded first (baseline), then bridge variants -const TARGET_ORDER = ["handcoded", "bridge-standalone", "bridge-graphql"]; +const TARGET_ORDER = [ + "handcoded", + "bridge-standalone", + "bridge-compiler", + "bridge-graphql", +]; const orderedTargets = TARGET_ORDER.filter((t) => targets.includes(t)); // ── Detect environment ────────────────────────────────────────────────── From c52eedc3d8a216c0380437e407c7742b7f87e5eb Mon Sep 17 00:00:00 2001 From: Aarne Laur Date: Thu, 5 Mar 2026 22:17:28 +0100 Subject: [PATCH 4/4] fix: standardize error response to "internal server error" --- loadtest/bridge-compiler/server.ts | 2 +- loadtest/bridge-standalone/bridge-standalone.ts | 2 +- loadtest/handcoded/handcoded.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/loadtest/bridge-compiler/server.ts b/loadtest/bridge-compiler/server.ts index 634b7f46..fb5c6afe 100644 --- a/loadtest/bridge-compiler/server.ts +++ b/loadtest/bridge-compiler/server.ts @@ -46,7 +46,7 @@ const server = createServer(async (req, res) => { } catch (err) { console.error("Error:", err); res.writeHead(500, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ error: String(err) })); + res.end(JSON.stringify({ error: "internal server error" })); } }); diff --git a/loadtest/bridge-standalone/bridge-standalone.ts b/loadtest/bridge-standalone/bridge-standalone.ts index 68ee1a47..8109184b 100644 --- a/loadtest/bridge-standalone/bridge-standalone.ts +++ b/loadtest/bridge-standalone/bridge-standalone.ts @@ -45,7 +45,7 @@ const server = createServer(async (req, res) => { } catch (err) { console.error("Error:", err); res.writeHead(500, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ error: String(err) })); + res.end(JSON.stringify({ error: "internal server error" })); } }); diff --git a/loadtest/handcoded/handcoded.ts b/loadtest/handcoded/handcoded.ts index 116c024f..13ed668b 100644 --- a/loadtest/handcoded/handcoded.ts +++ b/loadtest/handcoded/handcoded.ts @@ -101,7 +101,7 @@ const server = createServer(async (req, res) => { } catch (err) { console.error("Error:", err); res.writeHead(500, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ error: String(err) })); + res.end(JSON.stringify({ error: "internal server error" })); } });